- blockThe blocks where this material model is applied.
C++ Type:std::vector<SubdomainName>
Controllable:No
Description:The blocks where this material model is applied.
- densityVector of density values that map one-to-one with the number 'layer_ids' parameter.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Vector of density values that map one-to-one with the number 'layer_ids' parameter.
- displacementsThe vector of displacement variables in the problem.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The vector of displacement variables in the problem.
- initial_shear_modulusThe initial shear modulus of the soil layers.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The initial shear modulus of the soil layers.
- layer_idsVector of layer ids that map one-to-one to the rest of the soil layer parameters provided as input.
C++ Type:std::vector<unsigned int>
Controllable:No
Description:Vector of layer ids that map one-to-one to the rest of the soil layer parameters provided as input.
- layer_variableThe auxvariable providing the soil layer identification.
C++ Type:std::vector<VariableName>
Unit:(no unit assumed)
Controllable:No
Description:The auxvariable providing the soil layer identification.
- poissons_ratioPoissons's ratio for the soil layers. The size of the vector should be same as the size of layer_ids.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Poissons's ratio for the soil layers. The size of the vector should be same as the size of layer_ids.
- soil_typeThis parameter determines the type of backbone curve used. Use 'user_defined' for a user defined backbone curve provided in a data file, 'darendeli' if the backbone curve is to be determined using Darandeli equations, 'gqh' if the backbone curve is determined using the GQ/H approach and 'thin_layer' if the soil is being used to simulate a thin-layer friction interface.
C++ Type:MooseEnum
Controllable:No
Description:This parameter determines the type of backbone curve used. Use 'user_defined' for a user defined backbone curve provided in a data file, 'darendeli' if the backbone curve is to be determined using Darandeli equations, 'gqh' if the backbone curve is determined using the GQ/H approach and 'thin_layer' if the soil is being used to simulate a thin-layer friction interface.
The I_Soil System
Description
This action is used to set up the I-soil material model for a set of soil layers.
The I-soil material model is a nonlinear hysteretic soil model that is based on the distributed element models developed by Iwan (1967) and Chiang and Beck (1994). In 1-D, this model takes the backbone stress-strain curve and divides it into a set of elastic-perfectly plastic curves. The total stress then is the sum of the stresses from the individual elastic-perfectly plastic curves.
The three dimensional generalization of this model is achieved using von-Mises failure criteria for each elastic-perfectly plastic curve resulting in an invariant yield surfaces in three-dimensional stress space like in Figure 1 (after Chiang and Beck (1994)).

