From 57b62ea9f2483ccc2130d0888f5b0bd75814fb0d Mon Sep 17 00:00:00 2001 From: Pedro Arduino Date: Tue, 11 Jun 2024 10:19:29 -0700 Subject: [PATCH] small change to case5 1- for hiding code --- source/.DS_Store | Bin 8196 -> 0 bytes source/.case_1.rst.un~ | Bin 236790 -> 0 bytes source/.case_2.rst.swp | Bin 0 -> 16384 bytes source/.case_2.rst.un~ | Bin 5964 -> 0 bytes source/.case_3.rst.un~ | Bin 590 -> 0 bytes source/.case_4.rst.un~ | Bin 590 -> 0 bytes source/.case_5.rst.swp | Bin 0 -> 53248 bytes source/.case_5.rst.un~ | Bin 681 -> 7561 bytes source/case_1.rst~ | 346 -------------------- source/case_2.rst~ | 720 ----------------------------------------- source/case_3.rst~ | 435 ------------------------- source/case_4.rst~ | 324 ------------------- source/case_5.rst | 34 +- source/case_5.rst~ | 18 +- 14 files changed, 48 insertions(+), 1829 deletions(-) delete mode 100644 source/.DS_Store delete mode 100644 source/.case_1.rst.un~ create mode 100644 source/.case_2.rst.swp delete mode 100644 source/.case_2.rst.un~ delete mode 100644 source/.case_3.rst.un~ delete mode 100644 source/.case_4.rst.un~ create mode 100644 source/.case_5.rst.swp delete mode 100644 source/case_1.rst~ delete mode 100644 source/case_2.rst~ delete mode 100644 source/case_3.rst~ delete mode 100644 source/case_4.rst~ diff --git a/source/.DS_Store b/source/.DS_Store deleted file mode 100644 index 64023f6098f78564fde5ecd9f5b752123a7da89d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 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 aQthLsl*;904KJcxPC?G3g literal 0 HcmV?d00001 diff --git a/source/.case_2.rst.un~ b/source/.case_2.rst.un~ deleted file mode 100644 index 331d0baf0591bd1ff96dfb4d169b4b194607d47a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5964 zcmeI0zmMER6vw?wAOuJtBn1UXucNvBb+?z>I{^|Rp$N(;a7ie0v)=LEBwmj-Grr}h zNI}De20@8{mV$qP0x6=QNI(jy5FL;ngpeX3cwetaXYEPRDwmZ~_(`L&$K$d6zMq}< z_FYn=FD@ph_3uG_aO0yZyRCD#K78r(?>?!2eB;NLe|z<_-pv<({r;bOpWgZ9W)Rfx z1VQaYvw2}lSxUuF(m>kKsJ^u1wj}k1RUw5s31#X?N92r1Y$OduSrR&>6H6i)V6HNh zSxG7(K~_0QM%t9GOP(O&9jk1UUXOJ$q_J{ae220N`7?MSX`E1r+rizqK&jE8w3esF zG4-+PwzN(Sg_8q*jN(Y%WsSS;^!Kd)5v44u?3B0mQ zLY*1@QhsU8?Z#2p1wn9}Tb)~t+f&?N=zR;KaQ)aJT&)F{ zf5KHZ+~5tDp7tmIvE@tofvSJV9*DwoU*>WI!QU_N+R*7)Rs_;OieUL#E)$L)!+Bwl z>=}Pj$>cpTubyT4sw@+JA;(yz+uY|e<>En*qs6Ef4niH`<_#k9oQYM!c~8u%XW@P* z3kQiH+|S(a2?s&^s22`GJA zIW(&z(q<%(VDJ(gx;f3@h`v8~7kfI0dZOe*(8d%7?_#VX3|^S0F=2m{3B!*YgmHG6 zZw=W-Dnlh=63%g|#;PI}8>(%|`JN`L6<->qv5Hifi%txTV^&mxyNnr4U+Y1u&t$~POrDxSz1|cudJ+gyS?Rh zW3js^!cM2xXt&#)M!U1vdTsM^vw*6+5yE=_46ew_WffF#$pLH@sE+1P)h4B}>CLdJ N0Pn8=FJHU+_5a<%$58+P diff --git a/source/.case_3.rst.un~ b/source/.case_3.rst.un~ deleted file mode 100644 index f843aebb4f39ab9960c843f9782881dae4437bda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmWH`%$*;a=aT=Ff$4wT{7HT;q07Doot$lae7%@S?^lUGy=fJlmA~7J%qPreU|`(L zz`&ps9HU@WTv}k2V4R?kkywjIkf-) diff --git a/source/.case_4.rst.un~ b/source/.case_4.rst.un~ deleted file mode 100644 index 39ded2788d6bf8f3903f764bfd50dde2e405ee6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmWH`%$*;a=aT=Ff$6X7Yo_R(rny?Vyc%*Hd-yo~{neMu+QYc(r^}lA&-Akx7#Lj` z7#Ng-V-&24OAD+Lj1v?x5{t4GbQOX#OHvhrQi}`n^NLdyjDV_`p_ma!qhp{D14CN+ zq}wbY877AK3t$mc0we`9gyBCBfQ>;_Gs>e{2*9I*k>RTZ&{QTMW`V{yC@K_#V+cgL IY2))%09kW32mk;8 diff --git a/source/.case_5.rst.swp b/source/.case_5.rst.swp new file mode 100644 index 0000000000000000000000000000000000000000..116cb27968a21be1475906e4237cc8559ba399fa GIT binary patch literal 53248 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%0DvvDy{ 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 R9v)8spV8%QU5>o>$v?R=2KxX2 literal 681 zcmWH`%$*;a=aT=Ffoa=^7t$tvM`h$<#HQ|FpxAcy#k}PAzf;V σ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 interface. - - -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/source/case_2.rst~ b/source/case_2.rst~ deleted file mode 100644 index 16f89ee..0000000 --- a/source/case_2.rst~ +++ /dev/null @@ -1,720 +0,0 @@ -.. _case_2: - -EEUQ - Transfer Function -======================== - -Author: Erick Martinez ----------------------- - -Introduction ------------- - -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`. - -The 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/source/case_3.rst~ b/source/case_3.rst~ deleted file mode 100644 index 382bb99..0000000 --- a/source/case_3.rst~ +++ /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/source/case_4.rst~ b/source/case_4.rst~ deleted file mode 100644 index d3c07ac..0000000 --- a/source/case_4.rst~ +++ /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/source/case_5.rst b/source/case_5.rst index 8d2986c..9a3eb2c 100644 --- a/source/case_5.rst +++ b/source/case_5.rst @@ -187,6 +187,12 @@ The workflow for the :cite:`Zhu2017` model in the Earthquake Event Generator too The following code snippet shows the implementation of the :cite:`Zhu2017` model in the R2D tool using the `applications.py` file. +.. raw:: html + +
+ Click to expand the full ZhuEtal2017 code +

+
 .. code-block:: python
     :linenos:
 
@@ -404,6 +410,17 @@ The following code snippet shows the implementation of the :cite:`Zhu2017` model
             return {"liq_prob":prob_liq, "liq_susc":liq_susc}
 
 
+.. raw:: html
+
+    
+
+ + +.. raw:: html + +

+ + **RESULTS** @@ -430,7 +447,13 @@ The workflow for the :cite:`Sanger2024` model follows the same steps as the :cit **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. +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. + +.. raw:: html + +
+ Click to expand the full Sanger2024 code +

 
 .. code-block:: python
     :linenos:
@@ -537,6 +560,15 @@ In this example, the :cite:`Sanger2024` model is implemented in the R2D tool usi
         
         return {"liq_prob":prob_liq, "liq_susc":LPI}
 
+.. raw:: html
+
+    
+
+ + +.. raw:: html + +

**RESULTS** diff --git a/source/case_5.rst~ b/source/case_5.rst~ index eb4d64e..b60343b 100644 --- a/source/case_5.rst~ +++ b/source/case_5.rst~ @@ -9,7 +9,7 @@ Author: Morgan Sanger Introduction ------------ -This page describes basic concepts of geospatial liquefaction hazard modeling. +This page describes basic concepts of geospatial liquefaction hazard modeling withing the umbrella of SimCenter tools. Problem Description @@ -187,6 +187,12 @@ The workflow for the :cite:`Zhu2017` model in the Earthquake Event Generator too The following code snippet shows the implementation of the :cite:`Zhu2017` model in the R2D tool using the `applications.py` file. +.. raw:: html + +
+ Click to expand the full ZhuEtal2017 code +

+
 .. code-block:: python
     :linenos:
 
@@ -430,7 +436,13 @@ The workflow for the :cite:`Sanger2024` model follows the same steps as the :cit
 
 **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. 
+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.
+
+.. raw:: html
+
+    
+ Click to expand the full Sanger2024 code +

 
 .. code-block:: python
     :linenos:
@@ -579,4 +591,4 @@ Remarks
 
 References
 ----------
-.. bibliography:: references.bib
\ No newline at end of file
+.. bibliography:: references.bib