diff --git a/.gitignore b/.gitignore index 04fac7b..61373ea 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ # Ignore a specific file secret.txt +/test diff --git a/test/.DS_Store b/test/.DS_Store deleted file mode 100644 index 0679a2d..0000000 Binary files a/test/.DS_Store and /dev/null differ diff --git a/test/.buildinfo b/test/.buildinfo deleted file mode 100644 index 18cece2..0000000 --- a/test/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 1849d88179fa983cad78cefc0aade7d9 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/test/.doctrees/case_0.doctree b/test/.doctrees/case_0.doctree deleted file mode 100644 index 9283b6d..0000000 Binary files a/test/.doctrees/case_0.doctree and /dev/null differ diff --git a/test/.doctrees/case_1.doctree b/test/.doctrees/case_1.doctree deleted file mode 100644 index 6625ee4..0000000 Binary files a/test/.doctrees/case_1.doctree and /dev/null differ diff --git a/test/.doctrees/case_2.doctree b/test/.doctrees/case_2.doctree deleted file mode 100644 index 9a5c901..0000000 Binary files a/test/.doctrees/case_2.doctree and /dev/null differ diff --git a/test/.doctrees/case_3.doctree b/test/.doctrees/case_3.doctree deleted file mode 100644 index e1e7e21..0000000 Binary files a/test/.doctrees/case_3.doctree and /dev/null differ diff --git a/test/.doctrees/case_4.doctree b/test/.doctrees/case_4.doctree deleted file mode 100644 index 5d977f1..0000000 Binary files a/test/.doctrees/case_4.doctree and /dev/null differ diff --git a/test/.doctrees/case_5.doctree b/test/.doctrees/case_5.doctree deleted file mode 100644 index 5bfc9f6..0000000 Binary files a/test/.doctrees/case_5.doctree and /dev/null differ diff --git a/test/.doctrees/case_6.doctree b/test/.doctrees/case_6.doctree deleted file mode 100644 index b47135b..0000000 Binary files a/test/.doctrees/case_6.doctree and /dev/null differ diff --git a/test/.doctrees/case_7.doctree b/test/.doctrees/case_7.doctree deleted file mode 100644 index ead5661..0000000 Binary files a/test/.doctrees/case_7.doctree and /dev/null differ diff --git a/test/.doctrees/environment.pickle b/test/.doctrees/environment.pickle deleted file mode 100644 index 040f7e1..0000000 Binary files a/test/.doctrees/environment.pickle and /dev/null differ diff --git a/test/.doctrees/index.doctree b/test/.doctrees/index.doctree deleted file mode 100644 index c8b0c8b..0000000 Binary files a/test/.doctrees/index.doctree and /dev/null differ diff --git a/test/_images/CESG599_TF_image1.png b/test/_images/CESG599_TF_image1.png deleted file mode 100644 index 923d085..0000000 Binary files a/test/_images/CESG599_TF_image1.png and /dev/null differ diff --git a/test/_images/TF_Rock_to_Soil1.png b/test/_images/TF_Rock_to_Soil1.png deleted file mode 100644 index 5b4f1be..0000000 Binary files a/test/_images/TF_Rock_to_Soil1.png and /dev/null differ diff --git a/test/_images/case0-1.png b/test/_images/case0-1.png deleted file mode 100644 index 314105d..0000000 Binary files a/test/_images/case0-1.png and /dev/null differ diff --git a/test/_images/case1.png b/test/_images/case1.png deleted file mode 100644 index bd8b225..0000000 Binary files a/test/_images/case1.png and /dev/null differ diff --git a/test/_images/case2_CESG599_TF_image1.png b/test/_images/case2_CESG599_TF_image1.png deleted file mode 100644 index da7a0d1..0000000 Binary files a/test/_images/case2_CESG599_TF_image1.png and /dev/null differ diff --git a/test/_images/case2_Combined_RV_1.png b/test/_images/case2_Combined_RV_1.png deleted file mode 100644 index 9b678e7..0000000 Binary files a/test/_images/case2_Combined_RV_1.png and /dev/null differ diff --git a/test/_images/case2_EDPTab_Workflow_TF.png b/test/_images/case2_EDPTab_Workflow_TF.png deleted file mode 100644 index 1ed24d7..0000000 Binary files a/test/_images/case2_EDPTab_Workflow_TF.png and /dev/null differ diff --git a/test/_images/case2_Full_Results_TF.png b/test/_images/case2_Full_Results_TF.png deleted file mode 100644 index f573303..0000000 Binary files a/test/_images/case2_Full_Results_TF.png and /dev/null differ diff --git a/test/_images/case2_Gaussian_Mixture_RatioV_histogram.png b/test/_images/case2_Gaussian_Mixture_RatioV_histogram.png deleted file mode 100644 index 4beaab7..0000000 Binary files a/test/_images/case2_Gaussian_Mixture_RatioV_histogram.png and /dev/null differ diff --git a/test/_images/case2_Input_Motion_TF.png b/test/_images/case2_Input_Motion_TF.png deleted file mode 100644 index 012c8fe..0000000 Binary files a/test/_images/case2_Input_Motion_TF.png and /dev/null differ diff --git a/test/_images/case2_Normalized_RatioA_histogram.png b/test/_images/case2_Normalized_RatioA_histogram.png deleted file mode 100644 index 14eaca3..0000000 Binary files a/test/_images/case2_Normalized_RatioA_histogram.png and /dev/null differ diff --git a/test/_images/case2_Normalized_RatioV_histogram.png b/test/_images/case2_Normalized_RatioV_histogram.png deleted file mode 100644 index 8ca3e76..0000000 Binary files a/test/_images/case2_Normalized_RatioV_histogram.png and /dev/null differ diff --git a/test/_images/case2_RVTab_Workflow_TF.png b/test/_images/case2_RVTab_Workflow_TF.png deleted file mode 100644 index 51c5c04..0000000 Binary files a/test/_images/case2_RVTab_Workflow_TF.png and /dev/null differ diff --git a/test/_images/case2_Resonance_Building_Example_TF.png b/test/_images/case2_Resonance_Building_Example_TF.png deleted file mode 100644 index 79b536a..0000000 Binary files a/test/_images/case2_Resonance_Building_Example_TF.png and /dev/null differ diff --git a/test/_images/case2_Results_Workflow_TF.png b/test/_images/case2_Results_Workflow_TF.png deleted file mode 100644 index 7ddaf69..0000000 Binary files a/test/_images/case2_Results_Workflow_TF.png and /dev/null differ diff --git a/test/_images/case2_SimTab_TF.png b/test/_images/case2_SimTab_TF.png deleted file mode 100644 index 59c6962..0000000 Binary files a/test/_images/case2_SimTab_TF.png and /dev/null differ diff --git a/test/_images/case2_SpectralAcc_Results_TF.png b/test/_images/case2_SpectralAcc_Results_TF.png deleted file mode 100644 index 91cb8ec..0000000 Binary files a/test/_images/case2_SpectralAcc_Results_TF.png and /dev/null differ diff --git a/test/_images/case2_TF_Equation.png b/test/_images/case2_TF_Equation.png deleted file mode 100644 index 736fbd4..0000000 Binary files a/test/_images/case2_TF_Equation.png and /dev/null differ diff --git a/test/_images/case2_TF_Nat_Freqs.png b/test/_images/case2_TF_Nat_Freqs.png deleted file mode 100644 index 039e839..0000000 Binary files a/test/_images/case2_TF_Nat_Freqs.png and /dev/null differ diff --git a/test/_images/case2_TF_Rock_to_Soil1.png b/test/_images/case2_TF_Rock_to_Soil1.png deleted file mode 100644 index 928919b..0000000 Binary files a/test/_images/case2_TF_Rock_to_Soil1.png and /dev/null differ diff --git a/test/_images/case2_UQTab_Workflow_TF.png b/test/_images/case2_UQTab_Workflow_TF.png deleted file mode 100644 index 2a9e03b..0000000 Binary files a/test/_images/case2_UQTab_Workflow_TF.png and /dev/null differ diff --git a/test/_images/case5_EQGen1.png b/test/_images/case5_EQGen1.png deleted file mode 100644 index 5665859..0000000 Binary files a/test/_images/case5_EQGen1.png and /dev/null differ diff --git a/test/_images/case5_EQGen10.png b/test/_images/case5_EQGen10.png deleted file mode 100644 index e4418db..0000000 Binary files a/test/_images/case5_EQGen10.png and /dev/null differ diff --git a/test/_images/case5_EQGen11.png b/test/_images/case5_EQGen11.png deleted file mode 100644 index ce8c382..0000000 Binary files a/test/_images/case5_EQGen11.png and /dev/null differ diff --git a/test/_images/case5_EQGen2.png b/test/_images/case5_EQGen2.png deleted file mode 100644 index 27cf97b..0000000 Binary files a/test/_images/case5_EQGen2.png and /dev/null differ diff --git a/test/_images/case5_EQGen3.png b/test/_images/case5_EQGen3.png deleted file mode 100644 index 46ae735..0000000 Binary files a/test/_images/case5_EQGen3.png and /dev/null differ diff --git a/test/_images/case5_EQGen4.png b/test/_images/case5_EQGen4.png deleted file mode 100644 index 7d71389..0000000 Binary files a/test/_images/case5_EQGen4.png and /dev/null differ diff --git a/test/_images/case5_EQGen5.png b/test/_images/case5_EQGen5.png deleted file mode 100644 index 05ca680..0000000 Binary files a/test/_images/case5_EQGen5.png and /dev/null differ diff --git a/test/_images/case5_EQGen6.png b/test/_images/case5_EQGen6.png deleted file mode 100644 index 6c06277..0000000 Binary files a/test/_images/case5_EQGen6.png and /dev/null differ diff --git a/test/_images/case5_EQGen7.png b/test/_images/case5_EQGen7.png deleted file mode 100644 index 60690ae..0000000 Binary files a/test/_images/case5_EQGen7.png and /dev/null differ diff --git a/test/_images/case5_EQGen8.png b/test/_images/case5_EQGen8.png deleted file mode 100644 index ed5644a..0000000 Binary files a/test/_images/case5_EQGen8.png and /dev/null differ diff --git a/test/_images/case5_EQGen9.png b/test/_images/case5_EQGen9.png deleted file mode 100644 index 02492f0..0000000 Binary files a/test/_images/case5_EQGen9.png and /dev/null differ diff --git a/test/_images/case5_manifestationcurve.png b/test/_images/case5_manifestationcurve.png deleted file mode 100644 index 7adefce..0000000 Binary files a/test/_images/case5_manifestationcurve.png and /dev/null differ diff --git a/test/_images/case5_sanger2024-ai.png b/test/_images/case5_sanger2024-ai.png deleted file mode 100644 index 61133f2..0000000 Binary files a/test/_images/case5_sanger2024-ai.png and /dev/null differ diff --git a/test/_images/case5_sanger2024-krig.png b/test/_images/case5_sanger2024-krig.png deleted file mode 100644 index 9be0fa4..0000000 Binary files a/test/_images/case5_sanger2024-krig.png and /dev/null differ diff --git a/test/_images/case5_sanger2024-roc.png b/test/_images/case5_sanger2024-roc.png deleted file mode 100644 index a20feab..0000000 Binary files a/test/_images/case5_sanger2024-roc.png and /dev/null differ diff --git a/test/_images/case5_sanger_lpi.png b/test/_images/case5_sanger_lpi.png deleted file mode 100644 index e9144a0..0000000 Binary files a/test/_images/case5_sanger_lpi.png and /dev/null differ diff --git a/test/_images/case5_sanger_pliq.png b/test/_images/case5_sanger_pliq.png deleted file mode 100644 index 3834b6d..0000000 Binary files a/test/_images/case5_sanger_pliq.png and /dev/null differ diff --git a/test/_images/case5_zhu2017.png b/test/_images/case5_zhu2017.png deleted file mode 100644 index 35eea0c..0000000 Binary files a/test/_images/case5_zhu2017.png and /dev/null differ diff --git a/test/_images/case5_zhu_pliq.png b/test/_images/case5_zhu_pliq.png deleted file mode 100644 index 00d4224..0000000 Binary files a/test/_images/case5_zhu_pliq.png and /dev/null differ diff --git a/test/_images/case7_DA10_E7.png b/test/_images/case7_DA10_E7.png deleted file mode 100644 index 750a8a6..0000000 Binary files a/test/_images/case7_DA10_E7.png and /dev/null differ diff --git a/test/_images/case7_DA11_E8.png b/test/_images/case7_DA11_E8.png deleted file mode 100644 index 8813c4d..0000000 Binary files a/test/_images/case7_DA11_E8.png and /dev/null differ diff --git a/test/_images/case7_DA12_E9.png b/test/_images/case7_DA12_E9.png deleted file mode 100644 index 4c51e00..0000000 Binary files a/test/_images/case7_DA12_E9.png and /dev/null differ diff --git a/test/_images/case7_DA13_E10.png b/test/_images/case7_DA13_E10.png deleted file mode 100644 index 32933e6..0000000 Binary files a/test/_images/case7_DA13_E10.png and /dev/null differ diff --git a/test/_images/case7_DA14_Results.png b/test/_images/case7_DA14_Results.png deleted file mode 100644 index 2bb3aa0..0000000 Binary files a/test/_images/case7_DA14_Results.png and /dev/null differ diff --git a/test/_images/case7_DA1_saffirScale.png b/test/_images/case7_DA1_saffirScale.png deleted file mode 100644 index 41be36f..0000000 Binary files a/test/_images/case7_DA1_saffirScale.png and /dev/null differ diff --git a/test/_images/case7_DA2_raster.png b/test/_images/case7_DA2_raster.png deleted file mode 100644 index f5e5fd4..0000000 Binary files a/test/_images/case7_DA2_raster.png and /dev/null differ diff --git a/test/_images/case7_DA3_footprints.png b/test/_images/case7_DA3_footprints.png deleted file mode 100644 index 6002f6c..0000000 Binary files a/test/_images/case7_DA3_footprints.png and /dev/null differ diff --git a/test/_images/case7_DA4_E1.png b/test/_images/case7_DA4_E1.png deleted file mode 100644 index a3952cb..0000000 Binary files a/test/_images/case7_DA4_E1.png and /dev/null differ diff --git a/test/_images/case7_DA5_E2.png b/test/_images/case7_DA5_E2.png deleted file mode 100644 index 54c0828..0000000 Binary files a/test/_images/case7_DA5_E2.png and /dev/null differ diff --git a/test/_images/case7_DA6_E3.png b/test/_images/case7_DA6_E3.png deleted file mode 100644 index 2438bc7..0000000 Binary files a/test/_images/case7_DA6_E3.png and /dev/null differ diff --git a/test/_images/case7_DA7_E4.png b/test/_images/case7_DA7_E4.png deleted file mode 100644 index 1b19d40..0000000 Binary files a/test/_images/case7_DA7_E4.png and /dev/null differ diff --git a/test/_images/case7_DA8_E5.png b/test/_images/case7_DA8_E5.png deleted file mode 100644 index c8ed3c4..0000000 Binary files a/test/_images/case7_DA8_E5.png and /dev/null differ diff --git a/test/_images/case7_DA9_E6.png b/test/_images/case7_DA9_E6.png deleted file mode 100644 index 8493b54..0000000 Binary files a/test/_images/case7_DA9_E6.png and /dev/null differ diff --git a/test/_images/case7_DA_saffirScale.png b/test/_images/case7_DA_saffirScale.png deleted file mode 100644 index 41be36f..0000000 Binary files a/test/_images/case7_DA_saffirScale.png and /dev/null differ diff --git a/test/_images/siteResponse2.png b/test/_images/siteResponse2.png deleted file mode 100644 index 10072b9..0000000 Binary files a/test/_images/siteResponse2.png and /dev/null differ diff --git a/test/_sources/case_0.rst.txt b/test/_sources/case_0.rst.txt deleted file mode 100644 index 90817c7..0000000 --- a/test/_sources/case_0.rst.txt +++ /dev/null @@ -1,80 +0,0 @@ - -.. _case_0: - -.. figure:: ./images/case0-1.png - :scale: 50 % - :height: 200 px - :align: center - :figclass: align-center - - -.. Course Introduction -=================== - -CESG599 - NHERI -=============== - -An introduction to NHERI Simcenter tools and DesignSafe Resources ------------------------------------------------------------------------------------ - -Authors: --------- -**Kendra Mutch, Erick Martinez, Jose Barreto, Chungen Tai, Morgan Sanger, Luis Guerrero, Daniel Acosta, and Pedro Arduino** - -Course Description ------------------- -This course explores the fundamentals of SimCenter tools and the DesignSafe infrastructure. -The course employs a self-directed approach, where students are guided through a structured framework designed for this format. -Over 10 weeks, the course explores the core concepts of SimCenter and DesignSafe, and examines four to five SimCenter tools, focusing -on one tool every two weeks. Students are tasked with mastering the essentials of each tool and delivering presentations to the class. -Additionally, they work through one or more practical examples for each tool, presenting their findings to their peers. Constructive feedback for -each tool is an integral part of the learning experience. DesignSafe and SimCenter personnel are -invited to participate through Zoom based on availability. At the end of the course, a final project, -with a topic of choice for each student, or group of students, is required, providing an opportunity for -deeper exploration and application of the learned concepts. A final course project report is delivered through a shpinx document stored in a GitHub repository. - -SimCenter provides next-generation computational modeling and simulation software tools, user support, -and educational materials to the natural hazards engineering research community with the goal of advancing -the user’s capability to simulate the impact of natural hazards on structures, lifelines, and communities. - -DesignSafe is a comprehensive cyberinfrastructure that provides cloud-based tools to manage, analyze, understand, -and publish critical data for research to understand the impacts of natural hazards. The capabilities within -the DesignSafe infrastructure are available at no-cost to all researchers working in natural hazards. - - -Learning Objectives -------------------- - -#. Develop a familiarity with Simcenter tools and DesignSafe cyberinfrastructure -#. Develop a familiarity with the breath of SimCenter tools. -#. Develop a suitable background for using HPC resources. -#. Introduce/revise concepts related to structural and geotechnical engineering including UQ concepts, FEM, PB, etc. -#. Provide a working knowledge for selecting, using, and interpreting tools for Structural and geotechnical design and analysis. -#. Introduce markup language to develop easy-to-read, easy-to-write documents in the sphinx python package. - - -.. Introduction ------------- -This section should provide a brief executive summary, giving an overview of the project. It should be written last to ensure it accurately reflects the content of the entire report. Aim for a short paragraph that highlights the key points, objectives, and outcomes of the project. - - -.. Problem Description -------------------- -Clearly describe the problem being addressed. Use text and images to illustrate the issue, ensuring that even readers unfamiliar with the topic can understand the context and significance. This section should detail the background, relevance, and any previous attempts to solve the problem. - - -.. Solution Strategy ------------------ -Outline the strategy used to solve the problem. This should include a detailed explanation of the methods, processes, and any equations or theoretical frameworks involved. Be sure to make this section as comprehensive as necessary to fully explain the approach taken. - -.. SimCenter Tool Used -------------------- -Provide a brief description of the SimCenter tool(s) used in the project. Explain its relevance and how it was applied. This section should be informative yet concise, offering enough detail to understand the tool's role and capabilities without overwhelming the reader. - -.. Example of Application ----------------------- -Give a concrete example of how the solution strategy was applied, using text and images. This helps to illustrate the practical application of the theoretical concepts and methods discussed earlier. Ensure the example is detailed enough to show the effectiveness of the solution. - -.. Remarks -------- -Use this section for any additional comments or observations that do not fit into the other sections. This could include limitations, unexpected findings, future directions, or any acknowledgments. diff --git a/test/_sources/case_1.rst.txt b/test/_sources/case_1.rst.txt deleted file mode 100644 index ac774fe..0000000 --- a/test/_sources/case_1.rst.txt +++ /dev/null @@ -1,346 +0,0 @@ -.. _case_1: - -QuoFEM - Settlements -================================ - -Author: Kendra Mutch ---------------------- - -Introduction ------------- - -The goal of this project is to quantify settlement, parameters impacting settlement, and observe how uncertainty in input parameters impacts the ultimate settlement of a cohesive soil. These calculations are performed through use of the SimCenter QuoFEM tool. For more details on settlement calculations, the user is encounged to read *Holtz and Kovacs 2011*. - -Project Description -------------------- - -Soil settlement is characterized by a change in the effective stress of soil, often driven by either a change in the ground water table, placement of fill/surchage load, or dissipation of excess pore water pressure. While a minimal amount of settlement is expected and may not prove hazardous, larger magnitudes of settlment, or differential settlement, can be detrimental to the integretity and functionality of a super-structure. Settlement of cohesive soil is especially hazardous, as the small pore space in fine grained soil restricts water from draining quickly through the voids. As a result, cohesive soil may continue to settle for a long period of time following the placement of a structure. Granular soil exhibits a significantly lower settlement hazard, as water tends to drain rapidly through the large pore space in the soil, meaning, much of the settlement of coarse grained soil is complete before construction ends. This project focuses on the hazard pertaining to the settlement of cohesive soil. - -When computing settlement, it is important to consider uncertainty and not accept a single predicted value as completely true to reality, as in-situ testing, lab testing, and various models used to determine soil paramters all contain uncertainty. Additionally, soil may differ vastly throughout a project site, with only a few samples taken to represent the whole site. This project uses the program QuoFEM to integrate standard settlement equations with uncertainty quantifiction tools. - -The example problems in this project will utilize the scenario, soil profile, and paramters depicted below (modified from S. Kramer CESG-562 class notes): - -**Scenario:** -*A site adjacent to San Francisco Bay is underlain by San Francisco Bay Mud. The site is to be readied for development by placement of 5ft of fill material, and the ultimamte settlement of the fill is of interest. The site conditions, shown below, indicate the presence of a crust of desiccated Bay Mud with thickness, h1, which is not expected to consolidate noticeably. The clay is underlain by a dense gravel, which will also not consolidate.* - -.. figure:: ./images/case1_settlementProblem.png - :scale: 45 % - :align: center - - Fig. 1. Problem statement. - - - - -.. list-table:: Soil Profile Parameters - :widths: 25 25 50 - :header-rows: 1 - - * - Parameter - - Mean Value - - Coefficient of Variation (%) - * - h1 - - 3 ft - - 5 - * - h2 - - 25 ft - - 5 - * - Cc - - 0.75 - - 20 - * - eo - - 1.54 - - 7 - * - Cr - - 0.05 - - 20 - * - change in pre-consol pres. - - 200 psf - - 50 - * - k - - 10E-6 (cm/sec) - - 200 - * - unit weight of fill - - 130 pcf - - 7 - * - height of fill - - 5 ft - - 2 - - -Solution Strategy ------------------ -The magnitude of settlement can be predicted using conventional consolidation theory, as outlined in the equations below: - -#. If soil is normally consolidated, σp' = σo': - - .. math:: - H_{ult} = \frac{C_c}{1+e_o}log(\frac{σ_f'}{σ_o'})H_o - - -#. If soil is over consolidated, σp' > σo' and σo' + Δσ' < or = σp': - - .. math:: - H_{ult} = \frac{C_r}{1+e_o}log(\frac{σ_f'}{σ_o'})H_o - - -#. If soil is over consolidated, σp' > σo' and σo' + Δσ' > σp': - - .. math:: - H_{ult} = \frac{C_r}{1+e_o}log(\frac{σ_p'}{σ_o'})H_o + \frac{C_c}{1+e_o}log(\frac{σ_f'}{σ_p'})H_o - -Where: - - - :math:`H_{ult}` = Ultimate Settlement - - :math:`C_c` = Commpression Index - - :math:`e_o` = Void Ratio - - :math:`C_r` = Recompression Index - - :math:`σ_f'` = Final Vertical Effective Stress - - :math:`σ_o'` = Initial Vertical Effective Stress - - :math:`σ_p'` = Preconsolidation Pressure - - :math:`Δσ'` = Change in Vertical Effective Stress - - :math:`H_o` = Thickness of Compressible Layer - -For an accurate evaluation of ultimate settlement, it is recommended to subdivide the compressible layer into sublayers. These equations should be applied to each sublayer using corresponding estimations of initial and final effective stress, as well as material properties, particularly preconsolidation pressure. - -Though these equations provide a starting point for predicting settlement, they don't capture uncertainty. To account for uncertainty, methods such as Forward Propagation, Sensitivity Analysis, and Parameter Calibration integrate standard equations with uncertainty quantification. - -Forward Propagation allows us to determine how uncertainty in soil parameters translates to uncertainty in ultimate settlement. This analysis method enables us to understand the effect of compounding uncertainty. - -Sensitivity Analysis allows us to determine which input parameters impact the resulting ultimate settlement most. Sensitivity Analysis may be performed in both Python and QuoFEM. A Python script performing Sensitivity Analysis may be found here. This script produces a **tornado diagram** (as depicted below), a visual representation of the change in magnitude of settlement resulting from the application of uncertainty to a single variable at a time. These results indicate that, for the given example and material properties, the compression index (Cc), unit weight of the fill (gamma_fill), and preconsolidation pressure are the most relevant parameters. - -Finally, Parameter Calibration, allows one to determine an unknown soil paramter, given a value (or set of values) of ultimate settlement. Two examples of parameter calibartion are discussed in the **Example Applications** section. One example utilizes Bayesian Calibration, while another example utilizes Deterministic Calibration. - -.. figure:: ./images/case1_TornadoDiagram.png - :scale: 50 % - :align: center - - Fig. 2. Tornado diagram. - - -SimCenter Tool Used -------------------- -In this project we use the SimCenter tool QuoFEM. QouFEM allows the integration of the finite element method and hazard compuatations with uncertainty quantification tools. Although the tool was originally developed for finite element applications, it can also be utilized with other solution methods. In this project, the settlement calculations are implemented in a simple Python script that propagates settlement evaluations through sublayers to determine the ultimate surface settlement. This python script can be easily uploaded in QuoFEM instead of specifying a FEM application. - -There are five different tabs in QuoFEM; four input tabs and one results tab. The four input tabs are outlined below: - - * **UQ tab** - The UQ tab allows one to select the analysis method (Forward Propagation, Bayesian - Callibration, Sensitivity Analysis, etc.). Additionally, one can specify a statistics model and the number - of samples to run. - - * **FEM tab** - The FEM is where a python script is input, and a finite element method (such as Openseas) may - be selected. - - * **RV tab** - The RV tab allows you define random variables and apply desired uncertainty and statistic distributions - (normal distribution, uniform distribution etc.) to each variable. - - * **EDP tab** - The EDP tab allows one to define quantities of interest to compute (i.e., ultimate settlement). - - .. figure:: ./images/case1_InputResultsTabs.png - :align: center - - Fig. 3. QuoFEM interface. - - - -After entering parameters in the input tabs, one may choose run the project on their machine by simply clicking **Run** or to run the project in the cloud by selecting **Run at Design Safe**. When choosing to run a project in the cloud, one must login to Design Safe and specify a maximum run time. To ensure that the project does not expire while waiting in the queue, select a run time of at least 10 hours. - -The results tab contains both a **Summary** page and a **Data Values** page. The **Summary** page contains a brief -outline of the values computed. The **Data Values** page contains a more comprehensive set of results and figures. There are various features within the **Data Values** page of the **Results** tab which may aid in analysis. Below is information about navigating the **Data Values** page to extract desired information: - - * **To View a Scatterplot of a Parameter vs. Run Number** - left click once on any column. - - * **To View a Cumulative Frequency Distribution for a Variable** - First left click once on the column for the - variable that you want to view a cumulative frequency distribution for. Then right click once on the same - column. - - * **To View a Histogram for a Variable** - After following the steps to display a cumulative frequency - distribution, left click on the same column once more to display the histogram. - - * **To View a Scatterplot of One Variable vs. Another Variable** - Right click once on one of the variables. - This defines which variable will be on the x-axis. Then, left click once on the variable which you want - plotted on the y-axis. - - * **To Export the Data Table** - Select the Save Table icon above the data, and choose a location for saving - the table as a .csv file. - - -Example Applications --------------------- - -The following sections utilize the settlement scenario to demonstrate the various capabilities of QuoFEM in incorporating uncertainty quantification into the analysis. These capabilities include the propagation of uncertainty, deterministic and Bayesian calibration, as well as sensitivity analysis. - -Example One - Forward Propagation -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -#. Open QuoFEM. By default, the **UQ method** is **Forward Propagation** and the **UQ Engine** is **Dakota**. In this example, we will use these defaults. Specify a **Sample Number** of 200 and a **Seed Number** of 949. Ensure the **Parellel Execution** and the **Save Working dirs** boxes are checked. - -#. Select the **FEM** tab. From the drop down menu, select **Python**. Navigate to the location of the **Input Script** and the **Parameters Script**. Both Python scripts are available at the below links: - - * *settlement.py* - * *params.py* - -#. Select the **RV** tab. Enter the random variables (listed in the table in the problem description). Select **Normal Distribution** for each random variable, and enter the mean and standard deviation. The standard deviation must be calculated for each variable from the given coefficient of variation. The below table shows values which should be input for each random variable. - - .. list-table:: Random Variables - :widths: 25 25 50 50 - :header-rows: 1 - - * - Variable Name - - Distribution - - Mean Value - - Standard Deviation - * - h1 - - Normal Distribution - - 3 - - 0.15 - * - h2 - - Normal Distribution - - 25 - - 1.25 - * - Cc - - Normal Distribution - - 0.75 - - 0.15 - * - Cr - - Normal Distribution - - 0.05 - - 0.01 - * - eo - - Normal Distribution - - 1.54 - - 0.1078 - * - Δσ' - - Normal Distribution - - 200 - - 100 - * - k - - Normal Distribution - - 0.000001 - - 0.000002 - * - unit weight of fill - - Normal Distribution - - 130 - - 9.1 - * - height of fill - - Normal Distribution - - 5 - - 0.1 -#. In the **EDP** tab, specify the variable of interest as **Settlement** and assign it a **Length** of **1**. - -#. Run the example either on your machine or in the cloud. For running in the cloud, see the **SimCenter Tool Used** section for additional details. - -The results for Forward Propagation are outlined below: - -.. figure:: ./images/case1_ForwardPropagationResults.png - :align: center - - Fig. 4. Forward propagation results. - - -The results indicate that, given the mean parameters and standard deviation, a total settlement of 1.31 inches is expected with a standard deviation of 0.88 inches (CoV = 0.66). The corresponding histogram, based on Latin Hypercube Sampling (LHS), along with the associated normal distribution curve, is shown in the figure below: - -.. figure:: ./images/case1_propagation_Normalized_Settl_histogram.png - :scale: 40% - :align: center - - Fig. 5. QuoFEM propagation histogram. - - -Example Two - Sensitivity Analysis -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -#. In the UQ tab, select **Sensitivity Analysis** as the **UQ Method**. From the **UQ Engine** drop down, select **SimCenterUQ**. In the Method drop down, select **Monte Carlo**. For the **Number of samples**, enter 500, and for the **Seed Number**, enter 106. - -#. Select the **FEM** tab. From the **FEM** drop down, select **Python**. Locate the file path for the **Input Script** and the **Paramters Script**. Both Python scripts are available at the below links. - - * *Input Script.py* - * *Parameters Script.py* - -#. In the **RV** tab, enter the same random variables as the Forward Propagation example. - -#. In the **EDP** tab, use the same inputs as the Forward Propagation example. - -#. Choose to run the example either on your machine in the cloud. For running in the cloud, see the **SimCenter Tool Used** section for additional details. - -The results for the Sensitivity Analysis in QuoFEM are outlined below. Uncertainty in preconsolidation pressure and compression index translate to the greatest uncertainty in the predicted settlement. These findings are consistent with the results shown in the tornado diagram. - -.. figure:: ./images/case1_Sensitivity2.png - :scale: 60 % - :align: center - - Fig. 6. QuoFEM sensitivity results. - -.. figure:: ./images/case1_Sensitivity.png - :scale: 100 % - :align: center - - Fig. 7. QuoFEM sensitivity results - most relevant parameters. - - -Example Three - Parameter Calibration -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Two parameter calibration strategies available in QuoFEM are explored: i) Deterministic calibration and ii) Bayesian calibration. In both cases, parameters are identified to match assumed field settlement data at several locations, with an average total settlement of 0.88 inches. - - -Deterministic Calibration -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Two deterministic calibration methods are used: i)NL2SOL and ii)OPT++GaussNewton). - -When testing the two different deterministic calibration algorithms supported in QuoFEM, we found that they provided vastly different results. This indicates that there are multiple combinations of the compression index (Cc) and preconsolidation pressure that can be considered optimal. To further explore this issue, the figure below shows a settlement field for varying values of Cc and preconsolidation pressure. It is evident that the settlement field is nonlinear due to the logarithmic nature of the solution equation. Additionally, when examining points with constant settlement (e.g., 0.88 or 1.316 inches), the red lines indicate that multiple combinations of compression index (Cc) and preconsolidation pressure yield the same settlement with the black dots representing two solutions obtained using the two deterministic calibration methoods in QuoFEM. Clearly, for this scenario, deterministic calibration cannot identify a single optimal value, making Bayesian calibration necessary. - -.. figure:: ./images/case1_SettlementField.png - :scale: 80% - :align: center - - Fig. 8. Settlement field as a function of Cc and Precon pressure. - -Bayesian Calibration -^^^^^^^^^^^^^^^^^^^^ - -This is a classic scenario where Bayesian methods can be preferred instead of deterministic methods - Bayesian methods show that there is not just one best parameter value but several values are almost equally good. This issue frequently arises when we have many parameters to be calibrated with not much data. A single best parameter value is usually unidentifiable in such cases - - - -#. Open QuoFEM. In the **UQ** tab, change the **UQ method** to **Bayesain Callibration** and change the **UQ Engine** to **UCSD-UQ**. For the model, select **Non-hierarchical**. Enter a **Sample** number of 500 and **Seed** number of 85. For the **Calibration Data File**, navigate to **data_2.txt**. This text file may be downloaded at the below link: - - * *data_2.txt* - -#. In the **FEM** tab, navigate to the location of the **Input Script** and **Parameter Script**. The Bayesian Calibration Python scripts may be downloaded at the below links: - - * *Settlement_2.py* - * *params.py* - -#. In the **RV** tab, enter the same random variables as the Forward Propagation example. - -#. In the EDP tab, add two variables of interset. The first variable is **settlement** with a **Length** of **1**, and the second variable is a **dummy** variable with a **Length** of 1. - -#. Choose to run the example either on your machine in the cloud. For running in the cloud, see the **SimCenter Tool Used** section for additional details. - -The results for Bayesian Calibration are outlined below: - -.. figure:: ./images/case1_BayesianResults1.png - -.. figure:: ./images/case1_BayesianResults2.png - :align: center - - Fig. 9. QuoFEM Bayesian calibration results. - -The figure shows Cc and Precon pressure are the most relevant parameters. - -A more in-depth analysis using prior and posterior distributions reveals that the posterior distributions from the Bayesian calibration process result in more accurate and less uncertain settlement estimations. The figure below illustrates these distributions. - -.. figure:: ./images/case1_calibration_PriorPost.png - :scale: 70% - :align: center - - Fig. 10. Prior and posterior distributions from Bayesian calibration. - - -Remarks -------- -By accounting for uncertainty in settlement, chances of highly underpredicting or overpredicting settlement are reduced. - - - [Hol2011] R. D. Holtz and W. D. Kovacs. *An Introduction to Geotechnical Engineering*. Pearson, 2011. ISBN 978-0137011322. diff --git a/test/_sources/case_2.rst.txt b/test/_sources/case_2.rst.txt deleted file mode 100644 index 941e470..0000000 --- a/test/_sources/case_2.rst.txt +++ /dev/null @@ -1,725 +0,0 @@ -.. _case_2: - -EEUQ - Transfer Function -======================== - -Author: Erick Martinez ----------------------- - -Introduction ------------- - -This page introduces the fundamental concept of transfer functions and their application in site response analysis. -The project also examines the impact of uncertainty in input variables during this process, utilizing the SimCenter tool EE-UQ. -Special attention is given to soil amplification factors. For more detailed information on transfer functions, users are encouraged to read :cite:`Kramer1996`. - - -.. This page describes the basic concept of transfer functions and their use in a site response analysis. Along with this, the uncertainty in this process will be investigated using EE-UQ, a SimCenter tool. For more details, the user is encouraged to read :cite:`Kramer1996`. - -A Jupyter Notebook for this example can be found within `DesignSafe PRJ-4604 `_. - - -.. note:: - This example was prepared on a Mac system. Differences in the UI between Mac and other systems are possible, but should not affect the outcome. - - -Problem Description -------------------- - -A transfer function acts as a filter that can amplify or de-amplify an incoming wave from a medium to produce the output signal in another medium. To simplify the idea of a transfer function, a spring-mass system can be used. As a motion is applied on the mass connected to a spring; a responsive outgoing wave will then be propagated through the mass and the spring. This outgoing motion will be a composite factor of the stiffness and elastic damping forces found within the spring-mass system. - -.. seealso:: - For more information, visit the `Free Vibrations of a Spring-Mass-Damper System `_. - - - -This can be applied to earth systems in the form of ground motions. An example of this is an earthquake motion acting on a rock layer at a certain depth. This motion is then transferred through the soil profile and is reflected as a different motion at the surface. In order to determine the influence of a soil profile on the motion, three major components are required: thickness of layer (H), shear wave velocity (Vs), and damping ratio. - -It is important to ensure that this difference in motion is accounted for. When a structure is constructed, it has a specific resonance. Understanding this resonance is important because if an earthquake motion has similar peaks in frequency, causing amplification of the motion, the structure could have a significant and potentially disastrous behavior. While the incoming motion at the rock might have a different natural resonance, the motion at the surface might match that of the structure. The design of earthquake resistant structures relies on the accurate determination of transfer functions in sites. An example of this is shown below - where a motion was amplified from 0.03g to 0.15g due to the presence of soft clay. - - -.. figure:: ./images/case2_Resonance_Building_Example_TF.png - :scale: 40% - :align: center - - Fig. 1. Mexico City Earthquake Amplification. - - -As with any engineering properties, there will always be the presence of uncertainty. A layer might have differential thicknesses in certain regions, causing the height to be non-uniform. Shear wave velocity can change very quickly depending on depth and composition of the materials within the layer. Damping can also be affected by changes in stratigraphy and composition. To account for this, uncertainty must be incorporated into a transfer function analysis. This inclusion will aid in the accuracy and reliability of site response analyses. - - -Solution Strategy ------------------ - -Fourier Transform -^^^^^^^^^^^^^^^^^ - -In earth systems, this relationship between incoming and outgoing wave can be evaluated through mathematically converting an input motion, typically an acceleration-time history, to a Fourier series using the Fast Fourier Transform (FFT). In the Fourier space, the motion is then multiplied by the transfer function, resulting in the outgoing Fourier motion. This can then be converted back into various plots, such as acceleration-time history and spectral acceleration vs. period, that allow for analysis of the outgoing motion. An analysis of this ground motion can provide frequencies of interest where ground accelerations would be highest/lowest, which can aid in site response analysis and planning. - -.. figure:: ./images/case2_TF_Rock_to_Soil1.png - :scale: 40% - :align: center - - Fig. 2. Transfer Function from Rock to Soil. - - - - -Transfer Function Equation -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -To calculate a transfer function, the equation below can be used. In a single layer soil profile, it is assumed that the impedance contrast between layers is zero. Using a tool like EE-UQ can help provide the ratio between the input and output motion and provides the uncertainty in those motions and variables. - - -.. figure:: ./images/case2_TF_Equation.png - :scale: 40% - :align: center - - Eqn. 1. Transfer Function Equation [Kramer, 1996] - - -.. note:: - This equation changes based on the soil profile. Having multiple soil layers can lead to an impedance contrast. The equation also changes if the damping ratio is assumed to be zero. Kramer (1996) provides more information for the different instances. - -Example -^^^^^^^ - -A typical transfer function would look similar to the one provided below. In the figure below, there are various peaks of natural resonance for the transfer function, which is where the motion will have the greatest amplification/de-amplification. - -.. figure:: ./images/case2_TF_Nat_Freqs.png - :scale: 60% - :align: center - - Fig. 3. Transfer Function from Rock to Soil. - - -SimCenter Tool Used -------------------- - - -To understand transfer functions, there are many tools available. One of these tools is the SimCenter Transfer Function Tool (TFT). This tool introduces users to transfer functions by providing the output motion at a site given the motion, thickness of layers, shear wave velocities, and damping ratio. TFT allows for easy analysis of amplification/de-amplification of ground motions based on specific sites. - -The Earthquake Engineering with Uncertainty Quantification Application (EE-UQ) is a SimCenter research application that also allows for site response predictions due to earthquake loading. In addition to basic transfer function quantification, it allows for the analysis of uncertainty in the predictions based on the uncertainty found within the input model, motion, etc. This workflow application allows the user to run analyses in the background and provides a simple user interface that facilitates its use. - - - -Example Application -------------------- - -Soil Profile -^^^^^^^^^^^^ - -In this example, we will analyze the amplification/deamplification effects of a ground motion caused by its propagation through the soil layer. The 10 meter soil layer has a shear wave velocity (Vs) of 500 m/s and a damping ratio of 3%. - - -.. figure:: ./images/case2_CESG599_TF_image1.png - :scale: 50 % - :align: center - - Fig. 4. Soil Profile & Material Properties. - -Uncertainty -^^^^^^^^^^^^ - -Because of the presence of uncertainty in the soil properties, the transfer function will include uncertainty in its effects. Normal distribution values for each variable (H, Vs, damping) will be provided. This uncertainty will be quantified through multiple runs in EE-UQ and expressed as ratios of mean velocity and acceleration, along with standard deviation and skewness. - -The following normal distribution figures represent the uncertainty within each variable. - - - -.. figure:: ./images/case2_Combined_RV_1.png - :scale: 50 % - :align: center - - Fig. 5. Uncertainty in Each Variable (H, Vs, Damping). - -Motion -^^^^^^ - -An earthquake motion will be applied to a rock, located at the bottom of a one-dimensional soil profile. The motion is shown below as an acceleration time history as well as a Fourier amplitude spectra (FAS). - - -.. figure:: ./images/case2_Input_Motion_TF.png - :scale: 40 % - :align: center - - Fig. 6. Input Ground Motion. - -Pre-Workflow Python Script -^^^^^^^^^^^^^^^^^^^^^^^^^^ -To complete a transfer function analysis in EE-UQ various Python files had to be generated. The following script calculates the transfer function of a soil layer and applies it to a given acceleration record. - -.. raw:: html - -
- Click to expand the full Transfer Function Example code -

-
-.. code-block:: python
-
-    # ############################################################################################################
-    # Title: Transfer Function Calculation
-    # Description: This script calculates the transfer function of a soil layer and applies it to a given acceleration record.
-    # Author: Pedro Arduino
-    # UW Computational Geotechnical Group
-    # Date: 2024
-    # All Rights Reserved
-    # ############################################################################################################
-
-    # %%
-    import numpy as np
-    import json
-    import matplotlib.pyplot as plt
-    from numpy.fft import fft, ifft
-    from scipy import integrate
-    from respSpectra import resp_spectra
-
-    class TFunctionClass:
-        def __init__(self, damping, H, Vs):
-            # Define the variables
-            self.m_freq = None
-            self.m_time = None
-            self.m_acc = None
-            self.m_absFft = None
-            self.m_absSoilTF = None
-            self.m_absIFft = None
-            self.m_accT = None
-
-            self.m_vel = None
-            self.m_disp = None
-            self.m_velT = None
-            self.m_dispT = None
-
-            # Define soil layer parameters
-            self.m_damping = damping / 100.0 # damping from percentage to number
-            self.m_H = H
-            self.m_Vs = Vs
-
-        
-        def calculateResponse(self):
-            SoilTF = np.empty_like(self.m_freq, dtype=np.complex_)
-            absSoilTF = np.empty_like(self.m_freq, dtype=np.float_)
-            
-            # Compute the Fourier amplitude spectrum
-            fas = fft(self.m_acc)
-            # fas = fas[:self.nyquist_index]
-            absfas = np.abs(fas)
-            self.m_absFft = absfas
-            
-            # Compute transfer function of soil layer
-            SoilTF = self.calcSoilTf()
-            self.m_absSoilTF = np.abs(SoilTF)
-            
-            # Compute surface soil response
-            ifas = fas * SoilTF
-            absfas2 = np.abs(ifas)
-            self.m_absIFft = absfas2
-            accT = ifft(ifas)
-            self.m_accT = accT.real  # Take only the real part
-
-
-        def calcSoilTf(self):
-
-            tf = []
-
-            if self.m_freq is None:
-                print("Frequency vector is not defined")    
-            else:
-
-                for f in self.m_freq:
-                    """
-                    * The uniform damped soil on rigid rock transfer function
-                    *                             1
-                    *  H = -------------------------------------------------
-                    *       cos ( 2* PI * freq * H / (Vs(1+ i*damping))
-                    """
-                    kstar = 2.0 * np.pi * f / self.m_Vs - self.m_damping * 2.0 * np.pi * f / self.m_Vs * 1j
-                    Vsstar = self.m_Vs + self.m_damping * self.m_Vs * 1j
-                    tf.append(1.0 / np.cos(2.0 * np.pi * f * self.m_H / Vsstar))
-
-            return tf
-
-        def calculate_nat_freq(self):
-            n_pt = len(self.m_freq)
-            N_freq = []
-            N_freqVal = []
-            dfreq = self.m_freq[-1] / n_pt
-
-            TF_tan = 1.0
-            for i in range(1, len(self.m_freq)):
-                TF_tan1 = (self.m_absSoilTF[i] - self.m_absSoilTF[i - 1]) / dfreq
-                if TF_tan1 * TF_tan <= 0 and TF_tan > 0:
-                    N_freq.append(self.m_freq[i])
-                    N_freqVal.append(self.m_absSoilTF[i])
-                TF_tan = TF_tan1
-        
-            return N_freq, N_freqVal
-
-        def calculate_ratio(self):
-
-            grav = 9.81 # m/s2
-            dT = self.m_time[1] - self.m_time[0]
-            accAux = [self.m_acc[ii]*grav for ii in range(len(self.m_acc))]
-            self.m_vel = integrate.cumtrapz(accAux, dx=dT)
-            # self.mvel = np.insert(self.m_vel, 0, 0.0)
-            self.m_disp = integrate.cumtrapz(self.m_vel, dx=dT)
-            # mdisp = np.insert(self.m_disp, 0, 0.0)
-
-            self.m_velT = integrate.cumtrapz((self.m_accT*grav), dx=dT)
-            # self.mvel = np.insert(self.m_vel, 0, 0.0)
-            self.m_dispT = integrate.cumtrapz(self.m_velT, dx=dT)
-            # mdisp = np.insert(self.m_disp, 0, 0.0)
-
-            ratioA = abs(max(self.m_accT))/abs(max(self.m_acc))
-            ratioV = abs(max(self.m_velT))/abs(max(self.m_vel))
-
-            return ratioA, ratioV
-
-        def sin_record(self, f):
-            n_points = 2000
-            self.m_dt = 0.02
-            self.m_acc = [0] * n_points
-            accel = []
-
-            for s in range(n_points):
-                accel.append(0.4 * np.sin(2 * f * np.pi * s * self.m_dt))
-
-            self.m_acc = accel
-            self.set_time()
-            self.set_freq()
-
-        def sweep_record(self):
-            n_points = 8000
-            self.m_dt = 0.002
-            self.m_acc = [0] * n_points
-            self.m_time = [0] * n_points
-
-            for i in range(len(self.m_time)):
-                time = i * self.m_dt
-                self.m_time[i] = time
-                self.m_acc[i] = np.sin(25.0 * time + 150.0 * (time * time / 2.0) / 16.0)
-
-            self.set_freq()
-
-
-        def load_file(self, file_name):
-            
-            self.m_filename = file_name
-            
-            try:
-                with open(file_name, 'r') as file:
-                    # Read file contents into a JSON object
-                    jsonObj = json.load(file)
-            except FileNotFoundError as e:
-                print(f"Cannot read file {file_name}: {e}")
-                return
-
-            events = jsonObj.get("Events", [])
-
-            if events:
-                patterns = events[0].get("pattern", [])
-                timeseries = events[0].get("timeSeries", [])
-                pattern_type = patterns[0].get("type", "")
-                tsname = patterns[0].get("timeSeries", "")
-
-                units = events[0].get("units", {})
-                acc_unit = 1.0
-                acc_type = units.get("acc", "")
-                if acc_type == "g":
-                    acc_unit = 1.0
-                elif acc_type == "m/s2":
-                    acc_unit = 1.0 / 9.81
-                elif acc_type in ["cm/s2", "gal", "Gal"]:
-                    acc_unit = 1.0 / 981.0
-
-                timeseries_data = timeseries[0].get("data", [])
-                dT = timeseries[0].get("dT", 0.0)
-                self.read_GM(timeseries_data, dT, acc_unit)
-                
-
-        def read_GM(self, acc_TH, dT, acc_unit):
-            n_points = len(acc_TH)
-            self.m_dt = dT
-            # self.m_acc = [acc_TH[ii].toDouble() * acc_unit for ii in range(n_points)]
-            self.m_acc = [acc_TH[ii] * acc_unit for ii in range(n_points)]
-
-            if n_points % 2 == 0:
-                self.m_acc.append(0.0)
-            self.m_acc = np.array(self.m_acc) # Convert to numpy array
-
-            self.set_time()
-            self.set_freq()        
-
-
-        def set_freq(self):
-
-            if self.m_dt == 0:
-                self.m_dt = 0.005
-                nfreq = 1 / self.m_dt*10
-                sample_freq = 1.0 / self.m_dt
-
-            else:
-                nfreq = len(self.m_acc)
-                sample_freq = 1.0 / self.m_dt
-
-            # self.m_freq = [0] * (len(self.m_acc) // 2 + 1)
-            # self.m_freq = [0] * (len(self.m_acc))   # m_freq as a list
-            self.m_freq = np.zeros(nfreq) # m_freq as a numpy array
-            sample_freq = 1.0 / self.m_dt
-
-            self.nyquist_freq = sample_freq / 2.0
-            self.nyquist_index = int(len(self.m_freq) / 2)
-            for i in range(len(self.m_freq)):
-                self.m_freq[i] = i * sample_freq / len(self.m_acc)
-
-
-        def set_time(self):
-            # self.m_time = [0] * len(self.m_acc) # m_time as a list
-            self.m_time = np.zeros(len(self.m_acc)) # m_time as a numpy array
-
-            for i in range(len(self.m_time)):
-                self.m_time[i] = i * self.m_dt
-
-
-        def plot_acc(self):
-            plt.figure()
-            plt.plot(self.m_time, self.m_acc, 'b-', label='input')
-            plt.plot(self.m_time, self.m_accT, 'r-', label='output')
-            plt.xlabel('Time [sec]')
-            plt.ylabel('Acc [g]')
-            plt.legend()
-            plt.show()
-
-        def plot_fft(self):
-            plt.figure()
-            plt.plot(self.m_freq[:self.nyquist_index], self.m_absFft[:self.nyquist_index], 'b-', label='input')
-            plt.plot(self.m_freq[:self.nyquist_index], self.m_absIFft[:self.nyquist_index], 'r-', label='output')
-            plt.xlabel('Frequency [Hz]')
-            plt.ylabel('Fourier Amplitude')
-            plt.legend()
-            plt.show()
-
-        def plot_tf(self):
-            plt.figure()
-            plt.plot(self.m_freq[:self.nyquist_index], self.m_absSoilTF[:self.nyquist_index], 'b-')
-            plt.xlabel('Frequency [Hz]')
-            plt.ylabel('TF')
-            plt.show()
-            
-        def plot_spectra(self):
-            n_points = len(self.m_acc)
-            accAux = [self.m_acc[ii]*9.81 for ii in range(n_points)]
-            accTAux = [self.m_accT[ii]*9.81 for ii in range(n_points)]
-            periods, psa = resp_spectra(self.m_time, accAux, 0.05)
-            periodsT, psaT = resp_spectra(self.m_time, accTAux, 0.05)
-            
-            plt.figure()
-            plt.plot(periods, psa, 'b-', label='input')
-            plt.plot(periodsT, psaT, 'r-', label='output')
-            plt.xlabel('Periods [s]')
-            plt.ylabel('PSA [cm/s2]')
-            plt.legend()
-            plt.show()
-
-    def main():
-        # Define input parameters
-        damping = 5.0  # damping ratio in %
-        H = 20.0  # layer height in m
-        Vs = 200.0  # shear wave velocity in m/s
-        
-        TF = TFunctionClass(damping, H, Vs)
-        
-        # Sinusoidal record
-        f = 0.5  # frequency in Hz
-        TF.sin_record(f)
-        
-        # Calculate response
-        TF.calculateResponse()
-        
-        # Calculate ratios
-        ratioA, ratioV = TF.calculate_ratio()
-        print(f"Acceleration Ratio: {ratioA}")
-        print(f"Velocity Ratio: {ratioV}")
-        
-        # Plot acceleration
-        TF.plot_acc()
-        
-        # Plot Fourier Transform
-        TF.plot_fft()
-        
-        # Plot Transfer Function
-        TF.plot_tf()
-        
-        # Plot Spectra
-        TF.plot_spectra()
-
-    if __name__ == "__main__":
-        main()
-
-.. raw:: html
-
-    
-
- - -.. raw:: html - -

- - -This script performs post-processing by building response spectra from acceleration time history. - -.. raw:: html - -
- Click to expand the full Response Spectra Python code -

-
-.. code-block:: python
-
-    #########################################################
-    #
-    # Postprocessing python script
-    #
-    # Copyright: UW Computational Mechanics Group
-    #            Pedro Arduino
-    #
-    # Participants: Alborz Ghofrani
-    #               Long Chen
-    #
-    #-------------------------------------------------------
-
-    import numpy as np
-
-
-    def resp_spectra(a, time, nstep):
-        """
-        This function builds response spectra from acceleration time history,
-        a should be a numpy array,T and nStep should be integers.
-        """
-        
-        # add initial zero value to acceleration and change units
-        a = np.insert(a, 0, 0)
-        # number of periods at which spectral values are to be computed
-        nperiod = 100
-        # define range of considered periods by power of 10
-        minpower = -3.0
-        maxpower = 1.0
-        # create vector of considered periods
-        p = np.logspace(minpower, maxpower, nperiod)
-        # incremental circular frequency
-        dw = 2.0 * np.pi / time
-        # vector of circular freq
-        w = np.arange(0, (nstep+1)*dw, dw)
-        # fast fourier Horm of acceleration
-        afft = np.fft.fft(a)
-        # arbitrary stiffness value
-        k = 1000.0
-        # damping ratio
-        damp = 0.05
-        umax = np.zeros(nperiod)
-        vmax = np.zeros(nperiod)
-        amax = np.zeros(nperiod)
-        # loop to compute spectral values at each period
-        for j in range(0, nperiod):
-            # compute mass and dashpot coeff to produce desired periods
-            m = ((p[j]/(2*np.pi))**2)*k
-            c = 2*damp*(k*m)**0.5
-            h = np.zeros(nstep+2, dtype=complex)
-            # compute transfer function 
-            for l in range(0, int(nstep/2+1)):
-                h[l] = 1./(-m*w[l]*w[l] + 1j*c*w[l] + k)
-                # mirror image of Her function
-                h[nstep+1-l] = np.conj(h[l])
-            
-            # compute displacement in frequency domain using Her function
-            qfft = -m*afft
-            u = np.zeros(nstep+1, dtype=complex)
-            for l in range(0, nstep+1):
-                u[l] = h[l]*qfft[l]
-            
-            # compute displacement in time domain (ignore imaginary part)
-            utime = np.real(np.fft.ifft(u))
-            
-            # spectral displacement, velocity, and acceleration
-            umax[j] = np.max(np.abs(utime))
-            vmax[j] = (2*np.pi/p[j])*umax[j]
-            amax[j] = (2*np.pi/p[j])*vmax[j]
-        
-        return p, umax, vmax, amax
-
-.. raw:: html
-
-    
-
- -.. raw:: html - -

- -Workflow in EE-UQ -^^^^^^^^^^^^^^^^^ - -The procedure for performing a transfer function analysis is shown below. - -A forward propagation problem will be performed. The UQ engine to be used is Dakota with parallel execution and saved working directories. The Latin Hypercube Sampling (LHS) method will be used with 10 samples and a seed of 913. The UQ tab should look similar to the one below. - - -.. figure:: ./images/case2_UQTab_Workflow_TF.png - :scale: 30 % - :align: center - - Fig. 7. Uncertainty Quantification. - -The General Information (GI) tab will not be utilized in this example since no structure will be used. - -For the simulation (SIM tab), the input script will be loaded using a CustomPy Model. Along with this, the number of response nodes will be 1 with a spatial dimension of 2. Each node will have 3 degrees of freedom (DOF) and the profile will have damping ratio of 2%. The centroid node value will be 1. - - -.. figure:: ./images/case2_SimTab_TF.png - :scale: 30 % - :align: center - - Fig. 8. Simulations. - -In the Event (EVT) tab, a Multiple SimCenter load generator will be used. The motion of interest will be uploaded here as a JSON file and will have a factor of 1. - -In the Finite Element Modeling (FEM) tab, select a CustomPy-Simulation. - -In the Engineering Demand Parameter (EDP) tab, select a user defined generator. The response parameters will be the ratio of acceleration spectra and velocity spectra from the propagation from rock to the soil. - - -.. figure:: ./images/case2_EDPTab_Workflow_TF.png - :scale: 30 % - :align: center - - Fig. 9. Engineering Demand Parameters. - - -The Random Variables (RV) tab is where the values of H, Vs, and damping are implemented in the analysis. The values seen above are to be input here. A normal distribution will be used for all of these variables. - - -.. figure:: ./images/case2_RVTab_Workflow_TF.png - :scale: 30 % - :align: center - - Fig. 10. Random Variables. - - -The user can opt for running the analysis on their local device or in DesignSafe. - - -Results -^^^^^^^ -When the run is completed, the mean values of ratioA and ratioV, as well as uncertainty values,should be provided. These values show the ratio of average amplification/de-amplification in acceleration in velocity of the ground motion at the rock and the motion at the surface. The positive value of the ratio shows amplification occurred due to the propagation of the motion through the soil layer. - - -.. figure:: ./images/case2_Results_Workflow_TF.png - :scale: 30 % - :align: center - - Fig. 11. Results - - -Because the input variables (H, Vs, damping, motions) each have uncertainty, that uncertainty is carried on to the transfer function analysis. EE-UQ allows for uncertainty quantification which allows for an analysis of which variables might be most important or what the "worst-case scenario" could be when designing. The normalized normal distribution for the acceleration and velocity amplification ratios are shown below. - - -.. figure:: ./images/case2_Normalized_RatioA_histogram.png - :scale: 90 % - :align: center - - Fig. 12. Normalized Acceleration Amplification Factor Histogram - -.. figure:: ./images/case2_Normalized_RatioV_histogram.png - :scale: 90 % - :align: center - - Fig. 13. Normalized Velocity Amplification Factor Histogram - - -Due to the infinite possibilities of variability the three main variables (H, Vs, Damping) can have, we see that the normal distribution is not well suited for this analysis, specifically. EE-UQ allows for other methods of uncertainty quantification. Below is a Gaussian Mixture Model. This method is effective in measuring the probability of certain subpopulations within a larger population. - - -.. figure:: ./images/case2_Gaussian_Mixture_RatioA_histogram.png - :scale: 89 % - :align: center - - Fig. 14. Gaussian Mixture Model - Acceleration Amplification Ratio. - - -.. figure:: ./images/case2_Gaussian_Mixture_RatioV_histogram.png - :scale: 60 % - :align: center - - Fig. 15. Gaussian Mixture Model - Velocity Amplification Ratio. - -.. note:: - This situation is specific only to this example; normal distributions could very well suit another example. - - - -By extrapolating the values from EE-UQ, the shape of the transfer function can be determined. The natural frequencies of the first 4 peaks in the transfer function are also shown below. - - -.. figure:: ./images/case2_TF_Nat_Freqs.png - :scale: 70 % - :align: center - - Fig. 16. Transfer Function. - - - - -.. raw:: html - -
- -.. table:: Table 1. Natural Frequencies in the Transfer Function - :widths: auto - - +------------+---------------------------------------------+ - | Peak | Amplification Factor at Natural Frequencies | - +============+=============================================+ - | 1 | 20.49 | - +------------+---------------------------------------------+ - | 2 | 7.03 | - +------------+---------------------------------------------+ - | 3 | 4.20 | - +------------+---------------------------------------------+ - | 4 | 2.98 | - +------------+---------------------------------------------+ - -.. raw:: html - -
- - - -With the transfer function plotted, the input motion can be transformed using the transfer function to reflect the motion at the surface. The figure below reflects the large amplification that occurred. The value of the highest acceleration increased from ~0.4g in the rock to ~1.25g in the soil. This amplification is also reflected in other frequencies. - - -.. figure:: ./images/case2_Full_Results_TF.png - :scale: 40 % - :align: center - - Fig. 17. Amplification of Ground Motion. - -The spectral acceleration spectra can be also determined for each of the motions. These spectra can be used to determine if a structure will be affected by the amplification. A single story structure (~0.1 second period) might be at risk due to this amplification. Any periods with a large amplification ratios should be further analyzed to ensure the safety of the structure and site. - - -.. figure:: ./images/case2_SpectralAcc_Results_TF.png - :scale: 50 % - :align: center - - Fig. 18. Amplification in Spectral Acceleration. - - -Remarks -------- -I'd like to thank everyone at SimCenter, specifically Sang-ri Yi, Frank McKenna, Jinyan Zhao, Aakash Bangalore Satish, and Barbaros Cetiner, for all of their effort and assistance they provided during the entire quarter. Navigating these tools and creating examples for them would've been a lot more stressful without their help. - -Transfer function is one of my favorite topics in geotechnical engineering. I'd really like to continue working with site response and performance based design so being able to create this example along with my class was great. - -Finally, I'd like to thank Prof. Arduino who made all of this possible. His determination and motivation was contagious throughout the academic quarter. There are many great professors but there is only one Pedro Arduino. - -.. bibliography:: references.bib diff --git a/test/_sources/case_3.rst.txt b/test/_sources/case_3.rst.txt deleted file mode 100644 index 8eebe30..0000000 --- a/test/_sources/case_3.rst.txt +++ /dev/null @@ -1,435 +0,0 @@ -.. _case_3: - -S\ :sup:`3` hark - Site Response 1 -================================== - -Author: José Manuel Barreto Espinola ------------------------------------- - -Introduction ------------- - -One-dimensional (1-D) site response analysis is a geotechnical engineering method used to evaluate how seismic waves propagate through soil layers from bedrock to the ground surface. This type of analysis is crucial for understanding the local effects of an earthquake on a particular site, enabling engineers to design structures that can better withstand seismic events. -The primary goal of 1-D site response analysis is to predict how different soil layers will affect the amplitude, frequency content, and duration of seismic ground motions. - -Problem Description -------------------- - -On this problem, we will perform a site response analysis on an specfic location subjected to a seven different earthquakes in order to analyze the propagation of seismic waves through soil and obtain the ground surface response. The ground surface response is typically the major output from these analyses, along with profile plots such as peak horizontal acceleration along the soil profile. - -In cases where liquefiable soils are present, maximum shear strain and excess pore pressure ratio plots are also important. - -In the figure below, we can observe a representation of the one-dimensional response analyses, which assume that all boundaries are horizontal and that the response of a soil deposit is predominately caused by SH-waves propagating vertically from the underlying bedrock. - -.. figure:: ./images/Case3_siteResponse2.png - :scale: 50 % - :align: center - :figclass: align-center - - Figure 1. One-dimensional response analyses - - -Solution Strategy ------------------ - -For this example it will be implement the Site-Specific Seismic Hazard Analysis and Research Kit (S\ :sup:`3` HARK) tool, which focuses on simulating wave propagation along soil depth using finite element (FE) method, to perform site-specific analysis of soil in response to earthquakes. This tool provides multiple nonlinear material models for simulating the soil behavior under earthquake loading, The available constitutive models are listed below:: - - * ElasticIsotropic (Elastic). - * PM4Sand. - * PM4Silt. - * PressureIndependendeMultiYield (PIMY). - * PressureDependMultiYield (PDMY). - * PressureDependMultiYield02 (PDMY02). - * Mazari Dafalias. - * J2CyclicBoundingSurface (J2Bounding). - -For the porpuse of this example we will implement and provide basic definitions for two of these constitutive models: - - * **PM4Sand Model:** this constitutive model is developed to simulate the behavior of sandy soils under various loading conditions, especially during seismic events. It is specifically designed to capture the cyclic and dynamic behavior of sands, including the phenomena of liquefaction and cyclic mobility. - - .. note:: - **What is Liquefaction?** - - Liquefaction occurs when seismic waves induce cyclic loading in saturated, loose, sandy soils, causing the soil grains to rearrange and densify. This rearrangement increases the pore water pressure within the soil, reducing the effective stress and consequently the soil's shear strength. When the pore pressure approaches the overburden pressure, the soil behaves like a liquid, losing its ability to support loads. - - * **ElasticIsotropic Model:** Often referred to simply as the Elastic model, this is one of the simplest constitutive models used in geotechnical and structural engineering. It is based on the assumption that the material behaves elastically and isotropically, meaning that the material's properties are the same in all directions and that it returns to its original shape upon unloading - -SimCenter Tool Used -------------------- - -#. Click on the icon of s\ :sup:`3` hark to open the application. - -.. figure:: ./images/Case3_Step1.png - :scale: 70 % - :align: center - :figclass: align-center - - Figure 3. S\ :sup:`3` hark executable icon. - -#. Operations Area: In the upper toolbar, you can see three options (Figure 4.): - - #. In **Height**, you can choose the depth of your soil column. - #. In **GWT**, you can choose the depth of the groundwater table of your specific site. - #. In **Total layer**, you can modify the number of soil layers on your specific site. Click the "+" button to add a soil layer (a layer will be added below the selected layer) and the "-" button to delete a selected soil layer. Click several times to add more layers. - - .. figure:: ./images/Case3_Step2.png - :scale: 45 % - :align: center - :figclass: align-center - - Figure 4. Main window - Operations area - -#. Soil Layer Table: In this table the user provides the characteristics of each soil layer, such as layer thickness, density, V\ :sub:`s`, material type, and element size in the finite element mesh (Figure 5.). - - .. note:: - Variables are assumed to have m, kPa, and kN units in the Site Response panel. - - -#. Soil Column Graphic: The first graphic on the left of the panel shows a visualization of the soil column (Figure 5.). - -#. Finite Element Mesh Graphic: The second graphic on the left shows the finite element mesh (Figure 5.). - -#. Configure Tab: This section shows the configuration options (Figure 5.). - - * Under the *"OpenSees"* label, type the path of OpenSees executable. You can also select the executable from your local computer by clicking on the "+" button on the right of the input area. - * Under the *"Rock motion"* label, type the path of a ground motion file. You can also select the file from your local computer by clicking on the "+" button on the right of the input area. - * Under the *"Slope parameters"* label, we can modify the degree of inclination of our study terrain if this were the case. - - .. note:: - The rock motion file must follow the SimCenter event format. - - - .. figure:: ./images/Case3_Step3.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 5. Main window - Soil layer table, graphics and configure tab. - -#. Layer Properties Tab: This tab allows the user to enter additional material properties for the selected soil layer (Figure 6.). - - .. figure:: ./images/Case3_Step4.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 6. Main window - Layer properties tab. - -#. Response Tab: Once the site response analysis has been performed, this tab provides information about element and nodal time varying response quantities (Figure 7.). - - .. figure:: ./images/Case3_Step5.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 7. Main window - Response tab. - -#. Click the “Analyze” button on the right side of the upper toolbar to run the finite element analysis. - - * You will see a progress bar displayed at the bottom of the right hand side of the app, which shows the percentage of steps perfomed (Figure 8.). - - * Once the simulation is done, the *"Response"* tab and the *"PGA"* profile plot will be displayed. At the same time, a pop up window showing *"The analysis is done"* will show up. And when you click *"I know"*, the progress bar will disappear (Figure 8.). - - .. figure:: ./images/Case3_Step6.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 8. Main window - Analyze Done. - - * You can see the profile plots of the PGA, γ\ :sub:`max` \, maximum displacement and maximum r\ :sub:`u` \ by clicking on the respective tabs on the right side of the Finite Element Mesh Graphic and the surface and ground motion by clicking the Response tab (Figure 8.). - - .. figure:: ./images/Case3_Step7.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 9. Main window - Results. - - -Example Application -------------------- - -Soil Condition -~~~~~~~~~~~~~~ - -The soil column being analyzed is a 20.29 meters high sitting on rock. The ground water table is at 4.57 meters below the soil surface. In the column, there are a total of three layers. Each layer is meshed by elements with size of 0.20 meter in height. The soil profile is shown in Figure 10. and basic properties of soil layers are shown in Table 1. The first two layers are modeled by PM4Sand and the third layer is modeled by elastic isotropic material. - -.. figure:: ./images/Case3_soil_profile.png - :scale: 70 % - :align: center - :figclass: align-center - - Figure 10. Soil profile representation - -.. list-table:: *Table 1. Soil Profile Parameters* - :widths: 5 5 5 5 5 5 5 5 5 5 - :header-rows: 1 - - * - Layers - - Thickness \ - (m) - - V\ :sub:`s` \ - (m/s) - - ρ\ :sub:`unsat` \ - (kg/m\ :sup:`3`) - - ρ\ :sub:`sat` \ - (kg/m\ :sup:`3`) - - G\ :sub:`o,ref` \ - (MPa) - - D\ :sub:`R` \ - (%) - - h\ :sub:`po` - - v - - E\ :sub:`50,ref` \ - (kPa) - * - ESU1 - - 0.91 - - 266.09 - - 2.08 - - 2.16 - - 335.16 - - 79.50 - - 0.52 - - 0.3 - - 167580.91 - * - ESU2 - - 17.4 - - 202.39 - - 2.00 - - 2.08 - - 76.61 - - 39.67 - - 0.52 - - 0.32 - - 14364.08 - * - ESU3 - - 1.98 - - 380.39 - - 2.24 - - 2.32 - - - 316.01 - - 85.98 - - - - 0.25 - - 153216.83 - -Earthquake Condition -~~~~~~~~~~~~~~~~~~~~ - -Information on the seven ground motions to be used in this example is shown in Table 2, and in Figure 11, you can see the response spectrum of the 7 earthquakes in a single graph. - -.. list-table:: *Table 2. Ground Motion Parameters* - :widths: 10 10 10 10 10 - :header-rows: 1 - - * - Motion - - PGA (g) - - dT (sec) - - Duration (sec) - - N° of steps - * - Tohoku 41207-EW - - 0.58 - - 0.01 - - 359.98 - - 35999.00 - * - RSN6911_DARFIELD_HORCN18E - - 0.61 - - 0.01 - - 60.17 - - 12036.00 - * - RSN803_LOMAP_WVC270 - - 0.67 - - 0.01 - - 39.98 - - 7998.00 - * - RSN4457_MONTENE - - 0.68 - - 0.01 - - 40.39 - - 4040.00 - * - Tohoku Ishinomaki-NS - - 0.77 - - 0.01 - - 299.98 - - 29999.00 - * - Conception-L - - 0.82 - - 0.01 - - 141.67 - - 28335.00 - * - RSN727_SUPER - - 0.96 - - 0.01 - - 22.20 - - 2221.00 - -.. figure:: ./images/Case3_logSpectraCombined.png - :scale: 60 % - :align: center - :figclass: align-center> - - Figure 11. Response spectrum. - -The rock motions, in SimCenter format, can be downloaded from the `rock motions `_ folder (this can be found in the GitHub Repository). - -Results -~~~~~~~ - -The below images present the PGA, maximum shear strain, maximum displacement, maximum excess pore pressure ratio, ground surface response and rock motions results obtained from S\ :sup:`3` HARK. - -*Peak Ground Acceleration* -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. figure:: ./images/Case3_PGA_1.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_PGA_2.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 12. Peak Ground Acceleration. - -*Maximum Shear Strain* -^^^^^^^^^^^^^^ - -.. figure:: ./images/Case3_Shear_strain_1.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Shear_strain_2.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 13. Maximum Shear Strain. - -*Maximum Displacement* -^^^^^^^^^^^^^^ - -.. figure:: ./images/Case3_Displacement_1.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Displacement_2.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 14. Maximum Displacement. - -*Maximum Excess Pore Pressure Ratio* -^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. figure:: ./images/Case3_Ru_1.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Ru_2.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 15. Maximum Excess Pore Pressure Ratio (r\ :sub:`u` \). - -*Ground Surface Response* -^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. figure:: ./images/Case3_Ground_surface_response_1.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Ground_surface_response_2.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 16.1. Acceleration (m/s\ :sup:`2`). - - -.. figure:: ./images/Case3_Ground_surface_response_3.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Ground_surface_response_4.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 16.2. Velocity (m/s). - -.. figure:: ./images/Case3_Ground_surface_response_5.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Ground_surface_response_6.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 16.3. Displacement (m). - - Figure 16. Ground Surface Response. - -*Rock Motion* -^^^^^^^^^^^^^ - -.. figure:: ./images/Case3_Input_rock_motion_1.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Input_rock_motion_2.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 17.1. Acceleration (m/s\ :sup:`2`). - -.. figure:: ./images/Case3_Input_rock_motion_3.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Input_rock_motion_4.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 17.2. Velocity (m/s). - -.. figure:: ./images/Case3_Input_rock_motion_5.png - :scale: 45 % - :align: center - :figclass: align-center> - -.. figure:: ./images/Case3_Input_rock_motion_6.png - :scale: 45 % - :align: center - :figclass: align-center> - - Figure 17.3. Displacement (m). - - Figure 17. Input Rock Motion. - - -Remarks -------- - -.. note:: - In the out_tcl folder, located on your computer (SimCenter -> s3hark -> out_tcl), you can find all the results of the analysis performed by Shark and plot them in the tool of your preference. - -.. warning:: - If you perform more than one analysis, make sure to copy the results before running the next analysis, as s\ :sup:`3` hark will overwrite the new results on the old ones. - - diff --git a/test/_sources/case_4.rst.txt b/test/_sources/case_4.rst.txt deleted file mode 100644 index 63c7c2e..0000000 --- a/test/_sources/case_4.rst.txt +++ /dev/null @@ -1,324 +0,0 @@ -.. _case_4: - -S\ :sup:`3` hark - Site Response 2 -=================================== - -Author: Chungen Tai - - - -Introduction ------------- - -This page shows basic concepts of one-dimensional nonlinear site response analysis by using various soil material models (ex: Elastic, PM4Sand.) and the lateral spreading. - - -Problem Description -------------------- - -Site response analysis is commonly performed to analyze the propagation of seismic waves through soil. As shown in the below figure, one-dimensional response analyses, as a simplified method, assume that all boundaries are horizontal, and that the response of a soil deposit is predominately caused by SH-waves propagating vertically from the underlying bedrock. Ground surface response is usually the major output from these analyses, together with profile plots such as peak horizontal acceleration along the soil profile. When liquefiable soils are presenting, maximum shear strain and excess pore pressure ratio plots are also important. - -.. figure:: ./images/case4_siteResponse.png - :scale: 60 % - :align: center - :figclass: align-center - - Figure 1. Site Response Analysis - - -Solution Strategy ------------------ - -OpenSees -~~~~~~~~~~~~~~~~~ -OpenSees (Open System for Earthquake Engineering Simulation) is an open-source software framework used for simulating the response of structural and geotechnical systems to earthquakes and other loading conditions. It is widely used in research and practical applications for the analysis and design of structures subjected to dynamic loading. S3hark created a GUI to help user doing nonlinear site response analysis easily. - - -Soil model -~~~~~~~~~~~~~~~~~ -PM4Sand Model -~~~~~~~~~~~~~~~~~ -PM4Sand is a constitutive model used in geotechnical engineering to simulate the behavior of sand under various loading conditions, including seismic events. Developed by Boulanger and Ziotopoulou, this model captures the complex behaviors of sand such as cyclic mobility, dilatancy, and liquefaction. It's particularly useful in finite element analysis for evaluating the performance of soil-structure systems during earthquakes. PM4Sand is known for its ability to represent the stress-strain behavior of sandy soils accurately, aiding in the design and analysis of foundations, slopes, and embankments in seismic regions. The model parameters are grouped into two categories: a primary set of six parameters (three properties, two flags, and atmospheric pressure) that are most important for model calibration, and a secondary set of parameters that may be modified from their default values in special circumstances. The three primary input properties are the sand’s apparent relative density :math:`D_R`, the shear modulus coefficient :math:`G_o`, and the contraction rate parameter :math:`h_po`. -Apparent relative density (:math:`D_R`) can be calculated by correlation to penetration resistance.Commonly estimated based on CPT or SPT penetration resistances, such as the following relationships used by Idriss and Boulanger (2008): - -.. math:: - - D_R = \frac{(N_1)_{60}}{C_d} - -Where - -:math:`D_R` = Apparent Relative density (%) - -:math:`C_d` = 46 (Idriss and Boulanger ,2008) - - -Shear modulus coefficient is the primary variable controlling the small strain shear modulus, G_max. Should be chosen to match estimated or measured shear wave velocities. - -The shear modulus \( G_{max} \) can be described by the following equations: - -.. math:: - - G_{max} = \rho V_s^2 - -Usign following equation to calculate :math:`G_0` - -.. math:: - - G_{max} = G_0 p_a \left(\frac{p}{p_a}\right)^{0.5} - -Contraction rate parameter :math:`h_{po}` is one of primary variable that adjusts contraction rates and hence can be adjusted to obtain a target cyclic resistance ratio, as commonly estimated based on CPT or SPT penetration resistances and liquefaction correlations. - - - - -Elasticisotropic Model -~~~~~~~~~~~~~~~~~~~~~~~ - -In the context of geotechnical engineering and computational modeling, the "elastic model" refers to a mathematical representation of soil or rock behavior under loading conditions, where the material responds to stress with a proportional strain, following Hooke's Law. This model assumes that the material returns to its original shape once the load is removed, provided the stress is within the elastic limit.We can get the shear modulus from shear wave velocity, and then use the following equation convert to elastic modulus, - -.. math:: - - E= (2G)(1+\nu) - - -Where -:math:`\nu` = Poisson’s ration (default is 0.3) - - - - -Lateral Spreading -~~~~~~~~~~~~~~~~~ - -Lateral spreading refers to the horizontal movement of soil, typically caused by liquefaction during an earthquake. When an earthquake occurs, seismic waves can cause loose, water-saturated, granular soils to temporarily lose their strength and behave like a liquid. This process is known as liquefaction. Once liquefaction occurs, the affected soil can flow or spread laterally, especially if there is a slope or free face (like a riverbank or retaining wall) nearby. Lateral spreading can cause significant ground displacement and can lead to damage of structures, utilities, and infrastructure. In this example, we will focus on the lateral movement cause by different slope angles. - -.. figure:: ./images/case4_lateralspreading.png - :scale: 60 % - :align: center - :figclass: align-center - - Figure 2. Lateral spreading - - - - -SimCenter Tool Used -------------------- - -S\ :sup:`3` hark is the acronym of site-specific seismic hazard analysis and research kit. This tool focuses on simulating wave propagation along soil depth using finite element (FE) method. The intended audience for s3hark is researchers and practitioners interested in performing site-specific analysis of soil in response to earthquakes, and educators interested in teaching site response analysis in their classes. The tool provides a friendly interface for users to input and modify soil layers using tables, while the built soil profile and the FE mesh being visualized simultaneously. Results including acceleration, velocity, displacement, pore pressure, spectral acceleration, etc., are visualized for the soil profile and for each node as well, from which the user can comprehend the wave propagation and liquefaction status along the soil depth. - -Features of S\ :sup:`3` hark include: - -#. 2D and 3D elements for dynamic analysis of fluid saturated porous media - -#. Advanced linear / nonlinear soil material models - -#. Total stress / effective stress analysis - -#. Bi-directional motions - -#. Flat / slope free field analysis - -#. Finite rigidity of the bedrock - -Click on the icon of S\ :sup:`3` hark to open the application. Figure 3 illustrates the main window. It is split into the following areas: - -.. figure:: ./images/case4_window.png - :scale: 20 % - :align: center - :figclass: align-center - - Figure 3. S\ :sup:`3` hark HARK Main Window - - - - - -#. Soil Column Graphic: The first graphic on the left of the panel shows a visualization of the soil column. - -#. FE Mesh Graphic: The second graphic on the left shows the finite element mesh and profile plots. Selecting any of the tabs on the right inside this graphic (i.e, PGA, γmax,maxDisp, maxRu, maxRuPWP) will show various results from the simulation at the mesh points. - -.. figure:: ./images/case4_plot.png - :scale: 50 % - :align: center - :figclass: align-center - - Figure 4. S\ :sup:`3` hark HARK FE Mesh Graphic - - -#. Operations Area: The right side of this area shows some information (e.g., total height and number of soil layers), includes the Ground Water Table (GWT) input field, and plus and minus buttons. If the user presses the plus button, a layer is added below the selected layer. If the minus button is pressed the selected layer is removed. The GWT input field allows the user to specify the level of the ground water table. - -#. Soil Layer Table: This table is where the user provides the characteristics of the soil layer, such as layer thickness, density, Vs30, material type, and element size in the finite element mesh. - -#. Tabbed Area: This area contains the three tabbed widgets described below. - - #. Configure Tab: This tab allows the user to specify the path to the OpenSees executable and to a ground motion file. - - #. Layer Properties Tab: This tab allows the user to enter additional material properties for the selected soil layer. - - #. Response Tab: Once the site response analysis has been performed, this tab provides information about element and nodal time varying response quantities. - -.. figure:: ./images/case4_response.png - :scale: 50 % - :align: center - :figclass: align-center - - Figure 5. S\ :sup:`3` hark HARK Response Tab - - -#. Analyze Button: This button shall be used to run the simulation locally. A progress bar will show the status of the analysis. This allows the user to review the ground motion predicted at the surface - - - - - -Example Application -------------------- -Treasure Island, situated atop sand fill strata overlaying Bay Mud within the San Francisco Bay, was subjected to seismic activity during the 1989 Loma Prieta Earthquake. Adjacent to Treasure Island lies Yerba Buena Island, characterized by its natural rock outcrop. Utilizing the site's soil profile and seismic data recorded on Yerba Buena Island, we endeavor to analyze the site response of Treasure Island. This entails computing parameters such as peak horizontal acceleration and peak horizontal displacement along the soil profile. Furthermore, we aim to investigate the influence of lateral spread in varying slopes on the site's response characteristics. -For lateral spreading, we change the slope :math:`\alpha` as 0, 2, 5 to see the influence of it. - - -Analysis Processes -~~~~~~~~~~~~~~~~~~~~~~~~ -There is the analysis process of site response analysis: - -#. Input the earthquake motions: Covent the earthquake motion record into '.json' file. Then, input the path into 'Configure Layer'. - -#. Input ths soil parameters: This is the most important step in site response analysis. The soil parameters are obtained from theory or investigation reports. Then, type all of the soil parameters into the 'Soil Layer Table'. - -#. Click "analysis" bottom: Click the button to run the analysis. The program will notify you when it is finished. - -Earthquake motion -~~~~~~~~~~~~~~~~~ -The motion recorded at Yerba Buena Island from the Loma Prieta earthquake is used in this sample. Figure 6 shows the acceleration, velocity, and displacement of this motion. - -.. figure:: ./images/case4_YERBAISL2_Records.png - :scale: 50 % - :align: center - :figclass: align-center - - Figure 6. Input ground motion (acceleration, velocity, and displacement) - -Figure 7 illustrates the spetrum of this motion. - -.. figure:: ./images/case4_YERBAISL2_RSpectra.png - :scale: 50 % - :align: center - :figclass: align-center - - Figure 7. Input ground motion spetrum (acceleration, velocity, and displacement) - - -Soil condition -~~~~~~~~~~~~~~~~~ - -The following table shows the soil parameters in this site. Using PM4Sand to stimulate sand , and using Elasticisotropic to model clay. - - -.. list-table:: Table1. Soil Profile Parameters - :widths: 20 20 20 20 20 20 20 20 - :header-rows: 1 - - * - Layers - - Thickness(m) - - :math:`V_s (m/s)` - - :math:`\rho (kg/m^3)` - - :math:`G_o(kPa)` - - :math:`E (kPa)` - - :math:`D_R` (%) - - Model - * - SAND1 - - 15 - - 175.3 - - 2.01 - - 0.69 - - -- - - 0.33 - - PM4Sand - * - CLAY1 - - 14 - - 198.8 - - 1.68 - - -- - - 172.8 - - -- - - Elasticisotropic - * - SAND2 - - 12 - - 300 - - 2.08 - - 1.33 - - -- - - 0.77 - - PM4Sand - * - CLAY2 - - 32 - - 280 - - 2.08 - - -- - - 423.8 - - -- - - Elasticisotropic - * - SAND3 - - 8 - - 380 - - 2.08 - - 1.46 - - -- - - 0.62 - - PM4Sand - * - CLAY3 - - 8 - - 300 - - 2.08 - - -- - - 486.6 - - -- - - Elasticisotropic - * - WRock - - 5 - - 600 - - 2.16 - - -- - - 2022.8 - - -- - - Elasticisotropic - * - Rockbed - - -- - - 1830 - - 2.24 - - -- - - 19526.7 - - -- - - Elasticisotropic - - -Result -~~~~~~~~~~~~~~~~~~ - -The following plots show maximun displacement in different slope angles. - - -Displacement -~~~~~~~~~~~~~~~~~ - -Figure 8 shows the result of maximun displacement, we can see that the displacement on the surface increases with increasing the slope. - - -.. figure:: ./images/case4_d.png - :scale: 50 % - :align: center - :figclass: align-center - - Figure 8. The maximum displacement in different slope - - -Figure 9 illustrates the relationships between slope and the displacement on the surface. - - -.. figure:: ./images/case4_dd.png - :scale: 60 % - :align: center - :figclass: align-center - - Figure 9. The relationships between slope and the displacement on the surface diff --git a/test/_sources/case_5.rst.txt b/test/_sources/case_5.rst.txt deleted file mode 100644 index 8d2986c..0000000 --- a/test/_sources/case_5.rst.txt +++ /dev/null @@ -1,582 +0,0 @@ -.. _case_5: - -R2D - Liquefaction -================== - -Author: Morgan Sanger ---------------------- - -Introduction ------------- - -This page describes basic concepts of geospatial liquefaction hazard modeling withing the umbrella of SimCenter tools. - - -Problem Description -------------------- - -Coseismic soil liquefaction is a phenomenon in which the strength and stiffness of a soil is reduced by earthquake shaking. Resilient communities and infrastructure networks, like lifelines or transportation systems, must be built to withstand and respond to hazards posed by coseismic soil liquefaction. Ideally, these predictions could be made: - -* quickly, in near-real-time after an event; - -* at high resolution, consistent with the scale of individual assets; and - -* at map-scale, across the regional extent affected by large earthquakes. - - -Common liquefaction models in practice require in-situ testing which cannot be continuously performed across large areas, thus presenting the need for “geospatial” liquefaction models. Prior tests of such models (e.g., :cite:`Zhu2017`) have shown both promising potential and severe shortcomings in predicting subsurface conditions with few geospatial predictors. There is a need to advance geospatial liquefaction modeling by integrating geotechnical data, liquefaction mechanics, artificial intelligence (AI), and many geospatial predictor variables to provide reliable regional liquefaction predictions for any earthquake event. When integrated with regional hazard assessment capabilities, geospatial liquefcation models will provide value throughout the life of infrastructure projects - from initial desk studies to refined project-specific hazard analyses - and will unlock insights beyond conventional practice, with opportunity to: - -* prescribe event-specific emergency response and evacuation routes immediately after an earthquake, - -* evaluate network reliability and infrastructure network resiliency using structural databases or other asset inventories, and - -* understand the impacts of earthquake events of vulnerable communities using population demographic data. - -Solution Strategy ------------------ - -The state-of-practice geospatial liquefaction model is the :cite:`RB2020` model (updated version of the :cite:`Zhu2017` model), which uses logistic regression to predict probability of liquefaction based on five (5) geospatial variables and trained on a database of liquefaction case histories. - -In this problem, another modeling solution strategy is proposed, according to :cite:`Sanger2024`. The :cite:`Sanger2024` approach parses the problem into that which is empirical and best predicted by AI (the relationship between geospatial variables and subsurface traits) and that which is best predicted by mechanics (liquefaction response, conditioned on those traits). In this approach, the subsurface traits are characterized at point locations using available cone penetration testing (CPT) data. The liquefaction response at each CPT location is computed across a range of magnitude-scale peak ground accelerations (PGAM7.5) using state-of-practice liquefaction manifestation models (e.g., liquefaction potential index, LPI), thereby retaining the knowledge of liquefaction mechanics developed over the last 50+ years. The relationship between manifestation index and PGAM7.5 is represented as a functional form (Eqn 1) with two curve-fitting parameters: A and B (Fig 1). Therefore, the liquefaction response (i.e., A and B) at each CPT location becomes target variables of supervised learning AI models. - -.. math:: - MI = \left\{ \begin{array}{ll} - 0, & \text{PGA}_{M7.5} < 0.1g \\ - \arctan(B \cdot (\text{PGA}_{M7.5} - \frac{A}{B})^2) \cdot 100, & \text{PGA}_{M7.5} \geq 0.1g - \end{array} \right. - -**Eqn 1.** Manifestation index as a function of A, B, and PGAM7.5. - - -.. figure:: ./images/case5_manifestationcurve.png - :scale: 65 % - :align: center - :figclass: align-center - - **Fig 1.** Example manifestation curve of LPI vs. PGAM7.5 for a single CPT. - -The AI model is trained to predict liquefaction response using a set of 37 geospatial predictor variables that serve as proxies for liquefaction. These predictor variables include metrics of surface topography and roughness, distance to and elevation above water bodies, and information about geology, geomorphology, and hydrology. By applying the trained AI model to these predictor datasets, the A and B parameters are predicted geospatially at 100-meter resolution. A crucial step in this approach is geostatistically updating the AI predictions via regression kriging near field measurements. The effect is that predictions near known subsurface conditions have lower model uncertainty, while predictions farther away rely on the AI model and have higher uncertainty. This method effectively pre-computes liquefaction response for all possible ground motions based on AI-predicted subsurface conditions. These predictions are stored as mapped parameters, ready for use with specific earthquake data, such as a PGAM7.5 raster in R2D. - -Model predictions were then tested against the leading geospatial model :cite:`RB2020` in three case-history events using receiver operating characteristic and area under the curve analyses (Fig 2). The :cite:`Sanger2024` AI model (before kriging) performed significantly better than :cite:`RB2020` and was further improved by kriging (Fig 3). - -.. figure:: ./images/case5_sanger2024-roc.png - :scale: 100 % - :align: center - :figclass: align-center - - **Fig 2.** Receiver operator characteristic curves and area under the curve (AUC) analyses comparing :cite:`RB2020` (“R&B”), and the :cite:`Sanger2024` *before* regression kriging (“LPI”). - -.. figure:: ./images/case5_zhu2017.png - :scale: 100 % - :align: center - :figclass: align-center - - **(a)** - -.. figure:: ./images/case5_sanger2024-ai.png - :scale: 100 % - :align: center - :figclass: align-center - - **(b)** - -.. figure:: ./images/case5_sanger2024-krig.png - :scale: 100 % - :align: center - :figclass: align-center - - **(c)** - - **Fig 3.** Comparison between **(a)** Rashidian & Baise (2020), and this model **(b)** before and **(c)** after regression kriging for the Feb. 2011 M6.1 Christchurch event. - - -SimCenter Tool Used -------------------- - -The presented problem can be solved using SimCenter's Regional Resilience Determination `R2D `_ Tool. A substantially complete description of the tool is provided in the `R2D Documentation `_. - -The updated :cite:`Zhu2017` model (:cite:`RB2020`) is implemented in the R2D tool (version 4.2.0), whereas the :cite:`Sanger2024` model is not yet implemented in the R2D tool. In this project, the :cite:`Sanger2024` model was implemented in the R2D tool using the `applications.py` file. - - -Example Application -------------------- - -This example demonstrates the application of the :cite:`Zhu2017` liquefaction-induced ground failure model (really the :cite:`RB2020` model) currently implemented in R2D, and the implementation of the next-generation :cite:`Sanger2024` model described in the **Solution Strategy**. - -.. note:: - In R2D, ground failure models are considered intermediate results that are accessible only through the Earthquake Event Generator tool, and they cannot be executed within the damage and loss assessment tools. Future development in R2D should consider (1) implementing ground failure models with other earthquake hazard source options (e.g., Shakemap Earthquake Scenario), (2) extending the implementation of the ground failure modeling beyond California, and (3) incorporating ground failure models into the damage and loss assessment tools. - -Zhu et al. (2017) -................. - -**WORKFLOW** - -The workflow for the :cite:`Zhu2017` model in the Earthquake Event Generator tool in R2D is as follows: - -**1. Define Analysis Grid**: Define the analysis grid for the study area. Here, an area of downtown San Francisco is selected for the analysis. The grid is defined with a resolution of approximately 100 meters, the true model resolution of the :cite:`Sanger2024` model. - -.. figure:: ./images/case5_EQGen1.png - :width: 800px - :align: center - :figclass: align-center - -.. raw:: html - -
- -**2. Forecast Rupture Scenarios**: Large events (>M7) are forecasted for the study area to demonstrate the model performance under extreme conditions. - -.. figure:: ./images/case5_EQGen2.png - :width: 800px - :align: center - :figclass: align-center - -.. raw:: html - -
- -**3. Select Earthquake Event**: Select an earthquake event scenario. Here, the M8 N. San Andreas rupture event scenario is selected. - -.. figure:: ./images/case5_EQGen3.png - :width: 800px - :align: center - :figclass: align-center - -.. raw:: html - -
- -**4. Select Intensity Measures**: PGA and PGV are selected as the intensity measures for the analysis, both required for the :cite:`Zhu2017` model. - -.. figure:: ./images/case5_EQGen4.png - :width: 800px - :align: center - :figclass: align-center - -.. raw:: html - -
- -**5. Select Ground Failure Model**: Select the ground failure model. Here, the :cite:`Zhu2017` model is selected. - -.. figure:: ./images/case5_EQGen5.png - :width: 800px - :align: center - :figclass: align-center - -.. raw:: html - -
- -**6. Run Hazard Simulation**. - -.. figure:: ./images/case5_EQGen6.png - :width: 800px - :align: center - :figclass: align-center - -.. raw:: html - -
- -**7. View Results**: The results of the :cite:`Zhu2017` model for the probability of liquefaction are shown in Fig 4. - - - -**CODE** - -The following code snippet shows the implementation of the :cite:`Zhu2017` model in the R2D tool using the `applications.py` file. - -.. code-block:: python - :linenos: - - # Zhu et al. (2017) code - ----------------------------------------------------------- - class ZhuEtal2017(Liquefaction): - """ - A map-based procedure to quantify liquefaction at a given location using logistic models by Zhu et al. (2017). Two models are provided: - - 1. For distance to coast < cutoff, **prob_liq** = f(**pgv**, **vs30**, **precip**, **dist_coast**, **dist_river**) - 2. For distance to coast >= cutoff, **prob_liq** = f(**pgv**, **vs30**, **precip**, **dist_coast**, **dist_river**, **gw_depth**) - - Parameters - ---------- - From upstream PBEE: - pgv: float, np.ndarray or list - [cm/s] peak ground velocity - mag: float, np.ndarray or list - moment magnitude - pga: float, np.ndarray or list - [g] peak ground acceleration, only to check threshold where prob_liq(pga<0.1g)=0 - stations: list - a list of dict containing the site infomation. Keys in the dict are 'ID', - 'lon', 'lat', 'vs30', 'z1pt0', 'z2pt5', 'vsInferred', 'rRup', 'rJB', 'rX' - - Geotechnical/geologic: - vs30: float, np.ndarray or list - [m/s] time-averaged shear wave velocity in the upper 30-meters - precip: float, np.ndarray or list - [mm] mean annual precipitation - dist_coast: float, np.ndarray or list - [km] distance to nearest coast - dist_river: float, np.ndarray or list - [km] distance to nearest river - dist_water: float, np.ndarray or list - [km] distance to nearest river, lake, or coast - gw_depth: float, np.ndarray or list - [m] groundwater table depth - - Fixed: - # dist_water_cutoff: float, optional - # [km] distance to water cutoff for switching between global and coastal model, default = 20 km - - Returns - ------- - prob_liq : float, np.ndarray - probability for liquefaciton - liq_susc_val : str, np.ndarray - liquefaction susceptibility category value - - References - ---------- - .. [1] Zhu, J., Baise, L.G., and Thompson, E.M., 2017, An Updated Geospatial Liquefaction Model for Global Application, Bulletin of the Seismological Society of America, vol. 107, no. 3, pp. 1365-1385. - - """ - def __init__(self, parameters, stations) -> None: - self.stations = stations - self.parameters = parameters - self.dist_to_water = None #(km) - self.dist_to_river = None #(km) - self.dist_to_coast = None #(km) - self.gw_depth = None #(m) - self.precip = None # (mm) - self.vs30 = None #(m/s) - self.interpolate_spatial_parameters(parameters) - - def interpolate_spatial_parameters(self, parameters): - # site coordinate in CRS 4326 - lat_station = [site['lat'] for site in self.stations] - lon_station = [site['lon'] for site in self.stations] - # dist_to_water - if parameters["DistWater"] == "Defined (\"distWater\") in Site File (.csv)": - self.dist_to_water = np.array([site['distWater'] for site in self.stations]) - else: - self.dist_to_water = sampleRaster(parameters["DistWater"], parameters["inputCRS"],\ - lon_station, lat_station) - # dist_to_river - if parameters["DistRiver"] == "Defined (\"distRiver\") in Site File (.csv)": - self.dist_to_river = np.array([site['distRiver'] for site in self.stations]) - else: - self.dist_to_river = sampleRaster(parameters["DistRiver"], parameters["inputCRS"],\ - lon_station, lat_station) - # dist_to_coast - if parameters["DistCoast"] == "Defined (\"distCoast\") in Site File (.csv)": - self.dist_to_coast = np.array([site['distCoast'] for site in self.stations]) - else: - self.dist_to_coast = sampleRaster(parameters["DistCoast"], parameters["inputCRS"],\ - lon_station, lat_station) - # gw_water - if parameters["GwDepth"] == "Defined (\"gwDepth\") in Site File (.csv)": - self.gw_depth = np.array([site['gwDepth'] for site in self.stations]) - else: - self.gw_depth = sampleRaster(parameters["GwDepth"], parameters["inputCRS"],\ - lon_station, lat_station) - # precipitation - if parameters["Precipitation"] == "Defined (\"precipitation\") in Site File (.csv)": - self.precip = np.array([site['precipitation'] for site in self.stations]) - else: - self.precip = sampleRaster(parameters["Precipitation"], parameters["inputCRS"],\ - lon_station, lat_station) - self.vs30 = np.array([site['vs30'] for site in self.stations]) - print("Sampling finished") - - def run(self, ln_im_data, eq_data, im_list, output_keys, additional_output_keys): - if ('PGA' in im_list) and ('PGV' in im_list): - num_stations = len(self.stations) - num_scenarios = len(eq_data) - PGV_col_id = [i for i, x in enumerate(im_list) if x == 'PGV'][0] - PGA_col_id = [i for i, x in enumerate(im_list) if x == 'PGA'][0] - for scenario_id in range(num_scenarios): - num_rlzs = ln_im_data[scenario_id].shape[2] - im_data_scen = np.zeros([num_stations,\ - len(im_list)+len(output_keys), num_rlzs]) - im_data_scen[:,0:len(im_list),:] = ln_im_data[scenario_id] - for rlz_id in range(num_rlzs): - pgv = np.exp(ln_im_data[scenario_id][:,PGV_col_id,rlz_id]) - pga = np.exp(ln_im_data[scenario_id][:,PGA_col_id,rlz_id]) - mag = float(eq_data[scenario_id][0]) - model_output = self.model(pgv, pga, mag) - for i, key in enumerate(output_keys): - im_data_scen[:,len(im_list)+i,rlz_id] = model_output[key] - ln_im_data[scenario_id] = im_data_scen - im_list = im_list + output_keys - additional_output = dict() - for key in additional_output_keys: - item = getattr(self, key, None) - if item is None: - warnings.warn(f"Additional output {key} is not avaliable in the liquefaction trigging model 'ZhuEtal2017'.") - else: - additional_output.update({key:item}) - else: - sys.exit(f"At least one of 'PGA' and 'PGV' is missing in the selected intensity measures and the liquefaction trigging model 'ZhuEtal2017' can not be computed.") - # print(f"At least one of 'PGA' and 'PGV' is missing in the selected intensity measures and the liquefaction trigging model 'ZhuEtal2017' can not be computed."\ - # , file=sys.stderr) - # sys.stderr.write("test") - # sys.exit(-1) - return ln_im_data, eq_data, im_list, additional_output - - def model(self, pgv, pga, mag): - """Model""" - # zero prob_liq - zero_prob_liq = 1e-5 # decimal - - # distance cutoff for model - model_transition = 20 # km - - # initialize arrays - x_logistic = np.empty(pgv.shape) - prob_liq = np.empty(pgv.shape) - liq_susc_val = np.ones(pgv.shape)*-99 - liq_susc = np.empty(pgv.shape, dtype=int) - - # magnitude correction, from Baise & Rashidian (2020) and Allstadt et al. (2022) - pgv_mag = pgv/(1+np.exp(-2*(mag-6))) - pga_mag = pga/(10**2.24/mag**2.56) - - # find where dist_water <= cutoff for model of 20 km - # coastal model - ind_coastal = self.dist_to_water<=model_transition - # global model - # ind_global = list(set(list(range(pgv.shape[0]))).difference(set(ind_coastal))) - ind_global = ~(self.dist_to_water<=model_transition) - - # set cap of precip to 1700 mm - self.precip[self.precip>1700] = 1700 - - # x = b0 + b1*var1 + ... - # if len(ind_global) > 0: - # liquefaction susceptbility value, disregard pgv term - liq_susc_val[ind_global] = \ - 8.801 + \ - -1.918 * np.log(self.vs30[ind_global]) + \ - 5.408e-4 * self.precip[ind_global] + \ - -0.2054 * self.dist_to_water[ind_global] + \ - -0.0333 * self.gw_depth[ind_global] - # liquefaction susceptbility value, disregard pgv term - liq_susc_val[ind_coastal] = \ - 12.435 + \ - -2.615 * np.log(self.vs30[ind_coastal]) + \ - 5.556e-4 * self.precip[ind_coastal] + \ - -0.0287 * np.sqrt(self.dist_to_coast[ind_coastal]) + \ - 0.0666 * self.dist_to_river[ind_coastal] + \ - -0.0369 * self.dist_to_river[ind_coastal]*np.sqrt(self.dist_to_coast[ind_coastal]) - # catch nan values - liq_susc_val[np.isnan(liq_susc_val)] = -99. - # x-term for logistic model = liq susc val + pgv term - x_logistic[ind_global] = liq_susc_val[ind_global] + 0.334*np.log(pgv_mag[ind_global]) - # x-term for logistic model = liq susc val + pgv term - x_logistic[ind_coastal] = liq_susc_val[ind_coastal] + 0.301*np.log(pgv_mag[ind_coastal]) - - # probability of liquefaction - prob_liq = 1/(1+np.exp(-x_logistic)) # decimal - prob_liq = np.maximum(prob_liq,zero_prob_liq) # set prob to > "0" to avoid 0% in log - - # for pgv_mag < 3 cm/s, set prob to "0" - prob_liq[pgv_mag<3] = zero_prob_liq - # for pga_mag < 0.1 g, set prob to "0" - prob_liq[pga_mag<0.1] = zero_prob_liq - # for vs30 > 620 m/s, set prob to "0" - prob_liq[self.vs30>620] = zero_prob_liq - - # calculate sigma_mu - sigma_mu = (np.exp(0.25)-1) * prob_liq - - # determine liquefaction susceptibility category - liq_susc[liq_susc_val>-1.15] = liq_susc_enum['very_high'].value - liq_susc[liq_susc_val<=-1.15] = liq_susc_enum['high'].value - liq_susc[liq_susc_val<=-1.95] = liq_susc_enum['moderate'].value - liq_susc[liq_susc_val<=-3.15] = liq_susc_enum['low'].value - liq_susc[liq_susc_val<=-3.20] = liq_susc_enum['very_low'].value - liq_susc[liq_susc_val<=-38.1] = liq_susc_enum['none'].value - - # liq_susc[prob_liq==zero_prob_liq] = 'none' - - return {"liq_prob":prob_liq, "liq_susc":liq_susc} - - - -**RESULTS** - -.. figure:: ./images/case5_zhu_pliq.png - :scale: 75 % - :align: center - :figclass: align-center - - **Fig 4.** Results of the Zhu et al. (2017) model for probability of liquefaction given the selected M8 N. San Andreas rupture event scenario. - - - -Sanger et al. (2024) -..................... -**WORKFLOW** - -The workflow for the :cite:`Sanger2024` model follows the same steps as the :cite:`Zhu2017` model, with the exception of the referenced geospatial parameters. The :cite:`Sanger2024` model needs only the LPI A and LPI B parameters, implemented here within the DistWater and DistCoast parameters in the R2D tool because the author did not have access to the user-interface code for the R2D tool. - -.. figure:: ./images/case5_EQGen10.png - :width: 800px - :align: center - :figclass: align-center - - -**CODE** - -In this example, the :cite:`Sanger2024` model is implemented in the R2D tool using the `applications.py` file, overwriting the `ZhuEtal2017` class for quick integration with the R2D user-interface. - -.. code-block:: python - :linenos: - - # Sanger et al. (2024) code - ----------------------------------------------------------- - class ZhuEtal2017(Liquefaction): - """ - A map-based procedure to quantify liquefaction at a given location Sanger et al. (2024). - - Parameters - ---------- - From upstream PBEE: - mag: float, np.ndarray or list - moment magnitude - pga: float, np.ndarray or list - [g] peak ground acceleration, only to check threshold where prob_liq(pga<0.1g)=0 - stations: list - a list of dict containing the site infomation. Keys in the dict are 'ID', - 'lon', 'lat', 'vs30', 'z1pt0', 'z2pt5', 'vsInferred', 'rRup', 'rJB', 'rX' - - Geotechnical: - LPI A: float, np.ndarray or list - LPI B: float, np.ndarray or list - - Returns - ------- - prob_liq : float, np.ndarray - probability for liquefaciton (surface manifestation) - - """ - def __init__(self, parameters, stations) -> None: - self.stations = stations - self.parameters = parameters - self.LPI_A = None # - self.LPI_B = None # - self.interpolate_spatial_parameters(parameters) - - def interpolate_spatial_parameters(self, parameters): - # site coordinate in CRS 4326 - lat_station = [site['lat'] for site in self.stations] - lon_station = [site['lon'] for site in self.stations] - # LPI_A - self.LPI_A = sampleRaster(parameters["DistWater"], parameters["inputCRS"],\ - lon_station, lat_station) - # LPI_B - self.LPI_B = sampleRaster(parameters["DistCoast"], parameters["inputCRS"],\ - lon_station, lat_station) - print("Sampling finished") - - def run(self, ln_im_data, eq_data, im_list, output_keys, additional_output_keys): - if ('PGA' in im_list): - num_stations = len(self.stations) - num_scenarios = len(eq_data) - PGA_col_id = [i for i, x in enumerate(im_list) if x == 'PGA'][0] - for scenario_id in range(num_scenarios): - num_rlzs = ln_im_data[scenario_id].shape[2] - im_data_scen = np.zeros([num_stations,\ - len(im_list)+len(output_keys), num_rlzs]) - im_data_scen[:,0:len(im_list),:] = ln_im_data[scenario_id] - for rlz_id in range(num_rlzs): - pga = np.exp(ln_im_data[scenario_id][:,PGA_col_id,rlz_id]) - mag = float(eq_data[scenario_id][0]) - model_output = self.model(pga, mag) - for i, key in enumerate(output_keys): - im_data_scen[:,len(im_list)+i,rlz_id] = model_output[key] - ln_im_data[scenario_id] = im_data_scen - im_list = im_list + output_keys - additional_output = dict() - for key in additional_output_keys: - item = getattr(self, key, None) - if item is None: - warnings.warn(f"Additional output {key} is not avaliable in the liquefaction trigging model 'SangerEtal2024'.") - else: - additional_output.update({key:item}) - else: - sys.exit(f"'PGA' is missing in the selected intensity measures and the liquefaction trigging model 'SangerEtal2024' can not be computed.") - return ln_im_data, eq_data, im_list, additional_output - - def model(self, pga, mag): - """Model""" - # magnitude correction, according to MSF Correction (SAND) Function according to Idriss and Boulanger (2008) - MSF = 6.9*np.exp(-mag/4) - 0.058 - if MSF > 1.8: - MSF = 1.8 - pga_mag = pga / MSF - - # Geospatial LPI A and LPI B - # Initialize an array for the calculated MI - LPI = np.zeros_like(pga_mag) - - # Calculate MI for each element of the arrays - mask_low = pga_mag < 0.1 - mask_high = pga_mag >= 0.1 - LPI[mask_low] = 0 - LPI[mask_high] = self.LPI_A[mask_high] * np.arctan(self.LPI_B[mask_high] * (pga_mag[mask_high] - self.LPI_A[mask_high] / self.LPI_B[mask_high]) ** 2) * 100 - - from scipy.stats import norm - - # Probability of liquefaction (manifestation at the surface) according to Geyin et al. (2020) (minor manifestation) - LPI_beta= 1.774 - LPI_theta= 4.095 - prob_liq = norm.cdf(np.log(LPI/LPI_theta)/LPI_beta) - - return {"liq_prob":prob_liq, "liq_susc":LPI} - - - -**RESULTS** - -.. figure:: ./images/case5_sanger_lpi.png - :scale: 75 % - :align: center - :figclass: align-center - - **Fig 5.** Results of the Sanger et al. (2024) model for liquefaction potential index given the selected M8 N. San Andreas rupture event scenario. - -.. figure:: ./images/case5_sanger_pliq.png - :scale: 75 % - :align: center - :figclass: align-center - - **Fig 6.** Results of the Sanger et al. (2024) model for probability of liquefaction given the selected M8 N. San Andreas rupture event scenario, using the Geyin and Maurer (2020) fragility function to map LPI to probability of surface manifestation (minor/all). - - -Remarks -------- - -.. note:: - Preliminary visualization of the results can be accomplished in the R2D VIZ tab using Graduated Symbols. However, the author recommends exporting the results to a GIS software for more detailed visualization and analysis. - .. figure:: ./images/case5_EQGen7.png - :width: 600px - :align: center - :figclass: align-center - - -.. note:: - Note the division spacing issue that arises when the number of divisions is greater than 10. This has been alerted to the developers. - - .. figure:: ./images/case5_EQGen11.png - :width: 600px - :align: center - :figclass: align-center - - - -References ----------- -.. bibliography:: references.bib diff --git a/test/_sources/case_6.rst.txt b/test/_sources/case_6.rst.txt deleted file mode 100644 index dc0713d..0000000 --- a/test/_sources/case_6.rst.txt +++ /dev/null @@ -1,150 +0,0 @@ -.. _case_6: - -R2D - Landslides -================ - -Author: Luis Angel Guerrero Hoyos ---------------------- - -Introduction ------------- - -This page describes a preliminarly approach for landslide risk assesment which propose an initial workflow that must be developed in the future, so then it can implemented in the SimCenter tool R2D. An example, which uses Jibson (1993) model to predict Newmark sliding block displacements, is presented for a portion of the city of Seattle, WA. Resources from SimCenter M9 project are used in the example to estimate ground-motion intensity parameters. - - -Problem Description -------------------- - -Studying earthquake-induced landslides is vital for reducing risks, protecting lives and property, preserving the environment, and enhancing our scientific understanding of these natural disasters. Through comprehensive research and application of findings, societies can better prepare for and mitigate the impacts of these potentially devastating events. - -There are several models that can be implemented in a regional-based study so that, hazard values it can be estimated. Some researchers use the theory of Newmark Sliding Block :cite:`Newmark1965` to predict how much displacement would occur if an earthquake with a certain ground motion were to occurr. These models have developed correlations that depend on different intensity measurements as: Earthquake Magnitude (:math:`M_w`), Peak Ground Acceleration (:math:`PGA`), Peak Ground Velocity (:math:`PGV`), Arias Intensity (:math:`I_a`), Critical Acceleration (:math:`a_c`), Normalized Critical Acceleration (:math:`k_c`), Spectral Acceleration (:math:`Sa`), Static Factor of Safety (:math:`FS_{static}`), and Ground Sloping (:math:`\beta`), as well as Soil Strength Parameters (:math:`\gamma,\:c,\:\phi`). - -This models could be built-in within R2D tool so that we can estimate Damage and Losses against earthquake-induced landslides. - - -Solution Strategy ------------------ - -In this section, we propose a preliminarly workflow that can be coded within R2D so we can estimate damage and losses as consequences of earthquake-induced landslides risk. - -.. figure:: ./images/case6_fig1.png - :scale: 40 % - :align: center - :figclass: align-center - - Figure 1. Proposed workflow for incorporating Landslide Risk Assesment into R2D. - -Here are some steps to consider: - -#. Same as the BRAILS tool is embedded within R2D we would need to embed a tool that allows the user to get Digital Elevation Models (DEM) from publicaly available GIS services (e.g. `USGS portal `_). \newline Then, a slope raster can be generated for the selected area (geospatial packages must be installed in python dependencies: `Gdal `_, `Rasterio `_). - -#. Intensity measurements can be estimated from the "Earthqueake Event Generation" tool. Reminder that some of the models use mesurements extracted from the time-history record, whereas others use spectral accelerations (extracted from the reponse spectrum). - -#. Soil Strength Parameters can be estimated from geological mapping and reference values correlations. So, a tool that allows the user to get geological GIS units must be built-in within R2D as well. - -Finally, after input parameters can be estimated for a certain model, the hazard values can be calculated as Newmark Displacement values. - -.. note:: - All of the previous estimations have uncertainty and the model itself has its own uncertainty. - -SimCenter Tool Used -------------------- - -The goal is to implement the following protocol into R2D. However some Simcenter tools were used in order to develop the procedure. - -#. The Simcenter Jupyter HUB was used to write the notebook that would help us to compute the hazard against landslide. - -#. Ground motions from SimCenter project M9 were used as a grid to which then, intensity measurements would be calculated. - -Example Application -------------------- - -In this section we would like to analyze in a regional scale, what would be the response across a study area located in Seattle, WA, US. The idea is to estimate the predicted displacement in the study area if an earthquake with certain intensity measure (Arias Intensity :math:`I_a`) were to occur. The model integrates the infinite slope approach to estimate the static factor of safety so then the Critical Acceleration :math:`a_c` can be estimated. Finally with these parameters a Newmark displacement could be estimated using Randall W. Jibson correlation :cite:`Jibson1993`: - -.. math:: - log(Dn) = 1.460\:log(I_a)-6.642\:a_c+1.546\:\:\:\:\:\:\:\:\:\:\:\:\:(1) - -Where: - -:math:`Dn` = Newmark Displacement [cm]. - -:math:`I_a` = Areas Intensity [m/s]. - -:math:`a_c` = Critical Acceleration [g]. - -Also, - -.. math:: - a_c = (FS_{static}-1)\:sin(\beta)\:\:\:\:\:\:\:\:\:\:\:\:\:(2) - -Where: - -.. math:: - FS_{static} = \frac{2c}{\gamma\:z\:sin(\beta)} + cot(\beta)\:tan(\phi)\:\:\:\:\:\:\:\:\:\:\:\:\:(3) - -:math:`\beta` = Slope Angle [°]. - -:math:`FS_{static}` = Static Factor of Safety [-]. - -:math:`c` = Cohesion [kPa]. - -:math:`\gamma` = Unit Weight [kN/m³]. - -:math:`\phi` = Friction Angle [°]. - -:math:`I_a` = Intensity measure time-history motion specific. - -A Jupyter Notebook has been developed to code the implementation of the previous model in the area of interest: - -* | Get the Digital Elevation Model for the area of interest and perform the slope calculations: The `USGS portal `_ is used to download the LiDAR data in the area of interest. See Figure 2 to check the area of interest. - - .. figure:: ./images/case6_fig2.png - :align: center - :figclass: align-center - - Figure 2. Raster DTM - downloaded from the USGS GIS Service. - - | Subsequently the Slope map is calculated using the `Gdal `_ library. See Figure 3 to check the slope map in the area of interest, Seattle WA. - - .. figure:: ./images/case6_fig3.png - :align: center - :figclass: align-center - - Figure 3. Raster Slope - computed with GDAL. - -* | Get the Intensity Measurements: The intensity values (Areas Intensity in this example) are computed using motions from the M9 project which is a suite of synthetic ground motions for a range of possible magnitude 9 earthquake rupture scenarios on the Cascadia megathrust. - - .. figure:: ./images/case6_fig4.png - :align: center - :figclass: align-center - - Figure 4. Motions Grid - Legend indicates values of Arias Intensity [m/s]. - - | The value of areas intensity will be given by the nearest neighbor motion in the grid. A raster with intensity measures is created from the grids. Figure 5 is an example of how the Arias intensity would look like after applying the nearest neighbor method. Most of this work is done using the package `Rasterio `_. - - .. figure:: ./images/case6_fig5.png - :align: center - :figclass: align-center - - Figure 5. Interpolation using Nearest Neighbor for Arias Intensity [m/s] values. - -.. warning:: - Either Rasters and Motions should be self-consistent with a single spatial reference. - -* | Get the Soil Stregth Parameters: as it is for now, this measurement can be heuristically set by the user while the code is built. - -Finally, when all the inputs variables are estimated, we can implement the Randall W. Jibson model in the study area. Figure 4 displays the calculated Newmark Displacement for our area of interest Seattle. - -.. figure:: ./images/case6_fig6.png - :align: center - :figclass: align-center - - Figure 6. Randall W. Jibson calculated Newmark Displacement. - -Remarks -------- - -* A `Jupyter Notebook `_ ('hazardNewmark.ipynb') was coded to simulate the process that could be implemented to R2D for earthquake-induced landslides hazard so the user could then estimate damage and losses. Please if refering to this notebook, careful read the instructions in the readme first. Find this work in the CESG599 repository. When trying to run this notebook, you must have access to the M9 project in DesignSafe machines. -* Earthquake induced landslides prediction may be a difficult task to adress, but there are models out there that can be implemented to predict the hazard and subsequently, this hazard can be used to predict damage amd losses. The idea is in this section is to provide a procedure that could ve developed within the SiimCenter R2D tool to predict the hazard and subsequently, to predict damage amd losses. - -.. bibliography:: references.bib \ No newline at end of file diff --git a/test/_sources/case_7.rst.txt b/test/_sources/case_7.rst.txt deleted file mode 100644 index a900ee8..0000000 --- a/test/_sources/case_7.rst.txt +++ /dev/null @@ -1,273 +0,0 @@ -.. _case_7: - -R2D - Hurricane Damage -====================== - -Author: Daniel Acosta Reyes ---------------------------- - -Introduction ------------- - -Hurricane Maria, a Category 5 storm, struck Puerto Rico on September 20, 2017, claiming over 3000 lives. -This example assesses wind-induced damage for Vieques Island, Puerto Rico, using peak gust wind speed data from the National Institute of Standards and Technogology (NIST) and inventory of about 900 wood residential buildings. The inventory was created using a Python Notebook with BRAILS and formatted to a HAZUS-type damage assessment in R2D. The final R2D results include damage state and loss estimations. - - -Problem Description -------------------- - -Hurricanes are powerful tropical storms producing strong winds and heavy rains. The Saffir-Simpson Wind Scale, which categorizes hurricanes from 1 to 5 based on sustained wind speeds, helps estimate potential property damage :cite:`Saffir1973`. Hurricanes in categories 3 and above are deemed major due to their significant destructive potential. - -.. figure:: ./images/case7_DA1_saffirScale.png - :width: 500 - :align: center - :figclass: align-center - - **Fig. 1.** Saffir-Simpson Hurricane Scale. Soruce: TIGHE PA. -Hurricane Maria (Category 5) destroyed several homes and health facilities in Puerto Rico, including `the only healthcare center on Vieques Island `_, exacerbating the island's health crisis after decades-long military use. -A recent study by Guerra-Velasquez :cite:`Guerra2022` highlithed that infrastructure weaknesses made recovery more challenging and emphasize the need for increased resiliency and preparedness for future disasters. - -Solution Strategy ------------------ -The proposed solution gathers input data for a HAZUS-type damage and lossess analysis implemented in R2D. The dataset includes a baseline hazard, building inventory, and rulesets. - -#. **Baseline Hazard:** The hazard definition for this analysis is a raster file containing `Hurricane Maria Wind-Field Model for Puerto Rico `_ in miles per hour (mph). - - .. figure:: ./images/case7_DA2_raster.png - :width: 600 - :align: center - :figclass: align-center - - **Fig. 2.** Raster visualization of Hurricane Maria Wind-Field Model. - -#. **Building Inventory:** The building inventory for Puerto Rico is limited. However, using NHERI-SimCenter Building and Infrastructure Recognition using AI at Large-Scale `(BRAILS) `_ capabilities, it is possible to obtain building footprints and their associated attributes for a given location. Brails was implemented in a Jupyter Notebook to: - - * Obtain building footprints from open repositories (e.g., NSI) - * Fetch Google Street Views using Google API - * Import essential BRAILS modules such as NumberOfFloors, YearBuilt, and OccupancyClassifier - * Merge and create a Building Inventory Model (BIM) with required attributes for rulesets. - - A sample code to obtain bulding inventories is provided below. Make sure to ``!pip install brails`` before running.:: - - ''' Import modules ''' - from brails.workflow.FootprintHandler import FootprintHandler - from brails.workflow.NSIParser import NSIParser - from brails.workflow.ImHandler import ImageHandler - - ''' Building parameters ''' - # Define query location: - name_key = 'Vieques_2' - location = Lajas, Puerto Rico - # location = (lonmin, latmin, lonmax, latmax) # supports exten/bounding box format - - # Define footprint source: - # fpSource included in BRAILS are i) OpenStreetMaps, - # ii) Microsoft Global Building Footprints dataset, and iii) FEMA USA Structures. - # The keywords for these sources are osm, ms, and usastr, respectively. - footprint_source = 'osm' - - # Length units for the attributes (used when relevant): - lengthunit = 'm' # Options are 'm' or 'ft' - - # File where the building inventory will be stored: - outputfile = 'BuildingInventory.geojson'.format(name_key) - - ''' Initialize and Run BRAILS modules ''' - # Initialize FootprintHandler: - fpHandler = FootprintHandler() - - # Run FootprintHandler to get the footprints for the entered location: - fpHandler.fetch_footprint_data(location, fpSource=footprint_source, - outputFile='{0}_Footprints.geojson'.format(name_key), - lengthUnit=lengthunit) - footprints = fpHandler.footprints.copy() - - # Initialize NSIParser: - nsiParser = NSIParser() - - # Run NSIParser to merge the footprint data with NSI points: - nsiParser.GetNSIData(footprints, outfile=outputfile, lengthUnit=lengthunit) - - .. note:: - Complete Jupyter notebook can be accessed in DesignSafe - Data Depot at ``PRJ-4604/Losses_Damage_R2D`` under the name `InventoryBRAILS-notebook.ipynb`. - - - .. figure:: ./images/case7_DA3_footprints.png - :width: 600 - :align: center - :figclass: align-center - - **Fig. 3.** Sample of 932 Building Footprints in Vieques, Puerto Rico, and BRAILS NumberOfFloors module generator. - - -#. **HAZUS Rulesets:** `HAZUS `_ is a tool for risk modeling methodology that is implemented in R2D. To conduct damage and loss assessments, the software uses rulesets that parses building attributes such as occupancy, year built, roof height, and others. For this example, the HAZUS rulesets were obtained and modified from `E8 - Hurricane Wind Example `_ in R2D documentation. - - -SimCenter Tool Used -------------------- -This example uses the *Regional Resilience Determination Tool* (**R2D**) for wind damage and loss estimations in a residential area in Vieques, Puerto Rico, in order to assess the impact of wind forces and improve infrastructure resilience for future events. - -Example Application -------------------- -+-----------------+------------------------------------------------------------------------------------------+ -| Download files | `Download `_ | -+-----------------+------------------------------------------------------------------------------------------+ - -Download example **E17 - Hurricane Maria PR** files and open R2D. In the **File** tab, **Open** the "input.json" file within the example. - - .. figure:: ./images/case7_DA4_E1.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 4.** R2D inut data. - -.. note:: - You will notice that all the inputs are autopopulated. Make sure to follow the next steps to verify they are in the correct units and using the right file references. - - -#. In the **GI** panel, set the **Analysis Name**, **Units**, **Asset Layers**, and **Output Settings**. - - .. figure:: ./images/case7_DA5_E2.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 5.** R2D **GI** Input and Output Settings. - -#. For the **HAZ** Hazard Selection, select "Raster Defined Hazard" for an **Event Type**: "Hurricane". The **Intensity Measures of Raster** is "Peak Gust Wind Speed - PWS" in mph. - - .. figure:: ./images/case7_DA6_E3.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 6.** R2D **HAZ** Hazard Definition. - -#. In the **ASD** panel, make sure the **Regional Building Inventory** is set to "GIS File to AIM". Select the **Assets to Analyze** as intervals (e.g., 1-100) or go back to panel **VIZ** to manually select your assets by i) 'click' on the inventory layer; ii) push "Select" button (then drag selection in the map); iii) push "Add Assets" button. - - .. figure:: ./images/case7_DA7_E4.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 7 (a).** R2D **ASD** Assets Selection by Intervals. - - .. figure:: ./images/case7_DA8_E5.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 7 (b).** R2D **VIZ** Assets Selection in the Map. - -#. The **HTA** panel requires a "Site Specified" calculation - - .. figure:: ./images/case7_DA9_E6.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 8.** R2D **HTA** Building Mapping. - -#. This example does not need a Building Modeling. Therefore, **MOD** set to "none". - - .. figure:: ./images/case7_DA10_E7.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 9.** R2D **MOD** Building Model. - -#. The Building Analysis Method **ANA** will be "IMasEDP". - - .. figure:: ./images/case7_DA11_E8.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 10.** R2D **ANA** Building Analysis Method. - -#. **Damage & Loss Apllication** is found in the **DL** panel. Here you select "Pelicun3" with **Damage and Losss Method** "HAZUS MH MU". The Auto-population script referring to the specified ruleset is "auto_HU_PR.py" file. - - .. figure:: ./images/case7_DA12_E9.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 11.** R2D **DL** Damage & Loss Application. - -#. **RUN** the analysis. For the selection of 100 buildings, it should run in your local machine. For full inventory analysis, push **RUN at DesignSafe** button. - - .. warning:: - For complete inventory: run in DesignDafe, Stampede2 - 20 min|96 Skylake (SKX) cores | 2 nodes with 48 processors per node | 280 buildings per task - - .. note:: - **SP**, **UQ**, and **RV** panels are not used in this example. - -Results -------- - -Results will be retrieved from the **RUN** panel and manipulated in the visualization **VIZ** panel for mapping options. - - .. figure:: ./images/case7_DA13_E10.png - :width: 400 - :align: center - :figclass: align-center - - **Fig. 12.** R2D **RES** Regional Results Summary. - -The assessment gives two types of results: - -a) **MostLikelyCriticalDamageState**: The Damage State uses a scale from 0 to 4 that correspons to a qualitative damage description. - -.. list-table:: Damage State for Residential Buildings - :widths: 25 50 - :header-rows: 1 - - * - Damage State - - Qualitative Damage Description - * - 0 - - *No Damage or Very Minor Damage* - No visible damage from outside - * - 1 - - *Minor Damage* - One broken window and moderate roof cover loss - * - 2 - - *Moderate Damage* - Major roof cover damage - * - 3 - - *Sever Damage* - Major window damage and roof cover loss - * - 4 - - *Destruction* - Complete roof failure and/or failure of wall figremjobpane - -*Ref.:* FEMA HAZUS Hurricane Technical Manual `4.2.3 `_ - -b) **mean_RepairCost_loss_ratio**: The repair cost loss ratio is computed as a ratio of an estimated repair cost and wind-induced damage. The standard deviation of this variable is also provided as *std_RepairCost_loss_ratio*. This ratio goes on a scale from 0 to 1 and correlates with the *Damage State* (DS) variable. A typical breakdown corresponds to: - - * DS0 - Loss ratio 0% - * DS1 - Loss ratio 2% - * DS2 - Loss ratio 10% - * DS3 - Loss ratio 50% - * DS4 - Loss ratio 100% - -The results suggest that -of the 100 buildings assessed- most would suffer `Severe Damage` to `Destruction` given the inventory information. - -.. note:: - **Results Visualization**: R2D offers QGIS capabilities to visualize regional trends and produce mapping products. *Fig. 13* shows an example of a map product using the QGIS module to create *HeatMaps* of the **MostLikelyCriticalDamageState** variable and the spatial distribution of the **mean_RepairCost_loss_ratio** for different intervals. Then, using the "New Layout" option you can create maps with legends, title, and other elements. - See `QGIS Documentation `_ for more. - -.. figure:: ./images/case7_DA14_Results.png - :width: 700 - :align: center - :figclass: align-center - - **Fig. 13.** Mapping Visualization of Results Using QGIS in R2D. - -Remarks -------- - -* Hurricanes are increasingly happening with more intensity and force due to climate change. -* In locations such as Vieques, Puerto Rico, a comprehensive building inventory to assess huricane impact to infrastructure assets is limited. Assessing hazard exposure and consequences are key to increase resilience. -* R2D possess vast capabilities to adress this challenge, allowing researches to input hazard data and construct building inventories with BRAILS tools. -* This example provides strategies for creating building inventories in locations where data is scarce and implementing them in a format that could be used in R2D for regional analysis. - -References ----------- -.. bibliography:: references.bib diff --git a/test/_sources/index.rst.txt b/test/_sources/index.rst.txt deleted file mode 100644 index 36b1686..0000000 --- a/test/_sources/index.rst.txt +++ /dev/null @@ -1,27 +0,0 @@ -.. CESG 599 - NHERI - And Introduction to SimCenter ttols and DesignSafe Infrastructure. - -Welcome to CESG 599 - NHERI - An Introduction to SimCenter tool and DesignSafe Infrastructure! -============================================================================================== - -What is CESG599-NHERI ----------------------------------------- -This site provides a series of examples discussed during the CESG599-NHERI course. The course is designed to provide an introduction to the NHERI SimCenter tools and DesignSafe infrastructure. -The course is intended for graduate students and researchers in the field of civil engineering, but it is open to anyone interested in learning about the tools and resources available through the NHERI SimCenter and DesignSafe. - -.. toctree:: - :maxdepth: 2 - :caption: Contents - - case_0 - case_1 - case_2 - case_3 - case_4 - case_5 - case_6 - case_7 -.. Acknowledgements - -Acknowledgements ----------------- -This supporting materials were developed by CESG 599 students and Pedro Arduino in the Department of `Civil and Environmental Engineering `_ at the University of Washington under the auspices of the NHERI-SimCenter (`SimCenter `_). diff --git a/test/_static/CESG-599.gif b/test/_static/CESG-599.gif deleted file mode 100644 index d182ff6..0000000 Binary files a/test/_static/CESG-599.gif and /dev/null differ diff --git a/test/_static/_sphinx_javascript_frameworks_compat.js b/test/_static/_sphinx_javascript_frameworks_compat.js deleted file mode 100644 index 8141580..0000000 --- a/test/_static/_sphinx_javascript_frameworks_compat.js +++ /dev/null @@ -1,123 +0,0 @@ -/* 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/test/_static/basic.css b/test/_static/basic.css deleted file mode 100644 index 7577acb..0000000 --- a/test/_static/basic.css +++ /dev/null @@ -1,903 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -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, .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; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - 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; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - 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; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -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, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - 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 { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -: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 > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - 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 { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - 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; -} - -div.code-block-caption code { - background-color: transparent; -} - -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 { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/test/_static/css/badge_only.css b/test/_static/css/badge_only.css deleted file mode 100644 index c718cee..0000000 --- a/test/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.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/test/_static/css/fonts/Roboto-Slab-Bold.woff b/test/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb6000..0000000 Binary files a/test/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/test/_static/css/fonts/Roboto-Slab-Bold.woff2 b/test/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e23..0000000 Binary files a/test/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/test/_static/css/fonts/Roboto-Slab-Regular.woff b/test/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63..0000000 Binary files a/test/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/test/_static/css/fonts/Roboto-Slab-Regular.woff2 b/test/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5..0000000 Binary files a/test/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/test/_static/css/fonts/fontawesome-webfont.eot b/test/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca..0000000 Binary files a/test/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/test/_static/css/fonts/fontawesome-webfont.svg b/test/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845..0000000 --- a/test/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/_static/css/fonts/fontawesome-webfont.ttf b/test/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2..0000000 Binary files a/test/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/test/_static/css/fonts/fontawesome-webfont.woff b/test/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a..0000000 Binary files a/test/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/test/_static/css/fonts/fontawesome-webfont.woff2 b/test/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc6..0000000 Binary files a/test/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/test/_static/css/fonts/lato-bold-italic.woff b/test/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b..0000000 Binary files a/test/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/test/_static/css/fonts/lato-bold-italic.woff2 b/test/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d80..0000000 Binary files a/test/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/test/_static/css/fonts/lato-bold.woff b/test/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51..0000000 Binary files a/test/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/test/_static/css/fonts/lato-bold.woff2 b/test/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb19504..0000000 Binary files a/test/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/test/_static/css/fonts/lato-normal-italic.woff b/test/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc..0000000 Binary files a/test/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/test/_static/css/fonts/lato-normal-italic.woff2 b/test/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37..0000000 Binary files a/test/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/test/_static/css/fonts/lato-normal.woff b/test/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307f..0000000 Binary files a/test/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/test/_static/css/fonts/lato-normal.woff2 b/test/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf9843..0000000 Binary files a/test/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/test/_static/css/theme.css b/test/_static/css/theme.css deleted file mode 100644 index c03c88f..0000000 --- a/test/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.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/test/_static/doctools.js b/test/_static/doctools.js deleted file mode 100644 index d06a71d..0000000 --- a/test/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"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); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - 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: (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 - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - 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 = "")); - } - }; - - 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: () => { - // 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(); - } - 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 -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/test/_static/documentation_options.js b/test/_static/documentation_options.js deleted file mode 100644 index 995f333..0000000 --- a/test/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '1.0.0', - 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/test/_static/file.png b/test/_static/file.png deleted file mode 100644 index a858a41..0000000 Binary files a/test/_static/file.png and /dev/null differ diff --git a/test/_static/images/CESG-599.gif b/test/_static/images/CESG-599.gif deleted file mode 100644 index d182ff6..0000000 Binary files a/test/_static/images/CESG-599.gif and /dev/null differ diff --git a/test/_static/images/SimCenter_logo.png b/test/_static/images/SimCenter_logo.png deleted file mode 100644 index 3900bf5..0000000 Binary files a/test/_static/images/SimCenter_logo.png and /dev/null differ diff --git a/test/_static/jquery.js b/test/_static/jquery.js deleted file mode 100644 index c4c6022..0000000 --- a/test/_static/jquery.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.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(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/test/_static/js/html5shiv.min.js b/test/_static/js/html5shiv.min.js deleted file mode 100644 index cd1c674..0000000 --- a/test/_static/js/html5shiv.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** -* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/test/_static/js/theme.js b/test/_static/js/theme.js deleted file mode 100644 index 1fddb6e..0000000 --- a/test/_static/js/theme.js +++ /dev/null @@ -1 +0,0 @@ -!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - diff --git a/test/_static/minus.png b/test/_static/minus.png deleted file mode 100644 index d96755f..0000000 Binary files a/test/_static/minus.png and /dev/null differ diff --git a/test/_static/plus.png b/test/_static/plus.png deleted file mode 100644 index 7107cec..0000000 Binary files a/test/_static/plus.png and /dev/null differ diff --git a/test/_static/pygments.css b/test/_static/pygments.css deleted file mode 100644 index 08bec68..0000000 --- a/test/_static/pygments.css +++ /dev/null @@ -1,74 +0,0 @@ -pre { line-height: 125%; } -td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f8f8f8; } -.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #008000; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #9C6500 } /* Comment.Preproc */ -.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #E40000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #008400 } /* Generic.Inserted */ -.highlight .go { color: #717171 } /* Generic.Output */ -.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #008000 } /* Keyword.Pseudo */ -.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #B00040 } /* Keyword.Type */ -.highlight .m { color: #666666 } /* Literal.Number */ -.highlight .s { color: #BA2121 } /* Literal.String */ -.highlight .na { color: #687822 } /* Name.Attribute */ -.highlight .nb { color: #008000 } /* Name.Builtin */ -.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ -.highlight .no { color: #880000 } /* Name.Constant */ -.highlight .nd { color: #AA22FF } /* Name.Decorator */ -.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #0000FF } /* Name.Function */ -.highlight .nl { color: #767600 } /* Name.Label */ -.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #19177C } /* Name.Variable */ -.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #666666 } /* Literal.Number.Bin */ -.highlight .mf { color: #666666 } /* Literal.Number.Float */ -.highlight .mh { color: #666666 } /* Literal.Number.Hex */ -.highlight .mi { color: #666666 } /* Literal.Number.Integer */ -.highlight .mo { color: #666666 } /* Literal.Number.Oct */ -.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ -.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ -.highlight .sc { color: #BA2121 } /* Literal.String.Char */ -.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ -.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ -.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ -.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ -.highlight .sx { color: #008000 } /* Literal.String.Other */ -.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ -.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ -.highlight .ss { color: #19177C } /* Literal.String.Symbol */ -.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #0000FF } /* Name.Function.Magic */ -.highlight .vc { color: #19177C } /* Name.Variable.Class */ -.highlight .vg { color: #19177C } /* Name.Variable.Global */ -.highlight .vi { color: #19177C } /* Name.Variable.Instance */ -.highlight .vm { color: #19177C } /* Name.Variable.Magic */ -.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/test/_static/searchtools.js b/test/_static/searchtools.js deleted file mode 100644 index 97d56a7..0000000 --- a/test/_static/searchtools.js +++ /dev/null @@ -1,566 +0,0 @@ -/* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -/** - * Simple result scoring code. - */ -if (typeof Scorer === "undefined") { - var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [docname, title, anchor, descr, score, filename] - // and returns the new score. - /* - score: result => { - const [docname, title, anchor, descr, score, filename] = result - return score - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: { - 0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5, // used to be unimportantResults - }, - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - partialTitle: 7, - // query found in terms - term: 5, - partialTerm: 2, - }; -} - -const _removeChildren = (element) => { - while (element && element.lastChild) element.removeChild(element.lastChild); -}; - -/** - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping - */ -const _escapeRegExp = (string) => - string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string - -const _displayItem = (item, searchTerms) => { - const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; - const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; - const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; - const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; - - const [docName, title, anchor, descr, score, _filename] = item; - - let listItem = document.createElement("li"); - let requestUrl; - let linkUrl; - if (docBuilder === "dirhtml") { - // dirhtml builder - let dirname = docName + "/"; - if (dirname.match(/\/index\/$/)) - dirname = dirname.substring(0, dirname.length - 6); - else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; - linkUrl = requestUrl; - } else { - // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; - linkUrl = docName + docLinkSuffix; - } - let linkEl = listItem.appendChild(document.createElement("a")); - linkEl.href = linkUrl + anchor; - linkEl.dataset.score = score; - linkEl.innerHTML = title; - if (descr) - listItem.appendChild(document.createElement("span")).innerHTML = - " (" + descr + ")"; - else if (showSearchSummary) - fetch(requestUrl) - .then((responseData) => responseData.text()) - .then((data) => { - if (data) - listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) - ); - }); - Search.output.appendChild(listItem); -}; -const _finishSearch = (resultCount) => { - Search.stopPulse(); - Search.title.innerText = _("Search Results"); - if (!resultCount) - Search.status.innerText = Documentation.gettext( - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." - ); - else - Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); -}; -const _displayNextItem = ( - results, - resultCount, - searchTerms -) => { - // results left, load the summary and display it - // this is intended to be dynamic (don't sub resultsCount) - if (results.length) { - _displayItem(results.pop(), searchTerms); - setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), - 5 - ); - } - // search finished, update title and status message - else _finishSearch(resultCount); -}; - -/** - * Default splitQuery function. Can be overridden in ``sphinx.search`` with a - * custom function per language. - * - * The regular expression works by splitting the string on consecutive characters - * that are not Unicode letters, numbers, underscores, or emoji characters. - * This is the same as ``\W+`` in Python, preserving the surrogate pair area. - */ -if (typeof splitQuery === "undefined") { - var splitQuery = (query) => query - .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) - .filter(term => term) // remove remaining empty strings -} - -/** - * Search Module - */ -const Search = { - _index: null, - _queued_query: null, - _pulse_status: -1, - - htmlToText: (htmlString) => { - const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); - const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; - console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." - ); - return ""; - }, - - init: () => { - const query = new URLSearchParams(window.location.search).get("q"); - document - .querySelectorAll('input[name="q"]') - .forEach((el) => (el.value = query)); - if (query) Search.performSearch(query); - }, - - loadIndex: (url) => - (document.body.appendChild(document.createElement("script")).src = url), - - setIndex: (index) => { - Search._index = index; - if (Search._queued_query !== null) { - const query = Search._queued_query; - Search._queued_query = null; - Search.query(query); - } - }, - - hasIndex: () => Search._index !== null, - - deferQuery: (query) => (Search._queued_query = query), - - stopPulse: () => (Search._pulse_status = -1), - - startPulse: () => { - if (Search._pulse_status >= 0) return; - - const pulse = () => { - Search._pulse_status = (Search._pulse_status + 1) % 4; - Search.dots.innerText = ".".repeat(Search._pulse_status); - if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); - }; - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch: (query) => { - // create the required interface elements - const searchText = document.createElement("h2"); - searchText.textContent = _("Searching"); - const searchSummary = document.createElement("p"); - searchSummary.classList.add("search-summary"); - searchSummary.innerText = ""; - const searchList = document.createElement("ul"); - searchList.classList.add("search"); - - const out = document.getElementById("search-results"); - Search.title = out.appendChild(searchText); - Search.dots = Search.title.appendChild(document.createElement("span")); - Search.status = out.appendChild(searchSummary); - Search.output = out.appendChild(searchList); - - const searchProgress = document.getElementById("search-progress"); - // Some themes don't use the search progress node - if (searchProgress) { - searchProgress.innerText = _("Preparing search..."); - } - Search.startPulse(); - - // index already loaded, the browser was quick! - if (Search.hasIndex()) Search.query(query); - else Search.deferQuery(query); - }, - - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - - // stem the search terms and add them to the correct list - const stemmer = new Stemmer(); - const searchTerms = new Set(); - const excludedTerms = new Set(); - const highlightTerms = new Set(); - const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); - splitQuery(query.trim()).forEach((queryTerm) => { - const queryTermLower = queryTerm.toLowerCase(); - - // maybe skip this "word" - // stopwords array is from language_data.js - if ( - stopwords.indexOf(queryTermLower) !== -1 || - queryTerm.match(/^\d+$/) - ) - return; - - // stem the word - let word = stemmer.stemWord(queryTermLower); - // select the correct list - if (word[0] === "-") excludedTerms.add(word.substr(1)); - else { - searchTerms.add(word); - highlightTerms.add(queryTermLower); - } - }); - - if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js - localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) - } - - // console.debug("SEARCH: searching for:"); - // console.info("required: ", [...searchTerms]); - // console.info("excluded: ", [...excludedTerms]); - - // array of [docname, title, anchor, descr, score, filename] - let results = []; - _removeChildren(document.getElementById("search-progress")); - - const queryLower = query.toLowerCase(); - for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { - for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ - docNames[file], - titles[file] !== title ? `${titles[file]} > ${title}` : title, - id !== null ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // search for explicit entries in index directives - for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ - docNames[file], - titles[file], - id ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // lookup as object - objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) - ); - - // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); - - // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); - - // remove duplicate search results - // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept - let seen = new Set(); - results = results.reverse().reduce((acc, result) => { - let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); - if (!seen.has(resultStr)) { - acc.push(result); - seen.add(resultStr); - } - return acc; - }, []); - - results = results.reverse(); - - // for debugging - //Search.lastresults = results.slice(); // a copy - // console.info("search results:", Search.lastresults); - - // print the results - _displayNextItem(results, results.length, searchTerms); - }, - - /** - * search for object names - */ - performObjectSearch: (object, objectTerms) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const objects = Search._index.objects; - const objNames = Search._index.objnames; - const titles = Search._index.titles; - - const results = []; - - const objectSearchCallback = (prefix, match) => { - const name = match[4] - const fullname = (prefix ? prefix + "." : "") + name; - const fullnameLower = fullname.toLowerCase(); - if (fullnameLower.indexOf(object) < 0) return; - - let score = 0; - const parts = fullnameLower.split("."); - - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullnameLower === object || parts.slice(-1)[0] === object) - score += Scorer.objNameMatch; - else if (parts.slice(-1)[0].indexOf(object) > -1) - score += Scorer.objPartialMatch; // matches in last name - - const objName = objNames[match[1]][2]; - const title = titles[match[0]]; - - // If more than one term searched for, we require other words to be - // found in the name/title/description - const otherTerms = new Set(objectTerms); - otherTerms.delete(object); - if (otherTerms.size > 0) { - const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); - if ( - [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) - ) - return; - } - - let anchor = match[3]; - if (anchor === "") anchor = fullname; - else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; - - const descr = objName + _(", in ") + title; - - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) - score += Scorer.objPrio[match[2]]; - else score += Scorer.objPrioDefault; - - results.push([ - docNames[match[0]], - fullname, - "#" + anchor, - descr, - score, - filenames[match[0]], - ]); - }; - Object.keys(objects).forEach((prefix) => - objects[prefix].forEach((array) => - objectSearchCallback(prefix, array) - ) - ); - return results; - }, - - /** - * search for full-text terms in the index - */ - performTermsSearch: (searchTerms, excludedTerms) => { - // prepare search - const terms = Search._index.terms; - const titleTerms = Search._index.titleterms; - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - - const scoreMap = new Map(); - const fileMap = new Map(); - - // perform the search on the required terms - searchTerms.forEach((word) => { - const files = []; - const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, - ]; - // add support for partial matches - if (word.length > 2) { - const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); - } - - // no match but word was a required one - if (arr.every((record) => record.files === undefined)) return; - - // found search word in contents - arr.forEach((record) => { - if (record.files === undefined) return; - - let recordFiles = record.files; - if (recordFiles.length === undefined) recordFiles = [recordFiles]; - files.push(...recordFiles); - - // set score for the word in each file - recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; - }); - }); - - // create the mapping - files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); - }); - }); - - // now check if the files don't contain excluded terms - const results = []; - for (const [file, wordList] of fileMap) { - // check if all requirements are matched - - // as search terms with length < 3 are discarded - const filteredTermCount = [...searchTerms].filter( - (term) => term.length > 2 - ).length; - if ( - wordList.length !== searchTerms.size && - wordList.length !== filteredTermCount - ) - continue; - - // ensure that none of the excluded terms is in the search result - if ( - [...excludedTerms].some( - (term) => - terms[term] === file || - titleTerms[term] === file || - (terms[term] || []).includes(file) || - (titleTerms[term] || []).includes(file) - ) - ) - break; - - // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); - // add result to the result list - results.push([ - docNames[file], - titles[file], - "", - null, - score, - filenames[file], - ]); - } - return results; - }, - - /** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words. - */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); - if (text === "") return null; - - const textLower = text.toLowerCase(); - const actualStartPosition = [...keywords] - .map((k) => textLower.indexOf(k.toLowerCase())) - .filter((i) => i > -1) - .slice(-1)[0]; - const startWithContext = Math.max(actualStartPosition - 120, 0); - - const top = startWithContext === 0 ? "" : "..."; - const tail = startWithContext + 240 < text.length ? "..." : ""; - - let summary = document.createElement("p"); - summary.classList.add("context"); - summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; - - return summary; - }, -}; - -_ready(Search.init); diff --git a/test/_static/sphinx_highlight.js b/test/_static/sphinx_highlight.js deleted file mode 100644 index aae669d..0000000 --- a/test/_static/sphinx_highlight.js +++ /dev/null @@ -1,144 +0,0 @@ -/* Highlighting utilities for Sphinx HTML documentation. */ -"use strict"; - -const SPHINX_HIGHLIGHT_ENABLED = true - -/** - * highlight a given string on a node by wrapping it in - * span elements with the given class name. - */ -const _highlight = (node, addItems, text, className) => { - if (node.nodeType === Node.TEXT_NODE) { - const val = node.nodeValue; - const parent = node.parentNode; - const pos = val.toLowerCase().indexOf(text); - if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") - ) { - let span; - - const closestNode = parent.closest("body, svg, foreignObject"); - const isInSVG = closestNode && closestNode.matches("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.classList.add(className); - } - - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - parent.insertBefore( - span, - parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling - ) - ); - node.nodeValue = val.substr(0, pos); - - if (isInSVG) { - const rect = document.createElementNS( - "http://www.w3.org/2000/svg", - "rect" - ); - const bbox = parent.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: parent, target: rect }); - } - } - } else if (node.matches && !node.matches("button, select, textarea")) { - node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); - } -}; -const _highlightText = (thisNode, text, className) => { - let addItems = []; - _highlight(thisNode, addItems, text, className); - addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) - ); -}; - -/** - * Small JavaScript module for the documentation. - */ -const SphinxHighlight = { - - /** - * highlight the search words provided in localstorage in the text - */ - highlightSearchWords: () => { - if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight - - // get and clear terms from localstorage - const url = new URL(window.location); - const highlight = - localStorage.getItem("sphinx_highlight_terms") - || url.searchParams.get("highlight") - || ""; - localStorage.removeItem("sphinx_highlight_terms") - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); - - // get individual terms from highlight string - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); - if (terms.length === 0) return; // nothing to do - - // There should never be more than one element matching "div.body" - const divBody = document.querySelectorAll("div.body"); - const body = divBody.length ? divBody[0] : document.querySelector("body"); - window.setTimeout(() => { - terms.forEach((term) => _highlightText(body, term, "highlighted")); - }, 10); - - const searchBox = document.getElementById("searchbox"); - if (searchBox === null) return; - searchBox.appendChild( - document - .createRange() - .createContextualFragment( - '" - ) - ); - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords: () => { - document - .querySelectorAll("#searchbox .highlight-link") - .forEach((el) => el.remove()); - document - .querySelectorAll("span.highlighted") - .forEach((el) => el.classList.remove("highlighted")); - localStorage.removeItem("sphinx_highlight_terms") - }, - - initEscapeListener: () => { - // only install a listener if it is really needed - if (!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.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; - if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { - SphinxHighlight.hideSearchWords(); - event.preventDefault(); - } - }); - }, -}; - -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); diff --git a/test/case_0.html b/test/case_0.html deleted file mode 100644 index d679058..0000000 --- a/test/case_0.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - CESG599 - NHERI — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-_images/case0-1.png -
-
-
-

CESG599 - NHERI

-
-

An introduction to NHERI Simcenter tools and DesignSafe Resources

-
-
-

Authors:

-

Kendra Mutch, Erick Martinez, Jose Barreto, Chungen Tai, Morgan Sanger, Luis Guerrero, Daniel Acosta, and Pedro Arduino

-
-
-

Course Description

-

This course explores the fundamentals of SimCenter tools and the DesignSafe infrastructure. -The course employs a self-directed approach, where students are guided through a structured framework designed for this format. -Over 10 weeks, the course explores the core concepts of SimCenter and DesignSafe, and examines four to five SimCenter tools, focusing -on one tool every two weeks. Students are tasked with mastering the essentials of each tool and delivering presentations to the class. -Additionally, they work through one or more practical examples for each tool, presenting their findings to their peers. Constructive feedback for -each tool is an integral part of the learning experience. DesignSafe and SimCenter personnel are -invited to participate through Zoom based on availability. At the end of the course, a final project, -with a topic of choice for each student, or group of students, is required, providing an opportunity for -deeper exploration and application of the learned concepts. A final course project report is delivered through a shpinx document stored in a GitHub repository.

-

SimCenter provides next-generation computational modeling and simulation software tools, user support, -and educational materials to the natural hazards engineering research community with the goal of advancing -the user’s capability to simulate the impact of natural hazards on structures, lifelines, and communities.

-

DesignSafe is a comprehensive cyberinfrastructure that provides cloud-based tools to manage, analyze, understand, -and publish critical data for research to understand the impacts of natural hazards. The capabilities within -the DesignSafe infrastructure are available at no-cost to all researchers working in natural hazards.

-
-
-

Learning Objectives

-
    -
  1. Develop a familiarity with Simcenter tools and DesignSafe cyberinfrastructure

  2. -
  3. Develop a familiarity with the breath of SimCenter tools.

  4. -
  5. Develop a suitable background for using HPC resources.

  6. -
  7. Introduce/revise concepts related to structural and geotechnical engineering including UQ concepts, FEM, PB, etc.

  8. -
  9. Provide a working knowledge for selecting, using, and interpreting tools for Structural and geotechnical design and analysis.

  10. -
  11. Introduce markup language to develop easy-to-read, easy-to-write documents in the sphinx python package.

  12. -
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/test/case_1.html b/test/case_1.html deleted file mode 100644 index 07fcc07..0000000 --- a/test/case_1.html +++ /dev/null @@ -1,490 +0,0 @@ - - - - - - - QuoFEM - Settlements — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

QuoFEM - Settlements

-
-

Author: Kendra Mutch

-
-
-

Introduction

-

The goal of this project is to quantify settlement, parameters impacting settlement, and observe how uncertainty in input parameters impacts the ultimate settlement of a cohesive soil. These calculations are performed through use of the SimCenter QuoFEM tool. For more details on settlement calculations, the user is encounged to read Holtz and Kovacs 2011.

-
-
-

Project Description

-

Soil settlement is characterized by a change in the effective stress of soil, often driven by either a change in the ground water table, placement of fill/surchage load, or dissipation of excess pore water pressure. While a minimal amount of settlement is expected and may not prove hazardous, larger magnitudes of settlment, or differential settlement, can be detrimental to the integretity and functionality of a super-structure. Settlement of cohesive soil is especially hazardous, as the small pore space in fine grained soil restricts water from draining quickly through the voids. As a result, cohesive soil may continue to settle for a long period of time following the placement of a structure. Granular soil exhibits a significantly lower settlement hazard, as water tends to drain rapidly through the large pore space in the soil, meaning, much of the settlement of coarse grained soil is complete before construction ends. This project focuses on the hazard pertaining to the settlement of cohesive soil.

-

When computing settlement, it is important to consider uncertainty and not accept a single predicted value as completely true to reality, as in-situ testing, lab testing, and various models used to determine soil paramters all contain uncertainty. Additionally, soil may differ vastly throughout a project site, with only a few samples taken to represent the whole site. This project uses the program QuoFEM to integrate standard settlement equations with uncertainty quantifiction tools.

-

The example problems in this project will utilize the scenario, soil profile, and paramters depicted below (modified from S. Kramer CESG-562 class notes):

-

Scenario: -A site adjacent to San Francisco Bay is underlain by San Francisco Bay Mud. The site is to be readied for development by placement of 5ft of fill material, and the ultimamte settlement of the fill is of interest. The site conditions, shown below, indicate the presence of a crust of desiccated Bay Mud with thickness, h1, which is not expected to consolidate noticeably. The clay is underlain by a dense gravel, which will also not consolidate.

-
-_images/case1_settlementProblem.png -
- - ----- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Soil Profile Parameters

Parameter

Mean Value

Coefficient of Variation (%)

h1

3 ft

5

h2

25 ft

5

Cc

0.75

20

eo

1.54

7

Cr

0.05

20

change in pre-consol pres.

200 psf

50

k

10E-6 (cm/sec)

200

unit weight of fill

130 pcf

7

height of fill

5 ft

2

-
-
-

Solution Strategy

-

The magnitude of settlement can be predicted using conventional consolidation theory, as outlined in the equations below:

-
    -
  1. If soil is normally consolidated, σp’ = σo’:

    -
    -
    -\[H_{ult} = \frac{C_c}{1+e_o}log(\frac{σ_f'}{σ_o'})H_o\]
    -
    -
  2. -
  3. If soil is over consolidated, σp’ > σo’ and σo’ + Δσ’ < or = σp’:

    -
    -
    -\[H_{ult} = \frac{C_r}{1+e_o}log(\frac{σ_f'}{σ_o'})H_o\]
    -
    -
  4. -
  5. If soil is over consolidated, σp’ > σo’ and σo’ + Δσ’ > σp’:

    -
    -
    -\[H_{ult} = \frac{C_r}{1+e_o}log(\frac{σ_p'}{σ_o'})H_o + \frac{C_c}{1+e_o}log(\frac{σ_f'}{σ_p'})H_o\]
    -
    -
  6. -
-

Where:

-
-
    -
  • \(H_{ult}\) = Ultimate Settlement

  • -
  • \(C_c\) = Commpression Index

  • -
  • \(e_o\) = Void Ratio

  • -
  • \(C_r\) = Recompression Index

  • -
  • \(σ_f'\) = Final Vertical Effective Stress

  • -
  • \(σ_o'\) = Initial Vertical Effective Stress

  • -
  • \(σ_p'\) = Preconsolidation Pressure

  • -
  • \(Δσ'\) = Change in Vertical Effective Stress

  • -
  • \(H_o\) = Thickness of Compressible Layer

  • -
-
-

For an accurate evaluation of ultimate settlement, it is recommended to subdivide the compressible layer into sublayers. These equations should be applied to each sublayer using corresponding estimations of initial and final effective stress, as well as material properties, particularly preconsolidation pressure.

-

Though these equations provide a starting point for predicting settlement, they don’t capture uncertainty. To account for uncertainty, methods such as Forward Propagation, Sensitivity Analysis, and Parameter Calibration integrate standard equations with uncertainty quantification.

-

Forward Propagation allows us to determine how uncertainty in soil parameters translates to uncertainty in ultimate settlement. This analysis method enables us to understand the effect of compounding uncertainty.

-

Sensitivity Analysis allows us to determine which input parameters impact the resulting ultimate settlement most. Sensitivity Analysis may be performed in both Python and QuoFEM. A Python script performing Sensitivity Analysis may be found here. This script produces a tornado diagram (as depicted below), a visual representation of the change in magnitude of settlement resulting from the application of uncertainty to a single variable at a time. These results indicate that, for the given example and material properties, the compression index (Cc), unit weight of the fill (gamma_fill), and preconsolidation pressure are the most relevant parameters.

-

Finally, Parameter Calibration, allows one to determine an unknown soil paramter, given a value (or set of values) of ultimate settlement. Two examples of parameter calibartion are discussed in the Example Applications section. One example utilizes Bayesian Calibration, while another example utilizes Deterministic Calibration.

-
-_images/case1_TornadoDiagram.png -
-

Fig. 2. Tornado diagram.

-
-
-
-
-

SimCenter Tool Used

-

In this project we use the SimCenter tool QuoFEM. QouFEM allows the integration of the finite element method and hazard compuatations with uncertainty quantification tools. Although the tool was originally developed for finite element applications, it can also be utilized with other solution methods. In this project, the settlement calculations are implemented in a simple Python script that propagates settlement evaluations through sublayers to determine the ultimate surface settlement. This python script can be easily uploaded in QuoFEM instead of specifying a FEM application.

-

There are five different tabs in QuoFEM; four input tabs and one results tab. The four input tabs are outlined below:

-
-
    -
  • UQ tab - The UQ tab allows one to select the analysis method (Forward Propagation, Bayesian -Callibration, Sensitivity Analysis, etc.). Additionally, one can specify a statistics model and the number -of samples to run.

  • -
  • FEM tab - The FEM is where a python script is input, and a finite element method (such as Openseas) may -be selected.

  • -
  • RV tab - The RV tab allows you define random variables and apply desired uncertainty and statistic distributions -(normal distribution, uniform distribution etc.) to each variable.

  • -
  • EDP tab - The EDP tab allows one to define quantities of interest to compute (i.e., ultimate settlement).

  • -
-
-_images/case1_InputResultsTabs.png -
-

Fig. 3. QuoFEM interface.

-
-
-
-

After entering parameters in the input tabs, one may choose run the project on their machine by simply clicking Run or to run the project in the cloud by selecting Run at Design Safe. When choosing to run a project in the cloud, one must login to Design Safe and specify a maximum run time. To ensure that the project does not expire while waiting in the queue, select a run time of at least 10 hours.

-

The results tab contains both a Summary page and a Data Values page. The Summary page contains a brief -outline of the values computed. The Data Values page contains a more comprehensive set of results and figures. There are various features within the Data Values page of the Results tab which may aid in analysis. Below is information about navigating the Data Values page to extract desired information:

-
-
    -
  • To View a Scatterplot of a Parameter vs. Run Number - left click once on any column.

  • -
  • To View a Cumulative Frequency Distribution for a Variable - First left click once on the column for the -variable that you want to view a cumulative frequency distribution for. Then right click once on the same -column.

  • -
  • To View a Histogram for a Variable - After following the steps to display a cumulative frequency -distribution, left click on the same column once more to display the histogram.

  • -
  • To View a Scatterplot of One Variable vs. Another Variable - Right click once on one of the variables. -This defines which variable will be on the x-axis. Then, left click once on the variable which you want -plotted on the y-axis.

  • -
  • To Export the Data Table - Select the Save Table icon above the data, and choose a location for saving -the table as a .csv file.

  • -
-
-
-
-

Example Applications

-

The following sections utilize the settlement scenario to demonstrate the various capabilities of QuoFEM in incorporating uncertainty quantification into the analysis. These capabilities include the propagation of uncertainty, deterministic and Bayesian calibration, as well as sensitivity analysis.

-
-

Example One - Forward Propagation

-
    -
  1. Open QuoFEM. By default, the UQ method is Forward Propagation and the UQ Engine is Dakota. In this example, we will use these defaults. Specify a Sample Number of 200 and a Seed Number of 949. Ensure the Parellel Execution and the Save Working dirs boxes are checked.

  2. -
  3. Select the FEM tab. From the drop down menu, select Python. Navigate to the location of the Input Script and the Parameters Script. Both Python scripts are available at the below links:

    -
    -
      -
    • settlement.py

    • -
    • params.py

    • -
    -
    -
  4. -
  5. Select the RV tab. Enter the random variables (listed in the table in the problem description). Select Normal Distribution for each random variable, and enter the mean and standard deviation. The standard deviation must be calculated for each variable from the given coefficient of variation. The below table shows values which should be input for each random variable.

    -
    -
    - ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Random Variables

    Variable Name

    Distribution

    Mean Value

    Standard Deviation

    h1

    Normal Distribution

    3

    0.15

    h2

    Normal Distribution

    25

    1.25

    Cc

    Normal Distribution

    0.75

    0.15

    Cr

    Normal Distribution

    0.05

    0.01

    eo

    Normal Distribution

    1.54

    0.1078

    Δσ’

    Normal Distribution

    200

    100

    k

    Normal Distribution

    0.000001

    0.000002

    unit weight of fill

    Normal Distribution

    130

    9.1

    height of fill

    Normal Distribution

    5

    0.1

    -
    -
  6. -
  7. In the EDP tab, specify the variable of interest as Settlement and assign it a Length of 1.

  8. -
  9. Run the example either on your machine or in the cloud. For running in the cloud, see the SimCenter Tool Used section for additional details.

  10. -
-

The results for Forward Propagation are outlined below:

-
-_images/case1_ForwardPropagationResults.png -
-

Fig. 4. Forward propagation results.

-
-
-

The results indicate that, given the mean parameters and standard deviation, a total settlement of 1.31 inches is expected with a standard deviation of 0.88 inches (CoV = 0.66). The corresponding histogram, based on Latin Hypercube Sampling (LHS), along with the associated normal distribution curve, is shown in the figure below:

-
-_images/case1_propagation_Normalized_Settl_histogram.png -
-

Fig. 5. QuoFEM propagation histogram.

-
-
-
-
-

Example Two - Sensitivity Analysis

-
    -
  1. In the UQ tab, select Sensitivity Analysis as the UQ Method. From the UQ Engine drop down, select SimCenterUQ. In the Method drop down, select Monte Carlo. For the Number of samples, enter 500, and for the Seed Number, enter 106.

  2. -
  3. Select the FEM tab. From the FEM drop down, select Python. Locate the file path for the Input Script and the Paramters Script. Both Python scripts are available at the below links.

    -
    -
      -
    • Input Script.py

    • -
    • Parameters Script.py

    • -
    -
    -
  4. -
  5. In the RV tab, enter the same random variables as the Forward Propagation example.

  6. -
  7. In the EDP tab, use the same inputs as the Forward Propagation example.

  8. -
  9. Choose to run the example either on your machine in the cloud. For running in the cloud, see the SimCenter Tool Used section for additional details.

  10. -
-

The results for the Sensitivity Analysis in QuoFEM are outlined below. Uncertainty in preconsolidation pressure and compression index translate to the greatest uncertainty in the predicted settlement. These findings are consistent with the results shown in the tornado diagram.

-
-_images/case1_Sensitivity2.png -
-

Fig. 6. QuoFEM sensitivity results.

-
-
-
-_images/case1_Sensitivity.png -
-

Fig. 7. QuoFEM sensitivity results - most relevant parameters.

-
-
-
-
-

Example Three - Parameter Calibration

-

Two parameter calibration strategies available in QuoFEM are explored: i) Deterministic calibration and ii) Bayesian calibration. In both cases, parameters are identified to match assumed field settlement data at several locations, with an average total settlement of 0.88 inches.

-
-

Deterministic Calibration

-

Two deterministic calibration methods are used: i)NL2SOL and ii)OPT++GaussNewton).

-

When testing the two different deterministic calibration algorithms supported in QuoFEM, we found that they provided vastly different results. This indicates that there are multiple combinations of the compression index (Cc) and preconsolidation pressure that can be considered optimal. To further explore this issue, the figure below shows a settlement field for varying values of Cc and preconsolidation pressure. It is evident that the settlement field is nonlinear due to the logarithmic nature of the solution equation. Additionally, when examining points with constant settlement (e.g., 0.88 or 1.316 inches), the red lines indicate that multiple combinations of compression index (Cc) and preconsolidation pressure yield the same settlement with the black dots representing two solutions obtained using the two deterministic calibration methoods in QuoFEM. Clearly, for this scenario, deterministic calibration cannot identify a single optimal value, making Bayesian calibration necessary.

-
-_images/case1_SettlementField.png -
-

Fig. 8. Settlement field as a function of Cc and Precon pressure.

-
-
-
-
-

Bayesian Calibration

-

This is a classic scenario where Bayesian methods can be preferred instead of deterministic methods - Bayesian methods show that there is not just one best parameter value but several values are almost equally good. This issue frequently arises when we have many parameters to be calibrated with not much data. A single best parameter value is usually ?unidentifiable? in such cases

-
    -
  1. Open QuoFEM. In the UQ tab, change the UQ method to Bayesain Callibration and change the UQ Engine to UCSD-UQ. For the model, select Non-hierarchical. Enter a Sample number of 500 and Seed number of 85. For the Calibration Data File, navigate to data_2.txt. This text file may be downloaded at the below link:

    -
    -
      -
    • data_2.txt

    • -
    -
    -
  2. -
  3. In the FEM tab, navigate to the location of the Input Script and Parameter Script. The Bayesian Calibration Python scripts may be downloaded at the below links:

    -
    -
      -
    • Settlement_2.py

    • -
    • params.py

    • -
    -
    -
  4. -
  5. In the RV tab, enter the same random variables as the Forward Propagation example.

  6. -
  7. In the EDP tab, add two variables of interset. The first variable is settlement with a Length of 1, and the second variable is a dummy variable with a Length of 1.

  8. -
  9. Choose to run the example either on your machine in the cloud. For running in the cloud, see the SimCenter Tool Used section for additional details.

  10. -
-

The results for Bayesian Calibration are outlined below:

-
-_images/case1_BayesianResults1.png -
-
-_images/case1_BayesianResults2.png -
-

Fig. 9. QuoFEM Bayesian calibration results.

-
-
-

The figure shows Cc and Precon pressure are the most relevant parameters.

-

A more in-depth analysis using prior and posterior distributions reveals that the posterior distributions from the Bayesian calibration process result in more accurate and less uncertain settlement estimations. The figure below illustrates these distributions.

-
-_images/case1_calibration_PriorPost.png -
-

Fig. 10. Prior and posterior distributions from Bayesian calibration.

-
-
-
-
-
-
-

Remarks

-

By accounting for uncertainty in settlement, chances of highly underpredicting or overpredicting settlement are reduced.

-
-

[Hol2011] R. D. Holtz and W. D. Kovacs. An Introduction to Geotechnical Engineering. Pearson, 2011. ISBN 978-0137011322.

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/test/case_2.html b/test/case_2.html deleted file mode 100644 index a1323cd..0000000 --- a/test/case_2.html +++ /dev/null @@ -1,788 +0,0 @@ - - - - - - - EEUQ - Transfer Function — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

EEUQ - Transfer Function

-
-

Author: Erick Martinez

-
-
-

Introduction

-

This page introduces the fundamental concept of transfer functions and their application in site response analysis. -The project also examines the impact of uncertainty in input variables during this process, utilizing the SimCenter tool EE-UQ. -Special attention is given to soil amplification factors. For more detailed information on transfer functions, users are encouraged to read [Kra96].

-

A Jupyter Notebook for this example can be found within DesignSafe PRJ-4604.

-
-

Note

-

This example was prepared on a Mac system. Differences in the UI between Mac and other systems are possible, but should not affect the outcome.

-
-
-
-

Problem Description

-

A transfer function acts as a filter that can amplify or de-amplify an incoming wave from a medium to produce the output signal in another medium. To simplify the idea of a transfer function, a spring-mass system can be used. As a motion is applied on the mass connected to a spring; a responsive outgoing wave will then be propagated through the mass and the spring. This outgoing motion will be a composite factor of the stiffness and elastic damping forces found within the spring-mass system.

-
-

See also

-

For more information, visit the Free Vibrations of a Spring-Mass-Damper System.

-
-

This can be applied to earth systems in the form of ground motions. An example of this is an earthquake motion acting on a rock layer at a certain depth. This motion is then transferred through the soil profile and is reflected as a different motion at the surface. In order to determine the influence of a soil profile on the motion, three major components are required: thickness of layer (H), shear wave velocity (Vs), and damping ratio.

-

It is important to ensure that this difference in motion is accounted for. When a structure is constructed, it has a specific resonance. Understanding this resonance is important because if an earthquake motion has similar peaks in frequency, causing amplification of the motion, the structure could have a significant and potentially disastrous behavior. While the incoming motion at the rock might have a different natural resonance, the motion at the surface might match that of the structure. The design of earthquake resistant structures relies on the accurate determination of transfer functions in sites. An example of this is shown below - where a motion was amplified from 0.03g to 0.15g due to the presence of soft clay.

-
-_images/case2_Resonance_Building_Example_TF.png -
-

Fig. 1. Mexico City Earthquake Amplification.

-
-
-

As with any engineering properties, there will always be the presence of uncertainty. A layer might have differential thicknesses in certain regions, causing the height to be non-uniform. Shear wave velocity can change very quickly depending on depth and composition of the materials within the layer. Damping can also be affected by changes in stratigraphy and composition. To account for this, uncertainty must be incorporated into a transfer function analysis. This inclusion will aid in the accuracy and reliability of site response analyses.

-
-
-

Solution Strategy

-
-

Fourier Transform

-

In earth systems, this relationship between incoming and outgoing wave can be evaluated through mathematically converting an input motion, typically an acceleration-time history, to a Fourier series using the Fast Fourier Transform (FFT). In the Fourier space, the motion is then multiplied by the transfer function, resulting in the outgoing Fourier motion. This can then be converted back into various plots, such as acceleration-time history and spectral acceleration vs. period, that allow for analysis of the outgoing motion. An analysis of this ground motion can provide frequencies of interest where ground accelerations would be highest/lowest, which can aid in site response analysis and planning.

-
-_images/case2_TF_Rock_to_Soil1.png -
-

Fig. 2. Transfer Function from Rock to Soil.

-
-
-
-
-

Transfer Function Equation

-

To calculate a transfer function, the equation below can be used. In a single layer soil profile, it is assumed that the impedance contrast between layers is zero. Using a tool like EE-UQ can help provide the ratio between the input and output motion and provides the uncertainty in those motions and variables.

-
-_images/case2_TF_Equation.png -
-

Eqn. 1. Transfer Function Equation [Kramer, 1996]

-
-
-
-

Note

-

This equation changes based on the soil profile. Having multiple soil layers can lead to an impedance contrast. The equation also changes if the damping ratio is assumed to be zero. Kramer (1996) provides more information for the different instances.

-
-
-
-

Example

-

A typical transfer function would look similar to the one provided below. In the figure below, there are various peaks of natural resonance for the transfer function, which is where the motion will have the greatest amplification/de-amplification.

-
-_images/case2_TF_Nat_Freqs.png -
-

Fig. 3. Transfer Function from Rock to Soil.

-
-
-
-
-
-

SimCenter Tool Used

-

To understand transfer functions, there are many tools available. One of these tools is the SimCenter Transfer Function Tool (TFT). This tool introduces users to transfer functions by providing the output motion at a site given the motion, thickness of layers, shear wave velocities, and damping ratio. TFT allows for easy analysis of amplification/de-amplification of ground motions based on specific sites.

-

The Earthquake Engineering with Uncertainty Quantification Application (EE-UQ) is a SimCenter research application that also allows for site response predictions due to earthquake loading. In addition to basic transfer function quantification, it allows for the analysis of uncertainty in the predictions based on the uncertainty found within the input model, motion, etc. This workflow application allows the user to run analyses in the background and provides a simple user interface that facilitates its use.

-
-
-

Example Application

-
-

Soil Profile

-

In this example, we will analyze the amplification/deamplification effects of a ground motion caused by its propagation through the soil layer. The 10 meter soil layer has a shear wave velocity (Vs) of 500 m/s and a damping ratio of 3%.

-
-_images/case2_CESG599_TF_image1.png -
-

Fig. 4. Soil Profile & Material Properties.

-
-
-
-
-

Uncertainty

-

Because of the presence of uncertainty in the soil properties, the transfer function will include uncertainty in its effects. Normal distribution values for each variable (H, Vs, damping) will be provided. This uncertainty will be quantified through multiple runs in EE-UQ and expressed as ratios of mean velocity and acceleration, along with standard deviation and skewness.

-

The following normal distribution figures represent the uncertainty within each variable.

-
-_images/case2_Combined_RV_1.png -
-

Fig. 5. Uncertainty in Each Variable (H, Vs, Damping).

-
-
-
-
-

Motion

-

An earthquake motion will be applied to a rock, located at the bottom of a one-dimensional soil profile. The motion is shown below as an acceleration time history as well as a Fourier amplitude spectra (FAS).

-
-_images/case2_Input_Motion_TF.png -
-

Fig. 6. Input Ground Motion.

-
-
-
-
-

Pre-Workflow Python Script

-

To complete a transfer function analysis in EE-UQ various Python files had to be generated. The following script calculates the transfer function of a soil layer and applies it to a given acceleration record.

-
-Click to expand the full Transfer Function Example code -
# ############################################################################################################
-# Title: Transfer Function Calculation
-# Description: This script calculates the transfer function of a soil layer and applies it to a given acceleration record.
-# Author: Pedro Arduino
-# UW Computational Geotechnical Group
-# Date: 2024
-# All Rights Reserved
-# ############################################################################################################
-
-# %%
-import numpy as np
-import json
-import matplotlib.pyplot as plt
-from numpy.fft import fft, ifft
-from scipy import integrate
-from respSpectra import resp_spectra
-
-class TFunctionClass:
-    def __init__(self, damping, H, Vs):
-        # Define the variables
-        self.m_freq = None
-        self.m_time = None
-        self.m_acc = None
-        self.m_absFft = None
-        self.m_absSoilTF = None
-        self.m_absIFft = None
-        self.m_accT = None
-
-        self.m_vel = None
-        self.m_disp = None
-        self.m_velT = None
-        self.m_dispT = None
-
-        # Define soil layer parameters
-        self.m_damping = damping / 100.0 # damping from percentage to number
-        self.m_H = H
-        self.m_Vs = Vs
-
-
-    def calculateResponse(self):
-        SoilTF = np.empty_like(self.m_freq, dtype=np.complex_)
-        absSoilTF = np.empty_like(self.m_freq, dtype=np.float_)
-
-        # Compute the Fourier amplitude spectrum
-        fas = fft(self.m_acc)
-        # fas = fas[:self.nyquist_index]
-        absfas = np.abs(fas)
-        self.m_absFft = absfas
-
-        # Compute transfer function of soil layer
-        SoilTF = self.calcSoilTf()
-        self.m_absSoilTF = np.abs(SoilTF)
-
-        # Compute surface soil response
-        ifas = fas * SoilTF
-        absfas2 = np.abs(ifas)
-        self.m_absIFft = absfas2
-        accT = ifft(ifas)
-        self.m_accT = accT.real  # Take only the real part
-
-
-    def calcSoilTf(self):
-
-        tf = []
-
-        if self.m_freq is None:
-            print("Frequency vector is not defined")
-        else:
-
-            for f in self.m_freq:
-                """
-                * The uniform damped soil on rigid rock transfer function
-                *                             1
-                *  H = -------------------------------------------------
-                *       cos ( 2* PI * freq * H / (Vs(1+ i*damping))
-                """
-                kstar = 2.0 * np.pi * f / self.m_Vs - self.m_damping * 2.0 * np.pi * f / self.m_Vs * 1j
-                Vsstar = self.m_Vs + self.m_damping * self.m_Vs * 1j
-                tf.append(1.0 / np.cos(2.0 * np.pi * f * self.m_H / Vsstar))
-
-        return tf
-
-    def calculate_nat_freq(self):
-        n_pt = len(self.m_freq)
-        N_freq = []
-        N_freqVal = []
-        dfreq = self.m_freq[-1] / n_pt
-
-        TF_tan = 1.0
-        for i in range(1, len(self.m_freq)):
-            TF_tan1 = (self.m_absSoilTF[i] - self.m_absSoilTF[i - 1]) / dfreq
-            if TF_tan1 * TF_tan <= 0 and TF_tan > 0:
-                N_freq.append(self.m_freq[i])
-                N_freqVal.append(self.m_absSoilTF[i])
-            TF_tan = TF_tan1
-
-        return N_freq, N_freqVal
-
-    def calculate_ratio(self):
-
-        grav = 9.81 # m/s2
-        dT = self.m_time[1] - self.m_time[0]
-        accAux = [self.m_acc[ii]*grav for ii in range(len(self.m_acc))]
-        self.m_vel = integrate.cumtrapz(accAux, dx=dT)
-        # self.mvel = np.insert(self.m_vel, 0, 0.0)
-        self.m_disp = integrate.cumtrapz(self.m_vel, dx=dT)
-        # mdisp = np.insert(self.m_disp, 0, 0.0)
-
-        self.m_velT = integrate.cumtrapz((self.m_accT*grav), dx=dT)
-        # self.mvel = np.insert(self.m_vel, 0, 0.0)
-        self.m_dispT = integrate.cumtrapz(self.m_velT, dx=dT)
-        # mdisp = np.insert(self.m_disp, 0, 0.0)
-
-        ratioA = abs(max(self.m_accT))/abs(max(self.m_acc))
-        ratioV = abs(max(self.m_velT))/abs(max(self.m_vel))
-
-        return ratioA, ratioV
-
-    def sin_record(self, f):
-        n_points = 2000
-        self.m_dt = 0.02
-        self.m_acc = [0] * n_points
-        accel = []
-
-        for s in range(n_points):
-            accel.append(0.4 * np.sin(2 * f * np.pi * s * self.m_dt))
-
-        self.m_acc = accel
-        self.set_time()
-        self.set_freq()
-
-    def sweep_record(self):
-        n_points = 8000
-        self.m_dt = 0.002
-        self.m_acc = [0] * n_points
-        self.m_time = [0] * n_points
-
-        for i in range(len(self.m_time)):
-            time = i * self.m_dt
-            self.m_time[i] = time
-            self.m_acc[i] = np.sin(25.0 * time + 150.0 * (time * time / 2.0) / 16.0)
-
-        self.set_freq()
-
-
-    def load_file(self, file_name):
-
-        self.m_filename = file_name
-
-        try:
-            with open(file_name, 'r') as file:
-                # Read file contents into a JSON object
-                jsonObj = json.load(file)
-        except FileNotFoundError as e:
-            print(f"Cannot read file {file_name}: {e}")
-            return
-
-        events = jsonObj.get("Events", [])
-
-        if events:
-            patterns = events[0].get("pattern", [])
-            timeseries = events[0].get("timeSeries", [])
-            pattern_type = patterns[0].get("type", "")
-            tsname = patterns[0].get("timeSeries", "")
-
-            units = events[0].get("units", {})
-            acc_unit = 1.0
-            acc_type = units.get("acc", "")
-            if acc_type == "g":
-                acc_unit = 1.0
-            elif acc_type == "m/s2":
-                acc_unit = 1.0 / 9.81
-            elif acc_type in ["cm/s2", "gal", "Gal"]:
-                acc_unit = 1.0 / 981.0
-
-            timeseries_data = timeseries[0].get("data", [])
-            dT = timeseries[0].get("dT", 0.0)
-            self.read_GM(timeseries_data, dT, acc_unit)
-
-
-    def read_GM(self, acc_TH, dT, acc_unit):
-        n_points = len(acc_TH)
-        self.m_dt = dT
-        # self.m_acc = [acc_TH[ii].toDouble() * acc_unit for ii in range(n_points)]
-        self.m_acc = [acc_TH[ii] * acc_unit for ii in range(n_points)]
-
-        if n_points % 2 == 0:
-            self.m_acc.append(0.0)
-        self.m_acc = np.array(self.m_acc) # Convert to numpy array
-
-        self.set_time()
-        self.set_freq()
-
-
-    def set_freq(self):
-
-        if self.m_dt == 0:
-            self.m_dt = 0.005
-            nfreq = 1 / self.m_dt*10
-            sample_freq = 1.0 / self.m_dt
-
-        else:
-            nfreq = len(self.m_acc)
-            sample_freq = 1.0 / self.m_dt
-
-        # self.m_freq = [0] * (len(self.m_acc) // 2 + 1)
-        # self.m_freq = [0] * (len(self.m_acc))   # m_freq as a list
-        self.m_freq = np.zeros(nfreq) # m_freq as a numpy array
-        sample_freq = 1.0 / self.m_dt
-
-        self.nyquist_freq = sample_freq / 2.0
-        self.nyquist_index = int(len(self.m_freq) / 2)
-        for i in range(len(self.m_freq)):
-            self.m_freq[i] = i * sample_freq / len(self.m_acc)
-
-
-    def set_time(self):
-        # self.m_time = [0] * len(self.m_acc) # m_time as a list
-        self.m_time = np.zeros(len(self.m_acc)) # m_time as a numpy array
-
-        for i in range(len(self.m_time)):
-            self.m_time[i] = i * self.m_dt
-
-
-    def plot_acc(self):
-        plt.figure()
-        plt.plot(self.m_time, self.m_acc, 'b-', label='input')
-        plt.plot(self.m_time, self.m_accT, 'r-', label='output')
-        plt.xlabel('Time [sec]')
-        plt.ylabel('Acc [g]')
-        plt.legend()
-        plt.show()
-
-    def plot_fft(self):
-        plt.figure()
-        plt.plot(self.m_freq[:self.nyquist_index], self.m_absFft[:self.nyquist_index], 'b-', label='input')
-        plt.plot(self.m_freq[:self.nyquist_index], self.m_absIFft[:self.nyquist_index], 'r-', label='output')
-        plt.xlabel('Frequency [Hz]')
-        plt.ylabel('Fourier Amplitude')
-        plt.legend()
-        plt.show()
-
-    def plot_tf(self):
-        plt.figure()
-        plt.plot(self.m_freq[:self.nyquist_index], self.m_absSoilTF[:self.nyquist_index], 'b-')
-        plt.xlabel('Frequency [Hz]')
-        plt.ylabel('TF')
-        plt.show()
-
-    def plot_spectra(self):
-        n_points = len(self.m_acc)
-        accAux = [self.m_acc[ii]*9.81 for ii in range(n_points)]
-        accTAux = [self.m_accT[ii]*9.81 for ii in range(n_points)]
-        periods, psa = resp_spectra(self.m_time, accAux, 0.05)
-        periodsT, psaT = resp_spectra(self.m_time, accTAux, 0.05)
-
-        plt.figure()
-        plt.plot(periods, psa, 'b-', label='input')
-        plt.plot(periodsT, psaT, 'r-', label='output')
-        plt.xlabel('Periods [s]')
-        plt.ylabel('PSA [cm/s2]')
-        plt.legend()
-        plt.show()
-
-def main():
-    # Define input parameters
-    damping = 5.0  # damping ratio in %
-    H = 20.0  # layer height in m
-    Vs = 200.0  # shear wave velocity in m/s
-
-    TF = TFunctionClass(damping, H, Vs)
-
-    # Sinusoidal record
-    f = 0.5  # frequency in Hz
-    TF.sin_record(f)
-
-    # Calculate response
-    TF.calculateResponse()
-
-    # Calculate ratios
-    ratioA, ratioV = TF.calculate_ratio()
-    print(f"Acceleration Ratio: {ratioA}")
-    print(f"Velocity Ratio: {ratioV}")
-
-    # Plot acceleration
-    TF.plot_acc()
-
-    # Plot Fourier Transform
-    TF.plot_fft()
-
-    # Plot Transfer Function
-    TF.plot_tf()
-
-    # Plot Spectra
-    TF.plot_spectra()
-
-if __name__ == "__main__":
-    main()
-
-
-
-


This script performs post-processing by building response spectra from acceleration time history.

-
-Click to expand the full Response Spectra Python code -
#########################################################
-#
-# Postprocessing python script
-#
-# Copyright: UW Computational Mechanics Group
-#            Pedro Arduino
-#
-# Participants: Alborz Ghofrani
-#               Long Chen
-#
-#-------------------------------------------------------
-
-import numpy as np
-
-
-def resp_spectra(a, time, nstep):
-    """
-    This function builds response spectra from acceleration time history,
-    a should be a numpy array,T and nStep should be integers.
-    """
-
-    # add initial zero value to acceleration and change units
-    a = np.insert(a, 0, 0)
-    # number of periods at which spectral values are to be computed
-    nperiod = 100
-    # define range of considered periods by power of 10
-    minpower = -3.0
-    maxpower = 1.0
-    # create vector of considered periods
-    p = np.logspace(minpower, maxpower, nperiod)
-    # incremental circular frequency
-    dw = 2.0 * np.pi / time
-    # vector of circular freq
-    w = np.arange(0, (nstep+1)*dw, dw)
-    # fast fourier Horm of acceleration
-    afft = np.fft.fft(a)
-    # arbitrary stiffness value
-    k = 1000.0
-    # damping ratio
-    damp = 0.05
-    umax = np.zeros(nperiod)
-    vmax = np.zeros(nperiod)
-    amax = np.zeros(nperiod)
-    # loop to compute spectral values at each period
-    for j in range(0, nperiod):
-        # compute mass and dashpot coeff to produce desired periods
-        m = ((p[j]/(2*np.pi))**2)*k
-        c = 2*damp*(k*m)**0.5
-        h = np.zeros(nstep+2, dtype=complex)
-        # compute transfer function
-        for l in range(0, int(nstep/2+1)):
-            h[l] = 1./(-m*w[l]*w[l] + 1j*c*w[l] + k)
-            # mirror image of Her function
-            h[nstep+1-l] = np.conj(h[l])
-
-        # compute displacement in frequency domain using Her function
-        qfft = -m*afft
-        u = np.zeros(nstep+1, dtype=complex)
-        for l in range(0, nstep+1):
-            u[l] = h[l]*qfft[l]
-
-        # compute displacement in time domain (ignore imaginary part)
-        utime = np.real(np.fft.ifft(u))
-
-        # spectral displacement, velocity, and acceleration
-        umax[j] = np.max(np.abs(utime))
-        vmax[j] = (2*np.pi/p[j])*umax[j]
-        amax[j] = (2*np.pi/p[j])*vmax[j]
-
-    return p, umax, vmax, amax
-
-
-
-


-
-

Workflow in EE-UQ

-

The procedure for performing a transfer function analysis is shown below.

-

A forward propagation problem will be performed. The UQ engine to be used is Dakota with parallel execution and saved working directories. The Latin Hypercube Sampling (LHS) method will be used with 10 samples and a seed of 913. The UQ tab should look similar to the one below.

-
-_images/case2_UQTab_Workflow_TF.png -
-

Fig. 7. Uncertainty Quantification.

-
-
-

The General Information (GI) tab will not be utilized in this example since no structure will be used.

-

For the simulation (SIM tab), the input script will be loaded using a CustomPy Model. Along with this, the number of response nodes will be 1 with a spatial dimension of 2. Each node will have 3 degrees of freedom (DOF) and the profile will have damping ratio of 2%. The centroid node value will be 1.

-
-_images/case2_SimTab_TF.png -
-

Fig. 8. Simulations.

-
-
-

In the Event (EVT) tab, a Multiple SimCenter load generator will be used. The motion of interest will be uploaded here as a JSON file and will have a factor of 1.

-

In the Finite Element Modeling (FEM) tab, select a CustomPy-Simulation.

-

In the Engineering Demand Parameter (EDP) tab, select a user defined generator. The response parameters will be the ratio of acceleration spectra and velocity spectra from the propagation from rock to the soil.

-
-_images/case2_EDPTab_Workflow_TF.png -
-

Fig. 9. Engineering Demand Parameters.

-
-
-

The Random Variables (RV) tab is where the values of H, Vs, and damping are implemented in the analysis. The values seen above are to be input here. A normal distribution will be used for all of these variables.

-
-_images/case2_RVTab_Workflow_TF.png -
-

Fig. 10. Random Variables.

-
-
-

The user can opt for running the analysis on their local device or in DesignSafe.

-
-
-

Results

-

When the run is completed, the mean values of ratioA and ratioV, as well as uncertainty values,should be provided. These values show the ratio of average amplification/de-amplification in acceleration in velocity of the ground motion at the rock and the motion at the surface. The positive value of the ratio shows amplification occurred due to the propagation of the motion through the soil layer.

-
-_images/case2_Results_Workflow_TF.png -
-

Fig. 11. Results

-
-
-

Because the input variables (H, Vs, damping, motions) each have uncertainty, that uncertainty is carried on to the transfer function analysis. EE-UQ allows for uncertainty quantification which allows for an analysis of which variables might be most important or what the “worst-case scenario” could be when designing. The normalized normal distribution for the acceleration and velocity amplification ratios are shown below.

-
-_images/case2_Normalized_RatioA_histogram.png -
-

Fig. 12. Normalized Acceleration Amplification Factor Histogram

-
-
-
-_images/case2_Normalized_RatioV_histogram.png -
-

Fig. 13. Normalized Velocity Amplification Factor Histogram

-
-
-

Due to the infinite possibilities of variability the three main variables (H, Vs, Damping) can have, we see that the normal distribution is not well suited for this analysis, specifically. EE-UQ allows for other methods of uncertainty quantification. Below is a Gaussian Mixture Model. This method is effective in measuring the probability of certain subpopulations within a larger population.

-
-_images/case2_Gaussian_Mixture_RatioA_histogram.png -
-

Fig. 14. Gaussian Mixture Model - Acceleration Amplification Ratio.

-
-
-
-_images/case2_Gaussian_Mixture_RatioV_histogram.png -
-

Fig. 15. Gaussian Mixture Model - Velocity Amplification Ratio.

-
-
-
-

Note

-

This situation is specific only to this example; normal distributions could very well suit another example.

-
-

By extrapolating the values from EE-UQ, the shape of the transfer function can be determined. The natural frequencies of the first 4 peaks in the transfer function are also shown below.

-
-_images/case2_TF_Nat_Freqs.png -
-

Fig. 16. Transfer Function.

-
-
-
- - - - - - - - - - - - - - - - - - - - -
Table 1. Natural Frequencies in the Transfer Function

Peak

Amplification Factor at Natural Frequencies

1

20.49

2

7.03

3

4.20

4

2.98

-

With the transfer function plotted, the input motion can be transformed using the transfer function to reflect the motion at the surface. The figure below reflects the large amplification that occurred. The value of the highest acceleration increased from ~0.4g in the rock to ~1.25g in the soil. This amplification is also reflected in other frequencies.

-
-_images/case2_Full_Results_TF.png -
-

Fig. 17. Amplification of Ground Motion.

-
-
-

The spectral acceleration spectra can be also determined for each of the motions. These spectra can be used to determine if a structure will be affected by the amplification. A single story structure (~0.1 second period) might be at risk due to this amplification. Any periods with a large amplification ratios should be further analyzed to ensure the safety of the structure and site.

-
-_images/case2_SpectralAcc_Results_TF.png -
-

Fig. 18. Amplification in Spectral Acceleration.

-
-
-
-
-
-

Remarks

-

I’d like to thank everyone at SimCenter, specifically Sang-ri Yi, Frank McKenna, Jinyan Zhao, Aakash Bangalore Satish, and Barbaros Cetiner, for all of their effort and assistance they provided during the entire quarter. Navigating these tools and creating examples for them would’ve been a lot more stressful without their help.

-

Transfer function is one of my favorite topics in geotechnical engineering. I’d really like to continue working with site response and performance based design so being able to create this example along with my class was great.

-

Finally, I’d like to thank Prof. Arduino who made all of this possible. His determination and motivation was contagious throughout the academic quarter. There are many great professors but there is only one Pedro Arduino.

-
-
-[GV22] -

G. R. Guerra Velázquez. Hurricane maría and public health in puerto rico: lessons learned to increase resiliency and prepare for future disasters. Annals of Global Health, 2022.

-
-
-[Jib93] -

Randall W. Jibson. Predicting earthquake-induced landslide dsiplacements using newmark'ssliding block analysis. Transportation Research Board, 1411:17 p, 1993.

-
-
-[Kra96] -

S. L. Kramer. Geotechnical Earthquake Engineering. Pearson, 1996. ISBN 9783642196294.

-
-
-[New65] -

N. M. Newmark. Effects of earthquakes on dams and embankments. Geotechnique, 15(2):139–160, 1965.

-
-
-[RB20] -

V. Rashidian and L. G. Baise. Regional efficacy of a global geospatial liquefaction model. Engineering geology, 272:105644, 2020.

-
-
-[Saf73] -

H. S. Saffir. Hurricane wind and storm surge. The Military Engineering, pages 4–5, 1973.

-
-
-[SGM24] -

M. D. Sanger, M. Geyin, and B. W. Maurer. A global liquefaction model for rapid response and scenario modeling. Manuscript in preparation, 2024.

-
-
-[ZBT17] -

J. Zhu, L. G. Baise, and E. M. Thompson. An updated geospatial liquefaction model for global application. Bulletin of the Seismological Society of America, 107(3):1365–1385, 2017.

-
-
-
-
- - - -
- - - - - - - - - - \ No newline at end of file diff --git a/test/case_3.html b/test/case_3.html deleted file mode 100644 index 29e9e84..0000000 --- a/test/case_3.html +++ /dev/null @@ -1,566 +0,0 @@ - - - - - - - S3 hark - Site Response 1 — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

S3 hark - Site Response 1

-
-

Author: José Manuel Barreto Espinola

-
-
-

Introduction

-

One-dimensional (1-D) site response analysis is a geotechnical engineering method used to evaluate how seismic waves propagate through soil layers from bedrock to the ground surface. This type of analysis is crucial for understanding the local effects of an earthquake on a particular site, enabling engineers to design structures that can better withstand seismic events. -The primary goal of 1-D site response analysis is to predict how different soil layers will affect the amplitude, frequency content, and duration of seismic ground motions.

-
-
-

Problem Description

-

On this problem, we will perform a site response analysis on an specfic location subjected to a seven different earthquakes in order to analyze the propagation of seismic waves through soil and obtain the ground surface response. The ground surface response is typically the major output from these analyses, along with profile plots such as peak horizontal acceleration along the soil profile.

-

In cases where liquefiable soils are present, maximum shear strain and excess pore pressure ratio plots are also important.

-

In the figure below, we can observe a representation of the one-dimensional response analyses, which assume that all boundaries are horizontal and that the response of a soil deposit is predominately caused by SH-waves propagating vertically from the underlying bedrock.

-
-_images/Case3_siteResponse2.png -
-

Figure 1. One-dimensional response analyses

-
-
-
-
-

Solution Strategy

-

For this example it will be implement the Site-Specific Seismic Hazard Analysis and Research Kit (S3 HARK) tool, which focuses on simulating wave propagation along soil depth using finite element (FE) method, to perform site-specific analysis of soil in response to earthquakes. This tool provides multiple nonlinear material models for simulating the soil behavior under earthquake loading, The available constitutive models are listed below:

-
* ElasticIsotropic (Elastic).
-* PM4Sand.
-* PM4Silt.
-* PressureIndependendeMultiYield (PIMY).
-* PressureDependMultiYield (PDMY).
-* PressureDependMultiYield02 (PDMY02).
-* Mazari Dafalias.
-* J2CyclicBoundingSurface (J2Bounding).
-
-
-

For the porpuse of this example we will implement and provide basic definitions for two of these constitutive models:

-
-
    -
  • PM4Sand Model: this constitutive model is developed to simulate the behavior of sandy soils under various loading conditions, especially during seismic events. It is specifically designed to capture the cyclic and dynamic behavior of sands, including the phenomena of liquefaction and cyclic mobility.

    -
    -
    -

    Note

    -

    What is Liquefaction?

    -

    Liquefaction occurs when seismic waves induce cyclic loading in saturated, loose, sandy soils, causing the soil grains to rearrange and densify. This rearrangement increases the pore water pressure within the soil, reducing the effective stress and consequently the soil’s shear strength. When the pore pressure approaches the overburden pressure, the soil behaves like a liquid, losing its ability to support loads.

    -
    -
    -
  • -
  • ElasticIsotropic Model: Often referred to simply as the Elastic model, this is one of the simplest constitutive models used in geotechnical and structural engineering. It is based on the assumption that the material behaves elastically and isotropically, meaning that the material’s properties are the same in all directions and that it returns to its original shape upon unloading

  • -
-
-
-
-

SimCenter Tool Used

-
    -
  1. Click on the icon of s3 hark to open the application.

  2. -
-
-_images/Case3_Step1.png -
-

Figure 3. S3 hark executable icon.

-
-
-
    -
  1. Operations Area: In the upper toolbar, you can see three options (Figure 4.):

    -
    -
      -
    1. In Height, you can choose the depth of your soil column.

    2. -
    3. In GWT, you can choose the depth of the groundwater table of your specific site.

    4. -
    5. In Total layer, you can modify the number of soil layers on your specific site. Click the “+” button to add a soil layer (a layer will be added below the selected layer) and the “-” button to delete a selected soil layer. Click several times to add more layers.

    6. -
    -
    -_images/Case3_Step2.png -
    -

    Figure 4. Main window - Operations area

    -
    -
    -
    -
  2. -
  3. Soil Layer Table: In this table the user provides the characteristics of each soil layer, such as layer thickness, density, Vs, material type, and element size in the finite element mesh (Figure 5.).

    -
    -
    -

    Note

    -

    Variables are assumed to have m, kPa, and kN units in the Site Response panel.

    -
    -
    -
  4. -
  5. Soil Column Graphic: The first graphic on the left of the panel shows a visualization of the soil column (Figure 5.).

  6. -
  7. Finite Element Mesh Graphic: The second graphic on the left shows the finite element mesh (Figure 5.).

  8. -
  9. Configure Tab: This section shows the configuration options (Figure 5.).

    -
    -
      -
    • Under the “OpenSees” label, type the path of OpenSees executable. You can also select the executable from your local computer by clicking on the “+” button on the right of the input area.

    • -
    • Under the “Rock motion” label, type the path of a ground motion file. You can also select the file from your local computer by clicking on the “+” button on the right of the input area.

    • -
    • Under the “Slope parameters” label, we can modify the degree of inclination of our study terrain if this were the case.

    • -
    -
    -

    Note

    -

    The rock motion file must follow the SimCenter event format.

    -
    -
    -_images/Case3_Step3.png -
    -

    Figure 5. Main window - Soil layer table, graphics and configure tab.

    -
    -
    -
    -
  10. -
  11. Layer Properties Tab: This tab allows the user to enter additional material properties for the selected soil layer (Figure 6.).

    -
    -
    -_images/Case3_Step4.png -
    -

    Figure 6. Main window - Layer properties tab.

    -
    -
    -
    -
  12. -
  13. Response Tab: Once the site response analysis has been performed, this tab provides information about element and nodal time varying response quantities (Figure 7.).

    -
    -
    -_images/Case3_Step5.png -
    -

    Figure 7. Main window - Response tab.

    -
    -
    -
    -
  14. -
  15. Click the “Analyze” button on the right side of the upper toolbar to run the finite element analysis.

    -
    -
      -
    • You will see a progress bar displayed at the bottom of the right hand side of the app, which shows the percentage of steps perfomed (Figure 8.).

    • -
    • Once the simulation is done, the “Response” tab and the “PGA” profile plot will be displayed. At the same time, a pop up window showing “The analysis is done” will show up. And when you click “I know”, the progress bar will disappear (Figure 8.).

    • -
    -
    -_images/Case3_Step6.png -
    -

    Figure 8. Main window - Analyze Done.

    -
    -
    -
      -
    • You can see the profile plots of the PGA, γmax , maximum displacement and maximum ru by clicking on the respective tabs on the right side of the Finite Element Mesh Graphic and the surface and ground motion by clicking the Response tab (Figure 8.).

    • -
    -
    -_images/Case3_Step7.png -
    -

    Figure 9. Main window - Results.

    -
    -
    -
    -
  16. -
-
-
-

Example Application

-
-

Soil Condition

-

The soil column being analyzed is a 20.29 meters high sitting on rock. The ground water table is at 4.57 meters below the soil surface. In the column, there are a total of three layers. Each layer is meshed by elements with size of 0.20 meter in height. The soil profile is shown in Figure 10. and basic properties of soil layers are shown in Table 1. The first two layers are modeled by PM4Sand and the third layer is modeled by elastic isotropic material.

-
-_images/Case3_soil_profile.png -
-

Figure 10. Soil profile representation

-
-
- - ------------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 1. Soil Profile Parameters

Layers

Thickness (m)

Vs (m/s)

ρunsat (kg/m3)

ρsat (kg/m3)

Go,ref (MPa)

DR (%)

hpo

v

E50,ref (kPa)

ESU1

0.91

266.09

2.08

2.16

335.16

79.50

0.52

0.3

167580.91

ESU2

17.4

202.39

2.00

2.08

76.61

39.67

0.52

0.32

14364.08

ESU3

1.98

380.39

2.24

2.32

316.01

85.98

0.25

153216.83

-
-
-

Earthquake Condition

-

Information on the seven ground motions to be used in this example is shown in Table 2, and in Figure 11, you can see the response spectrum of the 7 earthquakes in a single graph.

- - ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 2. Ground Motion Parameters

Motion

PGA (g)

dT (sec)

Duration (sec)

N° of steps

Tohoku 41207-EW

0.58

0.01

359.98

35999.00

RSN6911_DARFIELD_HORCN18E

0.61

0.01

60.17

12036.00

RSN803_LOMAP_WVC270

0.67

0.01

39.98

7998.00

RSN4457_MONTENE

0.68

0.01

40.39

4040.00

Tohoku Ishinomaki-NS

0.77

0.01

299.98

29999.00

Conception-L

0.82

0.01

141.67

28335.00

RSN727_SUPER

0.96

0.01

22.20

2221.00

-
-_images/Case3_logSpectraCombined.png -
-

Figure 11. Response spectrum.

-
-
-

The rock motions, in SimCenter format, can be downloaded from the rock motions folder (this can be found in the GitHub Repository).

-
-
-

Results

-

The below images present the PGA, maximum shear strain, maximum displacement, maximum excess pore pressure ratio, ground surface response and rock motions results obtained from S3 HARK.

-
-

Peak Ground Acceleration

-
-_images/Case3_PGA_1.png -
-
-_images/Case3_PGA_2.png -
-

Figure 12. Peak Ground Acceleration.

-
-
-
-
-

Maximum Shear Strain

-
-_images/Case3_Shear_strain_1.png -
-
-_images/Case3_Shear_strain_2.png -
-

Figure 13. Maximum Shear Strain.

-
-
-
-
-

Maximum Displacement

-
-_images/Case3_Displacement_1.png -
-
-_images/Case3_Displacement_2.png -
-

Figure 14. Maximum Displacement.

-
-
-
-
-

Maximum Excess Pore Pressure Ratio

-
-_images/Case3_Ru_1.png -
-
-_images/Case3_Ru_2.png -
-

Figure 15. Maximum Excess Pore Pressure Ratio (ru ).

-
-
-
-
-

Ground Surface Response

-
-_images/Case3_Ground_surface_response_1.png -
-
-_images/Case3_Ground_surface_response_2.png -
-

Figure 16.1. Acceleration (m/s2).

-
-
-
-_images/Case3_Ground_surface_response_3.png -
-
-_images/Case3_Ground_surface_response_4.png -
-

Figure 16.2. Velocity (m/s).

-
-
-
-_images/Case3_Ground_surface_response_5.png -
-
-_images/Case3_Ground_surface_response_6.png -
-

Figure 16.3. Displacement (m).

-
-

Figure 16. Ground Surface Response.

-
-
-
-
-
-

Rock Motion

-
-_images/Case3_Input_rock_motion_1.png -
-
-_images/Case3_Input_rock_motion_2.png -
-

Figure 17.1. Acceleration (m/s2).

-
-
-
-_images/Case3_Input_rock_motion_3.png -
-
-_images/Case3_Input_rock_motion_4.png -
-

Figure 17.2. Velocity (m/s).

-
-
-
-_images/Case3_Input_rock_motion_5.png -
-
-_images/Case3_Input_rock_motion_6.png -
-

Figure 17.3. Displacement (m).

-
-

Figure 17. Input Rock Motion.

-
-
-
-
-
-
-
-

Remarks

-
-

Note

-

In the out_tcl folder, located on your computer (SimCenter -> s3hark -> out_tcl), you can find all the results of the analysis performed by Shark and plot them in the tool of your preference.

-
-
-

Warning

-

If you perform more than one analysis, make sure to copy the results before running the next analysis, as s3 hark will overwrite the new results on the old ones.

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/test/case_4.html b/test/case_4.html deleted file mode 100644 index 0cbc397..0000000 --- a/test/case_4.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - S3 hark - Site Response 2 — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

S3 hark - Site Response 2

-

Author: Chungen Tai

-
-

Introduction

-

This page shows basic concepts of one-dimensional nonlinear site response analysis by using various soil material models (ex: Elastic, PM4Sand.) and the lateral spreading.

-
-
-

Problem Description

-

Site response analysis is commonly performed to analyze the propagation of seismic waves through soil. As shown in the below figure, one-dimensional response analyses, as a simplified method, assume that all boundaries are horizontal, and that the response of a soil deposit is predominately caused by SH-waves propagating vertically from the underlying bedrock. Ground surface response is usually the major output from these analyses, together with profile plots such as peak horizontal acceleration along the soil profile. When liquefiable soils are presenting, maximum shear strain and excess pore pressure ratio plots are also important.

-
-_images/case4_siteResponse.png -
-

Figure 1. Site Response Analysis

-
-
-
-
-

Solution Strategy

-
-

OpenSees

-

OpenSees (Open System for Earthquake Engineering Simulation) is an open-source software framework used for simulating the response of structural and geotechnical systems to earthquakes and other loading conditions. It is widely used in research and practical applications for the analysis and design of structures subjected to dynamic loading. S3hark created a GUI to help user doing nonlinear site response analysis easily.

-
-
-

Soil model

-
-
-

PM4Sand Model

-

PM4Sand is a constitutive model used in geotechnical engineering to simulate the behavior of sand under various loading conditions, including seismic events. Developed by Boulanger and Ziotopoulou, this model captures the complex behaviors of sand such as cyclic mobility, dilatancy, and liquefaction. It’s particularly useful in finite element analysis for evaluating the performance of soil-structure systems during earthquakes. PM4Sand is known for its ability to represent the stress-strain behavior of sandy soils accurately, aiding in the design and analysis of foundations, slopes, and embankments in seismic regions. The model parameters are grouped into two categories: a primary set of six parameters (three properties, two flags, and atmospheric pressure) that are most important for model calibration, and a secondary set of parameters that may be modified from their default values in special circumstances. The three primary input properties are the sand’s apparent relative density \(D_R\), the shear modulus coefficient \(G_o\), and the contraction rate parameter \(h_po\). -Apparent relative density (\(D_R\)) can be calculated by correlation to penetration resistance.Commonly estimated based on CPT or SPT penetration resistances, such as the following relationships used by Idriss and Boulanger (2008):

-
-\[D_R = \frac{(N_1)_{60}}{C_d}\]
-

Where

-

\(D_R\) = Apparent Relative density (%)

-

\(C_d\) = 46 (Idriss and Boulanger ,2008)

-

Shear modulus coefficient is the primary variable controlling the small strain shear modulus, G_max. Should be chosen to match estimated or measured shear wave velocities.

-

The shear modulus ( G_{max} ) can be described by the following equations:

-
-\[G_{max} = \rho V_s^2\]
-

Usign following equation to calculate \(G_0\)

-
-\[G_{max} = G_0 p_a \left(\frac{p}{p_a}\right)^{0.5}\]
-

Contraction rate parameter \(h_{po}\) is one of primary variable that adjusts contraction rates and hence can be adjusted to obtain a target cyclic resistance ratio, as commonly estimated based on CPT or SPT penetration resistances and liquefaction correlations.

-
-
-

Elasticisotropic Model

-

In the context of geotechnical engineering and computational modeling, the “elastic model” refers to a mathematical representation of soil or rock behavior under loading conditions, where the material responds to stress with a proportional strain, following Hooke’s Law. This model assumes that the material returns to its original shape once the load is removed, provided the stress is within the elastic limit.We can get the shear modulus from shear wave velocity, and then use the following equation convert to elastic modulus,

-
-\[E= (2G)(1+\nu)\]
-

Where -\(\nu\) = Poisson’s ration (default is 0.3)

-
-
-

Lateral Spreading

-

Lateral spreading refers to the horizontal movement of soil, typically caused by liquefaction during an earthquake. When an earthquake occurs, seismic waves can cause loose, water-saturated, granular soils to temporarily lose their strength and behave like a liquid. This process is known as liquefaction. Once liquefaction occurs, the affected soil can flow or spread laterally, especially if there is a slope or free face (like a riverbank or retaining wall) nearby. Lateral spreading can cause significant ground displacement and can lead to damage of structures, utilities, and infrastructure. In this example, we will focus on the lateral movement cause by different slope angles.

-
-_images/case4_lateralspreading.png -
-

Figure 2. Lateral spreading

-
-
-
-
-
-

SimCenter Tool Used

-

S3 hark is the acronym of site-specific seismic hazard analysis and research kit. This tool focuses on simulating wave propagation along soil depth using finite element (FE) method. The intended audience for s3hark is researchers and practitioners interested in performing site-specific analysis of soil in response to earthquakes, and educators interested in teaching site response analysis in their classes. The tool provides a friendly interface for users to input and modify soil layers using tables, while the built soil profile and the FE mesh being visualized simultaneously. Results including acceleration, velocity, displacement, pore pressure, spectral acceleration, etc., are visualized for the soil profile and for each node as well, from which the user can comprehend the wave propagation and liquefaction status along the soil depth.

-

Features of S3 hark include:

-
    -
  1. 2D and 3D elements for dynamic analysis of fluid saturated porous media

  2. -
  3. Advanced linear / nonlinear soil material models

  4. -
  5. Total stress / effective stress analysis

  6. -
  7. Bi-directional motions

  8. -
  9. Flat / slope free field analysis

  10. -
  11. Finite rigidity of the bedrock

  12. -
-

Click on the icon of S3 hark to open the application. Figure 3 illustrates the main window. It is split into the following areas:

-
-_images/case4_window.png -
-

Figure 3. S3 hark HARK Main Window

-
-
-
    -
  1. Soil Column Graphic: The first graphic on the left of the panel shows a visualization of the soil column.

  2. -
  3. FE Mesh Graphic: The second graphic on the left shows the finite element mesh and profile plots. Selecting any of the tabs on the right inside this graphic (i.e, PGA, γmax,maxDisp, maxRu, maxRuPWP) will show various results from the simulation at the mesh points.

  4. -
-
-_images/case4_plot.png -
-

Figure 4. S3 hark HARK FE Mesh Graphic

-
-
-
    -
  1. Operations Area: The right side of this area shows some information (e.g., total height and number of soil layers), includes the Ground Water Table (GWT) input field, and plus and minus buttons. If the user presses the plus button, a layer is added below the selected layer. If the minus button is pressed the selected layer is removed. The GWT input field allows the user to specify the level of the ground water table.

  2. -
  3. Soil Layer Table: This table is where the user provides the characteristics of the soil layer, such as layer thickness, density, Vs30, material type, and element size in the finite element mesh.

  4. -
  5. Tabbed Area: This area contains the three tabbed widgets described below.

    -
    -
      -
    1. Configure Tab: This tab allows the user to specify the path to the OpenSees executable and to a ground motion file.

    2. -
    3. Layer Properties Tab: This tab allows the user to enter additional material properties for the selected soil layer.

    4. -
    5. Response Tab: Once the site response analysis has been performed, this tab provides information about element and nodal time varying response quantities.

    6. -
    -
    -
  6. -
-
-_images/case4_response.png -
-

Figure 5. S3 hark HARK Response Tab

-
-
-
    -
  1. Analyze Button: This button shall be used to run the simulation locally. A progress bar will show the status of the analysis. This allows the user to review the ground motion predicted at the surface

  2. -
-
-
-

Example Application

-

Treasure Island, situated atop sand fill strata overlaying Bay Mud within the San Francisco Bay, was subjected to seismic activity during the 1989 Loma Prieta Earthquake. Adjacent to Treasure Island lies Yerba Buena Island, characterized by its natural rock outcrop. Utilizing the site’s soil profile and seismic data recorded on Yerba Buena Island, we endeavor to analyze the site response of Treasure Island. This entails computing parameters such as peak horizontal acceleration and peak horizontal displacement along the soil profile. Furthermore, we aim to investigate the influence of lateral spread in varying slopes on the site’s response characteristics. -For lateral spreading, we change the slope \(\alpha\) as 0, 2, 5 to see the influence of it.

-
-

Analysis Processes

-

There is the analysis process of site response analysis:

-
    -
  1. Input the earthquake motions: Covent the earthquake motion record into ‘.json’ file. Then, input the path into ‘Configure Layer’.

  2. -
  3. Input ths soil parameters: This is the most important step in site response analysis. The soil parameters are obtained from theory or investigation reports. Then, type all of the soil parameters into the ‘Soil Layer Table’.

  4. -
  5. Click “analysis” bottom: Click the button to run the analysis. The program will notify you when it is finished.

  6. -
-
-
-

Earthquake motion

-

The motion recorded at Yerba Buena Island from the Loma Prieta earthquake is used in this sample. Figure 6 shows the acceleration, velocity, and displacement of this motion.

-
-_images/case4_YERBAISL2_Records.png -
-

Figure 6. Input ground motion (acceleration, velocity, and displacement)

-
-
-

Figure 7 illustrates the spetrum of this motion.

-
-_images/case4_YERBAISL2_RSpectra.png -
-

Figure 7. Input ground motion spetrum (acceleration, velocity, and displacement)

-
-
-
-
-

Soil condition

-

The following table shows the soil parameters in this site. Using PM4Sand to stimulate sand , and using Elasticisotropic to model clay.

- - ---------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table1. Soil Profile Parameters

Layers

Thickness(m)

\(V_s (m/s)\)

\(\rho (kg/m^3)\)

\(G_o(kPa)\)

\(E (kPa)\)

\(D_R\) (%)

Model

SAND1

15

175.3

2.01

0.69

0.33

PM4Sand

CLAY1

14

198.8

1.68

172.8

Elasticisotropic

SAND2

12

300

2.08

1.33

0.77

PM4Sand

CLAY2

32

280

2.08

423.8

Elasticisotropic

SAND3

8

380

2.08

1.46

0.62

PM4Sand

CLAY3

8

300

2.08

486.6

Elasticisotropic

WRock

5

600

2.16

2022.8

Elasticisotropic

Rockbed

1830

2.24

19526.7

Elasticisotropic

-
-
-

Result

-

The following plots show maximun displacement in different slope angles.

-
-
-

Displacement

-

Figure 8 shows the result of maximun displacement, we can see that the displacement on the surface increases with increasing the slope.

-
-_images/case4_d.png -
-

Figure 8. The maximum displacement in different slope

-
-
-

Figure 9 illustrates the relationships between slope and the displacement on the surface.

-
-_images/case4_dd.png -
-

Figure 9. The relationships between slope and the displacement on the surface

-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/test/case_5.html b/test/case_5.html deleted file mode 100644 index 205cfec..0000000 --- a/test/case_5.html +++ /dev/null @@ -1,651 +0,0 @@ - - - - - - - R2D - Liquefaction — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

R2D - Liquefaction

-
-

Author: Morgan Sanger

-
-
-

Introduction

-

This page describes basic concepts of geospatial liquefaction hazard modeling withing the umbrella of SimCenter tools.

-
-
-

Problem Description

-

Coseismic soil liquefaction is a phenomenon in which the strength and stiffness of a soil is reduced by earthquake shaking. Resilient communities and infrastructure networks, like lifelines or transportation systems, must be built to withstand and respond to hazards posed by coseismic soil liquefaction. Ideally, these predictions could be made:

-
    -
  • quickly, in near-real-time after an event;

  • -
  • at high resolution, consistent with the scale of individual assets; and

  • -
  • at map-scale, across the regional extent affected by large earthquakes.

  • -
-

Common liquefaction models in practice require in-situ testing which cannot be continuously performed across large areas, thus presenting the need for “geospatial” liquefaction models. Prior tests of such models (e.g., [ZBT17]) have shown both promising potential and severe shortcomings in predicting subsurface conditions with few geospatial predictors. There is a need to advance geospatial liquefaction modeling by integrating geotechnical data, liquefaction mechanics, artificial intelligence (AI), and many geospatial predictor variables to provide reliable regional liquefaction predictions for any earthquake event. When integrated with regional hazard assessment capabilities, geospatial liquefcation models will provide value throughout the life of infrastructure projects - from initial desk studies to refined project-specific hazard analyses - and will unlock insights beyond conventional practice, with opportunity to:

-
    -
  • prescribe event-specific emergency response and evacuation routes immediately after an earthquake,

  • -
  • evaluate network reliability and infrastructure network resiliency using structural databases or other asset inventories, and

  • -
  • understand the impacts of earthquake events of vulnerable communities using population demographic data.

  • -
-
-
-

Solution Strategy

-

The state-of-practice geospatial liquefaction model is the [RB20] model (updated version of the [ZBT17] model), which uses logistic regression to predict probability of liquefaction based on five (5) geospatial variables and trained on a database of liquefaction case histories.

-

In this problem, another modeling solution strategy is proposed, according to [SGM24]. The [SGM24] approach parses the problem into that which is empirical and best predicted by AI (the relationship between geospatial variables and subsurface traits) and that which is best predicted by mechanics (liquefaction response, conditioned on those traits). In this approach, the subsurface traits are characterized at point locations using available cone penetration testing (CPT) data. The liquefaction response at each CPT location is computed across a range of magnitude-scale peak ground accelerations (PGAM7.5) using state-of-practice liquefaction manifestation models (e.g., liquefaction potential index, LPI), thereby retaining the knowledge of liquefaction mechanics developed over the last 50+ years. The relationship between manifestation index and PGAM7.5 is represented as a functional form (Eqn 1) with two curve-fitting parameters: A and B (Fig 1). Therefore, the liquefaction response (i.e., A and B) at each CPT location becomes target variables of supervised learning AI models.

-
-\[\begin{split}MI = \left\{ \begin{array}{ll} -0, & \text{PGA}_{M7.5} < 0.1g \\ -\arctan(B \cdot (\text{PGA}_{M7.5} - \frac{A}{B})^2) \cdot 100, & \text{PGA}_{M7.5} \geq 0.1g -\end{array} \right.\end{split}\]
-

Eqn 1. Manifestation index as a function of A, B, and PGAM7.5.

-
-_images/case5_manifestationcurve.png -
-

Fig 1. Example manifestation curve of LPI vs. PGAM7.5 for a single CPT.

-
-
-

The AI model is trained to predict liquefaction response using a set of 37 geospatial predictor variables that serve as proxies for liquefaction. These predictor variables include metrics of surface topography and roughness, distance to and elevation above water bodies, and information about geology, geomorphology, and hydrology. By applying the trained AI model to these predictor datasets, the A and B parameters are predicted geospatially at 100-meter resolution. A crucial step in this approach is geostatistically updating the AI predictions via regression kriging near field measurements. The effect is that predictions near known subsurface conditions have lower model uncertainty, while predictions farther away rely on the AI model and have higher uncertainty. This method effectively pre-computes liquefaction response for all possible ground motions based on AI-predicted subsurface conditions. These predictions are stored as mapped parameters, ready for use with specific earthquake data, such as a PGAM7.5 raster in R2D.

-

Model predictions were then tested against the leading geospatial model [RB20] in three case-history events using receiver operating characteristic and area under the curve analyses (Fig 2). The [SGM24] AI model (before kriging) performed significantly better than [RB20] and was further improved by kriging (Fig 3).

-
-_images/case5_sanger2024-roc.png -
-

Fig 2. Receiver operator characteristic curves and area under the curve (AUC) analyses comparing [RB20] (“R&B”), and the [SGM24] before regression kriging (“LPI”).

-
-
-
-_images/case5_zhu2017.png -
-

(a)

-
-
-
-_images/case5_sanger2024-ai.png -
-

(b)

-
-
-
-_images/case5_sanger2024-krig.png -
-

(c)

-
-

Fig 3. Comparison between (a) Rashidian & Baise (2020), and this model (b) before and (c) after regression kriging for the Feb. 2011 M6.1 Christchurch event.

-
-
-
-
-
-

SimCenter Tool Used

-

The presented problem can be solved using SimCenter’s Regional Resilience Determination R2D Tool. A substantially complete description of the tool is provided in the R2D Documentation.

-

The updated [ZBT17] model ([RB20]) is implemented in the R2D tool (version 4.2.0), whereas the [SGM24] model is not yet implemented in the R2D tool. In this project, the [SGM24] model was implemented in the R2D tool using the applications.py file.

-
-
-

Example Application

-

This example demonstrates the application of the [ZBT17] liquefaction-induced ground failure model (really the [RB20] model) currently implemented in R2D, and the implementation of the next-generation [SGM24] model described in the Solution Strategy.

-
-

Note

-

In R2D, ground failure models are considered intermediate results that are accessible only through the Earthquake Event Generator tool, and they cannot be executed within the damage and loss assessment tools. Future development in R2D should consider (1) implementing ground failure models with other earthquake hazard source options (e.g., Shakemap Earthquake Scenario), (2) extending the implementation of the ground failure modeling beyond California, and (3) incorporating ground failure models into the damage and loss assessment tools.

-
-
-

Zhu et al. (2017)

-

WORKFLOW

-

The workflow for the [ZBT17] model in the Earthquake Event Generator tool in R2D is as follows:

-

1. Define Analysis Grid: Define the analysis grid for the study area. Here, an area of downtown San Francisco is selected for the analysis. The grid is defined with a resolution of approximately 100 meters, the true model resolution of the [SGM24] model.

-
-_images/case5_EQGen1.png -
-

2. Forecast Rupture Scenarios: Large events (>M7) are forecasted for the study area to demonstrate the model performance under extreme conditions.

-
-_images/case5_EQGen2.png -
-

3. Select Earthquake Event: Select an earthquake event scenario. Here, the M8 N. San Andreas rupture event scenario is selected.

-
-_images/case5_EQGen3.png -
-

4. Select Intensity Measures: PGA and PGV are selected as the intensity measures for the analysis, both required for the [ZBT17] model.

-
-_images/case5_EQGen4.png -
-

5. Select Ground Failure Model: Select the ground failure model. Here, the [ZBT17] model is selected.

-
-_images/case5_EQGen5.png -
-

6. Run Hazard Simulation.

-
-_images/case5_EQGen6.png -
-

7. View Results: The results of the [ZBT17] model for the probability of liquefaction are shown in Fig 4.

-

CODE

-

The following code snippet shows the implementation of the [ZBT17] model in the R2D tool using the applications.py file.

-
  1# Zhu et al. (2017) code
-  2-----------------------------------------------------------
-  3class ZhuEtal2017(Liquefaction):
-  4    """
-  5    A map-based procedure to quantify liquefaction at a given location using logistic models by Zhu et al. (2017). Two models are provided:
-  6
-  7    1. For distance to coast < cutoff, **prob_liq** = f(**pgv**, **vs30**, **precip**, **dist_coast**, **dist_river**)
-  8    2. For distance to coast >= cutoff, **prob_liq** = f(**pgv**, **vs30**, **precip**, **dist_coast**, **dist_river**, **gw_depth**)
-  9
- 10    Parameters
- 11    ----------
- 12    From upstream PBEE:
- 13    pgv: float, np.ndarray or list
- 14        [cm/s] peak ground velocity
- 15    mag: float, np.ndarray or list
- 16        moment magnitude
- 17    pga: float, np.ndarray or list
- 18        [g] peak ground acceleration, only to check threshold where prob_liq(pga<0.1g)=0
- 19    stations: list
- 20        a list of dict containing the site infomation. Keys in the dict are 'ID',
- 21        'lon', 'lat', 'vs30', 'z1pt0', 'z2pt5', 'vsInferred', 'rRup', 'rJB', 'rX'
- 22
- 23    Geotechnical/geologic:
- 24    vs30: float, np.ndarray or list
- 25        [m/s] time-averaged shear wave velocity in the upper 30-meters
- 26    precip: float, np.ndarray or list
- 27        [mm] mean annual precipitation
- 28    dist_coast: float, np.ndarray or list
- 29        [km] distance to nearest coast
- 30    dist_river: float, np.ndarray or list
- 31        [km] distance to nearest river
- 32    dist_water: float, np.ndarray or list
- 33        [km] distance to nearest river, lake, or coast
- 34    gw_depth: float, np.ndarray or list
- 35        [m] groundwater table depth
- 36
- 37    Fixed:
- 38    # dist_water_cutoff: float, optional
- 39    #     [km] distance to water cutoff for switching between global and coastal model, default = 20 km
- 40
- 41    Returns
- 42    -------
- 43    prob_liq : float, np.ndarray
- 44        probability for liquefaciton
- 45    liq_susc_val : str, np.ndarray
- 46        liquefaction susceptibility category value
- 47
- 48    References
- 49    ----------
- 50    .. [1] Zhu, J., Baise, L.G., and Thompson, E.M., 2017, An Updated Geospatial Liquefaction Model for Global Application, Bulletin of the Seismological Society of America, vol. 107, no. 3, pp. 1365-1385.
- 51
- 52    """
- 53    def __init__(self, parameters, stations) -> None:
- 54        self.stations = stations
- 55        self.parameters = parameters
- 56        self.dist_to_water = None #(km)
- 57        self.dist_to_river = None #(km)
- 58        self.dist_to_coast = None #(km)
- 59        self.gw_depth = None #(m)
- 60        self.precip = None # (mm)
- 61        self.vs30 = None #(m/s)
- 62        self.interpolate_spatial_parameters(parameters)
- 63
- 64    def interpolate_spatial_parameters(self, parameters):
- 65        # site coordinate in CRS 4326
- 66        lat_station = [site['lat'] for site in self.stations]
- 67        lon_station = [site['lon'] for site in self.stations]
- 68        # dist_to_water
- 69        if parameters["DistWater"] == "Defined (\"distWater\") in Site File (.csv)":
- 70            self.dist_to_water = np.array([site['distWater'] for site in self.stations])
- 71        else:
- 72            self.dist_to_water = sampleRaster(parameters["DistWater"], parameters["inputCRS"],\
- 73                    lon_station, lat_station)
- 74        # dist_to_river
- 75        if parameters["DistRiver"] == "Defined (\"distRiver\") in Site File (.csv)":
- 76            self.dist_to_river = np.array([site['distRiver'] for site in self.stations])
- 77        else:
- 78            self.dist_to_river = sampleRaster(parameters["DistRiver"], parameters["inputCRS"],\
- 79                    lon_station, lat_station)
- 80        # dist_to_coast
- 81        if parameters["DistCoast"] == "Defined (\"distCoast\") in Site File (.csv)":
- 82            self.dist_to_coast = np.array([site['distCoast'] for site in self.stations])
- 83        else:
- 84            self.dist_to_coast = sampleRaster(parameters["DistCoast"], parameters["inputCRS"],\
- 85                    lon_station, lat_station)
- 86        # gw_water
- 87        if parameters["GwDepth"] == "Defined (\"gwDepth\") in Site File (.csv)":
- 88            self.gw_depth = np.array([site['gwDepth'] for site in self.stations])
- 89        else:
- 90            self.gw_depth = sampleRaster(parameters["GwDepth"], parameters["inputCRS"],\
- 91                    lon_station, lat_station)
- 92        # precipitation
- 93        if parameters["Precipitation"] == "Defined (\"precipitation\") in Site File (.csv)":
- 94            self.precip = np.array([site['precipitation'] for site in self.stations])
- 95        else:
- 96            self.precip = sampleRaster(parameters["Precipitation"], parameters["inputCRS"],\
- 97                    lon_station, lat_station)
- 98        self.vs30 = np.array([site['vs30'] for site in self.stations])
- 99        print("Sampling finished")
-100
-101    def run(self, ln_im_data, eq_data, im_list, output_keys, additional_output_keys):
-102        if ('PGA' in im_list) and ('PGV' in im_list):
-103            num_stations = len(self.stations)
-104            num_scenarios = len(eq_data)
-105            PGV_col_id = [i for i, x in enumerate(im_list) if x == 'PGV'][0]
-106            PGA_col_id = [i for i, x in enumerate(im_list) if x == 'PGA'][0]
-107            for scenario_id in range(num_scenarios):
-108                num_rlzs = ln_im_data[scenario_id].shape[2]
-109                im_data_scen = np.zeros([num_stations,\
-110                                    len(im_list)+len(output_keys), num_rlzs])
-111                im_data_scen[:,0:len(im_list),:] = ln_im_data[scenario_id]
-112                for rlz_id in range(num_rlzs):
-113                    pgv = np.exp(ln_im_data[scenario_id][:,PGV_col_id,rlz_id])
-114                    pga = np.exp(ln_im_data[scenario_id][:,PGA_col_id,rlz_id])
-115                    mag = float(eq_data[scenario_id][0])
-116                    model_output = self.model(pgv, pga, mag)
-117                    for i, key in enumerate(output_keys):
-118                        im_data_scen[:,len(im_list)+i,rlz_id] = model_output[key]
-119                ln_im_data[scenario_id] = im_data_scen
-120            im_list = im_list + output_keys
-121            additional_output = dict()
-122            for key in additional_output_keys:
-123                item = getattr(self, key, None)
-124                if item is None:
-125                    warnings.warn(f"Additional output {key} is not avaliable in the liquefaction trigging model 'ZhuEtal2017'.")
-126                else:
-127                    additional_output.update({key:item})
-128        else:
-129            sys.exit(f"At least one of 'PGA' and 'PGV' is missing in the selected intensity measures and the liquefaction trigging model 'ZhuEtal2017' can not be computed.")
-130            # print(f"At least one of 'PGA' and 'PGV' is missing in the selected intensity measures and the liquefaction trigging model 'ZhuEtal2017' can not be computed."\
-131            #       , file=sys.stderr)
-132            # sys.stderr.write("test")
-133            # sys.exit(-1)
-134        return ln_im_data, eq_data, im_list, additional_output
-135
-136    def model(self, pgv, pga, mag):
-137        """Model"""
-138        # zero prob_liq
-139        zero_prob_liq = 1e-5 # decimal
-140
-141        # distance cutoff for model
-142        model_transition = 20 # km
-143
-144        # initialize arrays
-145        x_logistic = np.empty(pgv.shape)
-146        prob_liq = np.empty(pgv.shape)
-147        liq_susc_val = np.ones(pgv.shape)*-99
-148        liq_susc = np.empty(pgv.shape, dtype=int)
-149
-150        # magnitude correction, from Baise & Rashidian (2020) and Allstadt et al. (2022)
-151        pgv_mag = pgv/(1+np.exp(-2*(mag-6)))
-152        pga_mag = pga/(10**2.24/mag**2.56)
-153
-154        # find where dist_water <= cutoff for model of 20 km
-155        # coastal model
-156        ind_coastal = self.dist_to_water<=model_transition
-157        # global model
-158        # ind_global = list(set(list(range(pgv.shape[0]))).difference(set(ind_coastal)))
-159        ind_global = ~(self.dist_to_water<=model_transition)
-160
-161        # set cap of precip to 1700 mm
-162        self.precip[self.precip>1700] = 1700
-163
-164        # x = b0 + b1*var1 + ...
-165        # if len(ind_global) > 0:
-166        # liquefaction susceptbility value, disregard pgv term
-167        liq_susc_val[ind_global] = \
-168            8.801 + \
-169            -1.918   * np.log(self.vs30[ind_global]) + \
-170            5.408e-4 * self.precip[ind_global] + \
-171            -0.2054  * self.dist_to_water[ind_global] + \
-172            -0.0333  * self.gw_depth[ind_global]
-173        # liquefaction susceptbility value, disregard pgv term
-174        liq_susc_val[ind_coastal] = \
-175            12.435 + \
-176            -2.615   * np.log(self.vs30[ind_coastal]) + \
-177            5.556e-4 * self.precip[ind_coastal] + \
-178            -0.0287  * np.sqrt(self.dist_to_coast[ind_coastal]) + \
-179            0.0666   * self.dist_to_river[ind_coastal] + \
-180            -0.0369  * self.dist_to_river[ind_coastal]*np.sqrt(self.dist_to_coast[ind_coastal])
-181        # catch nan values
-182        liq_susc_val[np.isnan(liq_susc_val)] = -99.
-183        # x-term for logistic model = liq susc val + pgv term
-184        x_logistic[ind_global] = liq_susc_val[ind_global] + 0.334*np.log(pgv_mag[ind_global])
-185        # x-term for logistic model = liq susc val + pgv term
-186        x_logistic[ind_coastal] = liq_susc_val[ind_coastal] + 0.301*np.log(pgv_mag[ind_coastal])
-187
-188        # probability of liquefaction
-189        prob_liq = 1/(1+np.exp(-x_logistic)) # decimal
-190        prob_liq = np.maximum(prob_liq,zero_prob_liq) # set prob to > "0" to avoid 0% in log
-191
-192        # for pgv_mag < 3 cm/s, set prob to "0"
-193        prob_liq[pgv_mag<3] = zero_prob_liq
-194        # for pga_mag < 0.1 g, set prob to "0"
-195        prob_liq[pga_mag<0.1] = zero_prob_liq
-196        # for vs30 > 620 m/s, set prob to "0"
-197        prob_liq[self.vs30>620] = zero_prob_liq
-198
-199        # calculate sigma_mu
-200        sigma_mu = (np.exp(0.25)-1) * prob_liq
-201
-202        # determine liquefaction susceptibility category
-203        liq_susc[liq_susc_val>-1.15]  = liq_susc_enum['very_high'].value
-204        liq_susc[liq_susc_val<=-1.15] = liq_susc_enum['high'].value
-205        liq_susc[liq_susc_val<=-1.95] = liq_susc_enum['moderate'].value
-206        liq_susc[liq_susc_val<=-3.15] = liq_susc_enum['low'].value
-207        liq_susc[liq_susc_val<=-3.20] = liq_susc_enum['very_low'].value
-208        liq_susc[liq_susc_val<=-38.1] = liq_susc_enum['none'].value
-209
-210        # liq_susc[prob_liq==zero_prob_liq] = 'none'
-211
-212        return {"liq_prob":prob_liq, "liq_susc":liq_susc}
-
-
-

RESULTS

-
-_images/case5_zhu_pliq.png -
-

Fig 4. Results of the Zhu et al. (2017) model for probability of liquefaction given the selected M8 N. San Andreas rupture event scenario.

-
-
-
-
-

Sanger et al. (2024)

-

WORKFLOW

-

The workflow for the [SGM24] model follows the same steps as the [ZBT17] model, with the exception of the referenced geospatial parameters. The [SGM24] model needs only the LPI A and LPI B parameters, implemented here within the DistWater and DistCoast parameters in the R2D tool because the author did not have access to the user-interface code for the R2D tool.

-
-_images/case5_EQGen10.png -
-

CODE

-

In this example, the [SGM24] model is implemented in the R2D tool using the applications.py file, overwriting the ZhuEtal2017 class for quick integration with the R2D user-interface.

-
  1# Sanger et al. (2024) code
-  2-----------------------------------------------------------
-  3class ZhuEtal2017(Liquefaction):
-  4"""
-  5A map-based procedure to quantify liquefaction at a given location Sanger et al. (2024).
-  6
-  7Parameters
-  8----------
-  9From upstream PBEE:
- 10mag: float, np.ndarray or list
- 11    moment magnitude
- 12pga: float, np.ndarray or list
- 13    [g] peak ground acceleration, only to check threshold where prob_liq(pga<0.1g)=0
- 14stations: list
- 15    a list of dict containing the site infomation. Keys in the dict are 'ID',
- 16    'lon', 'lat', 'vs30', 'z1pt0', 'z2pt5', 'vsInferred', 'rRup', 'rJB', 'rX'
- 17
- 18Geotechnical:
- 19LPI A: float, np.ndarray or list
- 20LPI B: float, np.ndarray or list
- 21
- 22Returns
- 23-------
- 24prob_liq : float, np.ndarray
- 25    probability for liquefaciton (surface manifestation)
- 26
- 27"""
- 28def __init__(self, parameters, stations) -> None:
- 29    self.stations = stations
- 30    self.parameters = parameters
- 31    self.LPI_A = None #
- 32    self.LPI_B = None #
- 33    self.interpolate_spatial_parameters(parameters)
- 34
- 35def interpolate_spatial_parameters(self, parameters):
- 36    # site coordinate in CRS 4326
- 37    lat_station = [site['lat'] for site in self.stations]
- 38    lon_station = [site['lon'] for site in self.stations]
- 39    # LPI_A
- 40    self.LPI_A = sampleRaster(parameters["DistWater"], parameters["inputCRS"],\
- 41                lon_station, lat_station)
- 42    # LPI_B
- 43    self.LPI_B = sampleRaster(parameters["DistCoast"], parameters["inputCRS"],\
- 44                lon_station, lat_station)
- 45    print("Sampling finished")
- 46
- 47def run(self, ln_im_data, eq_data, im_list, output_keys, additional_output_keys):
- 48    if ('PGA' in im_list):
- 49        num_stations = len(self.stations)
- 50        num_scenarios = len(eq_data)
- 51        PGA_col_id = [i for i, x in enumerate(im_list) if x == 'PGA'][0]
- 52        for scenario_id in range(num_scenarios):
- 53            num_rlzs = ln_im_data[scenario_id].shape[2]
- 54            im_data_scen = np.zeros([num_stations,\
- 55                                len(im_list)+len(output_keys), num_rlzs])
- 56            im_data_scen[:,0:len(im_list),:] = ln_im_data[scenario_id]
- 57            for rlz_id in range(num_rlzs):
- 58                pga = np.exp(ln_im_data[scenario_id][:,PGA_col_id,rlz_id])
- 59                mag = float(eq_data[scenario_id][0])
- 60                model_output = self.model(pga, mag)
- 61                for i, key in enumerate(output_keys):
- 62                    im_data_scen[:,len(im_list)+i,rlz_id] = model_output[key]
- 63            ln_im_data[scenario_id] = im_data_scen
- 64        im_list = im_list + output_keys
- 65        additional_output = dict()
- 66        for key in additional_output_keys:
- 67            item = getattr(self, key, None)
- 68            if item is None:
- 69                warnings.warn(f"Additional output {key} is not avaliable in the liquefaction trigging model 'SangerEtal2024'.")
- 70            else:
- 71                additional_output.update({key:item})
- 72    else:
- 73        sys.exit(f"'PGA' is missing in the selected intensity measures and the liquefaction trigging model 'SangerEtal2024' can not be computed.")
- 74    return ln_im_data, eq_data, im_list, additional_output
- 75
- 76def model(self, pga, mag):
- 77    """Model"""
- 78    # magnitude correction, according to MSF Correction (SAND) Function according to Idriss and Boulanger (2008)
- 79    MSF = 6.9*np.exp(-mag/4) - 0.058
- 80    if MSF > 1.8:
- 81        MSF = 1.8
- 82    pga_mag = pga / MSF
- 83
- 84    # Geospatial LPI A and LPI B
- 85    # Initialize an array for the calculated MI
- 86    LPI = np.zeros_like(pga_mag)
- 87
- 88    # Calculate MI for each element of the arrays
- 89    mask_low = pga_mag < 0.1
- 90    mask_high = pga_mag >= 0.1
- 91    LPI[mask_low] = 0
- 92    LPI[mask_high] = self.LPI_A[mask_high] * np.arctan(self.LPI_B[mask_high] * (pga_mag[mask_high] - self.LPI_A[mask_high] / self.LPI_B[mask_high]) ** 2) * 100
- 93
- 94    from scipy.stats import norm
- 95
- 96    # Probability of liquefaction (manifestation at the surface) according to Geyin et al. (2020) (minor manifestation)
- 97    LPI_beta= 1.774
- 98    LPI_theta= 4.095
- 99    prob_liq = norm.cdf(np.log(LPI/LPI_theta)/LPI_beta)
-100
-101    return {"liq_prob":prob_liq, "liq_susc":LPI}
-
-
-

RESULTS

-
-_images/case5_sanger_lpi.png -
-

Fig 5. Results of the Sanger et al. (2024) model for liquefaction potential index given the selected M8 N. San Andreas rupture event scenario.

-
-
-
-_images/case5_sanger_pliq.png -
-

Fig 6. Results of the Sanger et al. (2024) model for probability of liquefaction given the selected M8 N. San Andreas rupture event scenario, using the Geyin and Maurer (2020) fragility function to map LPI to probability of surface manifestation (minor/all).

-
-
-
-
-
-

Remarks

-
-

Note

-
-
Preliminary visualization of the results can be accomplished in the R2D VIZ tab using Graduated Symbols. However, the author recommends exporting the results to a GIS software for more detailed visualization and analysis.
-_images/case5_EQGen7.png -
-
-
-
-
-

Note

-

Note the division spacing issue that arises when the number of divisions is greater than 10. This has been alerted to the developers.

-
-_images/case5_EQGen11.png -
-
-
-
-

References

-
-
-[GV22] -

G. R. Guerra Velázquez. Hurricane maría and public health in puerto rico: lessons learned to increase resiliency and prepare for future disasters. Annals of Global Health, 2022.

-
-
-[Jib93] -

Randall W. Jibson. Predicting earthquake-induced landslide dsiplacements using newmark'ssliding block analysis. Transportation Research Board, 1411:17 p, 1993.

-
-
-[Kra96] -

S. L. Kramer. Geotechnical Earthquake Engineering. Pearson, 1996. ISBN 9783642196294.

-
-
-[New65] -

N. M. Newmark. Effects of earthquakes on dams and embankments. Geotechnique, 15(2):139–160, 1965.

-
-
-[RB20] -(1,2,3,4,5,6) -

V. Rashidian and L. G. Baise. Regional efficacy of a global geospatial liquefaction model. Engineering geology, 272:105644, 2020.

-
-
-[Saf73] -

H. S. Saffir. Hurricane wind and storm surge. The Military Engineering, pages 4–5, 1973.

-
-
-[SGM24] -(1,2,3,4,5,6,7,8,9,10,11) -

M. D. Sanger, M. Geyin, and B. W. Maurer. A global liquefaction model for rapid response and scenario modeling. Manuscript in preparation, 2024.

-
-
-[ZBT17] -(1,2,3,4,5,6,7,8,9,10) -

J. Zhu, L. G. Baise, and E. M. Thompson. An updated geospatial liquefaction model for global application. Bulletin of the Seismological Society of America, 107(3):1365–1385, 2017.

-
-
-
-
- - - -
- - - - - - - - - - \ No newline at end of file diff --git a/test/case_6.html b/test/case_6.html deleted file mode 100644 index e84dcbe..0000000 --- a/test/case_6.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - - R2D - Landslides — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

R2D - Landslides

-
-

Author: Luis Angel Guerrero Hoyos

-
-
-

Introduction

-

This page describes a preliminarly approach for landslide risk assesment which propose an initial workflow that must be developed in the future, so then it can implemented in the SimCenter tool R2D. An example, which uses Jibson (1993) model to predict Newmark sliding block displacements, is presented for a portion of the city of Seattle, WA. Resources from SimCenter M9 project are used in the example to estimate ground-motion intensity parameters.

-
-
-

Problem Description

-

Studying earthquake-induced landslides is vital for reducing risks, protecting lives and property, preserving the environment, and enhancing our scientific understanding of these natural disasters. Through comprehensive research and application of findings, societies can better prepare for and mitigate the impacts of these potentially devastating events.

-

There are several models that can be implemented in a regional-based study so that, hazard values it can be estimated. Some researchers use the theory of Newmark Sliding Block [New65] to predict how much displacement would occur if an earthquake with a certain ground motion were to occurr. These models have developed correlations that depend on different intensity measurements as: Earthquake Magnitude (\(M_w\)), Peak Ground Acceleration (\(PGA\)), Peak Ground Velocity (\(PGV\)), Arias Intensity (\(I_a\)), Critical Acceleration (\(a_c\)), Normalized Critical Acceleration (\(k_c\)), Spectral Acceleration (\(Sa\)), Static Factor of Safety (\(FS_{static}\)), and Ground Sloping (\(\beta\)), as well as Soil Strength Parameters (\(\gamma,\:c,\:\phi\)).

-

This models could be built-in within R2D tool so that we can estimate Damage and Losses against earthquake-induced landslides.

-
-
-

Solution Strategy

-

In this section, we propose a preliminarly workflow that can be coded within R2D so we can estimate damage and losses as consequences of earthquake-induced landslides risk.

-
-_images/case6_fig1.png -
-

Figure 1. Proposed workflow for incorporating Landslide Risk Assesment into R2D.

-
-
-

Here are some steps to consider:

-
    -
  1. Same as the BRAILS tool is embedded within R2D we would need to embed a tool that allows the user to get Digital Elevation Models (DEM) from publicaly available GIS services (e.g. USGS portal). newline Then, a slope raster can be generated for the selected area (geospatial packages must be installed in python dependencies: Gdal, Rasterio).

  2. -
  3. Intensity measurements can be estimated from the “Earthqueake Event Generation” tool. Reminder that some of the models use mesurements extracted from the time-history record, whereas others use spectral accelerations (extracted from the reponse spectrum).

  4. -
  5. Soil Strength Parameters can be estimated from geological mapping and reference values correlations. So, a tool that allows the user to get geological GIS units must be built-in within R2D as well.

  6. -
-

Finally, after input parameters can be estimated for a certain model, the hazard values can be calculated as Newmark Displacement values.

-
-

Note

-

All of the previous estimations have uncertainty and the model itself has its own uncertainty.

-
-
-
-

SimCenter Tool Used

-

The goal is to implement the following protocol into R2D. However some Simcenter tools were used in order to develop the procedure.

-
    -
  1. The Simcenter Jupyter HUB was used to write the notebook that would help us to compute the hazard against landslide.

  2. -
  3. Ground motions from SimCenter project M9 were used as a grid to which then, intensity measurements would be calculated.

  4. -
-
-
-

Example Application

-

In this section we would like to analyze in a regional scale, what would be the response across a study area located in Seattle, WA, US. The idea is to estimate the predicted displacement in the study area if an earthquake with certain intensity measure (Arias Intensity \(I_a\)) were to occur. The model integrates the infinite slope approach to estimate the static factor of safety so then the Critical Acceleration \(a_c\) can be estimated. Finally with these parameters a Newmark displacement could be estimated using Randall W. Jibson correlation [Jib93]:

-
-\[log(Dn) = 1.460\:log(I_a)-6.642\:a_c+1.546\:\:\:\:\:\:\:\:\:\:\:\:\:(1)\]
-

Where:

-

\(Dn\) = Newmark Displacement [cm].

-

\(I_a\) = Areas Intensity [m/s].

-

\(a_c\) = Critical Acceleration [g].

-

Also,

-
-\[a_c = (FS_{static}-1)\:sin(\beta)\:\:\:\:\:\:\:\:\:\:\:\:\:(2)\]
-

Where:

-
-\[FS_{static} = \frac{2c}{\gamma\:z\:sin(\beta)} + cot(\beta)\:tan(\phi)\:\:\:\:\:\:\:\:\:\:\:\:\:(3)\]
-

\(\beta\) = Slope Angle [°].

-

\(FS_{static}\) = Static Factor of Safety [-].

-

\(c\) = Cohesion [kPa].

-

\(\gamma\) = Unit Weight [kN/m³].

-

\(\phi\) = Friction Angle [°].

-

\(I_a\) = Intensity measure time-history motion specific.

-

A Jupyter Notebook has been developed to code the implementation of the previous model in the area of interest:

-
    -
  • -
    Get the Digital Elevation Model for the area of interest and perform the slope calculations: The USGS portal is used to download the LiDAR data in the area of interest. See Figure 2 to check the area of interest.
    -
    -
    -
    -_images/case6_fig2.png -
    -

    Figure 2. Raster DTM - downloaded from the USGS GIS Service.

    -
    -
    -
    -
    -
    Subsequently the Slope map is calculated using the Gdal library. See Figure 3 to check the slope map in the area of interest, Seattle WA.
    -
    -
    -
    -_images/case6_fig3.png -
    -

    Figure 3. Raster Slope - computed with GDAL.

    -
    -
    -
    -
  • -
  • -
    Get the Intensity Measurements: The intensity values (Areas Intensity in this example) are computed using motions from the M9 project which is a suite of synthetic ground motions for a range of possible magnitude 9 earthquake rupture scenarios on the Cascadia megathrust.
    -
    -
    -
    -_images/case6_fig4.png -
    -

    Figure 4. Motions Grid - Legend indicates values of Arias Intensity [m/s].

    -
    -
    -
    -
    -
    The value of areas intensity will be given by the nearest neighbor motion in the grid. A raster with intensity measures is created from the grids. Figure 5 is an example of how the Arias intensity would look like after applying the nearest neighbor method. Most of this work is done using the package Rasterio.
    -
    -
    -
    -_images/case6_fig5.png -
    -

    Figure 5. Interpolation using Nearest Neighbor for Arias Intensity [m/s] values.

    -
    -
    -
    -
  • -
-
-

Warning

-

Either Rasters and Motions should be self-consistent with a single spatial reference.

-
-
    -
  • -
    Get the Soil Stregth Parameters: as it is for now, this measurement can be heuristically set by the user while the code is built.
    -
    -
  • -
-

Finally, when all the inputs variables are estimated, we can implement the Randall W. Jibson model in the study area. Figure 4 displays the calculated Newmark Displacement for our area of interest Seattle.

-
-_images/case6_fig6.png -
-

Figure 6. Randall W. Jibson calculated Newmark Displacement.

-
-
-
-
-

Remarks

-
    -
  • A Jupyter Notebook (‘hazardNewmark.ipynb’) was coded to simulate the process that could be implemented to R2D for earthquake-induced landslides hazard so the user could then estimate damage and losses. Please if refering to this notebook, careful read the instructions in the readme first. Find this work in the CESG599 repository. When trying to run this notebook, you must have access to the M9 project in DesignSafe machines.

  • -
  • Earthquake induced landslides prediction may be a difficult task to adress, but there are models out there that can be implemented to predict the hazard and subsequently, this hazard can be used to predict damage amd losses. The idea is in this section is to provide a procedure that could ve developed within the SiimCenter R2D tool to predict the hazard and subsequently, to predict damage amd losses.

  • -
-
-
-[GV22] -

G. R. Guerra Velázquez. Hurricane maría and public health in puerto rico: lessons learned to increase resiliency and prepare for future disasters. Annals of Global Health, 2022.

-
-
-[Jib93] -

Randall W. Jibson. Predicting earthquake-induced landslide dsiplacements using newmark'ssliding block analysis. Transportation Research Board, 1411:17 p, 1993.

-
-
-[Kra96] -

S. L. Kramer. Geotechnical Earthquake Engineering. Pearson, 1996. ISBN 9783642196294.

-
-
-[New65] -

N. M. Newmark. Effects of earthquakes on dams and embankments. Geotechnique, 15(2):139–160, 1965.

-
-
-[RB20] -

V. Rashidian and L. G. Baise. Regional efficacy of a global geospatial liquefaction model. Engineering geology, 272:105644, 2020.

-
-
-[Saf73] -

H. S. Saffir. Hurricane wind and storm surge. The Military Engineering, pages 4–5, 1973.

-
-
-[SGM24] -

M. D. Sanger, M. Geyin, and B. W. Maurer. A global liquefaction model for rapid response and scenario modeling. Manuscript in preparation, 2024.

-
-
-[ZBT17] -

J. Zhu, L. G. Baise, and E. M. Thompson. An updated geospatial liquefaction model for global application. Bulletin of the Seismological Society of America, 107(3):1365–1385, 2017.

-
-
-
-
- - - -
- - - - - - - - - - \ No newline at end of file diff --git a/test/case_7.html b/test/case_7.html deleted file mode 100644 index 2f5ff2a..0000000 --- a/test/case_7.html +++ /dev/null @@ -1,458 +0,0 @@ - - - - - - - R2D - Hurricane Damage — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

R2D - Hurricane Damage

-
-

Author: Daniel Acosta Reyes

-
-
-

Introduction

-

Hurricane Maria, a Category 5 storm, struck Puerto Rico on September 20, 2017, claiming over 3000 lives. -This example assesses wind-induced damage for Vieques Island, Puerto Rico, using peak gust wind speed data from the National Institute of Standards and Technogology (NIST) and inventory of about 900 wood residential buildings. The inventory was created using a Python Notebook with BRAILS and formatted to a HAZUS-type damage assessment in R2D. The final R2D results include damage state and loss estimations.

-
-
-

Problem Description

-

Hurricanes are powerful tropical storms producing strong winds and heavy rains. The Saffir-Simpson Wind Scale, which categorizes hurricanes from 1 to 5 based on sustained wind speeds, helps estimate potential property damage [Saf73]. Hurricanes in categories 3 and above are deemed major due to their significant destructive potential.

-
-_images/case7_DA1_saffirScale.png -
-

Fig. 1. Saffir-Simpson Hurricane Scale. Soruce: TIGHE PA.

-
-
-

Hurricane Maria (Category 5) destroyed several homes and health facilities in Puerto Rico, including the only healthcare center on Vieques Island, exacerbating the island’s health crisis after decades-long military use. -A recent study by Guerra-Velasquez [GV22] highlithed that infrastructure weaknesses made recovery more challenging and emphasize the need for increased resiliency and preparedness for future disasters.

-
-
-

Solution Strategy

-

The proposed solution gathers input data for a HAZUS-type damage and lossess analysis implemented in R2D. The dataset includes a baseline hazard, building inventory, and rulesets.

-
    -
  1. Baseline Hazard: The hazard definition for this analysis is a raster file containing Hurricane Maria Wind-Field Model for Puerto Rico in miles per hour (mph).

    -
    -
    -_images/case7_DA2_raster.png -
    -

    Fig. 2. Raster visualization of Hurricane Maria Wind-Field Model.

    -
    -
    -
    -
  2. -
  3. Building Inventory: The building inventory for Puerto Rico is limited. However, using NHERI-SimCenter Building and Infrastructure Recognition using AI at Large-Scale (BRAILS) capabilities, it is possible to obtain building footprints and their associated attributes for a given location. Brails was implemented in a Jupyter Notebook to:

    -
    -
      -
    • Obtain building footprints from open repositories (e.g., NSI)

    • -
    • Fetch Google Street Views using Google API

    • -
    • Import essential BRAILS modules such as NumberOfFloors, YearBuilt, and OccupancyClassifier

    • -
    • Merge and create a Building Inventory Model (BIM) with required attributes for rulesets.

    • -
    -

    A sample code to obtain bulding inventories is provided below. Make sure to !pip install brails before running.:

    -
    ''' Import modules '''
    -from brails.workflow.FootprintHandler import FootprintHandler
    -from brails.workflow.NSIParser import NSIParser
    -from brails.workflow.ImHandler import ImageHandler
    -
    -''' Building parameters '''
    -# Define query location:
    -name_key = 'Vieques_2'
    -location = Lajas, Puerto Rico
    -# location = (lonmin, latmin, lonmax, latmax) # supports exten/bounding box format
    -
    -# Define footprint source:
    -# fpSource included in BRAILS are i) OpenStreetMaps,
    -# ii) Microsoft Global Building Footprints dataset, and iii) FEMA USA Structures.
    -# The keywords for these sources are osm, ms, and usastr, respectively.
    -footprint_source = 'osm'
    -
    -# Length units for the attributes (used when relevant):
    -lengthunit = 'm' # Options are 'm' or 'ft'
    -
    -# File where the building inventory will be stored:
    -outputfile = 'BuildingInventory.geojson'.format(name_key)
    -
    -''' Initialize and Run BRAILS modules '''
    -# Initialize FootprintHandler:
    -fpHandler = FootprintHandler()
    -
    -# Run FootprintHandler to get the footprints for the entered location:
    -fpHandler.fetch_footprint_data(location, fpSource=footprint_source,
    -                            outputFile='{0}_Footprints.geojson'.format(name_key),
    -                            lengthUnit=lengthunit)
    -footprints = fpHandler.footprints.copy()
    -
    -# Initialize NSIParser:
    -nsiParser = NSIParser()
    -
    -# Run NSIParser to merge the footprint data with NSI points:
    -nsiParser.GetNSIData(footprints, outfile=outputfile, lengthUnit=lengthunit)
    -
    -
    -
    -

    Note

    -

    Complete Jupyter notebook can be accessed in DesignSafe - Data Depot at PRJ-4604/Losses_Damage_R2D under the name InventoryBRAILS-notebook.ipynb.

    -
    -
    -_images/case7_DA3_footprints.png -
    -

    Fig. 3. Sample of 932 Building Footprints in Vieques, Puerto Rico, and BRAILS NumberOfFloors module generator.

    -
    -
    -
    -
  4. -
  5. HAZUS Rulesets: HAZUS is a tool for risk modeling methodology that is implemented in R2D. To conduct damage and loss assessments, the software uses rulesets that parses building attributes such as occupancy, year built, roof height, and others. For this example, the HAZUS rulesets were obtained and modified from E8 - Hurricane Wind Example in R2D documentation.

  6. -
-
-
-

SimCenter Tool Used

-

This example uses the Regional Resilience Determination Tool (R2D) for wind damage and loss estimations in a residential area in Vieques, Puerto Rico, in order to assess the impact of wind forces and improve infrastructure resilience for future events.

-
-
-

Example Application

- - - - - - -

Download files

Download

-

Download example E17 - Hurricane Maria PR files and open R2D. In the File tab, Open the “input.json” file within the example.

-
-
-_images/case7_DA4_E1.png -
-

Fig. 4. R2D inut data.

-
-
-
-
-

Note

-

You will notice that all the inputs are autopopulated. Make sure to follow the next steps to verify they are in the correct units and using the right file references.

-
-
    -
  1. In the GI panel, set the Analysis Name, Units, Asset Layers, and Output Settings.

    -
    -
    -_images/case7_DA5_E2.png -
    -

    Fig. 5. R2D GI Input and Output Settings.

    -
    -
    -
    -
  2. -
  3. For the HAZ Hazard Selection, select “Raster Defined Hazard” for an Event Type: “Hurricane”. The Intensity Measures of Raster is “Peak Gust Wind Speed - PWS” in mph.

    -
    -
    -_images/case7_DA6_E3.png -
    -

    Fig. 6. R2D HAZ Hazard Definition.

    -
    -
    -
    -
  4. -
  5. In the ASD panel, make sure the Regional Building Inventory is set to “GIS File to AIM”. Select the Assets to Analyze as intervals (e.g., 1-100) or go back to panel VIZ to manually select your assets by i) ‘click’ on the inventory layer; ii) push “Select” button (then drag selection in the map); iii) push “Add Assets” button.

    -
    -
    -_images/case7_DA7_E4.png -
    -

    Fig. 7 (a). R2D ASD Assets Selection by Intervals.

    -
    -
    -
    -_images/case7_DA8_E5.png -
    -

    Fig. 7 (b). R2D VIZ Assets Selection in the Map.

    -
    -
    -
    -
  6. -
  7. The HTA panel requires a “Site Specified” calculation

    -
    -
    -_images/case7_DA9_E6.png -
    -

    Fig. 8. R2D HTA Building Mapping.

    -
    -
    -
    -
  8. -
  9. This example does not need a Building Modeling. Therefore, MOD set to “none”.

    -
    -
    -_images/case7_DA10_E7.png -
    -

    Fig. 9. R2D MOD Building Model.

    -
    -
    -
    -
  10. -
  11. The Building Analysis Method ANA will be “IMasEDP”.

    -
    -
    -_images/case7_DA11_E8.png -
    -

    Fig. 10. R2D ANA Building Analysis Method.

    -
    -
    -
    -
  12. -
  13. Damage & Loss Apllication is found in the DL panel. Here you select “Pelicun3” with Damage and Losss Method “HAZUS MH MU”. The Auto-population script referring to the specified ruleset is “auto_HU_PR.py” file.

    -
    -
    -_images/case7_DA12_E9.png -
    -

    Fig. 11. R2D DL Damage & Loss Application.

    -
    -
    -
    -
  14. -
  15. RUN the analysis. For the selection of 100 buildings, it should run in your local machine. For full inventory analysis, push RUN at DesignSafe button.

    -
    -
    -

    Warning

    -

    For complete inventory: run in DesignDafe, Stampede2 - 20 min|96 Skylake (SKX) cores | 2 nodes with 48 processors per node | 280 buildings per task

    -
    -
    -

    Note

    -

    SP, UQ, and RV panels are not used in this example.

    -
    -
    -
  16. -
-
-
-

Results

-

Results will be retrieved from the RUN panel and manipulated in the visualization VIZ panel for mapping options.

-
-
-_images/case7_DA13_E10.png -
-

Fig. 12. R2D RES Regional Results Summary.

-
-
-
-

The assessment gives two types of results:

-
    -
  1. MostLikelyCriticalDamageState: The Damage State uses a scale from 0 to 4 that correspons to a qualitative damage description.

  2. -
- - ---- - - - - - - - - - - - - - - - - - - - - - - -
Damage State for Residential Buildings

Damage State

Qualitative Damage Description

0

No Damage or Very Minor Damage - No visible damage from outside

1

Minor Damage - One broken window and moderate roof cover loss

2

Moderate Damage - Major roof cover damage

3

Sever Damage - Major window damage and roof cover loss

4

Destruction - Complete roof failure and/or failure of wall figremjobpane

-

Ref.: FEMA HAZUS Hurricane Technical Manual 4.2.3

-
    -
  1. mean_RepairCost_loss_ratio: The repair cost loss ratio is computed as a ratio of an estimated repair cost and wind-induced damage. The standard deviation of this variable is also provided as std_RepairCost_loss_ratio. This ratio goes on a scale from 0 to 1 and correlates with the Damage State (DS) variable. A typical breakdown corresponds to:

    -
    -
      -
    • DS0 - Loss ratio 0%

    • -
    • DS1 - Loss ratio 2%

    • -
    • DS2 - Loss ratio 10%

    • -
    • DS3 - Loss ratio 50%

    • -
    • DS4 - Loss ratio 100%

    • -
    -
    -
  2. -
-

The results suggest that -of the 100 buildings assessed- most would suffer Severe Damage to Destruction given the inventory information.

-
-

Note

-

Results Visualization: R2D offers QGIS capabilities to visualize regional trends and produce mapping products. Fig. 13 shows an example of a map product using the QGIS module to create HeatMaps of the MostLikelyCriticalDamageState variable and the spatial distribution of the mean_RepairCost_loss_ratio for different intervals. Then, using the “New Layout” option you can create maps with legends, title, and other elements. -See QGIS Documentation for more.

-
-
-_images/case7_DA14_Results.png -
-

Fig. 13. Mapping Visualization of Results Using QGIS in R2D.

-
-
-
-
-

Remarks

-
    -
  • Hurricanes are increasingly happening with more intensity and force due to climate change.

  • -
  • In locations such as Vieques, Puerto Rico, a comprehensive building inventory to assess huricane impact to infrastructure assets is limited. Assessing hazard exposure and consequences are key to increase resilience.

  • -
  • R2D possess vast capabilities to adress this challenge, allowing researches to input hazard data and construct building inventories with BRAILS tools.

  • -
  • This example provides strategies for creating building inventories in locations where data is scarce and implementing them in a format that could be used in R2D for regional analysis.

  • -
-
-
-

References

-
-
-[GV22] -

G. R. Guerra Velázquez. Hurricane maría and public health in puerto rico: lessons learned to increase resiliency and prepare for future disasters. Annals of Global Health, 2022.

-
-
-[Jib93] -

Randall W. Jibson. Predicting earthquake-induced landslide dsiplacements using newmark'ssliding block analysis. Transportation Research Board, 1411:17 p, 1993.

-
-
-[Kra96] -

S. L. Kramer. Geotechnical Earthquake Engineering. Pearson, 1996. ISBN 9783642196294.

-
-
-[New65] -

N. M. Newmark. Effects of earthquakes on dams and embankments. Geotechnique, 15(2):139–160, 1965.

-
-
-[RB20] -

V. Rashidian and L. G. Baise. Regional efficacy of a global geospatial liquefaction model. Engineering geology, 272:105644, 2020.

-
-
-[Saf73] -

H. S. Saffir. Hurricane wind and storm surge. The Military Engineering, pages 4–5, 1973.

-
-
-[SGM24] -

M. D. Sanger, M. Geyin, and B. W. Maurer. A global liquefaction model for rapid response and scenario modeling. Manuscript in preparation, 2024.

-
-
-[ZBT17] -

J. Zhu, L. G. Baise, and E. M. Thompson. An updated geospatial liquefaction model for global application. Bulletin of the Seismological Society of America, 107(3):1365–1385, 2017.

-
-
-
-
- - - -
- - - - - - - - - - \ No newline at end of file diff --git a/test/genindex.html b/test/genindex.html deleted file mode 100644 index 3b74191..0000000 --- a/test/genindex.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - Index — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - -

Index

- -
- -
- - -
-
-
- -
- -
-

© Copyright 2024, UW Computational Group.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/test/index.html b/test/index.html deleted file mode 100644 index 20dc804..0000000 --- a/test/index.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - Welcome to CESG 599 - NHERI - An Introduction to SimCenter tool and DesignSafe Infrastructure! — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • - View page source -
  • -
-
-
-
-
- -
-

Welcome to CESG 599 - NHERI - An Introduction to SimCenter tool and DesignSafe Infrastructure!

-
-

What is CESG599-NHERI

-

This site provides a series of examples discussed during the CESG599-NHERI course. The course is designed to provide an introduction to the NHERI SimCenter tools and DesignSafe infrastructure. -The course is intended for graduate students and researchers in the field of civil engineering, but it is open to anyone interested in learning about the tools and resources available through the NHERI SimCenter and DesignSafe.

- -
-
-

Acknowledgements

-

This supporting materials were developed by CESG 599 students and Pedro Arduino in the Department of Civil and Environmental Engineering at the University of Washington under the auspices of the NHERI-SimCenter (SimCenter).

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/test/objects.inv b/test/objects.inv deleted file mode 100644 index 1298db9..0000000 --- a/test/objects.inv +++ /dev/null @@ -1,5 +0,0 @@ -# Sphinx inventory version 2 -# Project: CESG-599 -# Version: -# The remainder of this file is compressed using zlib. -xڅQO0g|q蛁$ji|4u;kvՁ{һ_\z%3~ Vו*!ܞ\m-`wDt/f-C|%[=.!vE!h0V)-Wwύ]X"aИa.<}vf,Qm#I2!ʤO;kLQEXR *\M7`' C"]uę/cwKFF1fĘ$G(P1Y+4=htw4co%SVR(l|^ŸߟzvHRVmwһ *x=qUJL,ز]ߥfjh<Ԫ:k >ţ3%lk* 2]CПힵF \ No newline at end of file diff --git a/test/search.html b/test/search.html deleted file mode 100644 index 3c39696..0000000 --- a/test/search.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - Search — CESG-599 1.0.0 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - - - -
- -
- -
-
-
- -
- -
-

© Copyright 2024, UW Computational Group.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/test/searchindex.js b/test/searchindex.js deleted file mode 100644 index 0de18e2..0000000 --- a/test/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({"docnames": ["case_0", "case_0_original", "case_1", "case_2", "case_3", "case_4", "case_5", "case_6", "case_7", "index"], "filenames": ["case_0.rst", "case_0_original.rst", "case_1.rst", "case_2.rst", "case_3.rst", "case_4.rst", "case_5.rst", "case_6.rst", "case_7.rst", "index.rst"], "titles": ["CESG599 - NHERI", "Course Introduction", "QuoFEM - Settlements", "EEUQ - Transfer Function", "S3 hark - Site Response 1", "S3 hark - Site Response 2", "R2D - Liquefaction", "R2D - Landslides", "R2D - Hurricane Damage", "Welcome to CESG 599 - NHERI - An Introduction to SimCenter tool and DesignSafe Infrastructure!"], "terms": {"sc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "d": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "github": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "1": [0, 1, 2, 5, 6, 7, 8, 9], "0": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "kendra": [0, 1, 9], "mutch": [0, 1, 9], "erick": [0, 1, 9], "martinez": [0, 1, 9], "jose": [0, 1], "barreto": [0, 1, 9], "chungen": [0, 1, 5], "tai": [0, 1, 5], "morgan": [0, 1, 9], "sanger": [0, 1, 3, 7, 8, 9], "lui": [0, 1, 9], "guerrero": [0, 1, 9], "daniel": [0, 1, 9], "acosta": [0, 1, 9], "pedro": [0, 1, 3, 9], "arduino": [0, 1, 3, 9], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "explor": [0, 1, 2], "fundament": [0, 1, 3], "infrastructur": [0, 1, 5, 6, 8], "The": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "emploi": 0, "self": [0, 1, 3, 6, 7], "direct": [0, 1, 4, 5], "approach": [0, 1, 4, 6, 7], "where": [0, 1, 2, 3, 4, 5, 6, 7, 8], "student": [0, 1, 9], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8], "guid": 0, "through": [0, 1, 2, 3, 4, 5, 6, 7, 9], "structur": [0, 1, 2, 3, 4, 5, 6, 8], "framework": [0, 1, 5], "design": [0, 1, 2, 3, 4, 5, 9], "format": [0, 1, 4, 8], "over": [0, 1, 2, 6, 8], "10": [0, 1, 2, 3, 4, 6, 8], "week": [0, 1], "core": [0, 1, 8], "concept": [0, 1, 3, 4, 5, 6], "examin": [0, 1, 2, 3], "four": [0, 1, 2], "five": [0, 1, 2, 6], "focus": [0, 2, 4, 5], "one": [0, 1, 2, 3, 4, 5, 6], "everi": [0, 1], "two": [0, 1, 4, 5, 6, 8], "task": [0, 1, 7, 8], "master": [0, 1], "essenti": [0, 1, 8], "each": [0, 1, 2, 3, 4, 5, 6], "deliv": [0, 1], "present": [0, 1, 4, 5, 6, 7], "class": [0, 1, 2, 3, 5, 6], "addition": [0, 1, 2], "thei": [0, 1, 2, 3, 6, 8], "work": [0, 1, 2, 3, 7], "more": [0, 1, 2, 3, 4, 6, 8], "practic": [0, 1, 5, 6], "exampl": [0, 9], "find": [0, 1, 2, 4, 6, 7], "peer": [0, 1], "construct": [0, 1, 2, 3, 8], "feedback": [0, 1], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8], "integr": [0, 1, 2, 3, 6, 7], "part": [0, 1, 3], "experi": [0, 1], "personnel": [0, 1], "invit": [0, 1], "particip": [0, 3], "zoom": [0, 1], "base": [0, 1, 2, 3, 4, 5, 6, 7, 8], "avail": [0, 1, 2, 3, 4, 6, 7, 9], "At": [0, 1, 4, 6], "end": [0, 1, 2, 6], "final": [0, 1, 2, 3, 7, 8], "project": [0, 1, 3, 6, 7, 9], "topic": [0, 1, 3], "choic": [0, 1], "group": [0, 1, 3, 5], "requir": [0, 1, 3, 6, 8], "provid": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "opportun": [0, 1, 6], "deeper": [0, 1], "applic": [0, 9], "A": [0, 1, 2, 3, 5, 6, 7, 8], "report": [0, 1, 5], "shpinx": 0, "document": [0, 1, 6, 8], "store": [0, 6, 8], "repositori": [0, 4, 7, 8], "next": [0, 1, 4, 6, 8], "gener": [0, 1, 3, 6, 7, 8], "comput": [0, 1, 2, 3, 4, 5, 6, 7, 8], "model": [0, 1, 2, 3, 4, 6, 7, 8], "simul": [0, 1, 3, 4, 5, 6, 7], "softwar": [0, 1, 5, 6, 8], "user": [0, 1, 2, 3, 4, 5, 6, 7], "support": [0, 1, 2, 4, 8, 9], "educ": [0, 1, 5], "materi": [0, 1, 2, 3, 4, 5, 9], "natur": [0, 1, 2, 5, 7], "hazard": [0, 1, 2, 4, 5, 6, 7, 8], "engin": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "research": [0, 1, 3, 4, 5, 6, 7, 8, 9], "commun": [0, 1, 6], "goal": [0, 1, 2, 4, 7], "advanc": [0, 1, 5, 6], "": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "capabl": [0, 1, 2, 6, 8], "impact": [0, 1, 2, 3, 6, 7, 8], "lifelin": [0, 1, 6], "comprehens": [0, 1, 2, 7, 8], "cyberinfrastructur": [0, 1], "cloud": [0, 1, 2], "manag": [0, 1], "analyz": [0, 1, 3, 4, 5, 7, 8], "understand": [0, 1, 2, 3, 4, 6, 7], "publish": [0, 1], "critic": [0, 1, 7], "data": [0, 1, 2, 3, 5, 6, 7, 8], "within": [0, 1, 2, 3, 4, 5, 6, 7, 8], "cost": [0, 1, 8], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8], "develop": [0, 1, 2, 4, 5, 6, 7, 9], "familiar": [0, 1], "breath": [0, 1], "suitabl": [0, 1], "background": [0, 1, 3], "us": [0, 9], "hpc": [0, 1], "introduc": [0, 1, 3], "revis": [0, 1], "relat": [0, 1], "geotechn": [0, 1, 2, 3, 4, 5, 6, 7, 8], "includ": [0, 1, 2, 3, 4, 5, 6, 8], "uq": [0, 1, 2, 8], "fem": [0, 1, 2, 3], "pb": [0, 1], "etc": [0, 2, 3, 5], "knowledg": [0, 1, 6], "select": [0, 1, 2, 3, 4, 5, 6, 7, 8], "interpret": [0, 1], "analysi": [0, 1, 3, 4, 6, 7, 8], "markup": [0, 1], "languag": [0, 1], "easi": [0, 1, 3], "read": [0, 1, 2, 3, 7], "write": [0, 1, 6, 7], "sphinx": [0, 1], "python": [0, 1, 2, 7, 8], "packag": [0, 1, 7], "In": [1, 2, 3, 4, 5, 6, 7, 8], "we": [1, 2, 3, 4, 5, 7], "adopt": 1, "follow": [1, 2, 3, 4, 5, 6, 7, 8], "well": [1, 2, 3, 5, 7], "establish": 1, "tailor": 1, "investig": [1, 5], "cover": [1, 8], "give": [1, 8], "small": [1, 2, 5], "section": [1, 2, 4, 7], "should": [1, 2, 3, 5, 6, 7, 8], "brief": [1, 2], "execut": [1, 2, 3, 4, 5, 6], "summari": [1, 2, 8], "overview": 1, "It": [1, 2, 3, 4, 5], "written": 1, "last": [1, 6], "ensur": [1, 2, 3], "accur": [1, 2, 3, 5], "reflect": [1, 3], "content": [1, 3, 4], "entir": [1, 3], "aim": [1, 5, 8], "short": 1, "paragraph": 1, "highlight": 1, "kei": [1, 6, 8], "point": [1, 2, 5, 6, 8], "outcom": [1, 3], "clearli": [1, 2], "describ": [1, 5, 6, 7], "being": [1, 3, 4, 5], "address": 1, "text": [1, 2, 6], "imag": [1, 3, 4], "illustr": [1, 2, 5], "issu": [1, 2, 6], "even": 1, "reader": 1, "unfamiliar": 1, "can": [1, 2, 3, 4, 5, 6, 7, 8], "context": [1, 5], "signific": [1, 3, 5, 8], "detail": [1, 2, 3, 6], "relev": [1, 2, 8], "ani": [1, 2, 3, 5, 6], "previou": [1, 7], "attempt": 1, "solv": [1, 6], "outlin": [1, 2], "explan": 1, "method": [1, 2, 3, 4, 5, 6, 7, 8], "process": [1, 2, 3, 7], "equat": [1, 2, 5], "theoret": 1, "involv": 1, "Be": 1, "sure": [1, 4, 8], "make": [1, 2, 4, 8], "necessari": [1, 2], "fulli": 1, "explain": 1, "taken": [1, 2], "its": [1, 3, 4, 5, 7], "how": [1, 2, 4, 7], "wa": [1, 2, 3, 5, 6, 7, 8], "appli": [1, 2, 3, 6, 7], "inform": [1, 2, 3, 4, 5, 6, 8], "yet": [1, 6], "concis": 1, "offer": [1, 8], "enough": 1, "role": 1, "without": [1, 3], "overwhelm": 1, "concret": 1, "help": [1, 3, 5, 7, 8], "discuss": [1, 2, 9], "earlier": 1, "show": [1, 2, 3, 4, 5, 6, 8], "effect": [1, 2, 3, 4, 5, 6, 7, 8], "addit": [1, 2, 3, 4, 5, 6], "comment": 1, "observ": [1, 2, 4], "do": [1, 5], "fit": [1, 6], "other": [1, 2, 3, 5, 6, 7, 8], "could": [1, 3, 6, 7, 8], "limit": [1, 5, 8], "unexpect": 1, "futur": [1, 3, 6, 7, 8], "acknowledg": 1, "open": [1, 2, 3, 4, 5, 8, 9], "dr": 1, "layer": [1, 2, 3, 4, 5, 8], "program": [1, 2, 5], "By": [1, 2, 3, 6], "default": [1, 2, 5, 6], "get": [1, 3, 5, 7, 8], "twelv": 1, "top": 1, "six": [1, 5], "hardwir": 1, "system": [1, 3, 5, 6], "veloc": [1, 3, 4, 5, 6, 7], "specifi": [1, 2, 5, 8], "veri": [1, 3, 8], "fast": [1, 3], "bottom": [1, 3, 4, 5], "slow": 1, "have": [1, 2, 3, 4, 6, 7], "valu": [1, 2, 3, 5, 6, 7], "option": [1, 4, 6, 8], "On": [1, 4], "left": [1, 2, 4, 5, 6], "hand": [1, 4], "corner": 1, "menu": [1, 2], "box": [1, 2, 8], "choos": [1, 2, 4], "plot": [1, 2, 3, 4, 5], "same": [1, 2, 4, 6, 7], "arbitrari": [1, 3], "along": [1, 2, 3, 4, 5], "soil": [1, 6, 7], "note": [1, 2, 6], "height": [1, 2, 3, 4, 5, 8], "h": [1, 3, 4, 6, 7, 8], "you": [1, 2, 4, 5, 7, 8], "place": 1, "insert": [1, 3], "push": [1, 8], "time": [1, 2, 3, 4, 5, 6, 7], "increment": [1, 3], "button": [1, 4, 5, 8], "about": [1, 2, 4, 5, 6, 8, 9], "minut": 1, "obtain": [1, 2, 4, 5, 8], "angular": 1, "frequenc": [1, 2, 4], "2p": 1, "t": [1, 2, 3], "period": [1, 2, 3], "e": [1, 2, 3, 4, 5, 6, 7, 8], "take": [1, 3], "complet": [1, 2, 3, 6, 8], "revolut": 1, "maximum": [1, 2, 5, 6], "displac": [1, 3, 7], "from": [1, 2, 3, 4, 5, 6, 7, 8], "click": [1, 2, 3, 4, 5, 8], "crest": 1, "curv": [1, 2, 6], "your": [1, 2, 4, 8], "cursor": 1, "tf": [1, 3], "frac": [1, 2, 5, 6, 7], "co": [1, 3], "wh": 1, "v_": [1, 5], "af": 1, "w": [1, 2, 3, 6, 7, 8], "2pf": 1, "distanc": [1, 6], "between": [1, 3, 5, 6], "under": [1, 4, 5, 6, 8, 9], "consider": 1, "v": [1, 2, 3, 4, 6, 7, 8], "wave": [1, 3, 4, 5, 6], "travel": 1, "transfer": [1, 9], "function": [1, 2, 6, 9], "amplif": [1, 3], "oper": [1, 4, 5, 6], "control": [1, 5], "via": [1, 6], "command": 1, "associ": [1, 2, 8], "keyboard": 1, "acceler": [1, 3, 5, 6, 7], "manipul": [1, 8], "scale": [1, 6, 7, 8], "load": [1, 2, 3, 4, 5], "bar": [1, 4, 5], "displai": [1, 2, 4, 7], "result": [1, 2, 6, 9], "calcul": [1, 2, 3, 5, 6, 7, 8], "visual": [1, 2, 4, 5, 6, 8], "form": [1, 3, 6], "anim": 1, "also": [1, 2, 3, 4, 5, 7, 8], "dynam": [1, 4, 5], "histori": [1, 3, 6, 7], "There": [1, 2, 3, 5, 6, 7], "mechan": [1, 3, 6], "numer": 1, "blablabla": 1, "head": 1, "row": 1, "column": [1, 2, 4, 5], "2": [1, 2, 3, 6, 7, 8, 9], "3": [1, 2, 3, 4, 5, 6, 7, 8, 9], "either": [1, 2, 7], "To": [1, 2, 3, 8], "run": [1, 2, 3, 4, 5, 6, 7, 8], "forward": [1, 3], "press": [1, 5], "hold": 1, "g": [1, 2, 3, 4, 5, 6, 7, 8], "icon": [1, 2, 4, 5], "reset": 1, "zero": [1, 3, 6], "type": [1, 3, 4, 5, 8], "current": [1, 6], "pane": 1, "screen": 1, "step": [1, 2, 4, 5, 6, 7, 8], "size": [1, 4, 5], "combin": [1, 2], "properti": [1, 2, 3, 4, 5, 7, 8], "intention": 1, "lead": [1, 3, 5, 6], "unstabl": 1, "so": [1, 3, 7], "bewar": 1, "speed": [1, 8], "intern": 1, "mani": [1, 2, 3, 6], "updat": [1, 3, 6, 7, 8], "palett": 1, "below": [1, 2, 3, 4, 5, 8], "window": [1, 4, 5, 8], "version": [1, 6], "mac": [1, 3], "similar": [1, 3], "bit": 1, "differ": [1, 2, 3, 4, 5, 6, 7, 8], "arrow": 1, "panner": 1, "camera": 1, "orbit": 1, "chang": [1, 2, 3, 5, 8], "view": [1, 2, 6, 8], "orient": 1, "drag": [1, 8], "creat": [1, 3, 5, 7, 8], "variou": [1, 2, 3, 4, 5], "node": [1, 3, 5, 8], "target": [1, 5, 6], "fourier": 1, "transform": 1, "fft": [1, 3], "stress": [1, 2, 3, 4, 5], "strain": [1, 5], "down": [1, 2], "while": [1, 2, 3, 5, 6, 7], "desir": [1, 2, 3], "These": [1, 2, 3, 6, 7], "explanatori": 1, "regard": 1, "howev": [1, 6, 7, 8], "continu": [1, 2, 3, 6], "long": [1, 2, 3, 8], "held": 1, "multipl": [1, 2, 3, 4], "adjust": [1, 5], "expans": 1, "contract": [1, 5], "triangular": 1, "horizont": [1, 4, 5], "toolbar": [1, 4], "vertic": [1, 2, 4, 5], "notic": [1, 2, 8], "togeth": [1, 5], "given": [1, 2, 3, 6, 7, 8], "compar": [1, 6], "mislead": 1, "factor": [1, 3, 7], "offset": 1, "scroll": 1, "back": [1, 3, 8], "forth": 1, "automat": 1, "onc": [1, 2, 4, 5], "manual": [1, 8], "though": [1, 2], "ceas": 1, "until": 1, "ad": [1, 4, 5], "remov": [1, 5], "onli": [1, 2, 3, 6, 8], "accumul": 1, "begin": [1, 6], "instal": [1, 7, 8], "except": [1, 3, 6], "which": [1, 2, 3, 4, 5, 6, 7, 8], "alwai": [1, 3], "accord": [1, 6], "up": [1, 4], "first": [1, 2, 3, 4, 5, 7], "1024": 1, "significantli": [1, 2, 6], "especi": [1, 2, 4, 5], "length": [1, 2, 8], "increas": [1, 3, 4, 5, 6, 7, 8], "gv22": [1, 3, 6, 7, 8], "r": [1, 2, 3, 4, 6, 7, 8], "guerra": [1, 3, 6, 7, 8], "vel\u00e1zquez": [1, 3, 6, 7, 8], "hurrican": [1, 3, 6, 7, 9], "mar\u00eda": [1, 3, 6, 7, 8], "public": [1, 3, 6, 7, 8], "health": [1, 3, 6, 7, 8], "puerto": [1, 3, 6, 7, 8], "rico": [1, 3, 6, 7, 8], "lesson": [1, 3, 6, 7, 8], "resili": [1, 3, 6, 7, 8], "prepar": [1, 3, 6, 7, 8], "disast": [1, 3, 6, 7, 8], "annal": [1, 3, 6, 7, 8], "global": [1, 3, 6, 7, 8], "2022": [1, 3, 5, 6, 7, 8], "jib93": [1, 3, 6, 7, 8], "randal": [1, 3, 6, 7, 8], "jibson": [1, 3, 6, 7, 8], "predict": [1, 2, 3, 4, 5, 6, 7, 8], "earthquak": [1, 3, 6, 7, 8], "induc": [1, 3, 4, 6, 7, 8], "landslid": [1, 3, 6, 8, 9], "dsiplac": [1, 3, 6, 7, 8], "newmark": [1, 3, 6, 7, 8], "sslide": [1, 3, 6, 7, 8], "block": [1, 3, 6, 7, 8], "transport": [1, 3, 6, 7, 8], "board": [1, 3, 6, 7, 8], "1411": [1, 3, 6, 7, 8], "17": [1, 3, 4, 6, 7, 8], "p": [1, 3, 5, 6, 7, 8], "1993": [1, 3, 6, 7, 8], "kra96": [1, 3, 6, 7, 8], "l": [1, 3, 4, 6, 7, 8], "kramer": [1, 2, 3, 6, 7, 8], "pearson": [1, 2, 3, 6, 7, 8], "1996": [1, 3, 6, 7, 8], "isbn": [1, 2, 3, 6, 7, 8], "9783642196294": [1, 3, 6, 7, 8], "new65": [1, 3, 6, 7, 8], "n": [1, 3, 4, 6, 7, 8], "m": [1, 3, 4, 5, 6, 7, 8], "dam": [1, 3, 6, 7, 8], "embank": [1, 3, 5, 6, 7, 8], "geotechniqu": [1, 3, 6, 7, 8], "15": [1, 2, 3, 4, 5, 6, 7, 8], "139": [1, 3, 6, 7, 8], "160": [1, 3, 6, 7, 8], "1965": [1, 3, 6, 7, 8], "rb20": [1, 3, 6, 7, 8], "rashidian": [1, 3, 6, 7, 8], "bais": [1, 3, 6, 7, 8], "region": [1, 3, 5, 6, 7, 8], "efficaci": [1, 3, 6, 7, 8], "geospati": [1, 3, 6, 7, 8], "liquefact": [1, 3, 4, 5, 7, 8, 9], "geologi": [1, 3, 6, 7, 8], "272": [1, 3, 6, 7, 8], "105644": [1, 3, 6, 7, 8], "2020": [1, 3, 6, 7, 8], "saf73": [1, 3, 6, 7, 8], "saffir": [1, 3, 6, 7, 8], "wind": [1, 3, 6, 7, 8], "storm": [1, 3, 6, 7, 8], "surg": [1, 3, 6, 7, 8], "militari": [1, 3, 6, 7, 8], "4": [1, 2, 3, 4, 5, 6, 7, 8], "5": [1, 2, 3, 4, 5, 6, 7, 8], "1973": [1, 3, 6, 7, 8], "sgm24": [1, 3, 6, 7, 8], "geyin": [1, 3, 6, 7, 8], "b": [1, 3, 6, 7, 8], "maurer": [1, 3, 6, 7, 8], "rapid": [1, 3, 6, 7, 8], "respons": [1, 3, 6, 7, 8, 9], "scenario": [1, 2, 3, 6, 7, 8], "manuscript": [1, 3, 6, 7, 8], "2024": [1, 3, 7, 8], "zbt17": [1, 3, 6, 7, 8], "j": [1, 3, 6, 7, 8], "zhu": [1, 3, 7, 8], "thompson": [1, 3, 6, 7, 8], "bulletin": [1, 3, 6, 7, 8], "seismolog": [1, 3, 6, 7, 8], "societi": [1, 3, 6, 7, 8], "america": [1, 3, 6, 7, 8], "107": [1, 3, 6, 7, 8], "1365": [1, 3, 6, 7, 8], "1385": [1, 3, 6, 7, 8], "2017": [1, 3, 7, 8], "cesg599": [2, 3, 4, 5, 6, 7, 8], "nheri": [2, 3, 4, 5, 6, 7, 8], "designsaf": [2, 3, 4, 5, 6, 7, 8], "quantifi": [2, 3, 6], "uncertainti": [2, 6, 7], "input": [2, 3, 4, 5, 7, 8], "ultim": 2, "cohes": [2, 7], "perform": [2, 3, 4, 5, 6, 7], "For": [2, 3, 4, 5, 6, 8], "encoung": 2, "holtz": 2, "kovac": 2, "2011": [2, 6], "character": [2, 5, 6], "often": [2, 4], "driven": 2, "ground": [2, 3, 5, 6, 7], "water": [2, 4, 5, 6], "tabl": [2, 5, 6], "placement": 2, "fill": [2, 5], "surchag": 2, "dissip": 2, "excess": [2, 5], "pore": [2, 5], "pressur": [2, 5], "minim": 2, "amount": 2, "expect": 2, "mai": [2, 5, 7], "prove": 2, "larger": [2, 3], "magnitud": [2, 6, 7], "settlment": 2, "differenti": [2, 3], "detriment": 2, "integret": 2, "super": 2, "space": [2, 3, 6], "fine": 2, "grain": [2, 4], "restrict": 2, "drain": 2, "quickli": [2, 3, 6], "void": 2, "As": [2, 3, 5], "settl": 2, "granular": [2, 5], "exhibit": 2, "lower": [2, 6], "tend": 2, "rapidli": 2, "larg": [2, 3, 6, 8], "mean": [2, 3, 4, 6], "much": [2, 7], "coars": 2, "befor": [2, 4, 6, 8], "pertain": 2, "when": [2, 3, 4, 5, 6, 7, 8], "import": [2, 3, 4, 5, 6, 8], "consid": [2, 3, 6, 7], "accept": 2, "singl": [2, 3, 4, 6, 7], "true": [2, 6], "realiti": 2, "situ": [2, 6], "test": [2, 6], "lab": 2, "determin": [2, 3, 6, 8], "paramt": 2, "contain": [2, 5, 6, 8], "vastli": 2, "throughout": [2, 3, 6], "site": [2, 3, 6, 8, 9], "few": [2, 6], "sampl": [2, 3, 5, 6, 8], "repres": [2, 3, 5, 6], "whole": 2, "standard": [2, 3, 8], "quantifict": 2, "problem": [2, 9], "util": [2, 3, 5], "depict": 2, "modifi": [2, 4, 5, 8], "cesg": 2, "562": 2, "adjac": [2, 5], "san": [2, 5, 6], "francisco": [2, 5, 6], "bai": [2, 5], "underlain": 2, "mud": [2, 5], "readi": [2, 6], "5ft": 2, "ultimamt": 2, "interest": [2, 3, 5, 7, 9], "condit": [2, 6], "shown": [2, 3, 4, 5, 6], "indic": [2, 7], "presenc": [2, 3], "crust": 2, "desicc": 2, "thick": [2, 3, 4, 5], "h1": 2, "consolid": 2, "clai": [2, 3, 5], "dens": 2, "gravel": 2, "coeffici": [2, 5], "variat": 2, "ft": [2, 8], "h2": 2, "25": [2, 3, 4, 6], "cc": 2, "75": 2, "20": [2, 3, 4, 6, 8], "eo": 2, "54": 2, "7": [2, 3, 4, 5, 6, 8], "cr": [2, 6], "05": [2, 3], "pre": [2, 6], "consol": 2, "200": [2, 3], "psf": 2, "50": [2, 4, 6, 8], "k": [2, 3], "10e": 2, "6": [2, 3, 4, 5, 6, 7, 8], "cm": [2, 3, 6, 7], "sec": [2, 3, 4], "unit": [2, 3, 4, 7, 8], "weight": [2, 7], "130": 2, "pcf": 2, "convent": [2, 6], "theori": [2, 5, 7], "If": [2, 4, 5], "normal": [2, 3, 7], "\u03c3p": 2, "\u03c3o": 2, "h_": [2, 5], "ult": 2, "c_c": 2, "e_o": 2, "log": [2, 6, 7], "\u03c3_f": 2, "\u03c3_o": 2, "h_o": 2, "\u03b4\u03c3": 2, "c_r": 2, "\u03c3_p": 2, "commpress": 2, "index": [2, 6], "ratio": [2, 3, 5, 8], "recompress": 2, "initi": [2, 3, 6, 7, 8], "preconsolid": 2, "compress": 2, "an": [2, 3, 4, 5, 6, 7, 8], "evalu": [2, 3, 4, 5, 6], "recommend": [2, 6], "subdivid": 2, "sublay": 2, "correspond": [2, 8], "estim": [2, 5, 7, 8], "particularli": [2, 5], "start": 2, "don": 2, "captur": [2, 4, 5], "account": [2, 3], "quantif": [2, 3], "allow": [2, 3, 4, 5, 7, 8], "u": [2, 3, 4, 7], "translat": 2, "enabl": [2, 4], "compound": 2, "most": [2, 3, 5, 7, 8], "both": [2, 6], "script": [2, 8], "found": [2, 3, 4, 8], "here": [2, 3, 6, 7, 8], "produc": [2, 3, 8], "tornado": 2, "diagram": 2, "represent": [2, 4, 5], "gamma_fil": 2, "unknown": 2, "set": [2, 5, 6, 7, 8], "calibart": 2, "anoth": [2, 3, 6], "fig": [2, 3, 6, 8], "qoufem": 2, "finit": [2, 3, 4, 5], "element": [2, 3, 4, 5, 6, 8], "compuat": 2, "although": 2, "origin": [2, 4, 5], "implement": [2, 3, 4, 6, 7, 8], "simpl": [2, 3], "surfac": [2, 3, 5, 6], "easili": [2, 5], "upload": [2, 3], "instead": 2, "tab": [2, 3, 4, 5, 6, 8], "callibr": 2, "statist": 2, "number": [2, 3, 4, 5, 6], "opensea": 2, "rv": [2, 3, 8], "defin": [2, 3, 6, 8], "distribut": [2, 3, 8], "uniform": [2, 3], "edp": [2, 3], "quantiti": [2, 4, 5], "interfac": [2, 3, 5, 6], "after": [2, 6, 7, 8], "enter": [2, 4, 5, 8], "machin": [2, 7, 8], "simpli": [2, 4], "safe": 2, "must": [2, 3, 4, 6, 7], "login": 2, "doe": [2, 8], "expir": 2, "wait": 2, "queue": 2, "least": [2, 6], "hour": [2, 8], "figur": [2, 3, 4, 5, 7], "featur": [2, 5], "aid": [2, 3, 5], "navig": [2, 3], "extract": [2, 7], "scatterplot": 2, "cumul": 2, "want": 2, "Then": [2, 5, 7, 8], "right": [2, 3, 4, 5, 6, 8], "histogram": [2, 3], "x": [2, 6], "axi": 2, "y": 2, "export": [2, 6], "save": [2, 3], "abov": [2, 3, 6, 8], "locat": [2, 3, 4, 6, 7, 8], "csv": [2, 6], "file": [2, 3, 4, 5, 6, 8], "demonstr": [2, 6], "incorpor": [2, 3, 6, 7], "dakota": [2, 3], "seed": [2, 3], "949": 2, "parellel": 2, "dir": 2, "check": [2, 6, 7], "drop": 2, "link": 2, "py": [2, 6, 8], "param": 2, "list": [2, 3, 4, 6], "deviat": [2, 3, 8], "name": [2, 8], "01": [2, 4, 5], "1078": 2, "100": [2, 3, 6, 8], "000001": 2, "000002": 2, "9": [2, 3, 4, 5, 6, 7, 8], "assign": 2, "see": [2, 3, 4, 5, 7, 8], "total": [2, 4, 5], "31": 2, "inch": 2, "88": 2, "cov": 2, "66": 2, "latin": [2, 3], "hypercub": [2, 3], "lh": [2, 3], "simcenteruq": 2, "mont": 2, "carlo": 2, "500": [2, 3], "106": 2, "path": [2, 4, 5], "greatest": [2, 3], "consist": [2, 6, 7], "ii": [2, 3, 8], "case": [2, 3, 4, 6], "identifi": 2, "match": [2, 3, 5], "assum": [2, 3, 4, 5], "field": [2, 5, 6, 8, 9], "sever": [2, 4, 6, 7, 8], "averag": [2, 3, 6], "nl2sol": 2, "opt": [2, 3], "gaussnewton": 2, "algorithm": 2, "optim": 2, "further": [2, 3, 6], "vari": [2, 4, 5], "evid": 2, "nonlinear": [2, 4, 5], "due": [2, 3, 8], "logarithm": 2, "constant": 2, "316": [2, 4], "red": 2, "line": 2, "yield": 2, "black": 2, "dot": 2, "methood": 2, "cannot": [2, 3, 6], "8": [2, 3, 4, 5, 6, 8], "precon": 2, "classic": 2, "prefer": [2, 4], "just": 2, "best": [2, 6], "almost": 2, "equal": 2, "good": 2, "frequent": 2, "aris": [2, 6], "usual": [2, 5], "unidentifi": 2, "bayesain": 2, "ucsd": 2, "non": [2, 3], "hierarch": 2, "85": [2, 4], "data_2": 2, "txt": 2, "download": [2, 4, 7, 8], "settlement_2": 2, "add": [2, 3, 4, 8], "interset": 2, "second": [2, 3, 4, 5], "dummi": 2, "depth": [2, 3, 4, 5, 6], "prior": [2, 6], "posterior": 2, "reveal": 2, "less": 2, "uncertain": 2, "chanc": 2, "highli": 2, "underpredict": 2, "overpredict": 2, "reduc": [2, 4, 6, 7], "hol2011": 2, "978": 2, "0137011322": 2, "variabl": [3, 4, 5, 6, 7, 8], "dure": [3, 4, 5, 9], "special": [3, 5], "attent": 3, "encourag": 3, "jupyt": [3, 7, 8], "notebook": [3, 7, 8], "prj": [3, 8], "4604": [3, 8], "ui": 3, "possibl": [3, 6, 7, 8], "affect": [3, 4, 5, 6], "act": 3, "filter": 3, "amplifi": 3, "de": 3, "incom": 3, "medium": 3, "output": [3, 4, 5, 6, 8], "signal": 3, "simplifi": [3, 5], "idea": [3, 7], "spring": 3, "mass": 3, "connect": 3, "outgo": 3, "propag": [3, 4, 5], "composit": 3, "stiff": [3, 6], "elast": [3, 4, 5], "damp": 3, "forc": [3, 8], "visit": 3, "free": [3, 5], "vibrat": 3, "damper": 3, "earth": 3, "rock": [3, 5], "certain": [3, 7], "order": [3, 4, 7, 8], "influenc": [3, 5], "three": [3, 4, 5, 6], "major": [3, 4, 5, 8], "compon": 3, "shear": [3, 5, 6], "ha": [3, 4, 5, 6, 7], "specif": [3, 4, 5, 6, 7], "reson": 3, "becaus": [3, 6], "peak": [3, 5, 6, 7, 8], "caus": [3, 4, 5], "potenti": [3, 6, 7, 8], "disastr": 3, "behavior": [3, 4, 5], "might": 3, "resist": [3, 5], "reli": [3, 6], "03g": 3, "15g": 3, "soft": 3, "mexico": 3, "citi": [3, 7], "depend": [3, 7], "stratigraphi": 3, "inclus": 3, "accuraci": 3, "reliabl": [3, 6], "analys": [3, 4, 5, 6], "relationship": [3, 5, 6], "mathemat": [3, 5], "convert": [3, 5], "typic": [3, 4, 5, 8], "seri": [3, 9], "multipli": 3, "spectral": [3, 5, 7], "would": [3, 7, 8], "highest": 3, "lowest": 3, "plan": 3, "imped": 3, "contrast": 3, "like": [3, 4, 5, 6, 7], "those": [3, 6], "eqn": [3, 6], "instanc": 3, "look": [3, 7], "One": [3, 4, 8], "tft": 3, "basic": [3, 4, 5, 6], "facilit": 3, "deamplif": 3, "meter": [3, 4, 6], "express": 3, "skew": 3, "dimension": [3, 4, 5], "amplitud": [3, 4], "spectra": 3, "fa": 3, "had": 3, "record": [3, 5, 7], "expand": 3, "full": [3, 8], "code": [3, 6, 7, 8], "titl": [3, 8], "uw": 3, "date": 3, "reserv": 3, "numpi": 3, "np": [3, 6], "json": [3, 5, 8], "matplotlib": 3, "pyplot": 3, "plt": 3, "ifft": 3, "scipi": [3, 6], "respspectra": 3, "resp_spectra": 3, "tfunctionclass": 3, "def": [3, 6], "__init__": [3, 6], "m_freq": 3, "none": [3, 6, 8], "m_time": 3, "m_acc": 3, "m_absfft": 3, "m_abssoiltf": 3, "m_absifft": 3, "m_acct": 3, "m_vel": 3, "m_disp": 3, "m_velt": 3, "m_dispt": 3, "paramet": [3, 6, 7, 8], "m_damp": 3, "percentag": [3, 4], "m_h": 3, "m_v": 3, "calculaterespons": 3, "soiltf": 3, "empty_lik": 3, "dtype": [3, 6], "complex_": 3, "abssoiltf": 3, "float_": 3, "spectrum": [3, 4, 7], "nyquist_index": 3, "absfa": 3, "ab": 3, "calcsoiltf": 3, "ifa": 3, "absfas2": 3, "acct": 3, "real": [3, 6], "print": [3, 6], "vector": 3, "els": [3, 6], "f": [3, 6], "rigid": [3, 5], "pi": 3, "freq": 3, "kstar": 3, "1j": 3, "vsstar": 3, "append": 3, "return": [3, 4, 5, 6], "calculate_nat_freq": 3, "n_pt": 3, "len": [3, 6], "n_freq": 3, "n_freqval": 3, "dfreq": 3, "tf_tan": 3, "rang": [3, 6, 7], "tf_tan1": 3, "calculate_ratio": 3, "grav": 3, "81": 3, "s2": 3, "dt": [3, 4], "accaux": 3, "cumtrapz": 3, "dx": 3, "mvel": 3, "mdisp": 3, "ratioa": 3, "max": [3, 4, 5], "ratiov": 3, "sin_record": 3, "n_point": 3, "2000": 3, "m_dt": 3, "02": 3, "accel": 3, "sin": [3, 7], "set_tim": 3, "set_freq": 3, "sweep_record": 3, "8000": 3, "002": 3, "150": 3, "16": [3, 4, 5], "load_fil": 3, "file_nam": 3, "m_filenam": 3, "try": [3, 7], "object": [3, 9], "jsonobj": 3, "filenotfounderror": 3, "event": [3, 4, 5, 6, 7, 8], "pattern": 3, "timeseri": 3, "pattern_typ": 3, "tsname": 3, "acc_unit": 3, "acc_typ": 3, "acc": 3, "elif": 3, "gal": 3, "981": 3, "timeseries_data": 3, "read_gm": 3, "acc_th": 3, "todoubl": 3, "arrai": [3, 6], "005": 3, "nfreq": 3, "sample_freq": 3, "nyquist_freq": 3, "int": [3, 6], "plot_acc": 3, "label": [3, 4], "xlabel": 3, "ylabel": 3, "legend": [3, 7, 8], "plot_fft": 3, "hz": 3, "plot_tf": 3, "plot_spectra": 3, "acctaux": 3, "psa": 3, "periodst": 3, "psat": 3, "main": [3, 4, 5], "sinusoid": 3, "__name__": 3, "__main__": 3, "post": 3, "build": 3, "postprocess": 3, "copyright": 3, "alborz": 3, "ghofrani": 3, "chen": 3, "nstep": 3, "integ": 3, "nperiod": 3, "power": [3, 8], "minpow": 3, "maxpow": 3, "logspac": 3, "circular": 3, "dw": 3, "arang": 3, "horm": 3, "afft": 3, "1000": 3, "umax": 3, "vmax": 3, "amax": 3, "loop": 3, "dashpot": 3, "coeff": 3, "c": [3, 6, 7], "complex": [3, 5], "mirror": 3, "her": 3, "conj": 3, "domain": 3, "qfft": 3, "ignor": 3, "imaginari": 3, "utim": 3, "procedur": [3, 6, 7], "parallel": 3, "directori": 3, "913": 3, "gi": [3, 6, 7, 8], "sinc": 3, "sim": 3, "custompi": 3, "spatial": [3, 7, 8], "dimens": 3, "degre": [3, 4], "freedom": 3, "dof": 3, "centroid": 3, "evt": 3, "demand": 3, "random": 3, "seen": 3, "local": [3, 4, 5, 8], "devic": 3, "posit": 3, "occur": [3, 4, 5, 7], "11": [3, 4, 8], "carri": 3, "what": [3, 4, 7], "worst": 3, "12": [3, 4, 5, 6, 8], "13": [3, 4, 8], "infinit": [3, 7], "suit": [3, 7], "gaussian": 3, "mixtur": 3, "measur": [3, 5, 6, 7, 8], "probabl": [3, 6], "subpopul": 3, "popul": [3, 6, 8], "14": [3, 4, 5], "situat": [3, 5], "extrapol": 3, "shape": [3, 4, 5, 6], "49": 3, "03": 3, "98": [3, 4], "With": 3, "4g": 3, "25g": 3, "stori": 3, "risk": [3, 7, 8], "safeti": [3, 7], "18": 3, "thank": 3, "everyon": 3, "sang": 3, "ri": 3, "yi": 3, "frank": 3, "mckenna": 3, "jinyan": 3, "zhao": 3, "aakash": 3, "bangalor": 3, "satish": 3, "barbaro": 3, "cetin": 3, "effort": 3, "assist": 3, "quarter": 3, "them": [3, 4, 8], "ve": [3, 7], "been": [3, 4, 5, 6, 7], "lot": 3, "my": 3, "favorit": 3, "realli": [3, 6], "abl": 3, "great": 3, "prof": 3, "who": 3, "made": [3, 6, 8], "hi": 3, "motiv": 3, "contagi": 3, "academ": 3, "professor": 3, "learn": [3, 6, 7, 8, 9], "seismic": [4, 5], "bedrock": [4, 5], "crucial": [4, 6], "particular": 4, "better": [4, 6, 7], "withstand": [4, 6], "primari": [4, 5], "durat": 4, "specfic": 4, "subject": [4, 5], "seven": 4, "liquefi": [4, 5], "boundari": [4, 5], "deposit": [4, 5], "predomin": [4, 5], "sh": [4, 5], "underli": [4, 5], "kit": [4, 5], "fe": [4, 5], "constitut": [4, 5], "elasticisotrop": 4, "pm4sand": 4, "pm4silt": 4, "pressureindependendemultiyield": 4, "pimi": 4, "pressuredependmultiyield": 4, "pdmy": 4, "pressuredependmultiyield02": 4, "pdmy02": 4, "mazari": 4, "dafalia": 4, "j2cyclicboundingsurfac": 4, "j2bound": 4, "porpus": 4, "definit": [4, 8], "sandi": [4, 5], "cyclic": [4, 5], "sand": [4, 5, 6], "phenomena": 4, "mobil": [4, 5], "satur": [4, 5], "loos": [4, 5], "rearrang": 4, "densifi": 4, "consequ": [4, 7, 8], "strength": [4, 5, 6, 7], "overburden": 4, "behav": [4, 5], "liquid": [4, 5], "lose": [4, 5], "abil": [4, 5], "refer": [4, 5, 7, 9], "simplest": 4, "assumpt": 4, "isotrop": 4, "upon": 4, "unload": 4, "area": [4, 5, 6, 7, 8], "upper": [4, 6], "gwt": [4, 5], "groundwat": [4, 6], "delet": 4, "characterist": [4, 5, 6], "densiti": [4, 5], "mesh": [4, 5], "kpa": [4, 5, 7], "kn": [4, 7], "panel": [4, 5, 8], "graphic": [4, 5], "configur": [4, 5], "opense": 4, "slope": [4, 5, 7], "inclin": 4, "our": [4, 7], "studi": [4, 6, 7, 8], "terrain": 4, "were": [4, 6, 7, 8, 9], "nodal": [4, 5], "side": [4, 5], "progress": [4, 5], "app": 4, "perfom": 4, "done": [4, 7], "pga": [4, 5, 6, 7], "pop": 4, "And": 4, "know": 4, "disappear": 4, "\u03b3": 4, "respect": [4, 8], "29": 4, "high": [4, 6], "sit": 4, "57": 4, "third": 4, "\u03c1": 4, "unsat": 4, "kg": [4, 5], "sat": 4, "o": 4, "ref": [4, 8], "mpa": 4, "po": [4, 5], "esu1": 4, "91": 4, "266": 4, "09": 4, "08": [4, 5], "335": 4, "79": 4, "52": 4, "167580": 4, "esu2": 4, "202": 4, "39": 4, "00": 4, "76": 4, "61": 4, "67": 4, "32": [4, 5], "14364": 4, "esu3": 4, "380": [4, 5], "24": [4, 5, 6], "153216": 4, "83": 4, "graph": 4, "tohoku": 4, "41207": 4, "ew": 4, "58": 4, "359": 4, "35999": 4, "rsn6911_darfield_horcn18": 4, "60": [4, 5], "12036": 4, "rsn803_lomap_wvc270": 4, "7998": 4, "rsn4457_monten": 4, "68": [4, 5], "40": 4, "4040": 4, "ishinomaki": 4, "77": [4, 5], "299": 4, "29999": 4, "82": 4, "141": 4, "28335": 4, "rsn727_super": 4, "96": [4, 8], "22": 4, "2221": 4, "folder": 4, "out_tcl": 4, "s3hark": [4, 5], "shark": 4, "than": [4, 6], "copi": [4, 8], "overwrit": [4, 6], "new": [4, 8], "old": 4, "ones": [4, 6], "author": [5, 9], "ex": 5, "commonli": 5, "sourc": [5, 6, 8], "wide": 5, "gui": 5, "boulang": [5, 6], "ziotopoul": 5, "dilat": 5, "known": [5, 6], "foundat": 5, "categori": [5, 6, 8], "flag": 5, "atmospher": 5, "calibr": 5, "secondari": 5, "circumst": 5, "appar": 5, "rel": 5, "d_r": 5, "modulu": 5, "g_o": 5, "rate": 5, "h_po": 5, "correl": [5, 7, 8], "penetr": [5, 6], "cpt": [5, 6], "spt": 5, "idriss": [5, 6], "2008": [5, 6], "n_1": 5, "_": [5, 6], "c_d": 5, "46": 5, "g_max": 5, "chosen": 5, "g_": 5, "rho": 5, "usign": 5, "g_0": 5, "p_a": 5, "henc": 5, "respond": [5, 6], "proport": 5, "hook": 5, "law": 5, "2g": 5, "nu": 5, "poisson": 5, "ration": 5, "movement": 5, "temporarili": 5, "flow": 5, "face": 5, "riverbank": 5, "retain": [5, 6], "wall": [5, 8], "nearbi": 5, "damag": [5, 6, 7, 9], "focu": 5, "angl": [5, 7], "acronym": 5, "intend": [5, 9], "audienc": 5, "practition": 5, "teach": 5, "friendli": 5, "built": [5, 6, 7, 8], "simultan": 5, "comprehend": 5, "statu": 5, "2d": 5, "3d": 5, "fluid": 5, "porou": 5, "media": 5, "linear": 5, "bi": 5, "flat": 5, "split": 5, "insid": 5, "\u03b3max": 5, "maxdisp": 5, "maxru": 5, "maxrupwp": 5, "some": [5, 7], "plu": 5, "minu": 5, "level": 5, "vs30": [5, 6], "widget": 5, "shall": 5, "review": 5, "treasur": 5, "island": [5, 8], "atop": 5, "strata": 5, "overlai": 5, "activ": 5, "1989": 5, "loma": 5, "prieta": 5, "li": 5, "yerba": 5, "buena": 5, "outcrop": 5, "endeavor": 5, "entail": 5, "furthermor": 5, "alpha": 5, "covent": 5, "th": 5, "notifi": 5, "finish": [5, 6], "spetrum": 5, "stimul": 5, "sand1": 5, "175": 5, "69": 5, "33": 5, "clay1": 5, "198": 5, "172": 5, "sand2": 5, "300": 5, "clay2": 5, "280": [5, 8], "423": 5, "sand3": 5, "62": 5, "clay3": 5, "486": 5, "wrock": 5, "600": 5, "rockb": 5, "1830": 5, "19526": 5, "maximun": 5, "withing": 6, "umbrella": 6, "coseism": 6, "phenomenon": 6, "shake": 6, "network": 6, "pose": 6, "ideal": 6, "resolut": 6, "individu": 6, "asset": [6, 8], "map": [6, 7, 8], "across": [6, 7], "extent": 6, "common": 6, "thu": 6, "need": [6, 7, 8], "promis": 6, "shortcom": 6, "subsurfac": 6, "predictor": 6, "artifici": 6, "intellig": 6, "ai": [6, 8], "assess": [6, 8], "liquefc": 6, "life": 6, "desk": 6, "refin": 6, "unlock": 6, "insight": 6, "beyond": 6, "prescrib": 6, "emerg": 6, "evacu": 6, "rout": 6, "immedi": 6, "databas": 6, "inventori": [6, 8], "vulner": 6, "demograph": 6, "state": 6, "logist": 6, "regress": 6, "train": 6, "propos": [6, 7, 8], "pars": [6, 8], "empir": 6, "trait": 6, "cone": 6, "pgam7": 6, "manifest": 6, "lpi": 6, "therebi": 6, "year": [6, 8], "therefor": [6, 8], "becom": 6, "supervis": 6, "mi": 6, "ll": 6, "m7": 6, "1g": 6, "arctan": 6, "cdot": 6, "geq": 6, "37": 6, "serv": 6, "proxi": 6, "metric": 6, "topographi": 6, "rough": 6, "elev": [6, 7], "bodi": 6, "geomorphologi": 6, "hydrologi": 6, "dataset": [6, 8], "geostatist": 6, "krige": 6, "farther": 6, "awai": 6, "higher": 6, "motion": [6, 7], "raster": [6, 7, 8], "against": [6, 7], "receiv": 6, "improv": [6, 8], "auc": 6, "comparison": 6, "feb": 6, "m6": 6, "christchurch": 6, "substanti": 6, "wherea": [6, 7], "failur": [6, 8], "intermedi": 6, "access": [6, 7, 8], "loss": [6, 7, 8], "shakemap": 6, "extend": 6, "california": 6, "workflow": [6, 7, 8], "grid": [6, 7], "downtown": 6, "approxim": 6, "forecast": 6, "ruptur": [6, 7], "extrem": 6, "m8": 6, "andrea": 6, "intens": [6, 7, 8], "pgv": [6, 7], "snippet": 6, "zhuetal2017": 6, "coast": 6, "cutoff": 6, "prob_liq": 6, "precip": 6, "dist_coast": 6, "dist_riv": 6, "gw_depth": 6, "upstream": 6, "pbee": 6, "float": 6, "ndarrai": 6, "mag": 6, "moment": 6, "threshold": 6, "station": 6, "dict": 6, "infom": 6, "id": 6, "lon": 6, "lat": 6, "z1pt0": 6, "z2pt5": 6, "vsinfer": 6, "rrup": 6, "rjb": 6, "rx": 6, "geolog": [6, 7], "30": 6, "mm": 6, "annual": 6, "precipit": 6, "km": 6, "nearest": [6, 7], "river": 6, "dist_wat": 6, "lake": 6, "fix": 6, "dist_water_cutoff": 6, "switch": 6, "coastal": 6, "liquefaciton": 6, "liq_susc_v": 6, "str": 6, "suscept": 6, "vol": 6, "pp": 6, "dist_to_wat": 6, "dist_to_riv": 6, "dist_to_coast": 6, "interpolate_spatial_paramet": 6, "coordin": 6, "4326": 6, "lat_stat": 6, "lon_stat": 6, "distwat": 6, "samplerast": 6, "inputcr": 6, "distriv": 6, "distcoast": 6, "gw_water": 6, "gwdepth": 6, "ln_im_data": 6, "eq_data": 6, "im_list": 6, "output_kei": 6, "additional_output_kei": 6, "num_stat": 6, "num_scenario": 6, "pgv_col_id": 6, "enumer": 6, "pga_col_id": 6, "scenario_id": 6, "num_rlz": 6, "im_data_scen": 6, "rlz_id": 6, "exp": 6, "model_output": 6, "additional_output": 6, "item": 6, "getattr": 6, "warn": 6, "avali": 6, "trig": 6, "sy": 6, "exit": 6, "miss": 6, "stderr": 6, "zero_prob_liq": 6, "1e": 6, "decim": 6, "model_transit": 6, "x_logist": 6, "empti": 6, "99": 6, "liq_susc": 6, "correct": [6, 8], "allstadt": 6, "pgv_mag": 6, "pga_mag": 6, "56": 6, "ind_coast": 6, "ind_glob": 6, "cap": 6, "1700": 6, "b0": 6, "b1": 6, "var1": 6, "susceptbl": 6, "disregard": 6, "term": 6, "801": 6, "918": 6, "408e": 6, "2054": 6, "0333": 6, "435": 6, "615": 6, "556e": 6, "0287": 6, "sqrt": 6, "0666": 6, "0369": 6, "catch": 6, "nan": 6, "isnan": 6, "liq": 6, "susc": 6, "val": 6, "334": 6, "301": 6, "prob": 6, "avoid": 6, "620": 6, "sigma_mu": 6, "liq_susc_enum": 6, "very_high": 6, "95": 6, "moder": [6, 8], "low": 6, "very_low": 6, "38": 6, "liq_prob": 6, "referenc": 6, "did": 6, "quick": 6, "lpi_a": 6, "lpi_b": 6, "sangeretal2024": 6, "msf": 6, "058": 6, "zeros_lik": 6, "mask_low": 6, "mask_high": 6, "stat": 6, "norm": 6, "minor": [6, 8], "lpi_beta": 6, "774": 6, "lpi_theta": 6, "095": 6, "cdf": 6, "fragil": 6, "preliminari": 6, "accomplish": 6, "viz": [6, 8], "graduat": [6, 9], "symbol": 6, "divis": 6, "greater": 6, "alert": 6, "preliminarli": 7, "asses": 7, "slide": 7, "portion": 7, "seattl": 7, "resourc": [7, 9], "m9": 7, "vital": 7, "protect": 7, "live": [7, 8], "preserv": 7, "environ": 7, "enhanc": 7, "scientif": 7, "mitig": 7, "devast": 7, "occurr": 7, "m_w": 7, "aria": 7, "i_a": 7, "a_c": 7, "k_c": 7, "sa": 7, "static": 7, "fs_": 7, "beta": 7, "gamma": 7, "phi": 7, "brail": [7, 8], "embed": 7, "emb": 7, "digit": 7, "dem": 7, "publicali": 7, "servic": 7, "usg": 7, "portal": 7, "newlin": 7, "gdal": 7, "rasterio": 7, "earthqueak": 7, "remind": 7, "mesur": 7, "repons": 7, "itself": 7, "own": 7, "protocol": 7, "hub": 7, "dn": 7, "460": 7, "642": 7, "546": 7, "2c": 7, "z": 7, "cot": 7, "tan": 7, "m\u00b3": 7, "friction": 7, "lidar": 7, "dtm": 7, "subsequ": 7, "librari": 7, "synthet": 7, "cascadia": 7, "megathrust": 7, "neighbor": 7, "interpol": 7, "stregth": 7, "now": 7, "heurist": 7, "hazardnewmark": 7, "ipynb": [7, 8], "pleas": 7, "care": 7, "instruct": 7, "readm": 7, "difficult": 7, "adress": [7, 8], "out": 7, "amd": 7, "siimcent": 7, "maria": 8, "struck": 8, "septemb": 8, "claim": 8, "3000": 8, "viequ": 8, "gust": 8, "nation": 8, "institut": 8, "technogologi": 8, "nist": 8, "900": 8, "wood": 8, "hazu": 8, "tropic": 8, "strong": 8, "heavi": 8, "rain": 8, "simpson": 8, "categor": 8, "sustain": 8, "deem": 8, "destruct": 8, "soruc": 8, "tigh": 8, "pa": 8, "destroi": 8, "home": 8, "facil": 8, "healthcar": 8, "center": 8, "exacerb": 8, "crisi": 8, "decad": 8, "recent": 8, "velasquez": 8, "highlith": 8, "weak": 8, "recoveri": 8, "challeng": 8, "emphas": 8, "prepared": 8, "gather": 8, "lossess": 8, "baselin": 8, "ruleset": 8, "mile": 8, "per": 8, "mph": 8, "recognit": 8, "footprint": 8, "attribut": 8, "nsi": 8, "fetch": 8, "googl": 8, "street": 8, "api": 8, "modul": 8, "numberoffloor": 8, "yearbuilt": 8, "occupancyclassifi": 8, "merg": 8, "bim": 8, "buld": 8, "pip": 8, "footprinthandl": 8, "nsipars": 8, "imhandl": 8, "imagehandl": 8, "queri": 8, "name_kei": 8, "vieques_2": 8, "laja": 8, "lonmin": 8, "latmin": 8, "lonmax": 8, "latmax": 8, "exten": 8, "bound": 8, "fpsourc": 8, "openstreetmap": 8, "microsoft": 8, "iii": 8, "fema": 8, "usa": 8, "keyword": 8, "osm": 8, "usastr": 8, "footprint_sourc": 8, "lengthunit": 8, "outputfil": 8, "buildinginventori": 8, "geojson": 8, "fphandler": 8, "fetch_footprint_data": 8, "_footprint": 8, "getnsidata": 8, "outfil": 8, "depot": 8, "losses_damage_r2d": 8, "inventorybrail": 8, "932": 8, "methodologi": 8, "conduct": 8, "occup": 8, "roof": 8, "e8": 8, "e17": 8, "pr": 8, "inut": 8, "autopopul": 8, "verifi": 8, "haz": 8, "pw": 8, "asd": 8, "interv": 8, "go": 8, "hta": 8, "mod": 8, "ana": 8, "imasedp": 8, "apllic": 8, "dl": 8, "pelicun3": 8, "losss": 8, "mh": 8, "mu": 8, "auto": 8, "auto_hu_pr": 8, "designdaf": 8, "stampede2": 8, "min": 8, "skylak": 8, "skx": 8, "48": 8, "processor": 8, "sp": 8, "retriev": 8, "re": 8, "mostlikelycriticaldamagest": 8, "correspon": 8, "qualit": 8, "No": 8, "visibl": 8, "outsid": 8, "broken": 8, "figremjobpan": 8, "technic": 8, "mean_repaircost_loss_ratio": 8, "repair": 8, "std_repaircost_loss_ratio": 8, "goe": 8, "breakdown": 8, "ds0": 8, "ds1": 8, "ds2": 8, "ds3": 8, "ds4": 8, "suggest": 8, "suffer": 8, "qgi": 8, "trend": 8, "product": 8, "heatmap": 8, "layout": 8, "increasingli": 8, "happen": 8, "climat": 8, "hurican": 8, "exposur": 8, "possess": 8, "vast": 8, "scarc": 8, "cours": 9, "civil": 9, "anyon": 9, "descript": 9, "quofem": 9, "settlement": 9, "solut": 9, "strategi": 9, "remark": 9, "eeuq": 9, "hark": 9, "jos\u00e9": 9, "manuel": 9, "espinola": 9, "r2d": 9, "angel": 9, "hoyo": 9, "rey": 9, "depart": 9, "environment": 9, "univers": 9, "washington": 9, "auspic": 9}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"cesg599": [0, 1, 9], "nheri": [0, 1, 9], "an": [0, 1, 9], "introduct": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "simcent": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "tool": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "designsaf": [0, 1, 9], "resourc": [0, 1], "author": [0, 1, 2, 3, 4, 6, 7, 8], "cours": [0, 1], "descript": [0, 1, 2, 3, 4, 5, 6, 7, 8], "learn": [0, 1], "object": [0, 1], "problem": [1, 3, 4, 5, 6, 7, 8], "solut": [1, 2, 3, 4, 5, 6, 7, 8], "strategi": [1, 2, 3, 4, 5, 6, 7, 8], "us": [1, 2, 3, 4, 5, 6, 7, 8], "exampl": [1, 2, 3, 4, 5, 6, 7, 8], "applic": [1, 2, 3, 4, 5, 6, 7, 8], "remark": [1, 2, 3, 4, 6, 7, 8], "examplel": 1, "list": 1, "figur": 1, "tabl": [1, 3, 4], "refer": [1, 6, 8], "etc": 1, "titl": 1, "quofem": 2, "settlement": 2, "kendra": 2, "mutch": 2, "project": 2, "soil": [2, 3, 4, 5], "profil": [2, 3, 4, 5], "paramet": [2, 4, 5], "One": 2, "forward": 2, "propag": 2, "random": 2, "variabl": 2, "two": 2, "sensit": 2, "analysi": [2, 5], "three": 2, "calibr": 2, "determinist": 2, "bayesian": 2, "eeuq": 3, "transfer": 3, "function": 3, "erick": 3, "martinez": 3, "fourier": 3, "transform": 3, "equat": 3, "uncertainti": 3, "motion": [3, 4, 5], "pre": 3, "workflow": 3, "python": 3, "script": 3, "ee": 3, "uq": 3, "result": [3, 4, 5, 8], "1": [3, 4], "natur": 3, "frequenc": 3, "s3": [4, 5], "hark": [4, 5], "site": [4, 5], "respons": [4, 5], "jos\u00e9": 4, "manuel": 4, "barreto": 4, "espinola": 4, "condit": [4, 5], "earthquak": [4, 5], "2": [4, 5], "ground": 4, "peak": 4, "acceler": 4, "maximum": 4, "shear": 4, "strain": 4, "displac": [4, 5], "excess": 4, "pore": 4, "pressur": 4, "ratio": 4, "surfac": 4, "rock": 4, "opense": 5, "model": 5, "pm4sand": 5, "elasticisotrop": 5, "later": 5, "spread": 5, "process": 5, "table1": 5, "r2d": [6, 7, 8], "liquefact": 6, "morgan": 6, "sanger": 6, "zhu": 6, "et": 6, "al": 6, "2017": 6, "2024": 6, "landslid": 7, "lui": 7, "angel": 7, "guerrero": 7, "hoyo": 7, "hurrican": 8, "damag": 8, "daniel": 8, "acosta": 8, "rey": 8, "state": 8, "residenti": 8, "build": 8, "welcom": 9, "cesg": 9, "599": 9, "infrastructur": 9, "what": 9, "i": 9, "content": 9, "acknowledg": 9}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"CESG599 - NHERI": [[0, "cesg599-nheri"]], "An introduction to NHERI Simcenter tools and DesignSafe Resources": [[0, "an-introduction-to-nheri-simcenter-tools-and-designsafe-resources"]], "Authors:": [[0, "authors"], [1, "authors"]], "Course Description": [[0, "course-description"], [1, "course-description"]], "Learning Objectives": [[0, "learning-objectives"], [1, "learning-objectives"]], "Course Introduction": [[1, "course-introduction"]], "CESG599 - NHERI - An introduction to NHERI Simcenter tools and DesignSafe Resources": [[1, "cesg599-nheri-an-introduction-to-nheri-simcenter-tools-and-designsafe-resources"]], "Introduction": [[1, "introduction"], [2, "introduction"], [3, "introduction"], [4, "introduction"], [5, "introduction"], [6, "introduction"], [7, "introduction"], [8, "introduction"]], "Problem Description": [[1, "problem-description"], [3, "problem-description"], [4, "problem-description"], [5, "problem-description"], [6, "problem-description"], [7, "problem-description"], [8, "problem-description"]], "Solution Strategy": [[1, "solution-strategy"], [2, "solution-strategy"], [3, "solution-strategy"], [4, "solution-strategy"], [5, "solution-strategy"], [6, "solution-strategy"], [7, "solution-strategy"], [8, "solution-strategy"]], "SimCenter Tool Used": [[1, "simcenter-tool-used"], [1, "id1"], [2, "simcenter-tool-used"], [3, "simcenter-tool-used"], [4, "simcenter-tool-used"], [5, "simcenter-tool-used"], [6, "simcenter-tool-used"], [7, "simcenter-tool-used"], [8, "simcenter-tool-used"]], "Example of Application": [[1, "example-of-application"]], "Remarks": [[1, "remarks"], [1, "id2"], [2, "remarks"], [3, "remarks"], [4, "remarks"], [6, "remarks"], [7, "remarks"], [8, "remarks"]], "EXAMPLELS of LISTS, FIGURES, TABLE, REFERENCE, etc": [[1, "examplels-of-lists-figures-table-reference-etc"]], "Title": [[1, "id13"]], "Example Application": [[1, "example-application"], [3, "example-application"], [4, "example-application"], [5, "example-application"], [6, "example-application"], [7, "example-application"], [8, "example-application"]], "QuoFEM - Settlements": [[2, "quofem-settlements"]], "Author: Kendra Mutch": [[2, "author-kendra-mutch"]], "Project Description": [[2, "project-description"]], "Soil Profile Parameters": [[2, "id1"]], "Example Applications": [[2, "example-applications"]], "Example One - Forward Propagation": [[2, "example-one-forward-propagation"]], "Random Variables": [[2, "id4"]], "Example Two - Sensitivity Analysis": [[2, "example-two-sensitivity-analysis"]], "Example Three - Parameter Calibration": [[2, "example-three-parameter-calibration"]], "Deterministic Calibration": [[2, "deterministic-calibration"]], "Bayesian Calibration": [[2, "bayesian-calibration"]], "EEUQ - Transfer Function": [[3, "eeuq-transfer-function"]], "Author: Erick Martinez": [[3, "author-erick-martinez"]], "Fourier Transform": [[3, "fourier-transform"]], "Transfer Function Equation": [[3, "transfer-function-equation"]], "Example": [[3, "example"]], "Soil Profile": [[3, "soil-profile"]], "Uncertainty": [[3, "uncertainty"]], "Motion": [[3, "motion"]], "Pre-Workflow Python Script": [[3, "pre-workflow-python-script"]], "Workflow in EE-UQ": [[3, "workflow-in-ee-uq"]], "Results": [[3, "results"], [4, "results"], [8, "results"]], "Table 1. Natural Frequencies in the Transfer Function": [[3, "id29"]], "S3 hark - Site Response 1": [[4, "s3-hark-site-response-1"]], "Author: Jos\u00e9 Manuel Barreto Espinola": [[4, "author-jose-manuel-barreto-espinola"]], "Soil Condition": [[4, "soil-condition"]], "Table 1. Soil Profile Parameters": [[4, "id10"]], "Earthquake Condition": [[4, "earthquake-condition"]], "Table 2. Ground Motion Parameters": [[4, "id11"]], "Peak Ground Acceleration": [[4, "peak-ground-acceleration"]], "Maximum Shear Strain": [[4, "maximum-shear-strain"]], "Maximum Displacement": [[4, "maximum-displacement"]], "Maximum Excess Pore Pressure Ratio": [[4, "maximum-excess-pore-pressure-ratio"]], "Ground Surface Response": [[4, "ground-surface-response"]], "Rock Motion": [[4, "rock-motion"]], "S3 hark - Site Response 2": [[5, "s3-hark-site-response-2"]], "OpenSees": [[5, "opensees"]], "Soil model": [[5, "soil-model"]], "PM4Sand Model": [[5, "pm4sand-model"]], "Elasticisotropic Model": [[5, "elasticisotropic-model"]], "Lateral Spreading": [[5, "lateral-spreading"]], "Analysis Processes": [[5, "analysis-processes"]], "Earthquake motion": [[5, "earthquake-motion"]], "Soil condition": [[5, "soil-condition"]], "Table1. Soil Profile Parameters": [[5, "id8"]], "Result": [[5, "result"]], "Displacement": [[5, "displacement"]], "R2D - Liquefaction": [[6, "r2d-liquefaction"]], "Author: Morgan Sanger": [[6, "author-morgan-sanger"]], "Zhu et al. (2017)": [[6, "zhu-et-al-2017"]], "Sanger et al. (2024)": [[6, "sanger-et-al-2024"]], "References": [[6, "references"], [8, "references"]], "R2D - Landslides": [[7, "r2d-landslides"]], "Author: Luis Angel Guerrero Hoyos": [[7, "author-luis-angel-guerrero-hoyos"]], "R2D - Hurricane Damage": [[8, "r2d-hurricane-damage"]], "Author: Daniel Acosta Reyes": [[8, "author-daniel-acosta-reyes"]], "Damage State for Residential Buildings": [[8, "id27"]], "Welcome to CESG 599 - NHERI - An Introduction to SimCenter tool and DesignSafe Infrastructure!": [[9, "welcome-to-cesg-599-nheri-an-introduction-to-simcenter-tool-and-designsafe-infrastructure"]], "What is CESG599-NHERI": [[9, "what-is-cesg599-nheri"]], "Contents": [[9, null]], "Acknowledgements": [[9, "acknowledgements"]]}, "indexentries": {}}) \ No newline at end of file