Figure 1: Invariant yield surfaces of the individual elastic-perfectly curves.
The following options are available for an automatic creation of the backbone curve:
User-defined backbone curve (soil_type = 'user_defined'): The backbone curve can be provided in a csv file where the first column is shear strain and the second column is shear stress. The number of elastic-perfectly plastic curves that will be generated from this backbone curve depends on the number of entries in the data file. When many soil layers are present, a vector of data files can be provided as input. The size of this vector should equal the number of soil layers. Also the number of entries in each data file should be the same.
Darendeli backbone curve (soil_type = 'darendeli'): The backbone curve can be auto-generated based on empirical data for common soil types. Darendeli (2001) presents a functional form that can be used to create the backbone shear stress - strain curves based on the experimental results obtained from resonant column and torsional shear tests. This functional form requires the initial shear modulus, initial bulk modulus, plasticity index, over consolidation ratio, reference mean confining pressure (p_ref) and number of points as input. Other than the number of points, all the other parameters can be provided as a vector for each soil layer. The number of points, which determines the number of elastic-perfectly plastic curves to be generated, is constant for all soil layers.
General Quadratic/Hyperbolic (GQ/H) backbone curve (soil_type = 'gqh'): Darendeli (2001) study constructs the shear stress-strain curves based on experimentally obtained data. At small strains the data is obtained using resonant column test, and towards the medium shear strain levels the torsional shear test results are used. The values are extrapolated at the large strain levels. This extrapolation may underestimate or overestimate the shear strength at large strains. Therefore, shear strength correction is necessary to account for the correct shear strength at large strains. GQ/H model proposed by Groholski et al. (2016) has a curve fitting scheme that automatically corrects the reference curves provided by Darendeli (2001) based on the specific shear strength at the large strains. This model requires taumax, theta_1 through 5, initial shear modulus, initial bulk modulus and number of points as input. The parameter taumax is the maximum shear stress that can be generated in the soil. The parameters theta_1 through 5 are the curve fitting parameters and can be obtained using DEEPSOIL (Hashash et al., 2016). Other than the number of points, all the other parameters can be given as a vector for the different soil layers. The number of points, which determines the number of elastic-perfectly plastic curves to be generated, is constant for all soil layers.
Thin-layer friction backbone curve (soil_type = 'thin_layer'): This backbone curve is intended for the simulation of the foundation-soil interfaces using a formulation similar to Coulomb friction. This option should be used for a thin layer of I-soil elements along the foundation-soil interface. Using the 'thin_layer' option creates a bilinear backbone curve with a pre-yield shear modulus equal to the the initial_shear_modulus, and a post-yield shear modulus equal to initial_shear_modulus * hardening_ratio. The shear stress at yield is set to be equal to friction_coefficient * instantaneous pressure. Using the 'thin_layer' option for the I-Soil backbone curve automatically sets the values pressure_dependency = 'true', , and . This ensures that the shear strength dependence is turned on, and the strength of the thin layer increases linearly with instantaneous pressure. Note that since the strength is directly proportional to pressure (and not normal stress), this is not identical to Coulomb formulation.
All the above backbone curves provide the behavior of the soil at a reference confining pressure (). When the confining pressure of the soil changes, the soil behavior also changes (if pressure dependency is turned on). The shear modulus () at a pressure is given by:
where is the initial shear modulus, is the tension pressure cut off and is a parameter obtained from experiments. The shear modulus reduces to zero for any pressure lower than to model the failure of soil in tension. Note that compressive pressure is taken to be positive.
Similarly, the yield stress () of the elastic-perfectly plastic curve also changes when the confining pressure changes. The yield stress () at a pressure is given as:
where , and are parameters obtained from experiments.
To include pressure-dependent stiffness and yield strength calculation, pressure_dependency should be set to true and b_exp, a_0, a_1, a_2, tension_pressure_cut_off and p_ref need to be provided as input. Other than p_ref, all the other parameters are the same for all the soil layers. p_ref can be provided as vector with information about each soil layer.
Input Parameters
- a01The first coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure.
Default:1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The first coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure.
- a10The second coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0, a2 = 0 for one soil layer, then the yield strength of that layer is independent of pressure.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The second coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1 = 0, a2 = 0 for one soil layer, then the yield strength of that layer is independent of pressure.
- a20The third coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1=0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The third coefficient for pressure dependent yield strength calculation for all the soil layers. If a0 = 1, a1=0 and a2=0 for one soil layer, then the yield strength of that layer is independent of pressure.
- active__all__ If specified only the blocks named will be visited and made active
Default:__all__
C++ Type:std::vector<std::string>
Controllable:No
Description:If specified only the blocks named will be visited and made active
- b_exp0The exponential factors for pressure dependent stiffness for all the soil layers.
Default:0
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The exponential factors for pressure dependent stiffness for all the soil layers.
- backbone_curve_filesThe vector of file names of the files containing stress-strain backbone curves for the different soil layers. The size of the vector should be same as the size of layer_ids. All files should contain the same number of stress-strain points. Headers are not expected and it is assumed that the first column corresponds to strain values and the second column corresponds to the stress values. Additionally, two segments of a backbone curve cannot have the same slope.
C++ Type:std::vector<FileName>
Controllable:No
Description:The vector of file names of the files containing stress-strain backbone curves for the different soil layers. The size of the vector should be same as the size of layer_ids. All files should contain the same number of stress-strain points. Headers are not expected and it is assumed that the first column corresponds to strain values and the second column corresponds to the stress values. Additionally, two segments of a backbone curve cannot have the same slope.
- finite_strainFalseSet to true to use finite strain calculator instead of incremental small strain.
Default:False
C++ Type:bool
Controllable:No
Description:Set to true to use finite strain calculator instead of incremental small strain.
- friction_coefficientFriction coefficients of the thin layers.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Friction coefficients of the thin layers.
- hardening_ratioPost-yield hardening ratios of the layers. Defaults to 0.01, which corresponds to 1 percent hardening.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:Post-yield hardening ratios of the layers. Defaults to 0.01, which corresponds to 1 percent hardening.
- implicitTrueSet to false to use the explicit solver.
Default:True
C++ Type:bool
Controllable:No
Description:Set to false to use the explicit solver.
- inactiveIf specified blocks matching these identifiers will be skipped.
C++ Type:std::vector<std::string>
Controllable:No
Description:If specified blocks matching these identifiers will be skipped.
- initial_soil_stressThe function values for the initial stress distribution. 9 function names have to be provided corresponding to stress_xx, stress_xy, stress_xz, stress_yx, stress_yy, stress_yz, stress_zx, stress_zy, stress_zz. Each function can be a function of space.
C++ Type:std::vector<FunctionName>
Unit:(no unit assumed)
Controllable:No
Description:The function values for the initial stress distribution. 9 function names have to be provided corresponding to stress_xx, stress_xy, stress_xz, stress_yx, stress_yy, stress_yz, stress_zx, stress_zy, stress_zz. Each function can be a function of space.
- number_of_pointsThe total number of data points in which the backbone curve needs to be split for all soil layers (required for Darandeli or GQ/H type backbone curves).
C++ Type:unsigned int
Controllable:No
Description:The total number of data points in which the backbone curve needs to be split for all soil layers (required for Darandeli or GQ/H type backbone curves).
- over_consolidation_ratioThe over consolidation ratio of the soil layers. Required for Darandeli backbone curve.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The over consolidation ratio of the soil layers. Required for Darandeli backbone curve.
- p_refThe reference pressure at which the parameters are defined for each soil layer. If 'soil_type = darendeli', then the reference pressure must be input in kilopascals.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The reference pressure at which the parameters are defined for each soil layer. If 'soil_type = darendeli', then the reference pressure must be input in kilopascals.
- plasticity_indexThe plasticity index of the soil layers. Required for Darandeli backbone curve.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The plasticity index of the soil layers. Required for Darandeli backbone curve.
- pressure_dependencyFalseSet to true to turn on pressure dependent stiffness and yield strength calculation.
Default:False
C++ Type:bool
Controllable:No
Description:Set to true to turn on pressure dependent stiffness and yield strength calculation.
- taumaxThe ultimate shear strength of the soil layers. Required for GQ/H model
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The ultimate shear strength of the soil layers. Required for GQ/H model
- tension_pressure_cut_off-1The tension cut-off for all the soil layers. If the pressure becomes lower than this value, then the stiffness of the soil reduces to zero. A negative pressure indicates tension. The default value is -1.0 for all the soil layers.
Default:-1
C++ Type:double
Unit:(no unit assumed)
Controllable:No
Description:The tension cut-off for all the soil layers. If the pressure becomes lower than this value, then the stiffness of the soil reduces to zero. A negative pressure indicates tension. The default value is -1.0 for all the soil layers.
- theta_1The curve fit coefficient for GQ/H modelfor each soil layer.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The curve fit coefficient for GQ/H modelfor each soil layer.
- theta_2The curve fit coefficient for GQ/H modelfor each soil layer.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The curve fit coefficient for GQ/H modelfor each soil layer.
- theta_3The curve fit coefficient for GQ/H modelfor each soil layer.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The curve fit coefficient for GQ/H modelfor each soil layer.
- theta_4The curve fit coefficient for GQ/H modelfor each soil layer.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The curve fit coefficient for GQ/H modelfor each soil layer.
- theta_5The curve fit coefficient for GQ/H modelfor each soil layer.
C++ Type:std::vector<double>
Unit:(no unit assumed)
Controllable:No
Description:The curve fit coefficient for GQ/H modelfor each soil layer.
- use_automatic_differentiationFalseFlag to use automatic differentiation (AD) objects when possible
Default:False
C++ Type:bool
Controllable:No
Description:Flag to use automatic differentiation (AD) objects when possible
Optional Parameters
- control_tagsAdds user-defined labels for accessing object parameters via control logic.
C++ Type:std::vector<std::string>
Controllable:No
Description:Adds user-defined labels for accessing object parameters via control logic.
Advanced Parameters
References
- D. Y. Chiang and J. L. Beck.
A new class of distributed-element models for cyclic plasticity -i. theory and application.
International Journal of Solids and Structures, 31(4):469–484, 1994.[BibTeX]
- M. B. Darendeli.
Development of a new family of normalized modulus reduction and material damping curves.
PhD dissertation, University of Texas at Austin, 2001.[BibTeX]
- D. Groholski, Y. Hashash, B. Kim, M. Musgrove, J. Harmon, and J. Stewart.
Simplified model for small-strain nonlinearity and strength in 1d seismic site response analysis.
Journal of Geotechnical and Geoenvironmental Engineering, 2016.[BibTeX]
- Y. Hashash, M. Musgrove, J. Harmon, D. Groholski, C. Phillips, and D. Park.
Deepsoil v6.1, user manual.
Urbana, IL, Board of Trustees of University of Illinois at Urbana-Champaign, 2016.[BibTeX]
- W. Iwan.
On a class of models for the yielding behavior of continuous and composite systems.
Journal of Applied Mechanics, ASME, 34(E3):612–617, 1967.[BibTeX]