From 31999a0375849bc3f8e4380104972b5c14f75fd1 Mon Sep 17 00:00:00 2001 From: gaaraujo Date: Fri, 5 Jun 2026 17:26:59 -0700 Subject: [PATCH 1/4] Document -factorOnce support across Newton-family algorithms. Describe the optional -factorOnce flag for Newton, ModifiedNewton, SecantNewton, KrylovNewton, NewtonLineSearch, and ExpressNewton so users know when reusing a factored tangent matrix is appropriate. --- .../analysis/algorithm/ExpressNewton.rst | 4 +- .../analysis/algorithm/KrylovNewton.rst | 9 ++++- .../analysis/algorithm/ModifiedNewton.rst | 9 ++++- .../user/manual/analysis/algorithm/Newton.rst | 6 ++- .../analysis/algorithm/NewtonLineSearch.rst | 7 +++- .../analysis/algorithm/SecantNewton.rst | 38 ++++++++++++------- 6 files changed, 52 insertions(+), 21 deletions(-) diff --git a/source/user/manual/analysis/algorithm/ExpressNewton.rst b/source/user/manual/analysis/algorithm/ExpressNewton.rst index 520ec0ed..0a07c09a 100644 --- a/source/user/manual/analysis/algorithm/ExpressNewton.rst +++ b/source/user/manual/analysis/algorithm/ExpressNewton.rst @@ -12,9 +12,9 @@ This command is used to construct an ExpressNewton algorithm object for nonlinea $iter, |integer|, constant number of iterations. Default to 2 $kMultiplier, |float|, multiplier to system stiffness in evaluation of the system Jacobian matrix to support unconditional stability for hardening system. Default to 1.0. Dicussed in Reference [1] - -initialTangent, |string|, optional flag to indicate to use initial stiffness in evaluation of the system Jacobian matrix + -initialTangent, |string|, optional flag to indicate to use initial stiffness in evaluation of the system Jacobian matrix. Also accepted as ``-initial``; enables ``-factorOnce`` automatically. -currentTangent, |string|, optional and default flag to indicate to use current stiffness in evaluation of the system Jacobian matrix - -factorOnce, |string|, optional flag to indicate to factorize the system Jacobian matrix only once. It is suggested to specify this flag to maximize the solution efficiency (Reference [1]). If this flag is not specified factorization will be performed on every iteraction. + -factorOnce, |string|, optional flag to factorize the system Jacobian matrix only once and reuse it in later analysis steps until a domain change. It is suggested to specify this flag to maximize the solution efficiency (Reference [1]). If this flag is not specified, factorization is performed at every analysis step. The strategy of the ExpressNewton algorithm is to adopt a typical transient integrator and accept the solution after a constant number of iterations using a constant system Jacobian matrix. The algorithm inherits the advantages of the host transient integrators, such as the unconditional stability, the order of accuracy, and the numerical dissipation that helps suppress the spurious high-frequency oscillation. Using a constant Jacobian matrix is vital to minimizing the computational expense associated with matrix operations. The algorithm helps achieve an exponential efficiency improvement in a response history analysis with any transient integrator. diff --git a/source/user/manual/analysis/algorithm/KrylovNewton.rst b/source/user/manual/analysis/algorithm/KrylovNewton.rst index 6d5bb8bb..38f092af 100644 --- a/source/user/manual/analysis/algorithm/KrylovNewton.rst +++ b/source/user/manual/analysis/algorithm/KrylovNewton.rst @@ -2,7 +2,7 @@ Krylov-Newton Algorithm -------------------------------- -.. function:: algorithm KrylovNewton <-iterate $tangIter> <-increment $tangIncr> <-maxDim $maxDim> +.. function:: algorithm KrylovNewton <-iterate $tangIter> <-increment $tangIncr> <-maxDim $maxDim> <-factorOnce> .. list-table:: :widths: 10 10 40 @@ -20,8 +20,13 @@ Krylov-Newton Algorithm * - $maxDim - |float| - max number of iterations until the tangent is reformed and acceleration restarts (default = 3) of iterations within a time step until a new tangent is formed - + * - -factorOnce + - |string| + - optional flag to assemble and factor the increment tangent in the first analysis step, keep it fixed in all later steps, and update it only after a domain change (for example, nodes or elements added or removed). Also accepted as ``-factorIncrementOnce``. + +.. note:: + Krylov-Newton already uses one increment tangent per equilibrium solve within each analysis step. ``-factorOnce`` carries that same tangent forward to later steps instead of reforming it each time. Using ``-increment initial`` with ``-iterate noTangent`` or ``-iterate initial`` also enables ``-factorOnce`` automatically. If ``-factorOnce`` is given without ``-iterate``, OpenSees warns and defaults to ``-iterate noTangent``. If ``-factorOnce`` conflicts with the chosen ``-iterate`` tangent (for example, ``-iterate current``), OpenSees warns and disables ``-factorOnce``. This command is used to construct a KrylovNewton algorithm object which uses a modified Newton method with Krylov subspace acceleration to advance to the next time step. diff --git a/source/user/manual/analysis/algorithm/ModifiedNewton.rst b/source/user/manual/analysis/algorithm/ModifiedNewton.rst index 09ebb72d..4f8d00ba 100644 --- a/source/user/manual/analysis/algorithm/ModifiedNewton.rst +++ b/source/user/manual/analysis/algorithm/ModifiedNewton.rst @@ -2,7 +2,7 @@ Modified Newton Algorithm -------------------------------- -.. function:: algorithm ModifiedNewton <-initial> +.. function:: algorithm ModifiedNewton <-initial> <-factorOnce> .. list-table:: :widths: 10 10 40 @@ -14,5 +14,12 @@ Modified Newton Algorithm * - -initial - |string| - optional flag to indicate to use initial stiffness iterations + * - -factorOnce + - |string| + - optional flag to assemble and factor the tangent in the first analysis step, keep it fixed in all later steps, and update it only after a domain change (for example, nodes or elements added or removed). + +.. note:: + + Modified Newton already uses one tangent per equilibrium solve within each analysis step. ``-factorOnce`` carries that same tangent forward to later steps instead of reforming it each time. The fixed matrix is the current tangent by default, or the initial tangent with ``-initial``. Specifying ``-initial`` also enables ``-factorOnce`` automatically. This command is used to construct a ModifiedNewton algorithm object, which uses the modified newton-raphson algorithm to solve the nonlinear residual equation. diff --git a/source/user/manual/analysis/algorithm/Newton.rst b/source/user/manual/analysis/algorithm/Newton.rst index 109a0d80..cdbdbe5f 100644 --- a/source/user/manual/analysis/algorithm/Newton.rst +++ b/source/user/manual/analysis/algorithm/Newton.rst @@ -4,7 +4,7 @@ Newton Algorithm ---------------- This command is used to construct a NewtonRaphson algorithm object which is uses the Newton-Raphson algorithm to solve the nonlinear residual equation. The Newton-Raphson method is the most widely used and most robust method for solving nonlinear algebraic equations. The command is of the following form: -.. function:: algorithm Newton <-initial> <-initialThenCurrent> +.. function:: algorithm Newton <-initial> <-initialThenCurrent> <-factorOnce> .. csv-table:: :header: "Argument", "Type", "Description" @@ -12,7 +12,11 @@ This command is used to construct a NewtonRaphson algorithm object which is uses -initial, |string|, optional flag to indicate to use initial stiffness -initialThenCurrent, |string|, optional flag to indicate to use initial stiffness on first step and then current on subsequent steps + -factorOnce, |string|, optional flag to assemble and factor the tangent on the first Newton iteration of the first analysis step, keep it fixed in later iterations and later steps, and update it only after a domain change (for example, nodes or elements added or removed). +.. note:: + + Newton-Raphson normally reforms the tangent every Newton iteration. ``-factorOnce`` keeps the tangent from the first iteration fixed thereafter. The fixed matrix is the current tangent by default, or the initial tangent with ``-initial``. Specifying ``-initial`` also enables ``-factorOnce`` automatically. ``-factorOnce`` is not used with ``-initialThenCurrent``, which reforms the tangent every iteration. The Newton method used in finite element analysis is identical to that taught in basic calculus courses. It is just extended for the n unknown degrees-of-freedom. The method as taught in basic calculus, is a root-finding algorithm that uses the first few terms of the Taylor series of a function :math:`f(x)\,\!` in the vicinity of a suspected root :math:`x_n\,\!` to find the root :math:`x_{n+1}\,\!`. Newton's method is sometimes also known as Newton's iteration, although in this work the latter term is reserved to the application of Newton's method for computing square roots. diff --git a/source/user/manual/analysis/algorithm/NewtonLineSearch.rst b/source/user/manual/analysis/algorithm/NewtonLineSearch.rst index 445c1245..8a581406 100644 --- a/source/user/manual/analysis/algorithm/NewtonLineSearch.rst +++ b/source/user/manual/analysis/algorithm/NewtonLineSearch.rst @@ -4,7 +4,7 @@ Newton Line Search Algorithm ---------------- This command is used to construct a NewtonLineSearch algorithm object which introduces line search to the Newton-Raphson algorithm to solve the nonlinear residual equation. Line search increases the effectiveness of the Newton method when convergence is slow due to roughness of the residual. The command is of the following form: -.. function:: algorithm NewtonLineSearch <-type $typeSearch> <-tol $tol> <-maxIter $maxIter> <-minEta $minEta> <-maxEta $maxEta> +.. function:: algorithm NewtonLineSearch <-type $typeSearch> <-tol $tol> <-maxIter $maxIter> <-minEta $minEta> <-maxEta $maxEta> <-factorOnce> .. csv-table:: :header: "Argument", "Type", "Description" @@ -16,6 +16,11 @@ This command is used to construct a NewtonLineSearch algorithm object which intr $maxIter, |integer|, maximum number of iteration to try. The default is 10. $minEta, |float|, a minimum :math:`\eta` value. Optional; The default is 0.1 $maxEta, |float|, a maximum :math:`\eta` value. Optional; The default is 10.0 + -factorOnce, |string|, optional flag to assemble and factor the current tangent on the first Newton iteration of the first analysis step, keep it fixed in later iterations and later steps, and update it only after a domain change (for example, nodes or elements added or removed). + +.. note:: + + Newton line search normally reforms the current tangent every Newton iteration. ``-factorOnce`` keeps the tangent from the first iteration fixed thereafter. Theory ^^^^^^^^^^^^^^ diff --git a/source/user/manual/analysis/algorithm/SecantNewton.rst b/source/user/manual/analysis/algorithm/SecantNewton.rst index cb786b55..423e6b40 100644 --- a/source/user/manual/analysis/algorithm/SecantNewton.rst +++ b/source/user/manual/analysis/algorithm/SecantNewton.rst @@ -1,8 +1,10 @@ .. _SecantNewton: -Secant Newton Algorithm +Secant Newton Algorithm ---------------- -.. function:: algorithm SecantNewton <-iterate $tangIter> <-increment $tangIncr> <-maxDim $maxDim> +This command is used to construct a SecantNewton algorithm object which uses the two-term update to accelerate the convergence of the modified newton method. + +.. function:: algorithm SecantNewton <-iterate $tangIter> <-increment $tangIncr> <-maxDim $maxDim> <-numTerms $numTerms> <-cutOut $R1 $R2> <-factorOnce> .. list-table:: :widths: 10 10 40 @@ -11,22 +13,30 @@ Secant Newton Algorithm * - Argument - Type - Description - * - $tangIter + * - -iterate - |string| - - tangent to iterate on, options are current, initial, noTangent. default is current. - * - $tangIncr + - tangent to iterate on, options are current, initial, noTangent. default is current. + * - -increment - |string| - - tangent to increment on, options are current, initial, noTangent. default is current - * - $maxDim - - |float| - - max number of iterations until the tangent is reformed and acceleration restarts (default = 3) of iterations within a time step until a new tangent is formed - -This command is used to construct a SecantNewton algorithm object which uses the two-term update to accelerate the convergence of the modified newton method. + - tangent to increment on, options are current, initial, noTangent. default is current. + * - -maxDim + - |integer| + - max number of iterations until the tangent is reformed and acceleration restarts (default = 3). + * - -numTerms + - |integer| + - number of terms in the secant accelerator update (default = 2). + * - -cutOut + - |listFloat| + - optional flag followed by cut-out factors ``$R1`` and ``$R2`` to suppress overly aggressive secant updates. Crisfield's recommended values are 3.5 and 0.3. + * - -factorOnce + - |string| + - optional flag to assemble and factor the increment tangent in the first analysis step, keep it fixed in all later steps, and update it only after a domain change (for example, nodes or elements added or removed). Also accepted as ``-factorIncrementOnce``. .. note:: - * The default "cut-out" values recommended by Crisfield (R1=3.5, R2=0.3) are used. + + Secant-Newton already uses one increment tangent per equilibrium solve within each analysis step. ``-factorOnce`` carries that same tangent forward to later steps instead of reforming it each time. Using ``-increment initial`` with ``-iterate noTangent`` or ``-iterate initial`` also enables ``-factorOnce`` automatically. If ``-factorOnce`` is given without ``-iterate``, OpenSees warns and defaults to ``-iterate noTangent``. If ``-factorOnce`` conflicts with the chosen ``-iterate`` tangent (for example, ``-iterate current``), OpenSees warns and disables ``-factorOnce``. .. note:: References: - * Crisfield, M.A. "Non-linear Finite Element Analysis of Solids and Structures", Vol. 1, Wiley, 1991. - + + * Crisfield, M.A. "Non-linear Finite Element Analysis of Solids and Structures", Vol. 1, Wiley, 1991. From fa54930894420d4ab8ff96e40f17765d2b19f2cd Mon Sep 17 00:00:00 2001 From: gaaraujo Date: Fri, 5 Jun 2026 17:27:03 -0700 Subject: [PATCH 2/4] Fix documentation build issues and correct existing manual pages. Pin Sphinx below 9.0, add missing author substitutions, repair markup and cross-references, comment out broken toctree entries, remove obsolete element docs, and correct Tcl command names and typos in existing pages. --- requirements.txt | 2 +- source/conf.py | 3 + source/user/manual/analysis/system.rst | 1 - source/user/manual/analysis/system/Cusp.rst | 0 .../analysis/test/RelativeNormDispIncr.rst | 44 ++++++++ source/user/manual/material/ndMaterial.rst | 2 +- .../ndMaterials/ASDPlasticMaterial3D.rst | 40 ++++--- .../material/ndMaterials/J2Plasticity.rst | 6 +- .../manual/material/ndMaterials/NDTest.rst | 14 +-- .../PressureIndependentMultiYieldExample1.rst | 7 +- .../user/manual/material/uniaxialMaterial.rst | 100 +++++++++--------- .../material/uniaxialMaterials/APDMD.rst | 91 ++++++++-------- .../material/uniaxialMaterials/APDVFD.rst | 73 +++++++------ source/user/manual/misc/remove.rst | 40 +++++++ source/user/manual/miscCommands.rst | 1 + source/user/manual/model/element.rst | 19 ++-- .../manual/model/elements/LehighJoint2D.rst | 6 +- .../manual/model/elements/SFI_MVLEM_3D.rst | 10 +- .../elements/TripleFrictionPendulumX.rst | 2 +- source/user/manual/model/elements/brick.rst | 40 ------- .../manual/model/elements/dispBeamColumn.rst | 2 +- .../manual/model/elements/forceBeamColumn.rst | 2 +- .../elements/zeroLengthContactASDimplex.rst | 2 +- .../manual/output/EnvelopeNodeRecorder.rst | 10 +- source/user/manual/output/GmshRecorder.rst | 2 +- source/user/manual/output/NodeRecorder.rst | 10 +- source/user/manual/output/recorder.rst | 2 +- 27 files changed, 298 insertions(+), 233 deletions(-) delete mode 100644 source/user/manual/analysis/system/Cusp.rst create mode 100644 source/user/manual/misc/remove.rst delete mode 100644 source/user/manual/model/elements/brick.rst diff --git a/requirements.txt b/requirements.txt index 24e1856f..688925e0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -Sphinx>=6.0 +Sphinx>=6.0,<9.0 sphinx_rtd_theme>=3.0.0 sphinx_copybutton>=0.5.2 sphinx-tabs diff --git a/source/conf.py b/source/conf.py index bbe9a597..71eecb4e 100644 --- a/source/conf.py +++ b/source/conf.py @@ -49,6 +49,9 @@ .. |mhs| replace:: `Michael H. Scott`_ .. _Michael H. Scott: https://cce.oregonstate.edu/scott .. |fmk| replace:: **fmk** +.. |jaabell| replace:: **José A. Abell** +.. |mhscott| replace:: `Michael H. Scott`_ +.. |zhuminjie| replace:: **Zhu Minjie** .. |pedro| replace:: `Pedro Arduino`_ .. _Pedro Arduino: https://www.ce.washington.edu/facultyfinder/pedro-arduino .. |peter| replace:: `Peter Mackenzie-Helnwein`_ diff --git a/source/user/manual/analysis/system.rst b/source/user/manual/analysis/system.rst index ec1ed9d8..ecd66526 100644 --- a/source/user/manual/analysis/system.rst +++ b/source/user/manual/analysis/system.rst @@ -21,6 +21,5 @@ The following contain information about systemType? and the args required for ea system/FullGeneral system/SparseSYM system/Mumps - system/Cusp system/Diagonal system/PythonSparse diff --git a/source/user/manual/analysis/system/Cusp.rst b/source/user/manual/analysis/system/Cusp.rst deleted file mode 100644 index e69de29b..00000000 diff --git a/source/user/manual/analysis/test/RelativeNormDispIncr.rst b/source/user/manual/analysis/test/RelativeNormDispIncr.rst index e69de29b..c72a98a9 100644 --- a/source/user/manual/analysis/test/RelativeNormDispIncr.rst +++ b/source/user/manual/analysis/test/RelativeNormDispIncr.rst @@ -0,0 +1,44 @@ +.. _RelativeNormDispIncr: + +Relative Norm Displacement Increment +------------------------------------ + +This command constructs a convergence test that uses the norm of the solution, :math:`x` vector, of the matrix equation, :math:`Ax=b`. It compares the current norm to the norm at the first step, i.e. :math:`\frac{\sqrt({x_i}^T{x_i})}{\sqrt({x_1}^T{x_1})}`. What the right-hand-side of the matrix equation is depends on integrator and constraint handler chosen. Usually, though not always, it is equal to the change in nodal displacements in the system due to the current unbalance. + +.. function:: test RelativeNormDispIncr $tol $iter <$pFlag> <$nType> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $tol, |float|, the tolerance criteria used to check for convergence + $iter, |integer|, the max number of iterations to check before returning failure condition + $pFlag, |integer|, " | print flag (optional: default is 0) valid options: + | 0 print nothing + | 1 print information on norms each time test() is invoked + | 2 print information on norms and number of iterations at end of successful test + | 4 at each step it will print the norms and also the \Delta U and R(U) vectors. + | 5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A SUCCESSFUL test." + $nType, |integer|, "type of norm (optional: default is 2 (0 = max-norm 1 = 1-norm 2 = 2-norm ...))" + +.. note:: + + The convergence test compares the current norm of the displacement increment with the norm of the first step to determine if convergence has been achieved. As a consequence it will always take at least two steps to achieve convergence. + +.. admonition:: Example + + The following examples demonstrate the command to create a RelativeNormDispIncr test which allows 10 iterations till failure with a 2-norm in the :math:`x` vector of **1.0e-2**. + + 1. **Tcl Code** + + .. code-block:: tcl + + test RelativeNormDispIncr 1.0e-2 10 2 + + 2. **Python Code** + + .. code-block:: python + + test('RelativeNormDispIncr', 1.0e-2, 10, 2) + +Code Developed by: |fmk| diff --git a/source/user/manual/material/ndMaterial.rst b/source/user/manual/material/ndMaterial.rst index d157ea3a..17937378 100644 --- a/source/user/manual/material/ndMaterial.rst +++ b/source/user/manual/material/ndMaterial.rst @@ -43,7 +43,7 @@ The following contain information about matType? and the args required for each ndMaterials/Parallel3D ndMaterials/InitStrain ndMaterials/ASDConcrete3D - ndMaterials/ASDPlasticMaterial + ndMaterials/ASDPlasticMaterial3D ndMaterials/OrthotropicRAConcrete ndMaterials/SmearedSteelDoubleLayer ndMaterials/NDTest diff --git a/source/user/manual/material/ndMaterials/ASDPlasticMaterial3D.rst b/source/user/manual/material/ndMaterials/ASDPlasticMaterial3D.rst index 23f70f17..d2bb1e71 100644 --- a/source/user/manual/material/ndMaterials/ASDPlasticMaterial3D.rst +++ b/source/user/manual/material/ndMaterials/ASDPlasticMaterial3D.rst @@ -1,7 +1,7 @@ .. _ASDPlasticMaterial3D: ASDPlasticMaterial3D -^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^ | This command is used to construct an ``ASDPlasticMaterial3D`` material object. ``ASDPlasticMaterial3D`` implements a large family of constitutive models based on the classical theory of elastoplasticity using advanced template metaprogramming. Users build new constitutive models by selecting the yield function, plastic-flow direction, elasticity law, and hardening models for the internal variables from several possible options for each component. @@ -50,12 +50,12 @@ Explanation $ElasticityType, |string|, "Mandatory. Elastic model to be used -> :ref:`ElasticityType`" $IV_TYPE, |string|, "Mandatory. Hardening model for internal variables. Admitted types depend on YF, PF, and EL chosen. " Begin_Internal_Variables, |string|, "Optional. Marks the beginning of the code block to set the internal variables. If ommitted, all internal variables are initialized to zero. You can specify as many of the following variables as wanted. Ommitted variables are initialized to zero. Number and name of variables that can be set is model dependent (once YF, PF, and EL are specified)" - $InternalVariable1, |list of name/value pairs|, "Initial value of internal variable1. Dimension depends on internal variable type. " - $InternalVariable2, |list of name/value pairs|, "Initial value of internal variable2. " + $InternalVariable1, |list|, "Initial value of internal variable1. Dimension depends on internal variable type. " + $InternalVariable2, |list|, "Initial value of internal variable2. " "--", "--", "... (input as many as model supports)" End_Internal_Variables, |string|, "Mandatory if block started. Marks the end of the code block to set the internal variables" Begin_Model_Parameters, |string|, "Optional. Marks the beginning of the code block to set the model parameters" - $ModelParameters, |list of name/value pairs|, "Values for parameters of the models to be used. This depends on the particular choices of ``$YieldFunctionType``, ``$PlasticFlowType``, ``$ElasticityType``, and ``$IV_type``. " + $ModelParameters, |list|, "Values for parameters of the models to be used. This depends on the particular choices of ``$YieldFunctionType``, ``$PlasticFlowType``, ``$ElasticityType``, and ``$IV_type``. " "--", "--", "... (input as many as model supports)" End_Model_Parameters, |string|, "Mandatory if block started. Marks the beginning of the code block to set the model parameters" Begin_Integration_Options, |string|, "Optional. Marks the beginning of the code block to set the integration options. You can set any ammount " @@ -82,17 +82,18 @@ Explanation :caption: Arguments detailed description :maxdepth: 2 - ../ASDPlasticMaterial/YieldFunctions - ../ASDPlasticMaterial/PlasticFlowType - ../ASDPlasticMaterial/ElasticityType - ../ASDPlasticMaterial/HardeningFunctions + ASDPlasticMaterial/YieldFunctions + ASDPlasticMaterial/PlasticFlowType + ASDPlasticMaterial/ElasticityType + ASDPlasticMaterial/HardeningFunctions .. _ASDPlasticMaterial3DTheory: +.. _ASDPlasticTheory: ASDPlasticMaterial3D Theory """"""""""""""""""""""""""""" -The theoretical foundation is identical to :ref:`ASDPlasticTheory`. However, ``ASDPlasticMaterial3D`` provides additional implementation features: +The theoretical foundation follows classical elastoplasticity theory (see :ref:`ASDPlasticTheory`). ``ASDPlasticMaterial3D`` provides additional implementation features: * **Template Metaprogramming**: Uses C++ template metaprogramming for compile-time optimization * **Multiple Integration Methods**: Offers several integration algorithms beyond the basic methods @@ -107,8 +108,9 @@ The material recieves the total (trial) strain :math:`\vec{\epsilon}^{\text{tria The integration method selected determines how the stress increment is computed and how the plastic corrections are applied. .. _`ASDPlasticMaterial3DIntegrationMethods`: + Advanced Integration Methods -"""""""""""""""""""""""""""" +"""""""""""""""""""""""""""""" ``ASDPlasticMaterial3D`` supports multiple integration algorithms beyond the basic Forward Euler and Runge-Kutta methods: @@ -127,9 +129,11 @@ Advanced Integration Methods The integration method is selected in the ``Begin_Integration_Options`` block using the ``method`` parameter. If not specified, ``Runge_Kutta_45_Error_Control`` is used by default. + .. _`ASDPlasticMaterial3DTangentOperators`: + Tangent Operator Types -""""""""""""""""""""" +""""""""""""""""""""""" ``ASDPlasticMaterial3D`` provides several options for computing the consistent tangent operator: @@ -147,7 +151,9 @@ Tangent Operator Types The tangent operator type is selected in the ``Begin_Integration_Options`` block using the ``tangent_operator`` parameter. If not specified, an appropriate default is selected based on the integration method. + .. _`ASDPlasticMaterial3DIntegrationOptions`: + Integration Options """"""""""""""""""" @@ -155,10 +161,10 @@ Integration Options :header: "Parameter", "Type", "Description" :widths: 10, 10, 40 - $f_relative_tol, |double|, "Relative tolerance to evaluate the yield function crossing." - $stress_relative_tol, |double|, "Tolerance for the convergece of the integration algorithm." - $n_max_iterations, |int|, "Maximum number of iterations for constitutive integration." - $return_to_yield_surface, |0 or 1|, "Whether to apply a return to yield surface algorithm after integration convergence." + $f_relative_tol, |float|, "Relative tolerance to evaluate the yield function crossing." + $stress_relative_tol, |float|, "Tolerance for the convergece of the integration algorithm." + $n_max_iterations, |integer|, "Maximum number of iterations for constitutive integration." + $return_to_yield_surface, |integer|, "Whether to apply a return to yield surface algorithm after integration convergence (0 or 1)." $method, |string|, "Constitutive integration method. See :ref:`ASDPlasticMaterial3DIntegrationMethods` for options" $tangent_operator, |string|, "Tangent operator computation method. See :ref:`ASDPlasticMaterial3DTangentOperators` for options" @@ -229,7 +235,7 @@ The following example defines an instance of ``ASDPlasticMaterial3D`` with a Dru .. admonition:: TCL code - .. code-block:: tcl + .. code-block:: none nDMaterial ASDPlasticMaterial3D 1 \ DruckerPrager_YF \ @@ -315,7 +321,7 @@ To access the enhanced response capabilities of ``ASDPlasticMaterial3D``, you ca recorder Node -file radius.out -time -node 1 -dof 1 VonMisesRadius Example: Parameter Updates During Analysis -"""""""""""""""""""""""""""""""""""""""" +""""""""""""""""""""""""""""""""""""""""""""" ``ASDPlasticMaterial3D`` supports parameter updates during analysis: diff --git a/source/user/manual/material/ndMaterials/J2Plasticity.rst b/source/user/manual/material/ndMaterials/J2Plasticity.rst index c23c5d1a..cb55ac69 100644 --- a/source/user/manual/material/ndMaterials/J2Plasticity.rst +++ b/source/user/manual/material/ndMaterials/J2Plasticity.rst @@ -39,13 +39,15 @@ Yield Function .. math:: - \phi(\sigma,q) = || dev(\sigma) || - \sqrt(\tfrac{2}{3}*q(xi) + \phi(\sigma, q) = \|\mathrm{dev}(\sigma)\| - \sqrt{\tfrac{2}{3}}\, q(\xi) Saturation Isotropic Hardening with linear term .. math:: - q(xi) = \sigma_0 + (\sigma_\inf - \sigma_0)*exp(-delta*\xi) + H*\xi + q(\xi) = \sigma_{\inf} + (\sigma_0 - \sigma_{\inf})\exp(-\delta\xi) + H\xi + +At :math:`\xi = 0`, :math:`q = \sigma_0` (initial yield stress). As :math:`\xi \to \infty` with :math:`H = 0`, :math:`q \to \sigma_{\inf}` (saturation yield stress). Flow Rules diff --git a/source/user/manual/material/ndMaterials/NDTest.rst b/source/user/manual/material/ndMaterials/NDTest.rst index 9dac07d4..b985463f 100644 --- a/source/user/manual/material/ndMaterials/NDTest.rst +++ b/source/user/manual/material/ndMaterials/NDTest.rst @@ -36,12 +36,12 @@ Sets trial strain components on a specified nDMaterial. :widths: 10, 10, 40 $matTag, |integer|, Unique tag identifying the nDMaterial object - $eps11, |double|, Normal strain in direction 1 (ε₁₁) - $eps22, |double|, Normal strain in direction 2 (ε₂₂) - $eps33, |double|, Normal strain in direction 3 (ε₃₃) - $gamma12, |double|, Engineering shear strain γ₁₂ - $gamma23, |double|, Engineering shear strain γ₂₃ - $gamma31, |double|, Engineering shear strain γ₃₁ + $eps11, |float|, Normal strain in direction 1 (ε₁₁) + $eps22, |float|, Normal strain in direction 2 (ε₂₂) + $eps33, |float|, Normal strain in direction 3 (ε₃₃) + $gamma12, |float|, Engineering shear strain γ₁₂ + $gamma23, |float|, Engineering shear strain γ₂₃ + $gamma31, |float|, Engineering shear strain γ₃₁ **Example:** @@ -318,7 +318,7 @@ Updates a double-precision parameter in the material during runtime. $matTag, |integer|, Unique tag identifying the nDMaterial object $paramID, |integer|, Integer parameter identifier (material-specific) - $newValue, |double|, New double value for the parameter + $newValue, |float|, New double value for the parameter **Example:** diff --git a/source/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.rst b/source/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.rst index a4f12888..87305e51 100644 --- a/source/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.rst +++ b/source/user/manual/material/ndMaterials/PressureIndependentMultiYieldExample1.rst @@ -1,4 +1,9 @@ -** Single 2D plane-strain quadrilateral element, subjected to sinusoidal base shaking** +.. _PressureIndependentMultiYieldExample1: + +Pressure Independent Multi Yield Example 1 +------------------------------------------ + +Single 2D plane-strain quadrilateral element, subjected to sinusoidal base shaking. 1. **Tcl Code** diff --git a/source/user/manual/material/uniaxialMaterial.rst b/source/user/manual/material/uniaxialMaterial.rst index d430e09e..5610a0e9 100644 --- a/source/user/manual/material/uniaxialMaterial.rst +++ b/source/user/manual/material/uniaxialMaterial.rst @@ -4,7 +4,6 @@ uniaxialMaterial Command ************************ This command is used to construct a uniaxial material, which provides a uniaxial stress-strain (or force-deformation) relationships. -. .. function:: uniaxialMaterial $matType $matTag $matArgs @@ -49,17 +48,17 @@ The following subsections contain information about **$matType** uniaxialMaterials/ASDConcrete1D uniaxialMaterials/GMG_CyclicReinforcedConcrete uniaxialMaterials/Creep - + .. uniaxialMaterials/Concrete06 - uniaxialMaterials/Concrete07 - uniaxialMaterials/ConfinedConcrete01 - uniaxialMaterials/ConcreteD - uniaxialMaterials/FRPConfinedConcrete - uniaxialMaterials/ConcreteCM +.. uniaxialMaterials/Concrete07 +.. uniaxialMaterials/ConfinedConcrete01 +.. uniaxialMaterials/ConcreteD +.. uniaxialMaterials/FRPConfinedConcrete +.. uniaxialMaterials/ConcreteCM #. Some Standard Uniaxial Materials -.. toctree:: + .. toctree:: :maxdepth: 1 uniaxialMaterials/Elastic @@ -70,25 +69,24 @@ The following subsections contain information about **$matType** uniaxialMaterials/ElasticMultiLinear uniaxialMaterials/Hardening uniaxialMaterials/MultiLinear - + #. Generic Multilinear Hysteretic Materials .. toctree:: :maxdepth: 1 - + uniaxialMaterials/Hysteretic uniaxialMaterials/HystereticSM uniaxialMaterials/IMKBilin uniaxialMaterials/IMKPeakOriented uniaxialMaterials/IMKPinching uniaxialMaterials/SLModel - + .. uniaxialMaterials/Pinching4 - #. Wrapper Uniaxial Materials -.. toctree:: + .. toctree:: :maxdepth: 1 uniaxialMaterials/Fatigue @@ -121,43 +119,41 @@ The following subsections contain information about **$matType** uniaxialMaterials/Ratchet .. uniaxialMaterials/CastFuse - uniaxialMaterials/ViscousDamper - uniaxialMaterials/BilinearOilDamper - uniaxialMaterials/SAWS - uniaxialMaterials/BARSLIP - uniaxialMaterials/Bond_SP01 - - Strain Penetration Model for Fully Anchored Steel Reinforcing Bars - uniaxialMaterials/Impact - uniaxialMaterials/Hyperbolic Gap - uniaxialMaterials/LimitState - uniaxialMaterials/Engineered Cementitious Composites - uniaxialMaterials/SelfCentering - uniaxialMaterials/Viscous - uniaxialMaterials/BoucWen - uniaxialMaterials/BWBN (Pinching Hysteretic Bouc-Wen) - - - -#. PyTzQz uniaxial materials for p-y, t-z and q-z elements - -.. toctree:: - :maxdepth: 1 - - uniaxialMaterials/PySimple1 - uniaxialMaterials/TzSimple1 - uniaxialMaterials/QzSimple1 - uniaxialMaterials/PyLiq1 - uniaxialMaterials/TzLiq1 - uniaxialMaterials/QzLiq1 - uniaxialMaterials/TzSandCPT - uniaxialMaterials/QbSandCPT - -.. uniaxialMaterials/KikuchiAikenHDR - uniaxialMaterials/KikuchiAikenLRB - uniaxialMaterials/AxialSp - uniaxialMaterials/AxialSpHD - uniaxialMaterials/PinchingLimitState - uniaxialMaterials/CFSWSWP - uniaxialMaterials/CFSSSWP - uniaxialMaterials/PySimple1Gen - uniaxialMaterials/TzSimple1Gen +.. uniaxialMaterials/ViscousDamper +.. uniaxialMaterials/BilinearOilDamper +.. uniaxialMaterials/SAWS +.. uniaxialMaterials/BARSLIP +.. uniaxialMaterials/Bond_SP01 +.. uniaxialMaterials/Impact +.. uniaxialMaterials/HyperbolicGap +.. uniaxialMaterials/LimitState +.. uniaxialMaterials/EngineeredCementitiousComposites +.. uniaxialMaterials/SelfCentering +.. uniaxialMaterials/Viscous +.. uniaxialMaterials/BoucWen +.. uniaxialMaterials/BWBN + +#. PyTzQz uniaxial materials for p-y, t-z and q-z elements + + .. toctree:: + :maxdepth: 1 + + uniaxialMaterials/PySimple1 + uniaxialMaterials/TzSimple1 + uniaxialMaterials/QzSimple1 + uniaxialMaterials/PyLiq1 + uniaxialMaterials/TzLiq1 + uniaxialMaterials/QzLiq1 + uniaxialMaterials/TzSandCPT + uniaxialMaterials/QbSandCPT + +.. uniaxialMaterials/KikuchiAikenHDR +.. uniaxialMaterials/KikuchiAikenLRB +.. uniaxialMaterials/AxialSp +.. uniaxialMaterials/AxialSpHD +.. uniaxialMaterials/PinchingLimitState +.. uniaxialMaterials/CFSWSWP +.. uniaxialMaterials/CFSSSWP +.. uniaxialMaterials/PySimple1Gen +.. uniaxialMaterials/TzSimple1Gen diff --git a/source/user/manual/material/uniaxialMaterials/APDMD.rst b/source/user/manual/material/uniaxialMaterials/APDMD.rst index f0a5f598..8220c471 100644 --- a/source/user/manual/material/uniaxialMaterials/APDMD.rst +++ b/source/user/manual/material/uniaxialMaterials/APDMD.rst @@ -1,14 +1,14 @@ -.. _APDMD : +.. _APDMD: APDMD Material -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^ This command is used to construct an APDMD material that simulates the hysteretic response of an asynchronous parallel double-stage metallic damper. A typical asynchronous parallel double-stage metallic damper is composed of two sub-dampers and an asynchronously activation system. In the first stage only the first sub-damper works and when the deformation reaches to $ad2, the second sub-damper actives , exhibiting the double-stage working mechanism. .. function:: uniaxialMaterial APDMD $matTag $fy1 $E1 $ad2 $fy2 $E2 $b1 $b2 $a1 $n1 $a2 $n2 -.. csv-table:: +.. csv-table:: :header: "Argument", "Type", "Description" :widths: 10, 10, 40 @@ -22,86 +22,85 @@ A typical asynchronous parallel double-stage metallic damper is composed of two $b2, |float|, Ratio of post-yield stiffness to the initial stiffness of the second sub-damper $a1, |float|, Parameters to control the nonlinear behavior of the first sub-damper $n1, |float|, Parameters to control the transition from elastic to plastic branches of the first sub-damper - $a2, |float|, Parameters to control the nonlinear behavior of the second sub-damper + $a2, |float|, Parameters to control the nonlinear behavior of the second sub-damper $n2, |float|, Parameters to control the transition from elastic to plastic branches of the second sub-damper - + Recommended values of $a1 $n1 $a2 $n2 for simulating three types of APDMDs are provided in the examples. .. figure:: figures/APDMD/APDMD1.png - :align: center - :figclass: align-center + :align: center + :figclass: align-center + + APDMD material schematic. + +Example +------- + +In order to verify the reliability of the APDMD uniaxialMaterial, three types of asynchronous parallel double-stage metallic dampers were simulated as examples, including the parallel double-stage yielding buckling restrained brace (PDYBRB), parallel double-stage crawler-track-shaped shear damper (PDCSD) and parallel double-stage shear panel damper (PDSPD). +Parameters of the APDMD uniaxialMaterial examples for modeling two tests of each of the above three types of dampers are presented in Table 1. (Units can be arbitrarily converted, but must be unified.) -.. note:: -Example: - In order to verify the reliability of the APDMD uniaxialMaterial, three types of asynchronous parallel double-stage metallic dampers were simulated as examples, including the parallel double-stage yielding buckling restrained brace (PDYBRB), parallel double-stage crawler-track-shaped shear damper (PDCSD) and parallel double-stage shear panel damper (PDSPD). -Parameters of the APDMD uniaxialMaterial examples for modeling two tests of each of the above three types of dampers are presented in Table 1. (Units can be arbitrarily converted, but must be unified.) +**Case 1: PDYBRB.** When simulating parallel double-stage yielding buckling restrained brace (PDYBRB) using APDMD uniaxialMaterial, $a1, $n1, $a2 and $n2 are recommended to be 1, 10, 2 and 4, respectively. .. figure:: figures/APDMD/APDMD2.png - :align: center - :figclass: align-center + :align: center + :figclass: align-center - (1) When simulating parallel double-stage yielding buckling restrained brace (PDYBRB) using APDMD uniaxialMaterial, $a1, $n1, $a2 and $n2 are recommended to be 1, 10, 2 and 4, respectively. + PDYBRB example parameters and response. The input parameters for the material should be as follows: - **Tcl Code** - .. code-block:: tcl +1. **Tcl Code** +.. code-block:: tcl - uniaxialMaterial APDMD 1 371 180 12 742 406 0.045 0.041 1 10 2 4 - uniaxialMaterial APDMD 1 479 230 15.8 659 355 0.033 0.043 1 10 2 4 - -Using these parameters, comparison between the experimental and simulated load-deformation curves of PDYBRB is shown in Fig. 2. + uniaxialMaterial APDMD 1 371 180 12 742 406 0.045 0.041 1 10 2 4 + uniaxialMaterial APDMD 1 479 230 15.8 659 355 0.033 0.043 1 10 2 4 +Using these parameters, comparison between the experimental and simulated load-deformation curves of PDYBRB is shown below. +**Case 2: PDCSD.** When simulating parallel double-stage crawler-track-shaped shear damper (PDCSD) using APDMD uniaxialMaterial, $a1, $n1, $a2 and $n2 are recommended to be 0.5, 10, 1 and 15, respectively. .. figure:: figures/APDMD/APDMD3.png - :align: center - :figclass: align-center - + :align: center + :figclass: align-center - (2) When simulating parallel double-stage crawler-track-shaped shear damper (PDCSD) using APDMD uniaxialMaterial, $a1, $n1, $a2 and $n2 are recommended to be 0.5, 10, 1 and 15, respectively. + PDCSD example parameters and response. The input parameters for the material should be as follows: - **Tcl Code** - - .. code-block:: tcl +1. **Tcl Code** - uniaxialMaterial APDMD 1 18 2 27 10.55 1.21 0.083 0.033 0.5 10 1 15 - uniaxialMaterial APDMD 1 23 3.24 20 17.48 3.57 0.095 -0.050 0.5 10 1 15 +.. code-block:: tcl + uniaxialMaterial APDMD 1 18 2 27 10.55 1.21 0.083 0.033 0.5 10 1 15 + uniaxialMaterial APDMD 1 23 3.24 20 17.48 3.57 0.095 -0.050 0.5 10 1 15 -Using these parameters, comparison between the experimental and simulated load-deformation curves of PDCSD is shown in Fig. 3. - +Using these parameters, comparison between the experimental and simulated load-deformation curves of PDCSD is shown below. +**Case 3: PDSPD.** When simulating parallel double-stage shear panel damper (PDSPD) using APDMD uniaxialMaterial, $a1, $n1, $a2 and $n2 are recommended to be 1, 15, 0.5 and 10, respectively. .. figure:: figures/APDMD/APDMD4.png - :align: center - :figclass: align-center + :align: center + :figclass: align-center - (3) When simulating parallel double-stage shear panel damper (PDSPD) using APDMD uniaxialMaterial, $a1, $n1, $a2 and $n2 are recommended to be 1, 15, 0.5 and 10, respectively. + PDSPD example parameters and response. The input parameters for the material should be as follows: - **Tcl Code** - - .. code-block:: tcl - - uniaxialMaterial APDMD 1 200 281.69 4.5 87.05 29.02 0.019 -0.031 1 15 0.5 10 - uniaxialMaterial APDMD 1 175 97.22 3.6 58.18 13.82 0.046 0.133 1 15 0.5 10 +1. **Tcl Code** +.. code-block:: tcl + uniaxialMaterial APDMD 1 200 281.69 4.5 87.05 29.02 0.019 -0.031 1 15 0.5 10 + uniaxialMaterial APDMD 1 175 97.22 3.6 58.18 13.82 0.046 0.133 1 15 0.5 10 -Using these parameters, comparison between the experimental and simulated load-deformation curves of PDMD is shown in Fig. 4. - - +Using these parameters, comparison between the experimental and simulated load-deformation curves of PDSPD is shown below. .. figure:: figures/APDMD/APDMD5.png - :align: center - :figclass: align-center - + :align: center + :figclass: align-center + Comparison of experimental and simulated load-deformation curves. Code Developed by: Linlin Xie, Cantian Yang, Bingyan Liu, Aiqun Li, Beijing University of Civil Engineering and Architecture. diff --git a/source/user/manual/material/uniaxialMaterials/APDVFD.rst b/source/user/manual/material/uniaxialMaterials/APDVFD.rst index 28210fda..435b307f 100644 --- a/source/user/manual/material/uniaxialMaterials/APDVFD.rst +++ b/source/user/manual/material/uniaxialMaterials/APDVFD.rst @@ -1,76 +1,79 @@ -.. _APDVFD : +.. _APDVFD: APDVFD Material -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^ This command is used to construct a uniaxialMaterial model that simulates the hysteretic responses (axial load-deformation) of an asynchronous parallel double-stage viscous fluid damper (APDVFD) with specific parameters. An adaptive iterative algorithm with a high-precision accuracy has been implemented and validated to solve numerically the constitutive equations. (Specific parameters are shown in Fig. 1.) .. function:: uniaxialMaterial APDVFD $matTag $K $G1 $G2 $Alpha $L $LC $DP $DG $N1 $N2 $DO1 $DO2 $DC $S $HP $HC <$LGap> <$NM $RelTol $AbsTol $MaxHalf> -.. csv-table:: +.. csv-table:: :header: "Argument", "Type", "Description" :widths: 10, 10, 40 $matTag, |integer|, integer tag identifying material. - $K, |float|, Elastic stiffness of linear spring to model the axial flexibility of a viscous damper (e.g. combined stiffness of the supporting brace and internal damper portion. The value is usually 10^5N/mm.). + $K, |float|, "Elastic stiffness of linear spring to model the axial flexibility of a viscous damper (e.g. combined stiffness of the supporting brace and internal damper portion. The value is usually 10^5N/mm.)." $G1, |float|, Primary piston hydrodynamic viscosity. $G2, |float|, Secondary piston hydrodynamic viscosity. $Alpha, |float|, Velocity exponent. - $L, |float|, The thickness of the total piston (The primary piston is equal to the secondary piston.). - $LC, |float|, The thickness of the two ends of the secondary piston head (To ensure the secondary piston could smoothly move from the free segment into the damping segment, it is a smaller diameter than that at the middle.). - $DP, |float|, The diameters of the piston (The primary piston is equal to the secondary piston.). + $L, |float|, "The thickness of the total piston (The primary piston is equal to the secondary piston.)." + $LC, |float|, "The thickness of the two ends of the secondary piston head (To ensure the secondary piston could smoothly move from the free segment into the damping segment, it is a smaller diameter than that at the middle.)." + $DP, |float|, "The diameters of the piston (The primary piston is equal to the secondary piston.)." $DG, |float|, The diameters of the piston rod. $N1, |float|, Number of primary piston circular orifices. $N2, |float|, Number of secondary piston circular orifices. $DO1, |float|, The diameters of primary piston circular orifices. $DO2, |float|, The diameters of secondary piston circular orifices. - $DC, |float|, Inside diameter of the cylinder (The primary cylinder is equal to the secondary cylinder.). - $S, |float|, The second-stage activation deformation (The displacement of the secondary piston begins to participate in the work.). - $HP, |float|, Height of annular gap between cylinder inner surface and piston middle outer surface (The value cannot be zero.). - $HC, |float|, Height of annular gap between cylinder inner surface and outer surface of piston two ends (The value cannot be zero.). + $DC, |float|, "Inside diameter of the cylinder (The primary cylinder is equal to the secondary cylinder.)." + $S, |float|, "The second-stage activation deformation (The displacement of the secondary piston begins to participate in the work.)." + $HP, |float|, "Height of annular gap between cylinder inner surface and piston middle outer surface (The value cannot be zero.)." + $HC, |float|, "Height of annular gap between cylinder inner surface and outer surface of piston two ends (The value cannot be zero.)." $LGap, |float|, Gap length to simulate the gap length due to the pin tolerance. - $NM, |float|, Employed adaptive numerical algorithm (default value NM = 1; 1 = Dormand-Prince54, 2=6th order Adams-Bashforth-Moulton, 3=modified Rosenbrock Triple). - $RelTol, |float|, Tolerance for absolute relative error control of the adaptive iterative algorithm (default value 10^-6). - $AbsTol, |float|, Tolerance for absolute error control of adaptive iterative algorithm (default value 10^-10). + $NM, |float|, "Employed adaptive numerical algorithm (default value NM = 1; 1 = Dormand-Prince54, 2=6th order Adams-Bashforth-Moulton, 3=modified Rosenbrock Triple)." + $RelTol, |float|, "Tolerance for absolute relative error control of the adaptive iterative algorithm (default value 10^-6)." + $AbsTol, |float|, "Tolerance for absolute error control of adaptive iterative algorithm (default value 10^-10)." $MaxHalf, |float|, Maximum number of sub-step iterations within an integration step (default value 15). - .. figure:: figures/APDVFD/APDVFD1.png - :align: center - :figclass: align-center + :align: center + :figclass: align-center -.. note:: -Example: - In order to verify the reliability of the asynchronous parallel double-stage viscous fluid damper, two sets of test and simulation results are selected for verification. Material parameters are shown in the following table (Units can be arbitrarily converted, but must be unified): + APDVFD material schematic. -.. figure:: figures/APDVFD/APDVFD2.png - :align: center - :figclass: align-center - The input parameters for the material should be as follows: - **Tcl Code** +Example +------- - .. code-block:: tcl +In order to verify the reliability of the asynchronous parallel double-stage viscous fluid damper, two sets of test and simulation results are selected for verification. Material parameters are shown in the following table (Units can be arbitrarily converted, but must be unified): +.. figure:: figures/APDVFD/APDVFD2.png + :align: center + :figclass: align-center - uniaxialMaterial APDVFD 1 300 0.009 0.009 0.2238 170 25 179.8 90 6 6 4.5 5 180 20 0.1 0.5 - uniaxialMaterial APDVFD 1 300 0.013 0.013 0.1986 170 25 179.8 90 6 6 4.5 5 180 20 0.1 0.5 -Using these parameters, comparison between the experimental and simulated load-deformation curves of APDVFD1 for sinusoidal displacement increment of 80mm and a frequency f = 0.02Hz is shown in Fig. 2. The comparison between the experimental and simulated load-deformation curves of APDVFD2 for sinusoidal displacement increment of 120mm and a frequency f = 0.02Hz is shown in Fig. 3. + APDVFD material parameters. +The input parameters for the material should be as follows: +1. **Tcl Code** -.. figure:: figures/APDVFD/APDVFD3.png - :align: center - :figclass: align-center +.. code-block:: tcl + + uniaxialMaterial APDVFD 1 300 0.009 0.009 0.2238 170 25 179.8 90 6 6 4.5 5 180 20 0.1 0.5 + uniaxialMaterial APDVFD 1 300 0.013 0.013 0.1986 170 25 179.8 90 6 6 4.5 5 180 20 0.1 0.5 +Using these parameters, comparison between the experimental and simulated load-deformation curves of APDVFD1 for sinusoidal displacement increment of 80mm and a frequency f = 0.02Hz is shown in Fig. 2. The comparison between the experimental and simulated load-deformation curves of APDVFD2 for sinusoidal displacement increment of 120mm and a frequency f = 0.02Hz is shown in Fig. 3. +.. figure:: figures/APDVFD/APDVFD3.png + :align: center + :figclass: align-center + Comparison of experimental and simulated load-deformation curves. Code Developed by: Linlin Xie, Cantian Yang, Haoxiang Wang, Aiqun Li, Beijing University of Civil Engineering and Architecture. References: -[1] Yang C, Wang H, Xie L, Li A, Wang X. “Experimental and theoretical investigations on an asynchronized parallel double-stage viscous fluid damper.” Structural Control and Health Monitoring,(under review). +[1] Yang C, Wang H, Xie L, Li A, Wang X. "Experimental and theoretical investigations on an asynchronized parallel double-stage viscous fluid damper." Structural Control and Health Monitoring,(under review). -[2] Akcelyan, S., Lignos, D. G., Hikino, T. (2018). “Adaptive Numerical Method Algorithms for Nonlinear Viscous and Bilinear Oil Damper Models Subjected to Dynamic Loading.” Soil Dynamics and Earthquake Engineering, 113, 488-502. +[2] Akcelyan, S., Lignos, D. G., Hikino, T. (2018). "Adaptive Numerical Method Algorithms for Nonlinear Viscous and Bilinear Oil Damper Models Subjected to Dynamic Loading." Soil Dynamics and Earthquake Engineering, 113, 488-502. -[3] Oohara, K., and Kasai, K. (2002), “Time-History Analysis Models for Nonlinear Viscous Dampers”, Proc. Structural Engineers World Congress (SEWC), Yokohama, JAPAN, CD-ROM, T2-2-b-3 (in Japanese). +[3] Oohara, K., and Kasai, K. (2002), "Time-History Analysis Models for Nonlinear Viscous Dampers", Proc. Structural Engineers World Congress (SEWC), Yokohama, JAPAN, CD-ROM, T2-2-b-3 (in Japanese). diff --git a/source/user/manual/misc/remove.rst b/source/user/manual/misc/remove.rst new file mode 100644 index 00000000..1539fa68 --- /dev/null +++ b/source/user/manual/misc/remove.rst @@ -0,0 +1,40 @@ +.. _remove: + +remove Command +************** + +This command is used to remove components from the model. + +.. function:: remove element $eleTag + + Remove an element from the domain. + +.. function:: remove node $nodeTag + + Remove a node from the domain. + +.. function:: remove loadPattern $patternTag + + Remove a load pattern from the domain. + +.. function:: remove parameter $paramTag + + Remove a parameter from the model. + +.. function:: remove recorders + + Remove all recorders. + +.. function:: remove recorder $tag + + Remove a single recorder. The tag is the integer returned when the recorder was created. + +.. function:: remove sp $nodeTag $dof + + Remove a single-point constraint. + +.. function:: remove mp $constrainedNodeTag + + Remove a multi-point constraint. + +Code Developed by: |fmk| diff --git a/source/user/manual/miscCommands.rst b/source/user/manual/miscCommands.rst index 04ac1aaa..2a6203e8 100644 --- a/source/user/manual/miscCommands.rst +++ b/source/user/manual/miscCommands.rst @@ -20,6 +20,7 @@ These are commands added to the interpreter which don't fit into one of the othe :maxdepth: 1 misc/loadConst + misc/remove misc/wipe misc/wipeAnalysis misc/exit diff --git a/source/user/manual/model/element.rst b/source/user/manual/model/element.rst index b0095e0f..6055281c 100644 --- a/source/user/manual/model/element.rst +++ b/source/user/manual/model/element.rst @@ -46,6 +46,7 @@ The following subsections contain information about **$eleType** and the number elements/Truss elements/CorotationalTruss + elements/InertiaTruss 3. Beam Column Elements @@ -60,7 +61,7 @@ The following subsections contain information about **$eleType** and the number elements/ElasticBeamColumnElementWithStiffnessModifiers elements/ElasticTimoshenkoBeamColumnElement elements/BeamWithHingesElement - elements/gradientInelasticBeamColumn + elements/gradientInelasticBeamColumn elements/FlexureShearInteractionDisplacementBasedBeamColumnElement elements/MVLEM elements/MVLEM_3D @@ -84,6 +85,7 @@ The following subsections contain information about **$eleType** and the number elements/ShellNLDKGQ elements/ShellNL elements/BbarPlaneStrainQuadrilateral + elements/bbarQuad elements/EnhancedStrainQuadrilateral elements/MEFI @@ -151,13 +153,13 @@ The following subsections contain information about **$eleType** and the number elements/ElastomericX elements/LeadRubberX elements/HDR - elements/RJ-Watson EQS Bearing + elements/RJWatsonEQSBearing elements/FPBearingPTV elements/TripleFrictionPendulumX -11. U-P Elements (saturated soil) +11. U-P Elements (saturated soil) .. toctree:: :maxdepth: 1 @@ -168,27 +170,24 @@ The following subsections contain information about **$eleType** and the number elements/bbarBrickUP elements/NineFourNodeQuadUP elements/TwentyEightNodeBrickUP - elements/TwentyNodeBrickUP - elements/BrickLargeDisplacementUP - elements/SSPquadUP + elements/SSPquadUP elements/SSPbrickUP 12. Contact .. toctree:: - :maxdepth: 1 + :maxdepth: 1 elements/SimpleContact2D elements/SimpleContact3D elements/BeamContact2D elements/BeamContact3D elements/BeamEndContact3D - elements/zeroLengthImpact3D - + 13. Cable .. toctree:: - :maxdepth: 1 + :maxdepth: 1 elements/CatenaryCableElement diff --git a/source/user/manual/model/elements/LehighJoint2D.rst b/source/user/manual/model/elements/LehighJoint2D.rst index 3d87f9c8..41c4c147 100644 --- a/source/user/manual/model/elements/LehighJoint2D.rst +++ b/source/user/manual/model/elements/LehighJoint2D.rst @@ -1,4 +1,4 @@ -.. LehighJoint2D: +.. _LehighJoint2D: LehighJoint2D Element ^^^^^^^^^^^^^^^^^^^^^^^ @@ -11,7 +11,7 @@ Command Lines TCL: -.. function:: element LehighJoint $eleTag $iNode $jNnode $kNode $lNode $matTag1 $matTag2 $matTag3 $matTag4 $matTag5 $matTag6 $matTag7 $matTag8 $matTag9 +.. function:: element LehighJoint2D $eleTag $iNode $jNnode $kNode $lNode $matTag1 $matTag2 $matTag3 $matTag4 $matTag5 $matTag6 $matTag7 $matTag8 $matTag9 Python: @@ -65,7 +65,7 @@ Examples .. code-block:: tcl - element LehighJoint 4 2 3 4 5 1001 1002 1003 1004 1005 1006 1007 1008 1009; + element LehighJoint2D 4 2 3 4 5 1001 1002 1003 1004 1005 1006 1007 1008 1009; 2. **Python** diff --git a/source/user/manual/model/elements/SFI_MVLEM_3D.rst b/source/user/manual/model/elements/SFI_MVLEM_3D.rst index afc4b8b7..037b2e26 100644 --- a/source/user/manual/model/elements/SFI_MVLEM_3D.rst +++ b/source/user/manual/model/elements/SFI_MVLEM_3D.rst @@ -1,10 +1,10 @@ -.. _SFI_MVLEM_3D:: +.. _SFI_MVLEM_3D: SFI-MVLEM-3D Element ^^^^^^^^^^^^^^^^^^^^ -| Developed and implemented by: -| `Kristijan Kolozvari `_ (CSU Fullerton) +| Developed and implemented by: +| Kristijan Kolozvari (CSU Fullerton, kkolozvari@fullerton.edu) | Kamiar Kalbasi (CSU Fullerton) | Kutay Orakcal (Bogazici University) | John Wallace (UCLA) @@ -12,9 +12,9 @@ SFI-MVLEM-3D Element Description ########### -The SFI-MVLEM-3D model (Figure 1a) is a three-dimensional four-node element with 24 DOFs that incorporates axial-flexural-shear interaction and can be used for nonlinear analysis of non-rectangular reinforced concrete walls subjected to multidirectional loading. The SFI-MVLEM-3D model is an extension of the two-dimensional, two-node Shear-Flexure-Interaction Multiple-Vertical-Line-Element-Model (`SFI-MVLEM `_). The baseline SFI-MVLEM, which is essentially a line element for rectangular walls subjected to in-plane loading, is extended in this study to a three-dimensional model formulation by applying geometric transformation of the element degrees of freedom that converted it into a four-node element formulation (Figure 1b), as well as by incorporating linear elastic out-of-plane behavior based on the Kirchhoff plate theory (Figure 1c). The in-plane and the out-of-plane element behaviors are uncoupled in the present model. +The SFI-MVLEM-3D model (Figure 1a) is a three-dimensional four-node element with 24 DOFs that incorporates axial-flexural-shear interaction and can be used for nonlinear analysis of non-rectangular reinforced concrete walls subjected to multidirectional loading. The SFI-MVLEM-3D model is an extension of the two-dimensional, two-node Shear-Flexure-Interaction Multiple-Vertical-Line-Element-Model (`SFI-MVLEM `__). The baseline SFI-MVLEM, which is essentially a line element for rectangular walls subjected to in-plane loading, is extended in this study to a three-dimensional model formulation by applying geometric transformation of the element degrees of freedom that converted it into a four-node element formulation (Figure 1b), as well as by incorporating linear elastic out-of-plane behavior based on the Kirchhoff plate theory (Figure 1c). The in-plane and the out-of-plane element behaviors are uncoupled in the present model. -For additional information please visit `SFI-MVLEM-3D GitHub Page `_. +For additional information please visit the `SFI-MVLEM-3D GitHub repository `__. This element shall be used in Domain defined with **-ndm 3 -ndf 6**. diff --git a/source/user/manual/model/elements/TripleFrictionPendulumX.rst b/source/user/manual/model/elements/TripleFrictionPendulumX.rst index f6b96147..c72491a6 100644 --- a/source/user/manual/model/elements/TripleFrictionPendulumX.rst +++ b/source/user/manual/model/elements/TripleFrictionPendulumX.rst @@ -1,4 +1,4 @@ -.. _TripleFrictionPendulumX:: +.. _TripleFrictionPendulumX: TripleFrictionPendulumX Element ^^^^^^^^^^^^^^^^ diff --git a/source/user/manual/model/elements/brick.rst b/source/user/manual/model/elements/brick.rst deleted file mode 100644 index e515a5e9..00000000 --- a/source/user/manual/model/elements/brick.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. _stdBrick:: - -stdBrick Element -^^^^^^^^^^^^^^^^ - -This command is used to construct an eight-node brick element object, which uses the standard isoparametric formulation. - -.. function:: element stdBrick $eleTag $node1 $node2 $node3 $node4 $node5 $node6 $node7 $node8 $matTag <$b1 $b2 $b3> - -.. csv-table:: - :header: "Argument", "Type", "Description" - :widths: 10, 10, 40 - - $eleTag, |integer|, unique element object tag - $node1 .. $node8, 8 |integer|, nodes of brick (ordered as shown in fig below) - $matTag, |integer|, tag of nDMaterial - $b1 $b2 $b3, |listFloat|, optional: body forces in global x,y,z directions - -.. note:: - - The valid queries to a Brick element when creating an ElementRecorder object are 'forces', 'stresses,' ('strains' version > 2.2.0) and 'material $matNum matArg1 matArg2 ...' Where $matNum refers to the material object at the integration point corresponding to the node numbers in the isoparametric domain. -This element can only be defined in -ndm 3 -ndf 3 - - .. admonition:: Example - - The following example constructs a brick element with tag **1** between nodes **1, 2, 3, 4, 5, 6, 7, 8** with an nDMaterial of tag **1** and body forces given by varaiables **b1, b2, b3**. - - 1. **Tcl Code** - - .. code-block:: tcl - - element stdBrick 1 1 2 3 4 5 6 7 8 1 $b1 $b2 $b3 - - 2. **Python Code** - - .. code-block:: python - - element('stdBrick',1,2,3,4,5,6,7,8,1, b1, b2, b3) - -Code Developed by: **Edward Love, Sandia National Laboratories** \ No newline at end of file diff --git a/source/user/manual/model/elements/dispBeamColumn.rst b/source/user/manual/model/elements/dispBeamColumn.rst index c1393634..affb9d05 100644 --- a/source/user/manual/model/elements/dispBeamColumn.rst +++ b/source/user/manual/model/elements/dispBeamColumn.rst @@ -15,7 +15,7 @@ stic hinge integration, see :ref:`beamIntegration` options. The element if formu .. tab:: Tcl - .. function:: element dispBeamCoumn $eleTag $iNode $jNode $transfTag $integrationTag <-mass $mass> + .. function:: element dispBeamColumn $eleTag $iNode $jNode $transfTag $integrationTag <-mass $mass> .. csv-table:: :header: "Argument", "Type", "Description" diff --git a/source/user/manual/model/elements/forceBeamColumn.rst b/source/user/manual/model/elements/forceBeamColumn.rst index bba01274..aa7379fc 100644 --- a/source/user/manual/model/elements/forceBeamColumn.rst +++ b/source/user/manual/model/elements/forceBeamColumn.rst @@ -15,7 +15,7 @@ stic hinge integration, see :ref:`beamIntegration` options. The element if formu .. tab:: Tcl - .. function:: element forceBeamCoumn $eleTag $iNode $jNode $transfTag $integrationTag <-iter $maxIter $tol> <-mass $mass> + .. function:: element forceBeamColumn $eleTag $iNode $jNode $transfTag $integrationTag <-iter $maxIter $tol> <-mass $mass> .. csv-table:: :header: "Argument", "Type", "Description" diff --git a/source/user/manual/model/elements/zeroLengthContactASDimplex.rst b/source/user/manual/model/elements/zeroLengthContactASDimplex.rst index 719fae3b..a09ac206 100644 --- a/source/user/manual/model/elements/zeroLengthContactASDimplex.rst +++ b/source/user/manual/model/elements/zeroLengthContactASDimplex.rst @@ -1,7 +1,7 @@ .. _zeroLengthContactASDimplex: ZeroLengthContactASDimplex Element -^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This command is used to construct zeroLengthContactASDimplex element object. The zeroLengthContactASDimplex element is a 2-node zeroLength contact element with the following features: diff --git a/source/user/manual/output/EnvelopeNodeRecorder.rst b/source/user/manual/output/EnvelopeNodeRecorder.rst index e7528983..f7b1d058 100644 --- a/source/user/manual/output/EnvelopeNodeRecorder.rst +++ b/source/user/manual/output/EnvelopeNodeRecorder.rst @@ -45,9 +45,10 @@ The EnvelopeNode recorder type records the maxima and minima response of a numbe rayleighForces! 4. | The function returns a value: - | SUCCESS: **>0** an integer tag that can be used as a handle on the recorder for the remove a recorder in the :ref:`remove`. + | SUCCESS: **>0** an integer tag that can be used as a handle to remove a recorder with the :ref:`remove` command. | FAILURE: **-1** recorder command failed (read the log) - To remove a recorder using the :ref:`remove` you need to save this tag in a variable for use later in the script. + + To remove a recorder using the :ref:`remove` command, save this tag in a variable for use later in the script. 5. $deltaT, time interval for recording. will record when next step is $deltaT greater than last recorder step. Not really useful for Envelope recorder, a legacy from NodeRecorder! @@ -70,6 +71,9 @@ The EnvelopeNode recorder type records the maxima and minima response of a numbe recorder EnvelopeNode -file nodesA.out -timeSeries 1 2 -time -node 1 2 3 4 -dof 1 2 accel; - .. code:: python + .. code-block:: python + + recorder('EnvelopeNode', '-file', 'nodesD.out', '-time', '-node', 1, 2, 3, 4, '-dof', 1, 2, 'disp') + recorder('EnvelopeNode', '-file', 'nodesA.out', '-timeSeries', 1, 2, '-time', '-node', 1, 2, 3, 4, '-dof', 1, 2, 'accel') Code developed by: |fmk| diff --git a/source/user/manual/output/GmshRecorder.rst b/source/user/manual/output/GmshRecorder.rst index d911bb3c..0e709d2f 100644 --- a/source/user/manual/output/GmshRecorder.rst +++ b/source/user/manual/output/GmshRecorder.rst @@ -35,7 +35,7 @@ The GMSH recorder type is a *whole model* recorder, that is it is meant to recor Note the response type ``partition`` is unique to this recorder type and it contains information on the partition each element was assigned (useful in parallel processing to check model partitioning). 3. | The function returns a value: - | SUCCESS: **>0** an integer tag that can be used as a handle on the recorder for the remove a recorder in the :ref:`remove`. + | SUCCESS: **>0** an integer tag that can be used as a handle to remove a recorder with the :ref:`remove` command. | FAILURE: **-1** recorder command failed (read the log) diff --git a/source/user/manual/output/NodeRecorder.rst b/source/user/manual/output/NodeRecorder.rst index b5d99561..007b483d 100644 --- a/source/user/manual/output/NodeRecorder.rst +++ b/source/user/manual/output/NodeRecorder.rst @@ -45,9 +45,10 @@ The Node recorder type records the response of a number of nodes at every conver rayleighForces! 4. | The function returns a value: - | SUCCESS: **>0** an integer tag that can be used as a handle on the recorder for the remove a recorder in the :ref:`remove`. + | SUCCESS: **>0** an integer tag that can be used as a handle to remove a recorder with the :ref:`remove` command. | FAILURE: **-1** recorder command failed (read the log) - To remove a recorder using the :ref:`remove` you need to save this tag in a variable for use later in the script. + + To remove a recorder using the :ref:`remove` command, save this tag in a variable for use later in the script. 5. $deltaT specifies a time interval for recording. will record when next step is $deltaT greater than last recorder step. It is useful if user script subdivides time step and user is not interested in the responses at each time step due to memory or file size constraints. @@ -70,6 +71,9 @@ The Node recorder type records the response of a number of nodes at every conver recorder Node -file nodesA.out -timeSeries 1 2 -time -node 1 2 3 4 -dof 1 2 accel; - .. code:: python + .. code-block:: python + + recorder('Node', '-file', 'nodesD.out', '-time', '-node', 1, 2, 3, 4, '-dof', 1, 2, 'disp') + recorder('Node', '-file', 'nodesA.out', '-timeSeries', 1, 2, '-time', '-node', 1, 2, 3, 4, '-dof', 1, 2, 'accel') Code developed by: |fmk| diff --git a/source/user/manual/output/recorder.rst b/source/user/manual/output/recorder.rst index 7882b2ec..5e60622f 100644 --- a/source/user/manual/output/recorder.rst +++ b/source/user/manual/output/recorder.rst @@ -44,7 +44,7 @@ The type of recorder created and the additional arguments required depends on th The function returns a value: - **>0** an integer tag that can be used as a handle on the recorder for the remove a recorder in the :ref:`remove`. + **>0** an integer tag that can be used as a handle to remove a recorder with the :ref:`remove` command. **-1** recorder command failed if integer -1 returned. From 145715da7c83a50cdc61a99a1652455bbe36a982 Mon Sep 17 00:00:00 2001 From: gaaraujo Date: Fri, 5 Jun 2026 17:27:10 -0700 Subject: [PATCH 3/4] Add missing manual pages for model, section, recorder, and element commands. Provide RST pages for toctree entries that previously had no content, including elastic uniaxial materials, mass/region/block commands, section types, recorders, and previously undocumented element types. --- .../material/uniaxialMaterials/Elastic.rst | 33 ++++++++ .../uniaxialMaterials/ElasticBilin.rst | 36 +++++++++ .../uniaxialMaterials/ElasticMultiLinear.rst | 44 ++++++++++ .../uniaxialMaterials/ElasticNoTension.rst | 35 ++++++++ .../material/uniaxialMaterials/ElasticPP.rst | 34 ++++++++ .../uniaxialMaterials/ElasticPP_Gap.rst | 35 ++++++++ .../material/uniaxialMaterials/Hardening.rst | 37 +++++++++ .../uniaxialMaterials/MultiLinear.rst | 42 ++++++++++ .../figures/ElasticMultiLinear.png | Bin 0 -> 31534 bytes .../figures/MultiLinear_Material2.png | Bin 0 -> 27444 bytes source/user/manual/model/block.rst | 75 ++++++++++++++++++ source/user/manual/model/elements/AC3D8.rst | 42 ++++++++++ source/user/manual/model/elements/ASI3D8.rst | 40 ++++++++++ source/user/manual/model/elements/AV3D4.rst | 42 ++++++++++ .../elements/BbarPlaneStrainQuadrilateral.rst | 39 +++++++++ .../manual/model/elements/BeamContact2D.rst | 42 ++++++++++ .../manual/model/elements/BeamContact3D.rst | 43 ++++++++++ .../model/elements/BeamEndContact3D.rst | 41 ++++++++++ .../model/elements/BeamWithHingesElement.rst | 55 +++++++++++++ source/user/manual/model/elements/BrickUP.rst | 42 ++++++++++ .../model/elements/CatenaryCableElement.rst | 47 +++++++++++ ...eamColumnElementWithStiffnessModifiers.rst | 50 ++++++++++++ .../ElasticTimoshenkoBeamColumnElement.rst | 56 +++++++++++++ .../elements/ElastomericBearingBouc-Wen.rst | 54 +++++++++++++ .../elements/ElastomericBearingPlasticity.rst | 52 ++++++++++++ .../manual/model/elements/ElastomericX.rst | 58 ++++++++++++++ .../elements/EnhancedStrainQuadrilateral.rst | 38 +++++++++ .../manual/model/elements/FPBearingPTV.rst | 55 +++++++++++++ .../elements/FlatSliderBearingElement.rst | 50 ++++++++++++ ...tionDisplacementBasedBeamColumnElement.rst | 49 ++++++++++++ .../manual/model/elements/FourNodeQuadUP.rst | 44 ++++++++++ source/user/manual/model/elements/HDR.rst | 50 ++++++++++++ .../manual/model/elements/KikuchiBearing.rst | 51 ++++++++++++ .../manual/model/elements/LeadRubberX.rst | 62 +++++++++++++++ source/user/manual/model/elements/MVLEM.rst | 61 ++++++++++++++ .../model/elements/MultipleShearSpring.rst | 41 ++++++++++ .../model/elements/NineFourNodeQuadUP.rst | 41 ++++++++++ .../model/elements/RJWatsonEQSBearing.rst | 50 ++++++++++++ .../user/manual/model/elements/SSPbrickUP.rst | 43 ++++++++++ .../user/manual/model/elements/SSPquadUP.rst | 44 ++++++++++ .../model/elements/ShallowFoundationGen.rst | 45 +++++++++++ source/user/manual/model/elements/Shell.rst | 44 ++++++++++ .../user/manual/model/elements/ShellDKGQ.rst | 43 ++++++++++ .../user/manual/model/elements/ShellDKGT.rst | 43 ++++++++++ source/user/manual/model/elements/ShellNL.rst | 42 ++++++++++ .../manual/model/elements/ShellNLDKGQ.rst | 41 ++++++++++ .../manual/model/elements/ShellNLDKGT.rst | 41 ++++++++++ .../manual/model/elements/SimpleContact2D.rst | 40 ++++++++++ .../manual/model/elements/SimpleContact3D.rst | 40 ++++++++++ .../SingleFrictionPendulumBearing.rst | 51 ++++++++++++ .../manual/model/elements/SurfaceLoad.rst | 40 ++++++++++ source/user/manual/model/elements/Tri31.rst | 45 +++++++++++ .../model/elements/TripleFrictionPendulum.rst | 49 ++++++++++++ .../TripleFrictionPendulumBearing.rst | 44 ++++++++++ .../model/elements/TwentyEightNodeBrickUP.rst | 41 ++++++++++ source/user/manual/model/elements/VS3D4.rst | 43 ++++++++++ .../model/elements/YamamotoBiaxialHDR.rst | 41 ++++++++++ .../elements/ZeroLengthContactASDimplex.png | Bin 0 -> 20079 bytes .../manual/model/elements/bbarBrickUP.rst | 40 ++++++++++ .../user/manual/model/elements/bbarQuadUP.rst | 42 ++++++++++ .../SFI_MVLEM/SFI_MVLEM_3D_formulation.jpg | Bin 0 -> 216280 bytes source/user/manual/model/mass.rst | 37 +++++++++ source/user/manual/model/region.rst | 47 +++++++++++ source/user/manual/output/DriftRecorder.rst | 52 ++++++++++++ .../manual/output/EnvelopeElementRecorder.rst | 58 ++++++++++++++ source/user/manual/output/PlotRecorder.rst | 48 +++++++++++ source/user/manual/output/VTK.rst | 59 ++++++++++++++ .../manual/section/BidirectionalSection.rst | 37 +++++++++ .../section/ElasticMembranePlateSection.rst | 35 ++++++++ .../manual/section/Isolator2springSection.rst | 38 +++++++++ source/user/manual/section/NDFiberSection.rst | 48 +++++++++++ .../user/manual/section/ParallelSection.rst | 31 ++++++++ .../user/manual/section/PlateFiberSection.rst | 33 ++++++++ source/user/manual/section/RCSection.rst | 42 ++++++++++ .../user/manual/section/SectionAggregator.rst | 36 +++++++++ .../user/manual/section/UniaxialSection.rst | 32 ++++++++ .../user/manual/section/WideFlangeSection.rst | 42 ++++++++++ 77 files changed, 3243 insertions(+) create mode 100644 source/user/manual/material/uniaxialMaterials/Elastic.rst create mode 100644 source/user/manual/material/uniaxialMaterials/ElasticBilin.rst create mode 100644 source/user/manual/material/uniaxialMaterials/ElasticMultiLinear.rst create mode 100644 source/user/manual/material/uniaxialMaterials/ElasticNoTension.rst create mode 100644 source/user/manual/material/uniaxialMaterials/ElasticPP.rst create mode 100644 source/user/manual/material/uniaxialMaterials/ElasticPP_Gap.rst create mode 100644 source/user/manual/material/uniaxialMaterials/Hardening.rst create mode 100644 source/user/manual/material/uniaxialMaterials/MultiLinear.rst create mode 100644 source/user/manual/material/uniaxialMaterials/figures/ElasticMultiLinear.png create mode 100644 source/user/manual/material/uniaxialMaterials/figures/MultiLinear_Material2.png create mode 100644 source/user/manual/model/block.rst create mode 100644 source/user/manual/model/elements/AC3D8.rst create mode 100644 source/user/manual/model/elements/ASI3D8.rst create mode 100644 source/user/manual/model/elements/AV3D4.rst create mode 100644 source/user/manual/model/elements/BbarPlaneStrainQuadrilateral.rst create mode 100644 source/user/manual/model/elements/BeamContact2D.rst create mode 100644 source/user/manual/model/elements/BeamContact3D.rst create mode 100644 source/user/manual/model/elements/BeamEndContact3D.rst create mode 100644 source/user/manual/model/elements/BeamWithHingesElement.rst create mode 100644 source/user/manual/model/elements/BrickUP.rst create mode 100644 source/user/manual/model/elements/CatenaryCableElement.rst create mode 100644 source/user/manual/model/elements/ElasticBeamColumnElementWithStiffnessModifiers.rst create mode 100644 source/user/manual/model/elements/ElasticTimoshenkoBeamColumnElement.rst create mode 100644 source/user/manual/model/elements/ElastomericBearingBouc-Wen.rst create mode 100644 source/user/manual/model/elements/ElastomericBearingPlasticity.rst create mode 100644 source/user/manual/model/elements/ElastomericX.rst create mode 100644 source/user/manual/model/elements/EnhancedStrainQuadrilateral.rst create mode 100644 source/user/manual/model/elements/FPBearingPTV.rst create mode 100644 source/user/manual/model/elements/FlatSliderBearingElement.rst create mode 100644 source/user/manual/model/elements/FlexureShearInteractionDisplacementBasedBeamColumnElement.rst create mode 100644 source/user/manual/model/elements/FourNodeQuadUP.rst create mode 100644 source/user/manual/model/elements/HDR.rst create mode 100644 source/user/manual/model/elements/KikuchiBearing.rst create mode 100644 source/user/manual/model/elements/LeadRubberX.rst create mode 100644 source/user/manual/model/elements/MVLEM.rst create mode 100644 source/user/manual/model/elements/MultipleShearSpring.rst create mode 100644 source/user/manual/model/elements/NineFourNodeQuadUP.rst create mode 100644 source/user/manual/model/elements/RJWatsonEQSBearing.rst create mode 100644 source/user/manual/model/elements/SSPbrickUP.rst create mode 100644 source/user/manual/model/elements/SSPquadUP.rst create mode 100644 source/user/manual/model/elements/ShallowFoundationGen.rst create mode 100644 source/user/manual/model/elements/Shell.rst create mode 100644 source/user/manual/model/elements/ShellDKGQ.rst create mode 100644 source/user/manual/model/elements/ShellDKGT.rst create mode 100644 source/user/manual/model/elements/ShellNL.rst create mode 100644 source/user/manual/model/elements/ShellNLDKGQ.rst create mode 100644 source/user/manual/model/elements/ShellNLDKGT.rst create mode 100644 source/user/manual/model/elements/SimpleContact2D.rst create mode 100644 source/user/manual/model/elements/SimpleContact3D.rst create mode 100644 source/user/manual/model/elements/SingleFrictionPendulumBearing.rst create mode 100644 source/user/manual/model/elements/SurfaceLoad.rst create mode 100644 source/user/manual/model/elements/Tri31.rst create mode 100644 source/user/manual/model/elements/TripleFrictionPendulum.rst create mode 100644 source/user/manual/model/elements/TripleFrictionPendulumBearing.rst create mode 100644 source/user/manual/model/elements/TwentyEightNodeBrickUP.rst create mode 100644 source/user/manual/model/elements/VS3D4.rst create mode 100644 source/user/manual/model/elements/YamamotoBiaxialHDR.rst create mode 100644 source/user/manual/model/elements/ZeroLengthContactASDimplex.png create mode 100644 source/user/manual/model/elements/bbarBrickUP.rst create mode 100644 source/user/manual/model/elements/bbarQuadUP.rst create mode 100644 source/user/manual/model/elements/figures/SFI_MVLEM/SFI_MVLEM_3D_formulation.jpg create mode 100644 source/user/manual/model/mass.rst create mode 100644 source/user/manual/model/region.rst create mode 100644 source/user/manual/output/DriftRecorder.rst create mode 100644 source/user/manual/output/EnvelopeElementRecorder.rst create mode 100644 source/user/manual/output/PlotRecorder.rst create mode 100644 source/user/manual/output/VTK.rst create mode 100644 source/user/manual/section/BidirectionalSection.rst create mode 100644 source/user/manual/section/ElasticMembranePlateSection.rst create mode 100644 source/user/manual/section/Isolator2springSection.rst create mode 100644 source/user/manual/section/NDFiberSection.rst create mode 100644 source/user/manual/section/ParallelSection.rst create mode 100644 source/user/manual/section/PlateFiberSection.rst create mode 100644 source/user/manual/section/RCSection.rst create mode 100644 source/user/manual/section/SectionAggregator.rst create mode 100644 source/user/manual/section/UniaxialSection.rst create mode 100644 source/user/manual/section/WideFlangeSection.rst diff --git a/source/user/manual/material/uniaxialMaterials/Elastic.rst b/source/user/manual/material/uniaxialMaterials/Elastic.rst new file mode 100644 index 00000000..753a9d24 --- /dev/null +++ b/source/user/manual/material/uniaxialMaterials/Elastic.rst @@ -0,0 +1,33 @@ +.. _Elastic: + +Elastic Material +^^^^^^^^^^^^^^^^ + +This command constructs a linear elastic uniaxial material. + +.. function:: uniaxialMaterial Elastic $matTag $E <$eta> <$Eneg> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $matTag, |integer|, unique material tag + $E, |float|, tangent stiffness + $eta, |float|, optional damping tangent (default 0.0) + $Eneg, |float|, optional stiffness in compression when different from tension (default = $E) + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + uniaxialMaterial Elastic 1 3000.0 + + 2. **Python Code** + + .. code-block:: python + + ops.uniaxialMaterial('Elastic', 1, 3000.0) + +Code Developed by: |fmk| diff --git a/source/user/manual/material/uniaxialMaterials/ElasticBilin.rst b/source/user/manual/material/uniaxialMaterials/ElasticBilin.rst new file mode 100644 index 00000000..2c93bb54 --- /dev/null +++ b/source/user/manual/material/uniaxialMaterials/ElasticBilin.rst @@ -0,0 +1,36 @@ +.. _ElasticBilin: + +Elastic Bilinear Material +^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a bilinear elastic uniaxial material. Also accepted as ``ElasticBilinear``. + +.. function:: uniaxialMaterial ElasticBilin $matTag $E1P $E2P $eps2P <$E1N $E2N $eps2N> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $matTag, |integer|, unique material tag + $E1P, |float|, initial stiffness in tension + $E2P, |float|, secondary stiffness in tension + $eps2P, |float|, strain at which secondary stiffness begins in tension + $E1N, |float|, optional initial stiffness in compression + $E2N, |float|, optional secondary stiffness in compression + $eps2N, |float|, optional strain at which secondary stiffness begins in compression + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + uniaxialMaterial ElasticBilin 1 3000.0 300.0 0.01 + + 2. **Python Code** + + .. code-block:: python + + ops.uniaxialMaterial('ElasticBilin', 1, 3000.0, 300.0, 0.01) + +Code Developed by: |fmk| diff --git a/source/user/manual/material/uniaxialMaterials/ElasticMultiLinear.rst b/source/user/manual/material/uniaxialMaterials/ElasticMultiLinear.rst new file mode 100644 index 00000000..9dc6015b --- /dev/null +++ b/source/user/manual/material/uniaxialMaterials/ElasticMultiLinear.rst @@ -0,0 +1,44 @@ +.. _ElasticMultiLinear: + +Elastic Multi-Linear Material +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a multi-linear elastic uniaxial material defined by strain-stress points. + +.. function:: uniaxialMaterial ElasticMultiLinear $matTag <$eta> -strain $strainPoints -stress $stressPoints + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $matTag, |integer|, unique material tag + $eta, |float|, optional damping tangent + -strain, |string|, flag followed by strain points (at least two) + $strainPoints, |listFloat|, strain values + -stress, |string|, flag followed by stress points (at least two) + $stressPoints, |listFloat|, stress values corresponding to the strain points + +The material is path-independent: unloading and reloading follow the same multi-linear stress-strain curve. + +.. figure:: figures/ElasticMultiLinear.png + :align: center + :figclass: align-center + :name: fig-ElasticMultiLinear-response + + ElasticMultiLinear material stress-strain behavior. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + uniaxialMaterial ElasticMultiLinear 1 -strain 0.0 0.01 0.02 -stress 0.0 30.0 35.0 + + 2. **Python Code** + + .. code-block:: python + + ops.uniaxialMaterial('ElasticMultiLinear', 1, '-strain', 0.0, 0.01, 0.02, '-stress', 0.0, 30.0, 35.0) + +Code Developed by: Andreas Schellenberg diff --git a/source/user/manual/material/uniaxialMaterials/ElasticNoTension.rst b/source/user/manual/material/uniaxialMaterials/ElasticNoTension.rst new file mode 100644 index 00000000..f021dfa9 --- /dev/null +++ b/source/user/manual/material/uniaxialMaterials/ElasticNoTension.rst @@ -0,0 +1,35 @@ +.. _ElasticNoTension: + +Elastic No Tension Material +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs an elastic uniaxial material with no tensile strength. In OpenSees the material type is ``ENT``. + +.. function:: uniaxialMaterial ENT $matTag $E <$A $B> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $matTag, |integer|, unique material tag + $E, |float|, stiffness in compression + $A, |float|, optional tension scaling factor (default 0.0) + $B, |float|, optional tension-shape parameter (default 1.0) + +In compression the stress is :math:`\sigma = E \varepsilon`; in tension it is :math:`\sigma = A E \tanh(B \varepsilon)` when :math:`A \neq 0`, and zero when :math:`A = 0` (the default). + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + uniaxialMaterial ENT 1 3000.0 + + 2. **Python Code** + + .. code-block:: python + + ops.uniaxialMaterial('ENT', 1, 3000.0) + +Code Developed by: |fmk| diff --git a/source/user/manual/material/uniaxialMaterials/ElasticPP.rst b/source/user/manual/material/uniaxialMaterials/ElasticPP.rst new file mode 100644 index 00000000..03b6fbf5 --- /dev/null +++ b/source/user/manual/material/uniaxialMaterials/ElasticPP.rst @@ -0,0 +1,34 @@ +.. _ElasticPP: + +Elastic-Perfectly Plastic Material +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs an elastic-perfectly plastic uniaxial material. + +.. function:: uniaxialMaterial ElasticPP $matTag $E $epsP <$epsN $eps0> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $matTag, |integer|, unique material tag + $E, |float|, tangent stiffness + $epsP, |float|, strain at which material yields in tension + $epsN, |float|, optional strain at which material yields in compression (default = -$epsP) + $eps0, |float|, optional initial strain (default 0.0) + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + uniaxialMaterial ElasticPP 1 3000.0 0.02 + + 2. **Python Code** + + .. code-block:: python + + ops.uniaxialMaterial('ElasticPP', 1, 3000.0, 0.02) + +Code Developed by: |fmk| diff --git a/source/user/manual/material/uniaxialMaterials/ElasticPP_Gap.rst b/source/user/manual/material/uniaxialMaterials/ElasticPP_Gap.rst new file mode 100644 index 00000000..77f69f27 --- /dev/null +++ b/source/user/manual/material/uniaxialMaterials/ElasticPP_Gap.rst @@ -0,0 +1,35 @@ +.. _ElasticPP_Gap: + +Elastic-Perfectly Plastic Gap Material +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs an elastic-perfectly plastic gap uniaxial material. + +.. function:: uniaxialMaterial ElasticPPGap $matTag $E $Fy $gap <$eta damage> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $matTag, |integer|, unique material tag + $E, |float|, initial stiffness + $Fy, |float|, yield force + $gap, |float|, initial gap + $eta, |float|, optional damping tangent (default 0.0) + damage, |string|, optional ``damage`` flag to enable damage behavior + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + uniaxialMaterial ElasticPPGap 1 1000.0 10.0 0.01 + + 2. **Python Code** + + .. code-block:: python + + ops.uniaxialMaterial('ElasticPPGap', 1, 1000.0, 10.0, 0.01) + +Code Developed by: |fmk| diff --git a/source/user/manual/material/uniaxialMaterials/Hardening.rst b/source/user/manual/material/uniaxialMaterials/Hardening.rst new file mode 100644 index 00000000..af805d82 --- /dev/null +++ b/source/user/manual/material/uniaxialMaterials/Hardening.rst @@ -0,0 +1,37 @@ +.. _Hardening: + +Hardening Material +^^^^^^^^^^^^^^^^^^ + +This command constructs an elastoplastic uniaxial material with combined isotropic and kinematic hardening. Also accepted as ``Hardening2``. + +.. function:: uniaxialMaterial Hardening $matTag $E $sigmaY $H_iso $H_kin <$eta> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $matTag, |integer|, unique material tag + $E, |float|, initial stiffness + $sigmaY, |float|, yield stress + $H_iso, |float|, isotropic hardening modulus + $H_kin, |float|, kinematic hardening modulus + $eta, |float|, optional damping tangent (default 0.0) + +The post-yield slope is :math:`E(H_{iso}+H_{kin})/(E+H_{iso}+H_{kin})`. To match a ``Steel01``-style hardening ratio :math:`b` with kinematic hardening only (:math:`H_{iso}=0`), use :math:`H_{kin} = bE/(1-b)` (equivalently :math:`bE = EH_{kin}/(E+H_{kin})`); see `Elastoplastic Calibration `_. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + uniaxialMaterial Hardening 1 3000.0 30.0 100.0 200.0 + + 2. **Python Code** + + .. code-block:: python + + ops.uniaxialMaterial('Hardening', 1, 3000.0, 30.0, 100.0, 200.0) + +Code Developed by: |mhs| diff --git a/source/user/manual/material/uniaxialMaterials/MultiLinear.rst b/source/user/manual/material/uniaxialMaterials/MultiLinear.rst new file mode 100644 index 00000000..c7204aa6 --- /dev/null +++ b/source/user/manual/material/uniaxialMaterials/MultiLinear.rst @@ -0,0 +1,42 @@ +.. _MultiLinear: + +Multi-Linear Material +^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a multi-linear uniaxial material defined by strain-stress point pairs. + +.. function:: uniaxialMaterial MultiLinear $matTag $e1 $s1 $e2 $s2 ... + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $matTag, |integer|, unique material tag + $e1 $s1 ..., |listFloat|, alternating strain and stress points (at least two pairs) + +The material follows a symmetric multi-linear envelope with inelastic hysteretic unloading and reloading. + +.. figure:: figures/MultiLinear_Material2.png + :align: center + :figclass: align-center + :name: fig-MultiLinear-hysteresis + + MultiLinear material hysteretic behavior. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + uniaxialMaterial MultiLinear 1 0.0 0.0 0.01 30.0 0.02 35.0 + + 2. **Python Code** + + .. code-block:: python + + ops.uniaxialMaterial('MultiLinear', 1, 0.0, 0.0, 0.01, 30.0, 0.02, 35.0) + +Code Developed by: |fmk| + +Images Developed by: Vesna Terzic diff --git a/source/user/manual/material/uniaxialMaterials/figures/ElasticMultiLinear.png b/source/user/manual/material/uniaxialMaterials/figures/ElasticMultiLinear.png new file mode 100644 index 0000000000000000000000000000000000000000..8d2398072af7826355054bd387036764520d2498 GIT binary patch literal 31534 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 PA?cW!j%tzenQQ+CZAg_6 literal 0 HcmV?d00001 diff --git a/source/user/manual/material/uniaxialMaterials/figures/MultiLinear_Material2.png b/source/user/manual/material/uniaxialMaterials/figures/MultiLinear_Material2.png new file mode 100644 index 0000000000000000000000000000000000000000..7238354bf3a41bedf5eb0dda30a3c44ab2e6c086 GIT binary patch literal 27444 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 literal 0 HcmV?d00001 diff --git a/source/user/manual/model/block.rst b/source/user/manual/model/block.rst new file mode 100644 index 00000000..401d5fc5 --- /dev/null +++ b/source/user/manual/model/block.rst @@ -0,0 +1,75 @@ +.. _block: + +block Commands +************** + +The block commands generate regular meshes of quadrilateral or brick elements from a block of corner (and optional midside) node coordinates. + +block2D Command +^^^^^^^^^^^^^^^ + +Generates a mesh of quadrilateral elements in 2D or 3D. In 3D models, a 2D surface mesh suitable for shell analysis is created. + +.. function:: block2D $numX $numY $startNode $startEle $eleType $eleArgs { $coords } + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $numX, |integer|, number of elements in the local x direction + $numY, |integer|, number of elements in the local y direction + $startNode, |integer|, starting node tag for mesh generation + $startEle, |integer|, starting element tag for mesh generation + $eleType, |string|, "quadrilateral element type (for example ``quad``, ``ShellMITC4``, ``bbarQuad``, ``enhancedQuad``)" + $eleArgs, |list|, arguments required by the chosen element type + $coords, |list|, "block corner coordinates in braces; nodes 1--4 are required, nodes 5--9 are optional for curved meshes" + +Only the first four corner nodes are required. Optional nodes 5--9 refine curved block geometries. + +block3D Command +^^^^^^^^^^^^^^^ + +Generates a mesh of eight-node brick solid elements. + +.. function:: block3D $numX $numY $numZ $startNode $startEle $eleType $eleArgs { $coords } + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $numX, |integer|, number of elements in the local x direction + $numY, |integer|, number of elements in the local y direction + $numZ, |integer|, number of elements in the local z direction + $startNode, |integer|, starting node tag for mesh generation + $startEle, |integer|, starting element tag for mesh generation + $eleType, |string|, "brick element type (for example ``stdBrick``, ``bbarBrick``, ``Brick20N``)" + $eleArgs, |list|, arguments required by the chosen element type + $coords, |list|, "block corner coordinates in braces; nodes 1--8 are required, nodes 9--27 are optional for curved meshes" + +.. note:: + + 1. Variable substitutions are recognized when command arguments are placed in quotes. + + 2. In Tcl, corner coordinates are wrapped in braces. In OpenSeesPy, pass ``*eleArgs`` and ``*crds`` as separate positional arguments (no braces). + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + block2D 16 4 1 1 quad "1 PlaneStrain2D 1" { + 1 0 0 + 2 40 0 + 3 40 10 + 4 0 10 + } + + 2. **Python Code** + + .. code-block:: python + + block2D(16, 4, 1, 1, 'quad', '1', 'PlaneStrain2D', '1', + 1, 0, 0, 2, 40, 0, 3, 40, 10, 4, 0, 10) + +Code Developed by: |fmk| diff --git a/source/user/manual/model/elements/AC3D8.rst b/source/user/manual/model/elements/AC3D8.rst new file mode 100644 index 00000000..83348365 --- /dev/null +++ b/source/user/manual/model/elements/AC3D8.rst @@ -0,0 +1,42 @@ +.. _AC3D8: + +AC3D8 Element +^^^^^^^^^^^^^ + +This command constructs an eight-node hexahedral acoustic fluid element for dam-reservoir and fluid-domain modeling. Each node carries one pressure DOF. The element requires an ``AcousticMedium`` ND material. Use with ``-ndm 3 -ndf 1`` for the fluid mesh. + +.. function:: element AC3D8 $eleTag $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8 $matTag + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $N1 ... $N8, |integer|, eight node tags in standard brick order + $matTag, |integer|, tag of a previously defined ``AcousticMedium`` material + +.. note:: + + 1. Define the acoustic material first: ``nDMaterial AcousticMedium $matTag $K $rho <$gamma>``. + + 2. For fluid-structure coupling at interfaces see :ref:`ASI3D8`. For acoustic boundaries see :ref:`AV3D4`. + + 3. Valid :ref:`elementRecorder` queries include ``force`` and ``stiffness``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + nDMaterial AcousticMedium 1 2.2e9 1000.0 + element AC3D8 1 1 2 3 4 5 6 7 8 1 + + 2. **Python Code** + + .. code-block:: python + + nDMaterial('AcousticMedium', 1, 2.2e9, 1000.0) + element('AC3D8', 1, 1, 2, 3, 4, 5, 6, 7, 8, 1) + +Code developed by: Quan Gu, Yichao Gao, and Zhijian Qiu, Xiamen University diff --git a/source/user/manual/model/elements/ASI3D8.rst b/source/user/manual/model/elements/ASI3D8.rst new file mode 100644 index 00000000..13a6a496 --- /dev/null +++ b/source/user/manual/model/elements/ASI3D8.rst @@ -0,0 +1,40 @@ +.. _ASI3D8: + +ASI3D8 Element +^^^^^^^^^^^^^^ + +This command constructs an eight-node quadrilateral fluid-structure interface element for coupled dam-reservoir analysis. The element connects four solid nodes (three displacement DOFs each) and four fluid nodes (one pressure DOF each). Use with compatible solid and fluid node DOF layouts in a 3D model. + +.. function:: element ASI3D8 $eleTag $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8 + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $N1 $N2 $N3 $N4, |integer|, four solid-side interface nodes + $N5 $N6 $N7 $N8, |integer|, four fluid-side interface nodes + +.. note:: + + 1. Pair with :ref:`AC3D8` acoustic elements in the fluid domain and standard solid elements in the structure. + + 2. The element enforces fluid-structure interaction tractions on the shared interface. + + 3. Valid :ref:`elementRecorder` queries include ``force`` and ``stiffness``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element ASI3D8 1 1 2 3 4 101 102 103 104 + + 2. **Python Code** + + .. code-block:: python + + element('ASI3D8', 1, 1, 2, 3, 4, 101, 102, 103, 104) + +Code developed by: Quan Gu, Yichao Gao, and Zhijian Qiu, Xiamen University diff --git a/source/user/manual/model/elements/AV3D4.rst b/source/user/manual/model/elements/AV3D4.rst new file mode 100644 index 00000000..0927d4b0 --- /dev/null +++ b/source/user/manual/model/elements/AV3D4.rst @@ -0,0 +1,42 @@ +.. _AV3D4: + +AV3D4 Element +^^^^^^^^^^^^^ + +This command constructs a four-node quadrilateral acoustic absorbing-transmitting boundary element for fluid domain edges in dam-reservoir analysis. The element requires an ``AcousticMedium`` ND material. Use with ``-ndm 3 -ndf 1`` on fluid boundary nodes. + +.. function:: element AV3D4 $eleTag $iNode $jNode $kNode $lNode $matTag + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four boundary nodes in counter-clockwise order + $matTag, |integer|, tag of a previously defined ``AcousticMedium`` material + +.. note:: + + 1. Define the acoustic material first: ``nDMaterial AcousticMedium $matTag $K $rho <$gamma>``. + + 2. For solid-side absorbing boundaries see :ref:`VS3D4`. For interior fluid elements see :ref:`AC3D8`. + + 3. Valid :ref:`elementRecorder` queries include ``force`` and ``stiffness``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + nDMaterial AcousticMedium 1 2.2e9 1000.0 + element AV3D4 1 1 2 3 4 1 + + 2. **Python Code** + + .. code-block:: python + + nDMaterial('AcousticMedium', 1, 2.2e9, 1000.0) + element('AV3D4', 1, 1, 2, 3, 4, 1) + +Code developed by: Quan Gu, Yichao Gao, and Zhijian Qiu, Xiamen University diff --git a/source/user/manual/model/elements/BbarPlaneStrainQuadrilateral.rst b/source/user/manual/model/elements/BbarPlaneStrainQuadrilateral.rst new file mode 100644 index 00000000..9dc846ef --- /dev/null +++ b/source/user/manual/model/elements/BbarPlaneStrainQuadrilateral.rst @@ -0,0 +1,39 @@ +.. _BbarPlaneStrainQuadrilateral: + +Bbar Plane Strain Quadrilateral Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a four-node quadrilateral element using a bilinear isoparametric formulation with a mixed constant pressure/volume (B-bar) assumption. The command names in OpenSees are ``bbarQuad`` or ``mixedQuad``. The element is for plane strain problems only. Use with ``-ndm 2 -ndf 2``. + +.. function:: element bbarQuad $eleTag $iNode $jNode $kNode $lNode $thick $matTag + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in counter-clockwise order + $thick, |float|, element thickness + $matTag, |integer|, tag of an nD material + +.. note:: + + 1. Plane strain only; not valid for plane stress problems. + + 2. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element bbarQuad 1 1 2 3 4 1.0 1 + + 2. **Python Code** + + .. code-block:: python + + element('bbarQuad', 1, 1, 2, 3, 4, 1.0, 1) + +Code developed by: Ed Love diff --git a/source/user/manual/model/elements/BeamContact2D.rst b/source/user/manual/model/elements/BeamContact2D.rst new file mode 100644 index 00000000..3f6a1e8c --- /dev/null +++ b/source/user/manual/model/elements/BeamContact2D.rst @@ -0,0 +1,42 @@ +.. _BeamContact2D: + +BeamContact2D Element +^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a two-dimensional beam-to-surface contact element. A beam segment (nodes i-j) contacts a secondary node through a Lagrange multiplier node. Use with ``-ndm 2``. + +.. function:: element BeamContact2D $eleTag $iNode $jNode $secondaryNode $lambdaNode $matTag $width $gapTol $forceTol <$cSwitch> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, beam end nodes + $secondaryNode, |integer|, secondary (contact) node + $lambdaNode, |integer|, Lagrange multiplier node + $matTag, |integer|, tag of a contact ND material + $width, |float|, beam width used in contact geometry + $gapTol, |float|, gap tolerance for contact detection + $forceTol, |float|, force tolerance for contact equilibrium + $cSwitch, |integer|, optional initial contact flag + +.. note:: + + A penalty variant is available as ``BeamContact2Dp``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element BeamContact2D 1 1 2 10 11 1 0.5 1.0e-6 1.0e-6 + + 2. **Python Code** + + .. code-block:: python + + element('BeamContact2D', 1, 1, 2, 10, 11, 1, 0.5, 1.0e-6, 1.0e-6) + +Code developed by: Chris McGann, Pedro Arduino, and Peter Mackenzie-Helnwein, University of Washington diff --git a/source/user/manual/model/elements/BeamContact3D.rst b/source/user/manual/model/elements/BeamContact3D.rst new file mode 100644 index 00000000..6905b5bf --- /dev/null +++ b/source/user/manual/model/elements/BeamContact3D.rst @@ -0,0 +1,43 @@ +.. _BeamContact3D: + +BeamContact3D Element +^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a three-dimensional beam-to-surface contact element. A beam segment (nodes i-j) contacts a secondary node through a Lagrange multiplier node. Use with ``-ndm 3``. + +.. function:: element BeamContact3D $eleTag $iNode $jNode $secondaryNode $lambdaNode $radius $crdTransf $matTag $tolGap $tolF <$cSwitch> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, beam end nodes + $secondaryNode, |integer|, secondary (contact) node + $lambdaNode, |integer|, Lagrange multiplier node + $radius, |float|, beam radius used in contact geometry + $crdTransf, |integer|, tag of a coordinate transformation for the beam + $matTag, |integer|, tag of a contact ND material + $tolGap, |float|, gap tolerance for contact detection + $tolF, |float|, force tolerance for contact equilibrium + $cSwitch, |integer|, optional initial contact flag + +.. note:: + + A penalty variant is available as ``BeamContact3Dp``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element BeamContact3D 1 1 2 10 11 0.25 1 1 1.0e-6 1.0e-6 + + 2. **Python Code** + + .. code-block:: python + + element('BeamContact3D', 1, 1, 2, 10, 11, 0.25, 1, 1, 1.0e-6, 1.0e-6) + +Code developed by: Kathryn Petek, Pedro Arduino, and Peter Mackenzie-Helnwein, University of Washington diff --git a/source/user/manual/model/elements/BeamEndContact3D.rst b/source/user/manual/model/elements/BeamEndContact3D.rst new file mode 100644 index 00000000..69222dbe --- /dev/null +++ b/source/user/manual/model/elements/BeamEndContact3D.rst @@ -0,0 +1,41 @@ +.. _BeamEndContact3D: + +BeamEndContact3D Element +^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a three-dimensional contact element between a beam end (nodes i-j) and a secondary node using a Lagrange multiplier node. Use with ``-ndm 3``. + +.. function:: element BeamEndContact3D $eleTag $iNode $jNode $secondaryNode $lambdaNode $radius $gapTol $forceTol <$cFlag> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, beam end nodes + $secondaryNode, |integer|, secondary (contact) node + $lambdaNode, |integer|, Lagrange multiplier node + $radius, |float|, beam radius used in contact geometry + $gapTol, |float|, gap tolerance for contact detection + $forceTol, |float|, force tolerance for contact equilibrium + $cFlag, |integer|, optional initial contact flag + +.. note:: + + A penalty variant is available as ``BeamEndContact3Dp``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element BeamEndContact3D 1 1 2 10 11 0.25 1.0e-6 1.0e-6 + + 2. **Python Code** + + .. code-block:: python + + element('BeamEndContact3D', 1, 1, 2, 10, 11, 0.25, 1.0e-6, 1.0e-6) + +Code developed by: Chris McGann, Pedro Arduino, and Peter Mackenzie-Helnwein, University of Washington diff --git a/source/user/manual/model/elements/BeamWithHingesElement.rst b/source/user/manual/model/elements/BeamWithHingesElement.rst new file mode 100644 index 00000000..b49bf5db --- /dev/null +++ b/source/user/manual/model/elements/BeamWithHingesElement.rst @@ -0,0 +1,55 @@ +.. _BeamWithHingesElement: + +Beam With Hinges Element +^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a force-based beam-column element with plastic hinges at the ends using modified Gauss-Radau integration. The command name in OpenSees is ``beamWithHinges``. The element interior is elastic; nonlinear behavior is concentrated in user-defined hinge sections at ends I and J. + +For 2D (``ndm=2``, ``ndf=3``): + +.. function:: element beamWithHinges $eleTag $iNode $jNode $secTagI $LpI $secTagJ $LpJ $E $A $Iz $transfTag <-mass $massDens> <-iter $maxIters $tol> <-subdivide $numSub $subFac> + +For 3D (``ndm=3``, ``ndf=6``): + +.. function:: element beamWithHinges $eleTag $iNode $jNode $secTagI $LpI $secTagJ $LpJ $E $A $Iz $Iy $G $J $transfTag <-mass $massDens> <-iter $maxIters $tol> <-subdivide $numSub $subFac> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end node tags + $secTagI $secTagJ, |integer|, section tags at ends I and J + $LpI $LpJ, |float|, plastic hinge lengths at ends I and J + $E $A $Iz, |float|, elastic properties of the interior (2D) + $Iy $G $J, |float|, additional elastic properties of the interior (3D) + $transfTag, |integer|, geometric transformation tag + $massDens, |float|, element mass per unit length (optional; default 0.0) + $maxIters, |integer|, maximum iterations for element compatibility (optional) + $tol, |float|, compatibility tolerance used with ``-iter`` (optional) + $numSub, |integer|, number of subdivisions used with ``-subdivide`` (optional) + $subFac, |float|, subdivision factor used with ``-subdivide`` (optional) + +.. note:: + + 1. This legacy format constrains the element interior to remain linear-elastic. For models where plasticity may spread beyond hinge regions, use :ref:`forceBeamColumn` with ``HingeRadau`` (or related) plastic-hinge integration instead. + + 2. Hinge integration uses two-point Gauss-Radau over lengths ``4*LpI`` and ``4*LpJ`` at the element ends (six integration points total). + + 3. Valid :ref:`elementRecorder` queries are the same as for :ref:`forceBeamColumn`. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element beamWithHinges 1 1 2 3 12.0 4 12.0 29000.0 20.0 800.0 1 + + 2. **Python Code** + + .. code-block:: python + + element('beamWithHinges', 1, 1, 2, 3, 12.0, 4, 12.0, 29000.0, 20.0, 800.0, 1) + +Code developed by: |mhs| diff --git a/source/user/manual/model/elements/BrickUP.rst b/source/user/manual/model/elements/BrickUP.rst new file mode 100644 index 00000000..c3114f49 --- /dev/null +++ b/source/user/manual/model/elements/BrickUP.rst @@ -0,0 +1,42 @@ +.. _BrickUP: + +BrickUP Element +^^^^^^^^^^^^^^^ + +This command constructs an eight-node hexahedral brick element for coupled solid-fluid (u-p) analysis of saturated porous media. Each node has three solid displacement DOFs and one pore-pressure DOF. Use with ``-ndm 3 -ndf 4``. + +.. function:: element brickUP $eleTag $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8 $matTag $bulk $fmass $permX $permY $permZ <$bX $bY $bZ> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8, |integer|, eight node tags in standard brick order + $matTag, |integer|, tag of a previously defined ND material + $bulk, |float|, combined undrained bulk modulus relating pore pressure and volumetric strain + $fmass, |float|, fluid mass density + $permX $permY $permZ, |float|, permeability in x; y; and z directions + $bX $bY $bZ, |float|, optional body-force components (default 0.0) + +.. note:: + + 1. Record pore pressure at nodes with a :ref:`nodeRecorder` on DOF 4. + + 2. Valid :ref:`elementRecorder` queries include ``force`` and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element brickUP 1 1 2 3 4 5 6 7 8 1 2.2e6 1000.0 1.0e-5 1.0e-5 1.0e-5 + + 2. **Python Code** + + .. code-block:: python + + element('brickUP', 1, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2.2e6, 1000.0, 1.0e-5, 1.0e-5, 1.0e-5) + +Code developed by: Zhaohui Yang, UC San Diego diff --git a/source/user/manual/model/elements/CatenaryCableElement.rst b/source/user/manual/model/elements/CatenaryCableElement.rst new file mode 100644 index 00000000..fe7875e3 --- /dev/null +++ b/source/user/manual/model/elements/CatenaryCableElement.rst @@ -0,0 +1,47 @@ +.. _CatenaryCableElement: + +CatenaryCableElement +^^^^^^^^^^^^^^^^^^^^ + +This command constructs a two-node catenary cable element for static and dynamic analysis including thermal effects. The registered command name is ``CatenaryCable``. Use with ``-ndm 3 -ndf 3`` or ``-ndf 6``. + +.. function:: element CatenaryCable $eleTag $iNode $jNode $weight $E $A $L0 $alpha $temperature_change $rho $errorTol $Nsubsteps $massType + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $weight, |float|, distributed weight per unit length + $E, |float|, elastic modulus + $A, |float|, cross-sectional area + $L0, |float|, unstressed cable length + $alpha, |float|, thermal expansion coefficient + $temperature_change, |float|, temperature change from reference state + $rho, |float|, mass density + $errorTol, |float|, equilibrium iteration tolerance + $Nsubsteps, |integer|, number of substeps for internal equilibrium iterations + $massType, |integer|, mass matrix type: 0 lumped; 1 integration; 2 Clough-style; 3 equivalent truss + +.. note:: + + 1. The element formulates catenary equilibrium internally and supports large displacements. + + 2. Valid :ref:`elementRecorder` queries include ``force``, ``localForce``, and ``basicForce``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element CatenaryCable 1 1 2 0.1 2.0e11 0.001 10.0 1.2e-5 0.0 7850.0 1.0e-8 10 0 + + 2. **Python Code** + + .. code-block:: python + + element('CatenaryCable', 1, 1, 2, 0.1, 2.0e11, 0.001, 10.0, 1.2e-5, 0.0, 7850.0, 1.0e-8, 10, 0) + +Code developed by: Pablo Ibanez and Jose Abell, Universidad de los Andes diff --git a/source/user/manual/model/elements/ElasticBeamColumnElementWithStiffnessModifiers.rst b/source/user/manual/model/elements/ElasticBeamColumnElementWithStiffnessModifiers.rst new file mode 100644 index 00000000..97f1e157 --- /dev/null +++ b/source/user/manual/model/elements/ElasticBeamColumnElementWithStiffnessModifiers.rst @@ -0,0 +1,50 @@ +.. _ElasticBeamColumnElementWithStiffnessModifiers: + +Elastic Beam Column Element with Stiffness Modifiers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This element models a prismatic elastic beam-column member using stiffness modifiers that account for the presence of end rotational springs. It is intended for dynamic analysis of frame structures with concentrated plasticity hinges, where numerical damping from standard elastic elements can be problematic. + +The command names in OpenSees are ``ModElasticBeam2d`` and ``ModElasticBeam3d``. Full formulation details, stiffness modifier definitions, and references are given in :ref:`ModElasticBeam`. + +For ``ndm=2``: + +.. function:: element ModElasticBeam2d $eleTag $iNode $jNode $A $E $Iz $K11 $K33 $K44 $transfTag <-mass $massDens> <-cMass> + +For ``ndm=3``: + +.. function:: element ModElasticBeam3d $eleTag $iNode $jNode $A $E $G $J $Iy $Iz $K11y $K33y $K44y $K11z $K33z $K44z $transfTag <-mass $massDens> <-cMass> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end node tags + $A, |float|, cross-sectional area + $E, |float|, Young's modulus + $G, |float|, shear modulus (3D only) + $J, |float|, torsional inertia (3D only) + $Iz $Iy, |float|, second moments of area + $K11 $K33 $K44, |float|, stiffness modifier coefficients (2D) + $K11y $K33y $K44y, |float|, stiffness modifiers for bending about local y (3D) + $K11z $K33z $K44z, |float|, stiffness modifiers for bending about local z (3D) + $transfTag, |integer|, geometric transformation tag + $massDens, |float|, element mass per unit length (optional; default 0.0) + -cMass, |string|, form consistent mass matrix (optional) + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element ModElasticBeam2d 1 1 2 10.0 29000.0 100.0 1.0 1.0 1.0 1 + + 2. **Python Code** + + .. code-block:: python + + element('ModElasticBeam2d', 1, 1, 2, 10.0, 29000.0, 100.0, 1.0, 1.0, 1.0, 1) + +Code developed by: |fmk| diff --git a/source/user/manual/model/elements/ElasticTimoshenkoBeamColumnElement.rst b/source/user/manual/model/elements/ElasticTimoshenkoBeamColumnElement.rst new file mode 100644 index 00000000..496ba40b --- /dev/null +++ b/source/user/manual/model/elements/ElasticTimoshenkoBeamColumnElement.rst @@ -0,0 +1,56 @@ +.. _ElasticTimoshenkoBeamColumnElement: + +Elastic Timoshenko Beam Column Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs an elastic Timoshenko beam-column element that includes shear deformation. The command name in OpenSees is ``ElasticTimoshenkoBeam`` (aliases ``ElasticTimoshenkoBeam2d`` / ``ElasticTimoshenkoBeam3d``). Section properties may be supplied directly or through a previously defined section object. + +For a two-dimensional problem (``ndm=2``, ``ndf=3``): + +.. function:: element ElasticTimoshenkoBeam $eleTag $iNode $jNode $E $G $A $Iz $Avy $transfTag <-mass $massDens> <-cMass> <-geomNonlinear> + +.. function:: element ElasticTimoshenkoBeam $eleTag $iNode $jNode $secTag $transfTag <-mass $massDens> <-cMass> <-geomNonlinear> + +For a three-dimensional problem (``ndm=3``, ``ndf=6``): + +.. function:: element ElasticTimoshenkoBeam $eleTag $iNode $jNode $E $G $A $J $Iz $Iy $Avy $Avz $transfTag <-mass $massDens> <-cMass> <-geomNonlinear> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end node tags + $E, |float|, Young's modulus + $G, |float|, shear modulus + $A, |float|, cross-sectional area + $J, |float|, torsional moment of inertia (3D) + $Iz $Iy, |float|, second moments of area + $Avy $Avz, |float|, shear areas for local y and z directions + $secTag, |integer|, tag of a section object (alternative to explicit properties) + $transfTag, |integer|, geometric transformation tag + $massDens, |float|, element mass per unit length (optional; default 0.0) + -cMass, |string|, form consistent mass matrix (optional) + -geomNonlinear, |string|, enable geometric nonlinearity flag (optional) + +.. note:: + + 1. The valid queries to an elastic Timoshenko beam element when creating an :ref:`elementRecorder` are ``force``. + + 2. For solid rectangular sections, the shear area is typically 5/6 of the gross area; for solid circular sections, 9/10 of the gross area; for I-shapes, the shear area may be approximated as the web area. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element ElasticTimoshenkoBeam 1 2 4 100.0 45.0 6.0 4.5 5.0 9 + + 2. **Python Code** + + .. code-block:: python + + element('ElasticTimoshenkoBeam', 1, 2, 4, 100.0, 45.0, 6.0, 4.5, 5.0, 9) + +Code developed by: Andreas Schellenberg diff --git a/source/user/manual/model/elements/ElastomericBearingBouc-Wen.rst b/source/user/manual/model/elements/ElastomericBearingBouc-Wen.rst new file mode 100644 index 00000000..be74ff88 --- /dev/null +++ b/source/user/manual/model/elements/ElastomericBearingBouc-Wen.rst @@ -0,0 +1,54 @@ +.. _ElastomericBearingBoucWen: + +ElastomericBearingBouc-Wen Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a two-node elastomeric bearing element with Bouc-Wen shear hysteresis (2D unidirectional or 3D coupled). Non-shear directions use user-defined :ref:`uniaxialMaterial` objects. + +.. function:: element elastomericBearingBoucWen $eleTag $iNode $jNode $kInit $qd $alpha1 $alpha2 $mu $eta $beta $gamma -P $matTag -Mz $matTag <-orient $x1 $x2 $x3 $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> <-iter $maxIter $tol> + +.. function:: element elastomericBearingBoucWen $eleTag $iNode $jNode $kInit $qd $alpha1 $alpha2 $mu $eta $beta $gamma -P $matTag -T $matTag -My $matTag -Mz $matTag <-orient <$x1 $x2 $x3> $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> <-iter $maxIter $tol> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $kInit, |float|, initial elastic stiffness in local shear direction + $qd, |float|, characteristic strength + $alpha1, |float|, post-yield stiffness ratio of linear hardening component + $alpha2, |float|, post-yield stiffness ratio of nonlinear hardening component + $mu, |float|, exponent of nonlinear hardening component + $eta, |float|, yielding exponent (default 1.0) + $beta, |float|, first Bouc-Wen shape parameter (default 0.5) + $gamma, |float|, second Bouc-Wen shape parameter (default 0.5) + $matTag, |integer|, uniaxial material tag for axial behavior (``-P``) + $matTag, |integer|, uniaxial material tag for torsion (``-T``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local y (``-My``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local z (``-Mz``) + $sDratio, |float|, shear distance from iNode as fraction of element length (optional; default 0.5) + $m, |float|, element mass (optional; default 0.0) + $maxIter $tol, |integer| |float|, equilibrium iteration limit and tolerance (optional) + +.. note:: + + 1. By default the bearing does not contribute to Rayleigh damping. Use ``-doRayleigh`` to include it. + + 2. Valid :ref:`elementRecorder` queries include ``force``, ``localForce``, ``basicForce``, ``localDisplacement``, ``basicDisplacement``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element elastomericBearingBoucWen 1 1 2 20.0 2.50 0.02 0.0 3.0 1.0 0.5 0.5 -P 1 -Mz 2 + + 2. **Python Code** + + .. code-block:: python + + element('elastomericBearingBoucWen', 1, 1, 2, 20.0, 2.50, 0.02, 0.0, 3.0, 1.0, 0.5, 0.5, '-P', 1, '-Mz', 2) + +Code developed by: Andreas Schellenberg, University of California, Berkeley diff --git a/source/user/manual/model/elements/ElastomericBearingPlasticity.rst b/source/user/manual/model/elements/ElastomericBearingPlasticity.rst new file mode 100644 index 00000000..99b28190 --- /dev/null +++ b/source/user/manual/model/elements/ElastomericBearingPlasticity.rst @@ -0,0 +1,52 @@ +.. _ElastomericBearingPlasticity: + +ElastomericBearingPlasticity Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a two-node elastomeric bearing element with coupled shear plasticity (2D) or bidirectional plasticity (3D). Force-deformation in the non-shear directions is defined by user-supplied :ref:`uniaxialMaterial` objects. The command name ``elastomericBearing`` is an alias for ``elastomericBearingPlasticity``. + +.. function:: element elastomericBearingPlasticity $eleTag $iNode $jNode $kInit $qd $alpha1 $alpha2 $mu -P $matTag -Mz $matTag <-orient $x1 $x2 $x3 $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> + +.. function:: element elastomericBearingPlasticity $eleTag $iNode $jNode $kInit $qd $alpha1 $alpha2 $mu -P $matTag -T $matTag -My $matTag -Mz $matTag <-orient <$x1 $x2 $x3> $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $kInit, |float|, initial elastic stiffness in local shear direction + $qd, |float|, characteristic strength + $alpha1, |float|, post-yield stiffness ratio of linear hardening component + $alpha2, |float|, post-yield stiffness ratio of nonlinear hardening component + $mu, |float|, exponent of nonlinear hardening component + $matTag, |integer|, uniaxial material tag for axial behavior (``-P``) + $matTag, |integer|, uniaxial material tag for torsion (``-T``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local y (``-My``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local z (``-Mz``) + $sDratio, |float|, shear distance from iNode as fraction of element length (optional; default 0.5) + $m, |float|, element mass (optional; default 0.0) + +.. note:: + + 1. By default the bearing does not contribute to Rayleigh damping. Use ``-doRayleigh`` to include it. + + 2. Specify realistic axial stiffness; extremely large values can cause numerical sensitivity. + + 3. Valid :ref:`elementRecorder` queries include ``force``, ``localForce``, ``basicForce``, ``localDisplacement``, ``basicDisplacement``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element elastomericBearingPlasticity 1 1 2 20.0 2.50 0.02 0.0 3.0 -P 1 -Mz 2 + + 2. **Python Code** + + .. code-block:: python + + element('elastomericBearingPlasticity', 1, 1, 2, 20.0, 2.50, 0.02, 0.0, 3.0, '-P', 1, '-Mz', 2) + +Code developed by: Andreas Schellenberg, University of California, Berkeley diff --git a/source/user/manual/model/elements/ElastomericX.rst b/source/user/manual/model/elements/ElastomericX.rst new file mode 100644 index 00000000..d77b33e7 --- /dev/null +++ b/source/user/manual/model/elements/ElastomericX.rst @@ -0,0 +1,58 @@ +.. _ElastomericX: + +ElastomericX Element +^^^^^^^^^^^^^^^^^^^^ + +This command constructs a three-dimensional elastomeric bearing element that formulates all six directional material models internally from geometric and rubber properties. It extends the :ref:`ElastomericBearingBoucWen` formulation without requiring user-supplied uniaxial materials. Use with ``-ndm 3 -ndf 6``. + +.. function:: element ElastomericX $eleTag $Nd1 $Nd2 $Fy $alpha $Gr $Kbulk $D1 $D2 $ts $tr $n <$x1 $x2 $x3 $y1 $y2 $y3> <$kc> <$PhiM> <$ac> <$sDratio> <$m> <$cd> <$tc> <$tag1> <$tag2> <$tag3> <$tag4> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $Nd1 $Nd2, |integer|, end nodes + $Fy, |float|, yield strength + $alpha, |float|, post-yield stiffness ratio + $Gr, |float|, shear modulus of elastomer + $Kbulk, |float|, bulk modulus of rubber + $D1, |float|, internal diameter + $D2, |float|, outer diameter excluding cover thickness + $ts, |float|, single steel shim layer thickness + $tr, |float|, single rubber layer thickness + $n, |integer|, number of rubber layers + $kc, |float|, cavitation parameter (optional; default 10.0) + $PhiM, |float|, damage parameter (optional; default 0.5) + $ac, |float|, strength reduction parameter (optional; default 1.0) + $sDratio, |float|, shear distance from iNode as fraction of length (optional; default 0.5) + $m, |float|, element mass (optional; default 0.0) + $cd, |float|, viscous damping parameter (optional; default 0.0) + $tc, |float|, cover thickness (optional; default 0.0) + $tag1, |integer|, include cavitation and post-cavitation (optional; default 0) + $tag2, |integer|, include buckling load variation (optional; default 0) + $tag3, |integer|, include horizontal stiffness variation (optional; default 0) + $tag4, |integer|, include vertical stiffness variation (optional; default 0) + +.. note:: + + 1. Characteristic strength is :math:`Q_d = F_y(1-\alpha)`; do not confuse with :math:`F_y`. + + 2. Use ``Parameters`` :ref:`elementRecorder` to obtain cavitation force; buckling capacity; vertical stiffness; and horizontal stiffness. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element ElastomericX 1 1 2 100.0 0.1 0.8 2.0e9 0.0 0.6 0.003 0.01 20 0 1 0 1 0 0 10.0 0.5 1.0 0.5 0.0 0.0 0.0 1 0 0 0 + + 2. **Python Code** + + .. code-block:: python + + element('ElastomericX', 1, 1, 2, 100.0, 0.1, 0.8, 2.0e9, 0.0, 0.6, 0.003, 0.01, 20, + 0, 1, 0, 1, 0, 0, 10.0, 0.5, 1.0, 0.5, 0.0, 0.0, 0.0, 1, 0, 0, 0) + +Code developed by: Manish Kumar, University at Buffalo, SUNY diff --git a/source/user/manual/model/elements/EnhancedStrainQuadrilateral.rst b/source/user/manual/model/elements/EnhancedStrainQuadrilateral.rst new file mode 100644 index 00000000..b30b8b27 --- /dev/null +++ b/source/user/manual/model/elements/EnhancedStrainQuadrilateral.rst @@ -0,0 +1,38 @@ +.. _EnhancedStrainQuadrilateral: + +Enhanced Strain Quadrilateral Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a four-node quadrilateral element using a bilinear isoparametric formulation with enhanced strain modes. The command name in OpenSees is ``enhancedQuad``. Use with ``-ndm 2 -ndf 2``. + +.. function:: element enhancedQuad $eleTag $iNode $jNode $kNode $lNode $thick $type $matTag + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in counter-clockwise order + $thick, |float|, element thickness + $type, |string|, material formulation: ``PlaneStrain`` or ``PlaneStress`` + $matTag, |integer|, tag of an nD material + +.. note:: + + 1. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element enhancedQuad 1 1 2 3 4 1.0 PlaneStrain 1 + + 2. **Python Code** + + .. code-block:: python + + element('enhancedQuad', 1, 1, 2, 3, 4, 1.0, 'PlaneStrain', 1) + +Code developed by: Ed Love diff --git a/source/user/manual/model/elements/FPBearingPTV.rst b/source/user/manual/model/elements/FPBearingPTV.rst new file mode 100644 index 00000000..bc545769 --- /dev/null +++ b/source/user/manual/model/elements/FPBearingPTV.rst @@ -0,0 +1,55 @@ +.. _FPBearingPTV: + +FPBearingPTV Element +^^^^^^^^^^^^^^^^^^^^ + +This command constructs a single friction pendulum bearing element with friction coefficient that depends on sliding velocity; axial pressure; and temperature at the sliding surface. Use with ``-ndm 3 -ndf 6``. For triple pendulum systems with heating see :ref:`TripleFrictionPendulumX`. + +.. function:: element FPBearingPTV $eleTag $iNode $jNode $MuRef $IsPressureDependent $pRef $IsTemperatureDependent $Diffusivity $Conductivity $IsVelocityDependent $rateParameter $ReffectiveFP $Radius_Contact $kInitial $matP $matT $matMy $matMz $x1 $x2 $x3 $y1 $y2 $y3 $shearDist $doRayleigh $mass $iter $tol $unit + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $MuRef, |float|, reference coefficient of friction at reference pressure and 20 C + $IsPressureDependent, |integer|, 1 if friction depends on instantaneous axial pressure + $pRef, |float|, reference axial pressure + $IsTemperatureDependent, |integer|, 1 if friction depends on temperature at sliding surface + $Diffusivity, |float|, thermal diffusivity of steel + $Conductivity, |float|, thermal conductivity of steel + $IsVelocityDependent, |integer|, 1 if friction depends on sliding velocity + $rateParameter, |float|, exponent controlling friction-velocity curve shape + $ReffectiveFP, |float|, effective radius of curvature of sliding surface + $Radius_Contact, |float|, radius of contact area at sliding surface + $kInitial, |float|, lateral stiffness before sliding begins + $matP $matT $matMy $matMz, |integer|, uniaxial material tags for axial; torsion; and rocking directions + $shearDist, |float|, shear distance from iNode as fraction of element length + $doRayleigh, |integer|, 1 to include Rayleigh damping contribution from bearing + $mass, |float|, element mass + $iter $tol, |integer| |float|, maximum equilibrium iterations and convergence tolerance + $unit, |integer|, unit system tag (1: N-m-s-C; 2: kN-m-s-C; 3: N-mm-s-C; 4: kN-mm-s-C; 5-8: imperial variants) + +.. note:: + + 1. Element recorders with ``Temperature``, ``FrictionFactors``, and ``MuAdjusted`` return temperature; friction factor history; and adjusted coefficient of friction. + + 2. Valid standard :ref:`elementRecorder` queries include ``force``, ``localForce``, ``basicForce``, ``localDisplacement``, and ``basicDisplacement``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element FPBearingPTV 1 1 2 0.06 1 5.0e7 1 4.44e-6 18.0 1 100.0 2.2352 0.2 500.0 1 2 3 4 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0 0.0 100 1.0e-8 1 + + 2. **Python Code** + + .. code-block:: python + + element('FPBearingPTV', 1, 1, 2, 0.06, 1, 5.0e7, 1, 4.44e-6, 18.0, 1, 100.0, + 2.2352, 0.2, 500.0, 1, 2, 3, 4, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0, 0.0, 100, 1.0e-8, 1) + +Code developed by: Manish Kumar, University at Buffalo, SUNY diff --git a/source/user/manual/model/elements/FlatSliderBearingElement.rst b/source/user/manual/model/elements/FlatSliderBearingElement.rst new file mode 100644 index 00000000..ac5b4463 --- /dev/null +++ b/source/user/manual/model/elements/FlatSliderBearingElement.rst @@ -0,0 +1,50 @@ +.. _FlatSliderBearingElement: + +FlatSliderBearingElement +^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a two-node flat slider bearing element. The iNode represents the flat sliding surface and the jNode the slider. Shear behavior uses a friction model; axial and rotational behavior use :ref:`uniaxialMaterial` objects. The axial material is modified for no-tension behavior to capture uplift. + +.. function:: element flatSliderBearing $eleTag $iNode $jNode $frnMdlTag $kInit -P $matTag -Mz $matTag <-orient $x1 $x2 $x3 $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> <-iter $maxIter $tol> + +.. function:: element flatSliderBearing $eleTag $iNode $jNode $frnMdlTag $kInit -P $matTag -T $matTag -My $matTag -Mz $matTag <-orient <$x1 $x2 $x3> $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> <-iter $maxIter $tol> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes (iNode is flat sliding surface) + $frnMdlTag, |integer|, tag of a previously defined friction model + $kInit, |float|, initial elastic stiffness in local shear direction + $matTag, |integer|, uniaxial material tag for axial behavior (``-P``) + $matTag, |integer|, uniaxial material tag for torsion (``-T``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local y (``-My``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local z (``-Mz``) + $sDratio, |float|, shear distance from iNode as fraction of element length (optional; default 0.0) + $m, |float|, element mass (optional; default 0.0) + $maxIter $tol, |integer| |float|, equilibrium iteration limit and tolerance (optional; defaults 20 and 1e-8) + +.. note:: + + 1. P-Delta moments are transferred entirely to the flat sliding surface (iNode) by default. + + 2. Friction depends on axial force and slip rate; use a smaller time step for dynamic analysis when needed. + + 3. Valid :ref:`elementRecorder` queries include ``force``, ``localForce``, ``basicForce``, ``localDisplacement``, ``basicDisplacement``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element flatSliderBearing 1 1 2 1 250.0 -P 1 -Mz 2 -orient 0 1 0 -1 0 0 + + 2. **Python Code** + + .. code-block:: python + + element('flatSliderBearing', 1, 1, 2, 1, 250.0, '-P', 1, '-Mz', 2, '-orient', 0, 1, 0, -1, 0, 0) + +Code developed by: Andreas Schellenberg, University of California, Berkeley diff --git a/source/user/manual/model/elements/FlexureShearInteractionDisplacementBasedBeamColumnElement.rst b/source/user/manual/model/elements/FlexureShearInteractionDisplacementBasedBeamColumnElement.rst new file mode 100644 index 00000000..70e36c51 --- /dev/null +++ b/source/user/manual/model/elements/FlexureShearInteractionDisplacementBasedBeamColumnElement.rst @@ -0,0 +1,49 @@ +.. _FlexureShearInteractionDisplacementBasedBeamColumnElement: + +Flexure-Shear Interaction Displacement-Based Beam Column Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a distributed-plasticity, displacement-based beam-column element that couples flexural and shear deformations. The command name in OpenSees is ``dispBeamColumnInt``. The formulation follows Massone et al. (2006) and is limited to 2D analysis (``ndm=2``, ``ndf=3``). + +.. function:: element dispBeamColumnInt $eleTag $iNode $jNode $numIntgrPts $secTag $transfTag $cRot <-mass $massDens> + +.. function:: element dispBeamColumnInt $eleTag $iNode $jNode $numIntgrPts -sections {$secTag1 ...} $transfTag $cRot <-mass $massDens> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end node tags + $numIntgrPts, |integer|, number of integration points along the element + $secTag, |integer|, tag of a ``FiberSection2dInt`` section (same section at all points) + $secTag1 ..., |listInt|, list of section tags when using ``-sections`` + $transfTag, |integer|, tag of a ``LinearInt`` geometric transformation + $cRot, |float|, center of rotation as a fraction of element height from bottom (0 to 1) + $massDens, |float|, element mass per unit length (optional; default 0.0) + +.. note:: + + 1. This element requires the ``LinearInt`` geometric transformation and a ``FiberSection2dInt`` section created for strip (panel) modeling with flexure-shear interaction. + + 2. Parameter $cRot distributes transverse displacement between flexural (curvature) and shear (shear strain) components. + + 3. Valid :ref:`elementRecorder` queries include ``force``, ``stiffness``, and ``section $secNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + geomTransf LinearInt 1 + element dispBeamColumnInt 1 1 3 2 2 1 0.4 + + 2. **Python Code** + + .. code-block:: python + + geomTransf('LinearInt', 1) + element('dispBeamColumnInt', 1, 1, 3, 2, 2, 1, 0.4) + +Code developed by: Leo Massone, Kutay Orakcal, John Wallace diff --git a/source/user/manual/model/elements/FourNodeQuadUP.rst b/source/user/manual/model/elements/FourNodeQuadUP.rst new file mode 100644 index 00000000..d0faa808 --- /dev/null +++ b/source/user/manual/model/elements/FourNodeQuadUP.rst @@ -0,0 +1,44 @@ +.. _FourNodeQuadUP: + +FourNodeQuadUP Element +^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a four-node plane-strain quadrilateral element for coupled solid-fluid (u-p) analysis of saturated porous media based on Biot theory. Each node has two solid displacement DOFs and one pore-pressure DOF. Use with ``-ndm 2 -ndf 3``. The registered command name is ``quadUP``. + +.. function:: element quadUP $eleTag $iNode $jNode $kNode $lNode $thick $matTag $bulk $fmass $hPerm $vPerm <$b1 $b2 $t> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in counter-clockwise order + $thick, |float|, element thickness + $matTag, |integer|, tag of a previously defined ND material + $bulk, |float|, combined undrained bulk modulus relating pore pressure and volumetric strain + $fmass, |float|, fluid mass density + $hPerm $vPerm, |float|, permeability in horizontal and vertical directions + $b1 $b2, |float|, optional body-force components (default 0.0) + $t, |float|, optional uniform normal traction; positive in tension (default 0.0) + +.. note:: + + 1. Record pore pressure at nodes with a :ref:`nodeRecorder` on DOF 3. + + 2. Valid :ref:`elementRecorder` queries include ``force``, ``stiffness``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element quadUP 1 1 2 3 4 1.0 1 2.2e6 1000.0 1.0e-5 1.0e-5 + + 2. **Python Code** + + .. code-block:: python + + element('quadUP', 1, 1, 2, 3, 4, 1.0, 1, 2.2e6, 1000.0, 1.0e-5, 1.0e-5) + +Code developed by: Zhaohui Yang, UC San Diego diff --git a/source/user/manual/model/elements/HDR.rst b/source/user/manual/model/elements/HDR.rst new file mode 100644 index 00000000..7168b2ef --- /dev/null +++ b/source/user/manual/model/elements/HDR.rst @@ -0,0 +1,50 @@ +.. _HDR: + +HDR Element +^^^^^^^^^^^ + +This command constructs a three-dimensional high damping rubber (HDR) bearing element using the Grant et al. (2004) biaxial shear model. Axial and rotational behavior follow the same framework as :ref:`ElastomericX`. Use with ``-ndm 3 -ndf 6``. + +.. function:: element HDR $eleTag $Nd1 $Nd2 $Gr $Kbulk $D1 $D2 $ts $tr $n $a1 $a2 $a3 $b1 $b2 $b3 $c1 $c2 $c3 $c4 <$x1 $x2 $x3 $y1 $y2 $y3> <$kc> <$PhiM> <$ac> <$sDratio> <$m> <$tc> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $Nd1 $Nd2, |integer|, end nodes + $Gr, |float|, shear modulus of elastomer + $Kbulk, |float|, bulk modulus of rubber + $D1, |float|, internal diameter + $D2, |float|, outer diameter excluding cover thickness + $ts, |float|, single steel shim layer thickness + $tr, |float|, single rubber layer thickness + $n, |integer|, number of rubber layers + $a1 $a2 $a3 $b1 $b2 $b3 $c1 $c2 $c3 $c4, |float|, Grant model shear parameters + $kc, |float|, cavitation parameter (optional; default 10.0) + $PhiM, |float|, damage parameter (optional; default 0.5) + $ac, |float|, strength reduction parameter (optional; default 1.0) + $sDratio, |float|, shear distance from iNode as fraction of length (optional; default 0.5) + $m, |float|, element mass (optional; default 0.0) + $tc, |float|, cover thickness (optional; default 0.0) + +.. note:: + + Use ``Parameters`` :ref:`elementRecorder` to obtain cavitation force; buckling capacity; and vertical stiffness. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element HDR 1 1 2 0.8 2.0e9 0.0 0.6 0.003 0.01 20 1.0 0.5 0.0 1.0 0.5 0.0 1.0 0.5 0.0 1.0 + + 2. **Python Code** + + .. code-block:: python + + element('HDR', 1, 1, 2, 0.8, 2.0e9, 0.0, 0.6, 0.003, 0.01, 20, + 1.0, 0.5, 0.0, 1.0, 0.5, 0.0, 1.0, 0.5, 0.0, 1.0) + +Code developed by: Manish Kumar, University at Buffalo, SUNY diff --git a/source/user/manual/model/elements/KikuchiBearing.rst b/source/user/manual/model/elements/KikuchiBearing.rst new file mode 100644 index 00000000..2392e963 --- /dev/null +++ b/source/user/manual/model/elements/KikuchiBearing.rst @@ -0,0 +1,51 @@ +.. _KikuchiBearing: + +KikuchiBearing Element +^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a three-dimensional elastomeric bearing element with multiple normal springs parallel to the local x-axis and multiple shear springs distributed in the local y-z plane. Use with ``-ndm 3 -ndf 6``. + +.. function:: element KikuchiBearing $eleTag $iNode $jNode -shape $shape -size $size $totalRubber <-totalHeight $totalHeight> -nMSS $nMSS -matMSS $matMSSTag <-limDisp $limDisp> -nMNS $nMNS -matMNS $matMNSTag <-lambda $lambda> <-orient <$x1 $x2 $x3> $yp1 $yp2 $yp3> <-mass $m> <-noPDInput> <-noTilt> <-adjustPDOutput $ci $cj> <-doBalance $limFo $limFi $nIter> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $shape, |string|, bearing cross section: ``round`` or ``square`` (``-shape``) + $size, |float|, characteristic size of cross section (``-size``) + $totalRubber, |float|, total rubber thickness (``-size``) + $totalHeight, |float|, total bearing height (optional; default is distance between nodes) + $nMSS, |integer|, number of multiple shear springs (``-nMSS``) + $matMSSTag, |integer|, uniaxial material tag for shear springs (``-matMSS``) + $limDisp, |float|, limit displacement for MSS equivalent coefficient (optional) + $nMNS, |integer|, number of multiple normal springs (``-nMNS``) + $matMNSTag, |integer|, uniaxial material tag for normal springs (``-matMNS``) + $lambda, |float|, normal spring distribution parameter (optional) + $m, |float|, element mass (optional) + $ci $cj, |float|, P-Delta output adjustment coefficients (``-adjustPDOutput``) + $limFo $limFi $nIter, |float| |float| |integer|, force-balance iteration controls (``-doBalance``) + +.. note:: + + 1. Flags ``-noPDInput`` and ``-noTilt`` disable P-Delta input and tilt effects respectively. + + 2. Valid :ref:`elementRecorder` queries include ``globalForce``, ``localForce``, ``basicForce``, ``localDisplacement``, and ``basicDeformation``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element KikuchiBearing 1 1 2 -shape round -size 0.5 0.2 -nMSS 16 -matMSS 1 -nMNS 4 -matMNS 2 + + 2. **Python Code** + + .. code-block:: python + + element('KikuchiBearing', 1, 1, 2, '-shape', 'round', '-size', 0.5, 0.2, + '-nMSS', 16, '-matMSS', 1, '-nMNS', 4, '-matMNS', 2) + +Code developed by: Ken Ishii and Masaru Kikuchi diff --git a/source/user/manual/model/elements/LeadRubberX.rst b/source/user/manual/model/elements/LeadRubberX.rst new file mode 100644 index 00000000..6aa008c3 --- /dev/null +++ b/source/user/manual/model/elements/LeadRubberX.rst @@ -0,0 +1,62 @@ +.. _LeadRubberX: + +LeadRubberX Element +^^^^^^^^^^^^^^^^^^^ + +This command constructs a three-dimensional lead-rubber bearing element extending :ref:`ElastomericX` with strength degradation in the lead core due to heating. Use with ``-ndm 3 -ndf 6``. + +.. function:: element LeadRubberX $eleTag $Nd1 $Nd2 $Fy $alpha $Gr $Kbulk $D1 $D2 $ts $tr $n <$x1 $x2 $x3 $y1 $y2 $y3> <$kc> <$PhiM> <$ac> <$sDratio> <$m> <$cd> <$tc> <$qL> <$cL> <$kS> <$aS> <$tag1> <$tag2> <$tag3> <$tag4> <$tag5> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $Nd1 $Nd2, |integer|, end nodes + $Fy, |float|, yield strength + $alpha, |float|, post-yield stiffness ratio + $Gr, |float|, shear modulus of elastomer + $Kbulk, |float|, bulk modulus of rubber + $D1, |float|, internal diameter + $D2, |float|, outer diameter excluding cover thickness + $ts, |float|, single steel shim layer thickness + $tr, |float|, single rubber layer thickness + $n, |integer|, number of rubber layers + $kc, |float|, cavitation parameter (optional; default 10.0) + $PhiM, |float|, damage parameter (optional; default 0.5) + $ac, |float|, strength reduction parameter (optional; default 1.0) + $sDratio, |float|, shear distance from iNode as fraction of length (optional; default 0.5) + $m, |float|, element mass (optional; default 0.0) + $cd, |float|, viscous damping parameter (optional; default 0.0) + $tc, |float|, cover thickness (optional; default 0.0) + $qL, |float|, density of lead (optional; default 11200 kg/m3) + $cL, |float|, specific heat of lead (optional; default 130 N-m/kg C) + $kS, |float|, thermal conductivity of steel (optional; default 50 W/m C) + $aS, |float|, thermal diffusivity of steel (optional; default 1.41e-05 m2/s) + $tag1, |integer|, include cavitation and post-cavitation (optional; default 0) + $tag2, |integer|, include buckling load variation (optional; default 0) + $tag3, |integer|, include horizontal stiffness variation (optional; default 0) + $tag4, |integer|, include vertical stiffness variation (optional; default 0) + $tag5, |integer|, include lead-core heating degradation (optional; default 0) + +.. note:: + + 1. Default heating parameters are in SI units; override them when using imperial units. + + 2. Use ``Parameters`` :ref:`elementRecorder` to obtain cavitation force; buckling capacity; vertical stiffness; horizontal stiffness; temperature increase; and yield strength. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element LeadRubberX 1 1 2 150.0 0.1 0.8 2.0e9 0.0 0.6 0.003 0.01 20 + + 2. **Python Code** + + .. code-block:: python + + element('LeadRubberX', 1, 1, 2, 150.0, 0.1, 0.8, 2.0e9, 0.0, 0.6, 0.003, 0.01, 20) + +Code developed by: Manish Kumar, University at Buffalo, SUNY diff --git a/source/user/manual/model/elements/MVLEM.rst b/source/user/manual/model/elements/MVLEM.rst new file mode 100644 index 00000000..eb24d0f2 --- /dev/null +++ b/source/user/manual/model/elements/MVLEM.rst @@ -0,0 +1,61 @@ +.. _MVLEM: + +MVLEM Element +^^^^^^^^^^^^^ + +| Developed and implemented by: +| `Kristijan Kolozvari `_ (CSU Fullerton) +| Kutay Orakcal (Bogazici University) +| John Wallace (UCLA) + +The MVLEM (Multiple-Vertical-Line-Element-Model) element is a two-node macro-element for flexure-dominated reinforced concrete walls in 2D. The element has six global degrees of freedom (three at the center of each rigid top and bottom beam). Flexural response is modeled by vertical macro-fibers; shear response is modeled by an uncoupled horizontal shear spring at height ``c`` from the bottom node. Use with ``-ndm 2 -ndf 3``. + +For the 3D extension, see the ``MVLEM_3D`` element. + +.. function:: element MVLEM $eleTag $Dens $iNode $jNode $m $c -thick {Thicknesses} -width {Widths} -rho {Reinforcing_ratios} -matConcrete {Concrete_tags} -matSteel {Steel_tags} -matShear {Shear_tag} + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $Dens, |float|, wall density + $iNode $jNode, |integer|, end node tags + $m, |integer|, number of macro-fibers + $c, |float|, location of center of rotation from $iNode (recommended 0.4) + {Thicknesses}, |listFloat|, fiber thicknesses (length $m$) + {Widths}, |listFloat|, macro-fiber widths (length $m$) + {Reinforcing_ratios}, |listFloat|, reinforcing ratio for each macro-fiber + {Concrete_tags}, |listInt|, uniaxial material tags for concrete in each fiber + {Steel_tags}, |listInt|, uniaxial material tags for steel in each fiber + {Shear_tag}, |integer|, uniaxial material tag for the shear spring + +Recorders +######### + +.. csv-table:: + :header: "Recorder", "Description" + :widths: 20, 40 + + globalForce, element global forces + Curvature, element curvature + Shear_Force_Deformation, shear force-deformation relationship + Fiber_Strain, vertical strains in each macro-fiber + Fiber_Stress_Concrete, vertical concrete stresses in each macro-fiber + Fiber_Stress_Steel, vertical steel stresses in each macro-fiber + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element MVLEM 1 0.0 1 2 8 0.4 -thick 4 4 4 4 4 4 4 4 -width 7.5 1.5 7.5 7.5 7.5 7.5 1.5 7.5 -rho 0.0293 0.0 0.0033 0.0033 0.0033 0.0033 0.0 0.0293 -matConcrete 3 4 4 4 4 4 4 3 -matSteel 1 2 2 2 2 2 2 1 -matShear 5 + + 2. **Python Code** + + .. code-block:: python + + element('MVLEM', 1, 0.0, 1, 2, 8, 0.4, '-thick', 4, 4, 4, 4, 4, 4, 4, 4, '-width', 7.5, 1.5, 7.5, 7.5, 7.5, 7.5, 1.5, 7.5, '-rho', 0.0293, 0.0, 0.0033, 0.0033, 0.0033, 0.0033, 0.0, 0.0293, '-matConcrete', 3, 4, 4, 4, 4, 4, 4, 3, '-matSteel', 1, 2, 2, 2, 2, 2, 2, 1, '-matShear', 5) + +Code developed by: Kristijan Kolozvari, Kutay Orakcal, John Wallace diff --git a/source/user/manual/model/elements/MultipleShearSpring.rst b/source/user/manual/model/elements/MultipleShearSpring.rst new file mode 100644 index 00000000..488b820a --- /dev/null +++ b/source/user/manual/model/elements/MultipleShearSpring.rst @@ -0,0 +1,41 @@ +.. _MultipleShearSpring: + +MultipleShearSpring Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a multiple shear spring (MSS) element consisting of identical shear springs arranged radially to represent isotropic behavior in the local y-z plane. The command name ``MSS`` is an alias for ``multipleShearSpring``. + +.. function:: element multipleShearSpring $eleTag $iNode $jNode $nSpring -mat $matTag <-lim $dsp> <-orient <$x1 $x2 $x3> $yp1 $yp2 $yp3> <-mass $m> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $nSpring, |integer|, number of radial shear springs + $matTag, |integer|, tag of a previously defined uniaxial material (``-mat``) + $dsp, |float|, minimum deformation to compute equivalent coefficient (optional; default 0.0) + $m, |float|, element mass (optional) + +.. note:: + + 1. When ``$dsp`` is positive and shear deformation exceeds ``$dsp``; the element adjusts force and stiffness to reproduce monotonic uniaxial material behavior in every direction. + + 2. Valid :ref:`elementRecorder` queries include ``globalForce``, ``localForce``, ``basicForce``, ``localDisplacement``, and ``basicDeformation``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element multipleShearSpring 1 1 2 16 -mat 1 + + 2. **Python Code** + + .. code-block:: python + + element('multipleShearSpring', 1, 1, 2, 16, '-mat', 1) + +Code developed by: Masaru Kikuchi diff --git a/source/user/manual/model/elements/NineFourNodeQuadUP.rst b/source/user/manual/model/elements/NineFourNodeQuadUP.rst new file mode 100644 index 00000000..39bbf525 --- /dev/null +++ b/source/user/manual/model/elements/NineFourNodeQuadUP.rst @@ -0,0 +1,41 @@ +.. _NineFourNodeQuadUP: + +NineFourNodeQuadUP Element +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a nine-node quadrilateral element (nine-four node) for coupled u-p plane-strain analysis. Corner nodes carry pore pressure; midside nodes carry solid displacement only. Use with ``-ndm 2``. The registered command name is ``9_4_QuadUP``. + +.. function:: element 9_4_QuadUP $eleTag $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8 $N9 $thick $matTag $bulk $fmass $permX $permY <$b1 $b2> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8 $N9, |integer|, nine node tags + $thick, |float|, element thickness + $matTag, |integer|, tag of a previously defined ND material + $bulk, |float|, combined undrained bulk modulus + $fmass, |float|, fluid mass density + $permX $permY, |float|, permeability in x and y directions + $b1 $b2, |float|, optional body-force components (default 0.0) + +.. note:: + + Valid :ref:`elementRecorder` queries include ``force``, ``stiffness``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element 9_4_QuadUP 1 1 2 3 4 5 6 7 8 9 1.0 1 2.2e6 1000.0 1.0e-5 1.0e-5 + + 2. **Python Code** + + .. code-block:: python + + element('9_4_QuadUP', 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1.0, 1, 2.2e6, 1000.0, 1.0e-5, 1.0e-5) + +Code developed by: Zhaohui Yang, UC San Diego diff --git a/source/user/manual/model/elements/RJWatsonEQSBearing.rst b/source/user/manual/model/elements/RJWatsonEQSBearing.rst new file mode 100644 index 00000000..a1851f9f --- /dev/null +++ b/source/user/manual/model/elements/RJWatsonEQSBearing.rst @@ -0,0 +1,50 @@ +.. _RJWatsonEQSBearing: + +RJWatsonEQSBearing Element +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs an RJ Watson EQS sliding bearing element with separate uniaxial materials for axial; shear; and moment directions. Shear friction uses a friction model. The iNode represents the sliding surface. + +.. function:: element RJWatsonEqsBearing $eleTag $iNode $jNode $frnMdlTag $kInit -P $matTag -Vy $matTag -Mz $matTag <-orient $x1 $x2 $x3 $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> <-iter $maxIter $tol> + +.. function:: element RJWatsonEqsBearing $eleTag $iNode $jNode $frnMdlTag $kInit -P $matTag -Vy $matTag -Vz $matTag -T $matTag -My $matTag -Mz $matTag <-orient <$x1 $x2 $x3> $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> <-iter $maxIter $tol> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $frnMdlTag, |integer|, tag of a previously defined friction model + $kInit, |float|, initial elastic stiffness in local shear direction + $matTag, |integer|, uniaxial material tag for axial behavior (``-P``) + $matTag, |integer|, uniaxial material tag for shear in local y (``-Vy``) + $matTag, |integer|, uniaxial material tag for shear in local z (``-Vz``; 3D only) + $matTag, |integer|, uniaxial material tag for torsion (``-T``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local y (``-My``) + $matTag, |integer|, uniaxial material tag for moment about local z (``-Mz``) + $sDratio, |float|, shear distance from iNode as fraction of element length (optional; default 0.0) + $m, |float|, element mass (optional; default 0.0) + $maxIter $tol, |integer| |float|, equilibrium iteration limit and tolerance (optional) + +.. note:: + + 1. In 2D problems use ``-Vy`` and ``-Mz``. In 3D problems use ``-Vy``, ``-Vz``, ``-T``, ``-My``, and ``-Mz``. + + 2. Valid :ref:`elementRecorder` queries include ``force``, ``localForce``, ``basicForce``, ``localDisplacement``, ``basicDisplacement``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element RJWatsonEqsBearing 1 1 2 1 250.0 -P 1 -Vy 2 -Mz 3 + + 2. **Python Code** + + .. code-block:: python + + element('RJWatsonEqsBearing', 1, 1, 2, 1, 250.0, '-P', 1, '-Vy', 2, '-Mz', 3) + +Code developed by: Andreas Schellenberg, University of California, Berkeley diff --git a/source/user/manual/model/elements/SSPbrickUP.rst b/source/user/manual/model/elements/SSPbrickUP.rst new file mode 100644 index 00000000..d6574bea --- /dev/null +++ b/source/user/manual/model/elements/SSPbrickUP.rst @@ -0,0 +1,43 @@ +.. _SSPbrickUP: + +SSPbrickUP Element +^^^^^^^^^^^^^^^^^^ + +This command constructs a stabilized single-point brick element with u-p formulation for analysis of fluid-saturated porous media. Use with ``-ndm 3 -ndf 4``. + +.. function:: element SSPbrickUP $eleTag $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8 $matTag $fBulk $fDen $k1 $k2 $k3 $e $alpha <$b1 $b2 $b3> <-lumped> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $N1 ... $N8, |integer|, eight node tags in standard brick order + $matTag, |integer|, tag of a previously defined ND material + $fBulk, |float|, fluid bulk modulus + $fDen, |float|, fluid mass density + $k1 $k2 $k3, |float|, permeability in local x; y; and z directions + $e, |float|, void ratio + $alpha, |float|, :math:`1 - K_s/K_f` parameter + $b1 $b2 $b3, |float|, optional body-force components (default 0.0) + -lumped, |string|, optional flag to use lumped mass matrix + +.. note:: + + Valid :ref:`elementRecorder` queries include ``force``, ``stress``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element SSPbrickUP 1 1 2 3 4 5 6 7 8 1 2.2e6 1000.0 1.0e-5 1.0e-5 1.0e-5 0.5 1.0 + + 2. **Python Code** + + .. code-block:: python + + element('SSPbrickUP', 1, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2.2e6, 1000.0, 1.0e-5, 1.0e-5, 1.0e-5, 0.5, 1.0) + +Code developed by: Chris McGann, Pedro Arduino, and Peter Mackenzie-Helnwein, University of Washington diff --git a/source/user/manual/model/elements/SSPquadUP.rst b/source/user/manual/model/elements/SSPquadUP.rst new file mode 100644 index 00000000..faa67c37 --- /dev/null +++ b/source/user/manual/model/elements/SSPquadUP.rst @@ -0,0 +1,44 @@ +.. _SSPquadUP: + +SSPquadUP Element +^^^^^^^^^^^^^^^^^ + +This command constructs a stabilized single-point quadrilateral element with u-p formulation for plane-strain analysis of fluid-saturated porous media. Use with ``-ndm 2 -ndf 3``. + +.. function:: element SSPquadUP $eleTag $iNode $jNode $kNode $lNode $matTag $t $fBulk $fDen $k1 $k2 $e $alpha <$b1 $b2> <$Pup $Plow $Pleft $Pright> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in counter-clockwise order + $matTag, |integer|, tag of a previously defined ND material + $t, |float|, element thickness + $fBulk, |float|, fluid bulk modulus + $fDen, |float|, fluid mass density + $k1 $k2, |float|, permeability in local x and y directions + $e, |float|, void ratio + $alpha, |float|, :math:`1 - K_s/K_f` parameter + $b1 $b2, |float|, optional body-force components (default 0.0) + $Pup $Plow $Pleft $Pright, |float|, optional boundary pore pressures on element edges + +.. note:: + + Valid :ref:`elementRecorder` queries include ``force``, ``stress``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element SSPquadUP 1 1 2 3 4 1 1.0 2.2e6 1000.0 1.0e-5 1.0e-5 0.5 1.0 + + 2. **Python Code** + + .. code-block:: python + + element('SSPquadUP', 1, 1, 2, 3, 4, 1, 1.0, 2.2e6, 1000.0, 1.0e-5, 1.0e-5, 0.5, 1.0) + +Code developed by: Chris McGann, Pedro Arduino, and Peter Mackenzie-Helnwein, University of Washington diff --git a/source/user/manual/model/elements/ShallowFoundationGen.rst b/source/user/manual/model/elements/ShallowFoundationGen.rst new file mode 100644 index 00000000..a878e3c1 --- /dev/null +++ b/source/user/manual/model/elements/ShallowFoundationGen.rst @@ -0,0 +1,45 @@ +.. _ShallowFoundationGen: + +ShallowFoundationGen +^^^^^^^^^^^^^^^^^^^^ + +This command generates a two-dimensional Beam-on-Nonlinear-Winkler-Foundation (BNWF) mesh for shallow footing analysis. It reads footing and soil properties from an input file and writes a Tcl source file ``Foundation_$FoundationTag.tcl`` containing nodes; elastic beam-column footing elements; zeroLength soil springs; materials; and boundary conditions. Source the generated file after running this command. + +.. function:: ShallowFoundationGen $FoundationTag $ConnectNode $InputFileName $FootingCondition + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $FoundationTag, |integer|, foundation identifier (also used in output file naming) + $ConnectNode, |integer|, node tag in the structural model connected to the footing + $InputFileName, |string|, path to input file with soil; footing; and mesh parameters + $FootingCondition, |integer|, foundation base condition code from 1 to 5 + +.. note:: + + 1. **Footing condition codes:** 1 = fixed base; 2 = elastic vertical springs with sliding restrained; 3 = elastic vertical and horizontal springs; 4 = ``QzSimple2`` vertical springs with sliding restrained; 5 = ``QzSimple2`` vertical plus ``PxSimple1`` and ``TxSimple1`` horizontal springs. + + 2. Material tags generated by this command start at 101; keep structural material tags at 100 or below. + + 3. The input file may use ``CapSoil $Qult $Pult $Tult $Kv $Kh`` to specify strength and stiffness directly instead of computing them from soil properties. + + 4. This is a model-generation utility; it does not create a single finite element. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + ShallowFoundationGen 1 10 footingInput.dat 4 + source Foundation_1.tcl + + 2. **Python Code** + + .. code-block:: python + + ShallowFoundationGen(1, 10, 'footingInput.dat', 4) + source('Foundation_1.tcl') + +Code developed by: Prishati Raychowdhury, UC San Diego diff --git a/source/user/manual/model/elements/Shell.rst b/source/user/manual/model/elements/Shell.rst new file mode 100644 index 00000000..e62ff8cc --- /dev/null +++ b/source/user/manual/model/elements/Shell.rst @@ -0,0 +1,44 @@ +.. _Shell: + +Shell Element +^^^^^^^^^^^^^ + +This command constructs a four-node shell element using the Bathe MITC4 formulation with membrane and drilling degrees of freedom. The command names in OpenSees are ``shell``, ``Shell``, ``shellMITC4``, or ``ShellMITC4``. + +Use with ``-ndm 3 -ndf 6``. The section is typically a :ref:`PlateFiberSection`, :ref:`ElasticMembranePlateSection`, or layered shell section. + +.. function:: element ShellMITC4 $eleTag $iNode $jNode $kNode $lNode $secTag <-updateBasis> <-damp $dampTag> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in counter-clockwise order + $secTag, |integer|, tag of a previously defined section object + -updateBasis, |string|, update the element local basis during analysis (optional) + $dampTag, |integer|, tag of an elemental damping object used with ``-damp`` (optional) + +.. note:: + + 1. This is a 3D element with 6 DOFs per node and cannot be used in a 2D domain. + + 2. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section PlateFiber 1 1 10.0 + element ShellMITC4 1 1 2 3 4 1 + + 2. **Python Code** + + .. code-block:: python + + section('PlateFiber', 1, 1, 10.0) + element('ShellMITC4', 1, 1, 2, 3, 4, 1) + +Code developed by: Ed Love; reimplementation by Leopoldo Tesser, Diego A. Talledo, Veronique Le Corvec diff --git a/source/user/manual/model/elements/ShellDKGQ.rst b/source/user/manual/model/elements/ShellDKGQ.rst new file mode 100644 index 00000000..bb0dae33 --- /dev/null +++ b/source/user/manual/model/elements/ShellDKGQ.rst @@ -0,0 +1,43 @@ +.. _ShellDKGQ: + +ShellDKGQ Element +^^^^^^^^^^^^^^^^^ + +This command constructs a four-node quadrilateral shell element based on generalized conforming element theory. The bending part uses the DKQ thin-plate formulation; the membrane part uses the GQ12 element with drilling DOF. Use with ``-ndm 3 -ndf 6``. + +.. function:: element ShellDKGQ $eleTag $iNode $jNode $kNode $lNode $secTag <-damp $dampTag> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in clockwise or counter-clockwise order + $secTag, |integer|, tag of a previously defined section object + $dampTag, |integer|, tag of an elemental damping object used with ``-damp`` (optional) + +.. note:: + + 1. The section may be a :ref:`PlateFiberSection`, :ref:`ElasticMembranePlateSection`, or layered shell section. + + 2. This is the linear small-deformation formulation. For geometric nonlinearity see :ref:`ShellNLDKGQ`. + + 3. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section PlateFiber 1 1 10.0 + element ShellDKGQ 1 1 2 3 4 1 + + 2. **Python Code** + + .. code-block:: python + + section('PlateFiber', 1, 1, 10.0) + element('ShellDKGQ', 1, 1, 2, 3, 4, 1) + +Code developed by: Lisha Wang, Xinzheng Lu, Linlin Xie, Song Cen, Quan Gu diff --git a/source/user/manual/model/elements/ShellDKGT.rst b/source/user/manual/model/elements/ShellDKGT.rst new file mode 100644 index 00000000..aee7e05b --- /dev/null +++ b/source/user/manual/model/elements/ShellDKGT.rst @@ -0,0 +1,43 @@ +.. _ShellDKGT: + +ShellDKGT Element +^^^^^^^^^^^^^^^^^ + +This command constructs a three-node triangular shell element based on generalized conforming element theory. The bending part uses the DKT thin-plate formulation; the membrane part uses the GT9 element with drilling DOF. Use with ``-ndm 3 -ndf 6``. + +.. function:: element ShellDKGT $eleTag $iNode $jNode $kNode $secTag <-damp $dampTag> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode, |integer|, three nodes in clockwise or counter-clockwise order + $secTag, |integer|, tag of a previously defined section object + $dampTag, |integer|, tag of an elemental damping object used with ``-damp`` (optional) + +.. note:: + + 1. The section may be a :ref:`PlateFiberSection`, :ref:`ElasticMembranePlateSection`, or layered shell section. + + 2. This is the linear small-deformation formulation. For geometric nonlinearity see :ref:`ShellNLDKGT`. + + 3. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section PlateFiber 1 1 10.0 + element ShellDKGT 1 1 2 3 1 + + 2. **Python Code** + + .. code-block:: python + + section('PlateFiber', 1, 1, 10.0) + element('ShellDKGT', 1, 1, 2, 3, 1) + +Code developed by: Shuhao Zhang, Xinzheng Lu diff --git a/source/user/manual/model/elements/ShellNL.rst b/source/user/manual/model/elements/ShellNL.rst new file mode 100644 index 00000000..88c81704 --- /dev/null +++ b/source/user/manual/model/elements/ShellNL.rst @@ -0,0 +1,42 @@ +.. _ShellNL: + +ShellNL Element +^^^^^^^^^^^^^^^ + +This command constructs a nine-node Lagrangian shell element with membrane and drilling degrees of freedom. The command names in OpenSees are ``ShellNL``, ``shellNL``, ``ShellMITC9``, or ``shellMITC9``. Use with ``-ndm 3 -ndf 6``. + +.. function:: element ShellMITC9 $eleTag $n1 $n2 $n3 $n4 $n5 $n6 $n7 $n8 $n9 $secTag + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $n1 ... $n9, |integer|, nine nodes defining the element + $secTag, |integer|, tag of a previously defined section object + +.. note:: + + 1. This is a 3D element with 6 DOFs per node (54 total element DOFs). + + 2. The section is typically a :ref:`PlateFiberSection` or :ref:`ElasticMembranePlateSection`. + + 3. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section PlateFiber 1 1 10.0 + element ShellMITC9 1 1 2 3 4 5 6 7 8 9 1 + + 2. **Python Code** + + .. code-block:: python + + section('PlateFiber', 1, 1, 10.0) + element('ShellMITC9', 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1) + +Code developed by: Leopoldo Tesser, Diego A. Talledo diff --git a/source/user/manual/model/elements/ShellNLDKGQ.rst b/source/user/manual/model/elements/ShellNLDKGQ.rst new file mode 100644 index 00000000..4629d81f --- /dev/null +++ b/source/user/manual/model/elements/ShellNLDKGQ.rst @@ -0,0 +1,41 @@ +.. _ShellNLDKGQ: + +ShellNLDKGQ Element +^^^^^^^^^^^^^^^^^^^ + +This command constructs a four-node quadrilateral shell element with geometric nonlinearity based on the updated Lagrangian formulation. It extends the :ref:`ShellDKGQ` element for large-deformation analysis. Use with ``-ndm 3 -ndf 6``. + +.. function:: element ShellNLDKGQ $eleTag $iNode $jNode $kNode $lNode $secTag <-damp $dampTag> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in clockwise or counter-clockwise order + $secTag, |integer|, tag of a previously defined section object + $dampTag, |integer|, tag of an elemental damping object used with ``-damp`` (optional) + +.. note:: + + 1. The section may be a :ref:`PlateFiberSection`, :ref:`ElasticMembranePlateSection`, or layered shell section. + + 2. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section PlateFiber 1 1 10.0 + element ShellNLDKGQ 1 1 2 3 4 1 + + 2. **Python Code** + + .. code-block:: python + + section('PlateFiber', 1, 1, 10.0) + element('ShellNLDKGQ', 1, 1, 2, 3, 4, 1) + +Code developed by: Lisha Wang, Xinzheng Lu, Linlin Xie, Song Cen, Quan Gu diff --git a/source/user/manual/model/elements/ShellNLDKGT.rst b/source/user/manual/model/elements/ShellNLDKGT.rst new file mode 100644 index 00000000..906587dd --- /dev/null +++ b/source/user/manual/model/elements/ShellNLDKGT.rst @@ -0,0 +1,41 @@ +.. _ShellNLDKGT: + +ShellNLDKGT Element +^^^^^^^^^^^^^^^^^^^ + +This command constructs a three-node triangular shell element with geometric nonlinearity based on the updated Lagrangian formulation. It extends the :ref:`ShellDKGT` element for large-deformation analysis. Use with ``-ndm 3 -ndf 6``. + +.. function:: element ShellNLDKGT $eleTag $iNode $jNode $kNode $secTag <-damp $dampTag> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode, |integer|, three nodes in clockwise or counter-clockwise order + $secTag, |integer|, tag of a previously defined section object + $dampTag, |integer|, tag of an elemental damping object used with ``-damp`` (optional) + +.. note:: + + 1. The section may be a :ref:`PlateFiberSection`, :ref:`ElasticMembranePlateSection`, or layered shell section. + + 2. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section PlateFiber 1 1 10.0 + element ShellNLDKGT 1 1 2 3 1 + + 2. **Python Code** + + .. code-block:: python + + section('PlateFiber', 1, 1, 10.0) + element('ShellNLDKGT', 1, 1, 2, 3, 1) + +Code developed by: Shuhao Zhang, Xinzheng Lu diff --git a/source/user/manual/model/elements/SimpleContact2D.rst b/source/user/manual/model/elements/SimpleContact2D.rst new file mode 100644 index 00000000..fccc6110 --- /dev/null +++ b/source/user/manual/model/elements/SimpleContact2D.rst @@ -0,0 +1,40 @@ +.. _SimpleContact2D: + +SimpleContact2D Element +^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a two-dimensional contact element between a primary line segment (nodes i-j) and a secondary node using a Lagrange multiplier node. Use with ``-ndm 2``. + +.. function:: element SimpleContact2D $eleTag $iNode $jNode $secondaryNode $lambdaNode $matTag $tolGap $tolForce + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, nodes defining the primary contact segment + $secondaryNode, |integer|, secondary (slave) node + $lambdaNode, |integer|, Lagrange multiplier node + $matTag, |integer|, tag of a contact ND material + $tolGap, |float|, gap tolerance for contact detection + $tolForce, |float|, force tolerance for contact equilibrium + +.. note:: + + Valid :ref:`elementRecorder` queries include ``forces`` and ``force``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element SimpleContact2D 1 1 2 10 11 1 1.0e-6 1.0e-6 + + 2. **Python Code** + + .. code-block:: python + + element('SimpleContact2D', 1, 1, 2, 10, 11, 1, 1.0e-6, 1.0e-6) + +Code developed by: Kathryn Petek, Pedro Arduino, and Peter Mackenzie-Helnwein, University of Washington diff --git a/source/user/manual/model/elements/SimpleContact3D.rst b/source/user/manual/model/elements/SimpleContact3D.rst new file mode 100644 index 00000000..34e8bee4 --- /dev/null +++ b/source/user/manual/model/elements/SimpleContact3D.rst @@ -0,0 +1,40 @@ +.. _SimpleContact3D: + +SimpleContact3D Element +^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a three-dimensional contact element between a primary quadrilateral surface (four nodes) and a secondary node using a Lagrange multiplier node. Use with ``-ndm 3``. + +.. function:: element SimpleContact3D $eleTag $iNode $jNode $kNode $lNode $secondaryNode $lambdaNode $matTag $tolGap $tolForce + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes defining the primary contact surface + $secondaryNode, |integer|, secondary (slave) node + $lambdaNode, |integer|, Lagrange multiplier node + $matTag, |integer|, tag of a contact ND material + $tolGap, |float|, gap tolerance for contact detection + $tolForce, |float|, force tolerance for contact equilibrium + +.. note:: + + Valid :ref:`elementRecorder` queries include ``forces`` and ``force``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element SimpleContact3D 1 1 2 3 4 10 11 1 1.0e-6 1.0e-6 + + 2. **Python Code** + + .. code-block:: python + + element('SimpleContact3D', 1, 1, 2, 3, 4, 10, 11, 1, 1.0e-6, 1.0e-6) + +Code developed by: Kathryn Petek, Pedro Arduino, and Peter Mackenzie-Helnwein, University of Washington diff --git a/source/user/manual/model/elements/SingleFrictionPendulumBearing.rst b/source/user/manual/model/elements/SingleFrictionPendulumBearing.rst new file mode 100644 index 00000000..2467f1f9 --- /dev/null +++ b/source/user/manual/model/elements/SingleFrictionPendulumBearing.rst @@ -0,0 +1,51 @@ +.. _SingleFrictionPendulumBearing: + +SingleFrictionPendulumBearing Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a two-node single concave friction pendulum bearing. The iNode is the concave sliding surface and the jNode is the articulated slider. Shear behavior includes post-yield stiffening from the concave surface and uses a friction model. + +.. function:: element singleFPBearing $eleTag $iNode $jNode $frnMdlTag $Reff $kInit -P $matTag -Mz $matTag <-orient $x1 $x2 $x3 $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> <-iter $maxIter $tol> + +.. function:: element singleFPBearing $eleTag $iNode $jNode $frnMdlTag $Reff $kInit -P $matTag -T $matTag -My $matTag -Mz $matTag <-orient <$x1 $x2 $x3> $y1 $y2 $y3> <-shearDist $sDratio> <-doRayleigh> <-mass $m> <-iter $maxIter $tol> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes (iNode is concave surface) + $frnMdlTag, |integer|, tag of a previously defined friction model + $Reff, |float|, effective radius of concave sliding surface + $kInit, |float|, initial elastic stiffness in local shear direction + $matTag, |integer|, uniaxial material tag for axial behavior (``-P``) + $matTag, |integer|, uniaxial material tag for torsion (``-T``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local y (``-My``; 3D only) + $matTag, |integer|, uniaxial material tag for moment about local z (``-Mz``) + $sDratio, |float|, shear distance from iNode as fraction of element length (optional; default 0.0) + $m, |float|, element mass (optional; default 0.0) + $maxIter $tol, |integer| |float|, equilibrium iteration limit and tolerance (optional; defaults 20 and 1e-8) + +.. note:: + + 1. The axial uniaxial material is modified for no-tension behavior. + + 2. For pressure-velocity-temperature dependent friction see :ref:`FPBearingPTV`. + + 3. Valid :ref:`elementRecorder` queries include ``force``, ``localForce``, ``basicForce``, ``localDisplacement``, ``basicDisplacement``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element singleFPBearing 1 1 2 1 34.68 250.0 -P 1 -Mz 2 -orient 0 1 0 -1 0 0 + + 2. **Python Code** + + .. code-block:: python + + element('singleFPBearing', 1, 1, 2, 1, 34.68, 250.0, '-P', 1, '-Mz', 2, '-orient', 0, 1, 0, -1, 0, 0) + +Code developed by: Andreas Schellenberg, University of California, Berkeley diff --git a/source/user/manual/model/elements/SurfaceLoad.rst b/source/user/manual/model/elements/SurfaceLoad.rst new file mode 100644 index 00000000..72307335 --- /dev/null +++ b/source/user/manual/model/elements/SurfaceLoad.rst @@ -0,0 +1,40 @@ +.. _SurfaceLoad: + +SurfaceLoad Element +^^^^^^^^^^^^^^^^^^^ + +This command constructs a four-node surface load element that applies uniform pressure normal to a quadrilateral face. The element distributes energetically conjugate nodal forces to nodes shared with adjacent 3D brick or shell elements. Use with ``-ndm 3 -ndf 3`` or ``-ndf 6``. + +.. function:: element SurfaceLoad $eleTag $iNode $jNode $kNode $lNode $pressure + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in counter-clockwise order defining the loaded face + $pressure, |float|, pressure normal to the surface; outward positive and inward negative + +.. note:: + + 1. This element has no stiffness; it only applies equivalent nodal loads to connected structural elements. + + 2. Apply the load in a load pattern so pressure can vary between analysis steps. + + 3. A triangular variant ``TriSurfaceLoad`` is also available. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element SurfaceLoad 1 1 2 3 4 -10.0 + + 2. **Python Code** + + .. code-block:: python + + element('SurfaceLoad', 1, 1, 2, 3, 4, -10.0) + +Code developed by: Chris McGann, Pedro Arduino, and Peter Mackenzie-Helnwein, University of Washington diff --git a/source/user/manual/model/elements/Tri31.rst b/source/user/manual/model/elements/Tri31.rst new file mode 100644 index 00000000..ce30ffd5 --- /dev/null +++ b/source/user/manual/model/elements/Tri31.rst @@ -0,0 +1,45 @@ +.. _Tri31: + +Tri31 Element +^^^^^^^^^^^^^ + +This command constructs a constant-strain triangular element using three nodes and one integration point. The command name in OpenSees is ``Tri31`` or ``tri31``. Use with ``-ndm 2 -ndf 2``. + +.. function:: element Tri31 $eleTag $iNode $jNode $kNode $thick $type $matTag <$pressure $rho $b1 $b2> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode, |integer|, three nodes in counter-clockwise order + $thick, |float|, element thickness + $type, |string|, material formulation: ``PlaneStrain`` or ``PlaneStress`` + $matTag, |integer|, tag of an nD material + $pressure, |float|, surface pressure (optional; default 0.0) + $rho, |float|, element mass density per unit volume (optional; default 0.0) + $b1 $b2, |float|, constant body forces in the domain (optional; default 0.0) + +.. note:: + + 1. If all optional arguments are supplied, all four must be provided. + + 2. Consistent nodal loads are computed from pressure and body forces. + + 3. Valid :ref:`elementRecorder` queries include ``forces``, ``stresses``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element Tri31 1 1 2 3 1.0 PlaneStress 1 + + 2. **Python Code** + + .. code-block:: python + + element('Tri31', 1, 1, 2, 3, 1.0, 'PlaneStress', 1) + +Code developed by: Roozbeh G. Mikola, N. Sitar diff --git a/source/user/manual/model/elements/TripleFrictionPendulum.rst b/source/user/manual/model/elements/TripleFrictionPendulum.rst new file mode 100644 index 00000000..b68b481b --- /dev/null +++ b/source/user/manual/model/elements/TripleFrictionPendulum.rst @@ -0,0 +1,49 @@ +.. _TripleFrictionPendulum: + +TripleFrictionPendulum Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a triple friction pendulum bearing element using the series model of Dao et al. (2013). Three friction model objects define sliding behavior at the three active interfaces; four :ref:`uniaxialMaterial` objects define axial and rotational behavior. For the original geometry-based TFP element see :ref:`TripleFrictionPendulumBearing`. For heating effects see :ref:`TripleFrictionPendulumX`. + +.. function:: element TripleFrictionPendulum $eleTag $iNode $jNode $frnMdl1 $frnMdl2 $frnMdl3 $matP $matT $matMy $matMz $L1 $L2 $L3 $Ubar1 $Ubar2 $Ubar3 $W $Uy $Kvt $minFv $tol + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $frnMdl1 $frnMdl2 $frnMdl3, |integer|, tags of three friction models + $matP, |integer|, uniaxial material tag for axial behavior + $matT, |integer|, uniaxial material tag for torsion + $matMy $matMz, |integer|, uniaxial material tags for moments about local y and z + $L1 $L2 $L3, |float|, effective pendulum lengths for the three sliding interfaces + $Ubar1 $Ubar2 $Ubar3, |float|, displacement capacities at the three interfaces + $W, |float|, axial load on bearing + $Uy, |float|, yield displacement for shear behavior + $Kvt, |float|, vertical stiffness + $minFv, |float|, minimum vertical force for friction activation + $tol, |float|, convergence tolerance for internal equilibrium + +.. note:: + + 1. Use with ``-ndm 3 -ndf 6``. + + 2. P-Delta moments are transferred entirely to the concave sliding surface (iNode). + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element TripleFrictionPendulum 1 1 2 1 2 3 10 11 12 13 2.0 2.0 4.0 0.5 0.5 1.0 500.0 0.01 1.0e6 10.0 1.0e-8 + + 2. **Python Code** + + .. code-block:: python + + element('TripleFrictionPendulum', 1, 1, 2, 1, 2, 3, 10, 11, 12, 13, + 2.0, 2.0, 4.0, 0.5, 0.5, 1.0, 500.0, 0.01, 1.0e6, 10.0, 1.0e-8) + +Code developed by: Nhan Dao, University of Nevada, Reno diff --git a/source/user/manual/model/elements/TripleFrictionPendulumBearing.rst b/source/user/manual/model/elements/TripleFrictionPendulumBearing.rst new file mode 100644 index 00000000..b2bab917 --- /dev/null +++ b/source/user/manual/model/elements/TripleFrictionPendulumBearing.rst @@ -0,0 +1,44 @@ +.. _TripleFrictionPendulumBearing: + +TripleFrictionPendulumBearing Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs the original triple friction pendulum (TFP) bearing element of Becker and Mahin. It models four sliding interfaces with geometry and friction coefficients specified directly. For the series-model element of Dao et al. see :ref:`TripleFrictionPendulum`. For heating effects see :ref:`TripleFrictionPendulumX`. + +.. function:: element TFP $eleTag $iNode $jNode $R1 $R2 $R3 $R4 $D1 $D2 $D3 $D4 $d1 $d2 $d3 $d4 $mu1 $mu2 $mu3 $mu4 $h1 $h2 $h3 $h4 $H0 $colLoad <$K> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $R1 $R2 $R3 $R4, |float|, radii of inner bottom; inner top; outer bottom; outer top sliding surfaces + $D1 $D2 $D3 $D4, |float|, diameters of inner bottom; inner top; outer bottom; outer top sliding surfaces + $d1 $d2 $d3 $d4, |float|, diameters of inner bottom; inner top; outer bottom; outer top sliders + $mu1 $mu2 $mu3 $mu4, |float|, friction coefficients at the four sliding surfaces + $h1 $h2 $h3 $h4, |float|, heights from each sliding surface to bearing center + $H0, |float|, total height of bearing + $colLoad, |float|, initial axial load on bearing (used for first step only) + $K, |float|, vertical spring stiffness (optional; default 1.0e15) + +.. note:: + + Valid :ref:`elementRecorder` queries include ``force``, ``localForce``, ``basicForce``, ``localDisplacement``, ``basicDisplacement``, ``relativeDisp``, ``plasticDisp``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element TFP 1 1 2 12.0 12.0 88.0 88.0 12.0 12.0 44.0 44.0 8.0 8.0 12.5 12.5 0.02 0.02 0.09 0.12 3.0 3.0 4.5 4.5 12.5 45.0 + + 2. **Python Code** + + .. code-block:: python + + element('TFP', 1, 1, 2, 12.0, 12.0, 88.0, 88.0, 12.0, 12.0, 44.0, 44.0, + 8.0, 8.0, 12.5, 12.5, 0.02, 0.02, 0.09, 0.12, 3.0, 3.0, 4.5, 4.5, 12.5, 45.0) + +Code developed by: Tracy Becker, University of California, Berkeley diff --git a/source/user/manual/model/elements/TwentyEightNodeBrickUP.rst b/source/user/manual/model/elements/TwentyEightNodeBrickUP.rst new file mode 100644 index 00000000..e65027a6 --- /dev/null +++ b/source/user/manual/model/elements/TwentyEightNodeBrickUP.rst @@ -0,0 +1,41 @@ +.. _TwentyEightNodeBrickUP: + +TwentyEightNodeBrickUP Element +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a 20-node hexahedral element for coupled u-p analysis. Eight corner nodes have pore-pressure DOFs; twelve midside nodes carry solid displacement only. Use with ``-ndm 3``. The registered command name is ``20_8_BrickUP``. + +.. function:: element 20_8_BrickUP $eleTag $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8 $N9 $N10 $N11 $N12 $N13 $N14 $N15 $N16 $N17 $N18 $N19 $N20 $matTag $bulk $fmass $permX $permY $permZ <$bX $bY $bZ> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $N1 ... $N20, |integer|, twenty node tags in standard 20-node brick order + $matTag, |integer|, tag of a previously defined ND material + $bulk, |float|, combined undrained bulk modulus + $fmass, |float|, fluid mass density + $permX $permY $permZ, |float|, permeability in x; y; and z directions + $bX $bY $bZ, |float|, optional body-force components (default 0.0) + +.. note:: + + Valid :ref:`elementRecorder` queries include ``force``, ``stiffness``, and ``material $matNum ...``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element 20_8_BrickUP 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2.2e6 1000.0 1.0e-5 1.0e-5 1.0e-5 + + 2. **Python Code** + + .. code-block:: python + + element('20_8_BrickUP', 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 1, 2.2e6, 1000.0, 1.0e-5, 1.0e-5, 1.0e-5) + +Code developed by: Zhaohui Yang, UC San Diego diff --git a/source/user/manual/model/elements/VS3D4.rst b/source/user/manual/model/elements/VS3D4.rst new file mode 100644 index 00000000..6dd00f81 --- /dev/null +++ b/source/user/manual/model/elements/VS3D4.rst @@ -0,0 +1,43 @@ +.. _VS3D4: + +VS3D4 Element +^^^^^^^^^^^^^ + +This command constructs a four-node quadrilateral viscous-spring boundary element for absorbing and transmitting outgoing waves at solid domain boundaries. The element supports sensitivity analysis. Use with ``-ndm 3 -ndf 3``. + +.. function:: element VS3D4 $eleTag $iNode $jNode $kNode $lNode $E $G $rho $R <$alphaN $alphaT> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four boundary nodes in counter-clockwise order + $E, |float|, Young's modulus of the adjacent solid medium + $G, |float|, shear modulus of the adjacent solid medium + $rho, |float|, mass density (default 1.0) + $R, |float|, distance from the boundary to the domain of interest (default 1.0) + $alphaN, |float|, normal-wave correction factor (default 1.33) + $alphaT, |float|, tangential-wave correction factor (default 0.67) + +.. note:: + + 1. Intended for dam-foundation and other 3D wave-propagation models with artificial boundaries. + + 2. Valid :ref:`elementRecorder` queries include ``force`` and ``stiffness``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element VS3D4 1 1 2 3 4 3.0e10 1.2e10 2400.0 50.0 + + 2. **Python Code** + + .. code-block:: python + + element('VS3D4', 1, 1, 2, 3, 4, 3.0e10, 1.2e10, 2400.0, 50.0) + +Code developed by: Quan Gu, Yichao Gao, and Zhijian Qiu, Xiamen University diff --git a/source/user/manual/model/elements/YamamotoBiaxialHDR.rst b/source/user/manual/model/elements/YamamotoBiaxialHDR.rst new file mode 100644 index 00000000..490b0ca3 --- /dev/null +++ b/source/user/manual/model/elements/YamamotoBiaxialHDR.rst @@ -0,0 +1,41 @@ +.. _YamamotoBiaxialHDR: + +YamamotoBiaxialHDR Element +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a three-dimensional high damping rubber bearing element with biaxial shear springs distributed in the local y-z plane. Axial and rotational stiffness remain zero. Use with ``-ndm 3 -ndf 6``. + +.. function:: element YamamotoBiaxialHDR $eleTag $iNode $jNode $Tp $DDo $DDi $Hr <-coRS $cr $cs> <-orient <$x1 $x2 $x3> $yp1 $yp2 $yp3> <-mass $m> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode, |integer|, end nodes + $Tp, |integer|, number of rubber layers + $DDo, |float|, outer diameter + $DDi, |float|, inner diameter + $Hr, |float|, height of rubber layers + $cr $cs, |float|, coefficients for scragging model (``-coRS``; optional; default 1.0) + $m, |float|, element mass (optional; default 0.0) + +.. note:: + + Valid :ref:`elementRecorder` queries include ``globalForce``, ``localForce``, ``basicForce``, ``localDisplacement``, and ``basicDeformation``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element YamamotoBiaxialHDR 1 1 2 20 0.6 0.0 0.15 + + 2. **Python Code** + + .. code-block:: python + + element('YamamotoBiaxialHDR', 1, 1, 2, 20, 0.6, 0.0, 0.15) + +Code developed by: Masaru Kikuchi diff --git a/source/user/manual/model/elements/ZeroLengthContactASDimplex.png b/source/user/manual/model/elements/ZeroLengthContactASDimplex.png new file mode 100644 index 0000000000000000000000000000000000000000..f4978929d556e53308d13193c594aa7bf42fcabe GIT binary patch literal 20079 zcmY(qWmKF^ur-RiySqCCCc$BXyH0R-cMAj^oB+Yy9fG^NySoI}0Kx5>_niCPyY7!! zvqt*q?&|95s=aqds3=LJqmZCLK|!I*%1Ed|K|!9n1iUe@fwI^F!Cw6)B#s8cM{W#tM;mz>W~Sq0u_? zkJZ&e1;w1F!(rxru4q|kaHGNq2lXH=4b6tfIa)5Ut7lxj?vm#qN_#(yDN!glas$e! zlFTRS;1IK+pl|U)ycQB?;pO-);$4_WUe9X-7mxA#srC7!Ke}lBbgb8!0^yGCcysbHK5TfmQ_=}T?%|~>eKG&@ zD=Kp1uS_r+{+yN!iY_T>xmIt+631PX!j;+hHG8P>ufz}?X-;q@ZXGCmSuj6y*>R)D zIbnIda551*mOK*i0vRYBGUeG67%7c@zXL1h@87>@8O>z*@Z90m)crekt$QK#%hb+Cnpa&VJ#?qAO^CdpH5zfhmM>{56Gb^wXK1*7-d+hu-G-R5x zD)PjqS4Oj1tbHM`tuDV<2BlRa)1%a6mZV9>WTH^xJ!zL#OH42ucAc`!Xm~hM%7+J8 zN!qPve0_yrbFDEEg8|W3)!d1aB&>$ocykfS&Knx8X?r`O&p9YDAvI^InfmLF+G zqx^g1L?#FPa5GV;H>Rl$Z@8m9PMunKSX_sd>8E$chT74Q|C)JYsyp=p!4tSROmOBR z&j7&hRhN!imgBzv)`YIO7)|9c7yu9s8F>U?LdA(Qv}b?Rfim=Fy`a%-LqDk80| zP(3Bu+1r<@4Vp9MbNR$3_}y#yL+wHx-RT8}0MAp;v4<0?U=xUT9Bal_AdG_Cg)pB~w` zEL%}DBVz5z#NnGAvIvWN0%HBS0g`5n&VOE!SQD5fJU|VHcq<#RtC|)|EVvRYh-C0r zJa)W;pl435wQG}lo5F96ax1__m@yIRz=o-qjC+p~&6uwlX$CO6)oSCoN$;?qiy*uR zu1fVV_>o|3WrT-vyAEvq^h&WY1bHx$d@WGruwHWnNX>LR>VLK*oX+bWtcc=Z3TYNx z)T(G@TA);M9}ynzBt@FB8g;M2K=}E;A1!{;8}@`dHsa4Ihj+!qe3SyPHGN&3e4~sf zuxx9-a8;4m+ohw%Uss_VM9rlS3e$cnIWV-Hcuu-ONb=>HX|MOws zm>}S1!SanIMGLYFWHk)SNb}`KNc`-DY{i<6t3IiR?3>aKtFBT$-e$WHzf1kH$ zUp_m;z(*j5_mB&AZIkvnl(WTl$d~W3*gyT1-Bqd;!VqnjU#TO4ntYj;(M+k5t;g|i z{9}x@Vo7#nbC~!0u9EkwbV4<=pAVxqncT&#LQAr7t^`xTPag#kJ+c&i2W~lWv36ph%k&vL8}(Y$IaUE&~8hO=+aJ*>QWW zp^P=eeQw2LF7xfNRr_YzH&GAA+bYj38eouS!jTbx0@P6-wn!22+S&fYrf3UrEFUC!7meRfcJ%U{Z=n#@v zPuTt~lDg$EoA#ry3eI7A=Vf>rW`Oqu-2Tz%w>v9SR8RuG za_A%H1xs_NIE~PnANUz`V-)lcbIfKL?e7gucD^VdT=_jB`4O5P_V!ygT{Q z0PFJQT-khWd(^>rzEjA)CCXK8tugpcq~+8HwRf?LET^|%cuMs>f6@-|$+34@kwnjk zMTEW}g-$WM7VJXs6pWH+r+iR;pI@2HezKl38zB&x(R?}Y*^O49;ecLxo+8Ywn+Hmy zcT`XBHfwf?Wdc=;Dm+Ct)2F;njyzO!Gr49nXjDgZ->8$zf4fNe*wU66JoOvtG(vSD zc*x*JoCM?_fAWg(%`9(3nESaYu2G|bIL1n`K3_s>PUzo%uP;6(Twt~J1Epy4oz##1 z9sPZ)N#BA+Gy((fKp9(ZR%WtJr70IDc*xc9B;LP)k~(2rH)OwsU% zXh3L;zT(f{cg&`jLk(W=htSg8ef}}8o=wF5d7q9Pm@8(91uXE*N0*~nB9@`XN@P~2 z64%?&@mc00^agLYZnlvRvQ;Pa8=`oQ9B2$vc$kpO4f39c8(?sTWC4nG5Jk{ zHvk^*9YdM5H$Hfq^=@-1E-;Ql=Iy7d5s_uuPbKV%_@b`R$D zwz~CZCC-rKX`b6S26|x72E@u7+dHR;m`F6mZXcC@$~u47l2Wb*b`N16%Gqq zX)<{Uv!y`jOLg(~N2&xSt*7x#;AcMKPF`bCLI7Bg-q%llI#wziSglXyZW2-b% zvP3uMX`$#r$me~pv8FF-26H=+!8f-giZk9varor2P^Hvp!SZ+m{tx1owy_`4Icf@4 zP+&Et!*;8(Vmf9svre9%{idfdj3*a8hhZnHW4-w#ouj6PB!Xmvsh?>2=PL3nexc;# z$rHBa-niL{eRyMA)33UqH_6+Q=8{fbgi}r@En*hGP`0FIq_NAbm7GicG})t{kLnkc zzRdbMj3-0?$ZBM^hMALu^#%E5-@E1!hgE))F^OPVobL=?wT4%N*ORC_ajWzfVjQy4 zfUT|;@n+EJWtTOhCKTGdQ z*owQ;w`|>LhUHYYAbqZ0*R@Rj%rPnHxCfq$-{3)#yWy(3!B5{%r?ZAsQA5oTt75HQ z^i-a$;IU)p4eE2qoxPow@gSy~U=|JBbyWnACP>M!$cC@Ih{>>1bhGti$ZStHHs{!c zt&HsAph~W-p=_U>V*q2*@`Q8F#*iSTSqy#Y)3uF}6bRufJI&aZwmokz`Xrd+>IC zaLnTzIbVjJVySI)`I$3kj{ZiqfQGHX^x3<9n6f;-oT*wWa^{~2&(Ob@U zuc`puFLe)p0jYjqB%z&{m*>CNn=5D;)1#%rUW8C}H4=+2!6GWF8&q2~(K2L6ZB2hV z$PhIjJ2oZD08|1Ez%C+&>t_IaVR#K|zSu>`(CnS`&aDE%t5S6zz`u^B!2caV)AJ1!wPXbH-mo=P*1=wCdSUO#8wK(fBNLz>8x}V9o5)%Y z|CeJt*2uX(QGn&KzqO|Me$D>J%NBpY@ZO0=ExrbMT$;;T$=ulU+X+e?9CtR~;)Vr7 zUOdk3Vb|Jj3x#511&Ivzd@is`$Hp@B9s|CP;Q)?A~h?p)wjgIFy+iyPrH8;lo{e} zt~`~rCGs=yX$qD+b{rb{JhD+3 zevgpZ4QkV8IY%fL*XB~yYq04;$4dc7%TF#}V-xafwVyEAZ|2pLY3vA?lwjlGbkn*@ zWtn6)8kI~0!>rs(>A-j(Yd+u_J;za#7<>6Qx@B%*9^pz?stVL^cvf3mJ`9yLAp zC>Q*NG!Yz-ux!=jCE8Q@BxtqgmX*Jh?@lUBbUxSRgD+K)xT%4!wOy`haqL0@3(|@} zgb_S$JzzEC3@UDaKv46Dm1;6A>CX9_pn=Cqa%a4Z(2(a8=NK%MYnbs9mqTsgzA?Re zvH82bH)_|rGnRMC70}RkJ=TTLUQyCla9%*tcy)bU_2FmZK6jU2JYo`$tNu;dx%7I- z4G^ZR`5VXS((ZR}O1oOxk8-hydmh8H-@l;vcd8Bd?SX;tJLDBNX z0$cf{?lWc1M9w^D;R1v9p}TICp99Vrqx<_y0qG5Iy4n#KWAk=s#w`;oQ)=+NZKZ2& ziu+uYKlBZ%D}EPvF6^a5P~Qjh)nH+R+5QfsBx~Gir@NUk#(Y#VwUMj;GBuLRQAu63 zxS+{Y;M`Agf-lj6W7|8Zr_J0#vDFQYe)Y}pFeFg^n|rU1(9$8kuxMEZ%pAu8FKpZ# z2l!Q=T(`UX6TrpjYvVYuu)n4a;iP~xth(+niMa?Y`u-X6q!~LK55BGvR ztKG~7Q+>m7?ao9YMA5e$`Gmo@d6WmN4j*!2W>~QW`c#z?9s2XYlN2-$dtxW%@)(Pu(;LyO9 zhpSq(dhu&r-nV`!Nm!D$>&Y6B49cy}utjhgrD<0f9^rEq6=J~AR4KT9|?mRLT z^n<<|b(-+XSfLuRXGr|-ru5CW*S^31Fkv!bBC#4nT(=>*W;_Nl@wYi z+Rl#rXrxsaT%l{*J6-jsM%Vl$RE?k%to>J$KW{2brQ{nQ)jG(T7_I~w_}Lw}rq5HGMqxDzV(kNT;-N;IJ^uwYCeS zN&SwL%+0#a+j}>2)U;ZbM_5OZ+#hh(!<```Yd`k}Z{{UF?y>RZTCNE(P4OX55LKZI zeFV{F<^rlr;2m|^7dUx3)zOlEgGM%IhI#!XeuKGxS!KMv7YQx#{1}sR?q;lGpO|jU zuUnkX?v~7G$|rhEuiXCXsi82v)bz_D8j+Rl79N+70ZCktRPG=#G8ElL=^{hoiq0tJ z@lIE!|Fr763#EsALY#@UUXNKoVS$0?r^H#$X3&F)KsH7JJRr%ib#_fSxG z{3IbBavyI`>Dzj>L03LT*6_IX;^^$qP-28H;oFIFTBGI^!zqcjk@EzcA(9iVYE$YIX)3DtS1jM0t=qUahm#ZPN5}y`AKB_Z*FG$N($m!2 z;Of_H#W8Z-Q!$2Z%BE$kjd0pv!}NQQsKM#{(VIoDuE;)2q~dsx6gHthQY8aBU)M%q zKB;j-KoI=?;HP~MeS8}UzOyd~tYVi|iAHB-8;8L~of$%yFIUcunS8vC`c)YdQ}*ZZ z7qw1xc}SC_)UBZV^QRdW&Y>?geRT?45k1o3nV`3uLHXx`3oDlM^(4SWmyOGOc>)TW zvY0MjbTtgoWYH9MG$zpocHRV5FHvRc;VbtjDx@d)dEW)=#exutOkvNguD87JDBIO9 zX$uXfg}|)&<$?qUBLpHo>gU4Ll^!@M_XQC#L$9GnNUy$Jh7}c9<~n?{dHt45j`77! zUm1^w?6n0_f%AV;ruVP&OjE2*ST+|9S9)aXLfILP5!01!9jQy8xQD{#mmyE@Ue?oj)ZtNLT zv!ol6*kpKb@biol8ge@k5KT^L579A>hM4W_unTLUGIzp~k>hXYixT8qA8INnK9WXjCM8#4?>w~(0Ix#Rs48+=5xQ`PP<7u zmx)@2PqX(uYqZ#Jll#baFSRRseU2ELN}C_mMf2n%b9D^wM+{Bnk;N>z8M&IL7MEuj?Wo`qpeyPT+T?=MEoxnK`PY#M2c{(yNgM?BAhaS`Cr&yc*`SLW0 zFnodpEhC*fG3w)9`V!5TWOjw|qlfT`)AOEdb_UfQM=^%lo`zFJU^0q$#bHOY!)Af3 z`sbCEk|{BK-x~-t{KN|xK?M3KE_c;)YFr&QHg;Omn`fd0=i1jay^Sq=*7GTl@a^p1 zurOIU$bKm$NxrT!*?O{?2w(aSuN`P=EfItbL32GNQt>B zo_DEyV7^IdnpM+h@(Wg>LdqAl*IPUGTUpTODxH18G-i9qhQnp7RxJP|F#pA~upU5T z;GWLj&|%>kdfqW&N+8SaWL#S@;uDN-+uvWg?)HNCYEd7JFXNSYI7N+gWQ9let+&_sUZHql(KP zx=d$xHUuv&wz^u9@Vn5ht`2St4uO~&IJ+K!O8u*~ri>TDUO&^{K$06dqC-nC-Sg44 zVi^_-OO#uPF!+f+6!iTA<*N|GbFQJ1(q$dPT*7FQf zpSc)v7t#UtEU~TAZSK7&QQUy8N5hjjD^^N>tN=tAKch-SjJ8ihhw*V}E9lYHVEAlN zehYaqGWY+ojj%^Rr? zy5WIK#!pPj$;nZmz=uO}?*8v=R$R9-y&AB$VIS+lmg?BPCrrFwHWG z9P8ImG(0>!iL>SE5|4{D*>O2l&>PrD?arFIh^Eio-tLfNOMc2>b<6vETV11h;NOg~ zRGhB9xpa2CZ{i29!UNOOQ8@)?{RW$n5?P=a0HCZk008*EBwTkQI})VhGU$Wgy<-z# z9C^ASk_%ByMtE^R>PqlsF?S$YSUk{ezTDof)C3Je!Q6uJ2}~ozW@9uRm^E3XNdPVI zjgD&ACDFwFkR@UunuxUTG>F$9)GRZtXRYm=MqF8wT8Mz_ zR*tG##l#fX!bH6va>=DCj!81mZ1ab%$WP8@cF&);sb(D$j2N;}# zP^|fYKc^&vLh8(y2;um~5AVV!c27qf@{#)-Q4&_p)f_Z)1C0237r*+B=_3W5)dmuM zb2*?CBAAm!+UTFW+QKFm@D05ow6_p+>jS-Ja&xcrnc$Ezk-{}MBZ*IYm=)Sq(Q6sj z^fibDj)F!}nA%TD1QkFwDA$C)Fd0|t+h=y(6}R8+)sefD6ySc)rtZVl7SIAC$3Ky) zSRLaR*mmc_YF`|4(pZ;Tooqfkg{tHnFARyP4JbW@C-n<|6 zx7yqQ_kr3SB@$G39d}b|X0EEXOh;^;_WkOSi4!#^ra_s%sMBUIbGwvj=efG#Hahy(*Rz7MP63wanRxytXX>wPCk48 zH7<{WCzCkBGtXuooH{eg35FuVeo7t~T_X7jk25)k;ko$;02qb)&)Zh$;Iyw;oIY}+ z8`{I1h~wSL;hC{&oD|T{tuX#$64lGpxOM7Vq|JO79ZVAv|3;0|@u_I&n8U}tn57b- z5Y9Te{aga`(#M6)s>sk&OVe(57U;Jt$9;bvYWnjrdyj91LkjT?H5fuHzp@59+&Tl# zM~cTZ6qH<3+XYJ&F~KLKUZuUwZ=8mzVN-v~a;I}3wJv}5VFFwa{RZtmCbhVhQK|%- zeN?EZaf(QeDWptdr>5!Q`KP?xUPo6XD-gXrrH%}Fyvbry@M{TKHDfQSIa zCSUN@W|uFBKS_6@6TA~_PGoA78WI4fN*7s9B?TtdYiUHl@(Y5a%3~zC6zr&=7iuaQig^)iVH~&sP5YrR3L*bNqgynJ ztucx)v$|TL=i2RD5DXofqxYL?JXLSh&uppEkG)3%T-*^jX)(OFc})=Nld9(k(*jNq zV5Tlc@wc7>Z?3YbgDEbiiKZ6It+bnelk-$d!>+MoB0fI}S+B-aoGF^PJb``Sr<>Ba zp&n}RL!gT^DQV)<@%qYRtPQT};Ag~?r-431d;+iMkje#|&&o@71O52cr>~oNA9M%<(9PS5~Qu?J=IhSJB7ps*9JPDBQ+(UXqiOTaWZu zER;Q2elf?xDXh_W*Z*?RyLLj$6Sg(?px4d{r#*RlKx}HiLnD|gxDf1uKOmSE0$qd| zCEpZ1mGPMs{c`(UfAgy2OBekk6S#<{z%V0aJ!Q%X#hE;9>EJks7^uloS zA&R(uQtM(c1R$s-v={XVXc|5qpYkPHu?IJ55;8V50W|*KthT^C`N_AgPYrqF#c^bV z+P`hH!!2FrA&xV|NQJ&Q&dGP2M?8Q$(Bs0*G6a6c2P`YZ6@hfk&ffuRE8#W%hPh+j|!dw+P-|O#Q0jA{28(D{smaf5Fh7RXtoKNi#%*{R<4pD|Q!5WYxe$ zE=Kb=?eeeR+qYWtuhv5W02w9;Nzs(2R7!3|$KMdK$z`0ZRBjEV)C?A3(gj(bu2<9! zHr2`!fQx7nml7I3Nfr6ONPW=zY9o#LHdHwi&m+_(LQ&UEC%}v~%xq_JV|Xd&D^}e9 zFE(NC45>IZjRTLADMX02TYsb{yfpDkNFB#i!~g}5cGEx2GZvprJ_<-TC}(XYdmcT0=HwNWWo*{$9nc#?zTR)G{MU8+euf(!r8R z1c;5KPLMc|hTO#0kWYP$;R=U<+*iIlUFJXS?G&Vp1BV~3wr;PqKL2Sg_>Q)|;zrOn z8a_lXGM_;_f6!^Yh|lUZUoQD0K5Z_2y1^#l`Rk`I?G`7W{loM>!0o}VK6pu;fpDUz zy$&X#)N6E-3{L_1b1bYz7xuA}=nlncJml*K6lJ{~TEa%4%zc+GUHL z^uF$H@`QE%D61R+0K)T}x|DCA39;;B<4a5Hv}MpYsZEPZ%|(8H8O`A&MJM0jsq=7G zPH1XU&@m2db~F&B+%C$Sto>LjUK(hgL54CH*%)Ftkv;xrG2|ss{4As6Ac9+i9Nev(aGOM5l&5&S z9d+)Gcl}i=5X_xza8k4S)U^4`kN+ItBAU%4LW*7VIjW`cPlxK_H@n!>YrF_<36gJ& zrmZ_~Ln(M|4iFpsm!!?~vMc1r#H_Ng{e3=&DtRaOuf^QBtu`hl)zcy~ed1+v_xThw zaat422sDvXao~h|_}Yp+XH$tC0u9kJ*~&sPp+D-W$&+W;Y5j|{R*~bC_{n1z<3~Y^ z?k}5nE;Fk3zP5E(|13=&=y!AJuV^;&C={TZLulLwY~m!!V4|=Ii;_`+JJ0#L958cB zXgHy>LkO2N5WrsjDjPj!X=tdhnd^^ylW+FrR}fj9y{Lt;)lx^@I6^kz#@ByVz}nwS zRmOV=tqv`vjckM_%;bD%qPLH}8Z+cP+)&E!hM;ZaRx$ztsm_&wUhv(FxE zK;trv$9qD;4|dCw5bT6pWMQ{%5#b@wlN}a=uuqyduo6l3!&R9I!}3 z`2wc<5_Fq^ClAG6?IS_QO1cmF%PB>4d;~=`8b40HaJ?JPvw_Q!y6+*cfWl}k z8ZQS}w=kThx;;z-!3MlOwy{nt%*GEftb1UyAZCuof>6Lytk7q9I72NaZXL$ya2C|r`%+60G#14fYl4ef z$Ic&b>23F^3f@tkxe(5fLDqMC4?kHhDJR1st>z8KZ@p#SwLS4(3-}WmA;9EJN3d~4 zr&lSCAW>BNrquhc9+OZS{#uY>H@Atfz5ET_(dxsVO2SKGroMNZ-M~pjr}{@1Q~)vO z6+gpdVb-@R{F^7XJ^S zl`1r}Sio}MTu2*t>E13sKj(FtvapG(QnwSfo5*B0Ak?sylJiynG^%H)!4A%MP?2gi z7eTjT{I>;kdcUklsV@C`bghxA!Kl;qv>~ml3#zKo=(68no}cJ{$Vq;B9!_CC$4V%% z1IC?nN+a2vvf-y*tx;S+eHE+BYp+=9gQ=-&@e*S;Y*ABZZKB4!Ex(#z{{88_uVYqllB zJz@#;BDxF{H}v!US=rcyZEr_{8b4oN+k?Uy&!kcr{W9VXz2MuE_>v9)l*)(To31p` zw+5ny2NV+&niJ9T{c$~5`s?Y49TbSUjiOBhN2zk5WWhmA3MLxTbKVY7kn3ylc;)C2 z^sC!Oz_QbkR9^kNM3Cbw9P zOGVH!LOR9RQ6Sd9T1{G>QdKWeb2~6@qwFwhHwtPA5fA9w>-wRCgg2rLyhIwMfrH zU|(UgR?_8bcgrf_HW^~vvFS7SErAYusSO|^Vb>6=sF(zjSC0OsVWxk4pm!p@J}zn% zxlpk(6W#VktU~P`dkH`nS_g^`inu?$LYp&A5GTw4DmvrqK-f5t%Y_m}dGhfa>ee+y zZ&Ee=v|CTskPa}>)R=nYe8{!eH3$r*62K!4pbw+lPX-#v?(!2SBZ?d6@lX;JFG98n z^5}W;rg=~PCbQ4vD#@>c077PayC1kgc2D~@rm*tjf;JQf3|0*mY;lWrR{CW-FiQ@* zv|lidprKy{&ndi-0^t!vmefLS)LW_H(mre)NEqPqp!Cid-f7@2{eV7&VtF>3noRV$ zB9!>4dw;-UPb5>~8iuSwmK9<6AfBBA-BtU4L+T5;XMd&dG3sK_-w`EU3}n=r4#1k0 zD+p^V^(5GWk@l8rTw#iDf(J-+@MwcynCYsqTE2yHX!vr!lEz7wya^vSp;VyADKs|W znCL_I9|dniH#oE9>V(Tga7(-ive!O}^w#vrNp(4H@%@>geaLy%sJfH0Hce1R>QcR) ztf)GZXXDyJTS{C@AwP1Gk48>ZvEy*|{pFDN1&gw8(D18_6me?OE&_taew|+$*Sw+mGC!V`8=P>rag(xq2pQScWz6UC9d4 zMJj^%hQ(nF44=LYEQ+c0w__LxDc>+vvj9ODLE7Ey_5eH6`C0!_eMQm?0^r|Wur1d1 zX6Yjoec*+!`bbZh2?AyPbwIk}Ih{!}Iw?^?h!LZzt_|Ecs^6L@LjM_buV>4m6MAhy zNs#_>GfiZz^-R6dXtZqF>#s;pH2JEO<$?cRcqoyJJ_7!zcIUZ z(Q$>@q20Zh>zW%2)g4S>9jIUqHbYAB;Z)9*r4hEj-(QgA>lT|y0z(hsAS zAf=HcCy-%<8-4^a7^oqs_y%RQ`g$@s!w$zW$xWRt>iuZcmxDeJclov~u6`K24{UMK z@q{Bp4LW%=qJ_{XP>=k2L~b&goV@Dr8R#k_Ol?XEKk$QAa7~nKYvPc4_9RsW%Lz4V z3Xm%BnNf4(6gbXN4+sdzeh?y<=CX!EoPHcmoHWC_Q@70kS)jP7R{Rp1XK@$jpsBVt z?d@_?@S@p?_kU2~uX&>`2)J<9BwF|~&R&sViM^J%dSJr|QVtB8-hyFY76|ro1h-!b z*`?)I+k^1)S%1F7_3iLws1DvaPCAu$WTF#g+f9xAnej(R+fg!Z$<86w2NK~3H&eyl zVATA-lX+$;ssMvdA9_dU%d<22y(4(=To7rXjicluRv3D9V&@H@|XAU@L2d?#)67ppex6dgn~jT z7y&)MHyBYpM2v|OZH`M)9u)*Trl#>Qj3-`(ftOG#P)pOEm6U`4(z1YBnRXomAeBi383o-OJ?d*BT;b(W8-Dekx|rz|k@nZSX{ELzV!o#R*6l#G)@? zj4ps3@Qn+kOByPxp=F!~O}*^Std*T@HA>;n`>=f9XF^mD#!n{RNtQ2hoXV2dLamTb z`PW)(WeK?;fXT}Csi&Z2szA_(*BI7<_d%K`Wlb@`c!B^j7qQ>Kw!-_gPnKgs6^{Wg zyYDF0kef2UG$1HFgSHXa96{qb588ZEHx7eBh$#X1C%C)2yQAB6DRcKJ@|g(Y7b(H1 zYweJmMEwallL2@h9*N5p4HLs_?UtC5Qc`Mzk@%yal8}7pahr)$?){@9#;ax1HJ|mi zEQB?)$unY~TcFCRW$a~vHyJ`|{(SEz>eB8g|dR8+9447;<}8f~TPEhc}Bm3y>z{dt&Ry^S92FXFct0tW>1wo22sxx$m{m>^u5R`h-vsplO-+D5du zdlg)gCv`Jw_t4=p(Mtto&HPSBOR$6J6~6XubrcKR9*(1V(IwF+qn2T=C{CPdMvg64 z%HOwH1US1qEz}Cm`!tXETqr=vdDVnWB^Q8mt0K4&HMta`A<($hOI_LnNSQd9em``p zrEfy4p}uz?a?gqw!Z!FEqMf|@j=#!U_idX@mB9%{B2BqQ84S@Gfd?i2s2*p1|0A$G z?R9xf(LRF2E0AR5Kp|krAU!V-8UdkM6{0hR+ZfF(wgC>GIT5V?=n|FjDIh&8nMA`t z&}${Y1j&ojY^p(8pFy_#yl-Z<4P5TD>ye5=d*%~$Wp&_4ERWv4L0G4E)S z5*WQGl3ELd4D9-F>*9?1kHDg9E0Nd8y?&v>&*6`ngvXRPEH*9$wLX+6S+3!xYD{ge zy7u)ddCNq6ACAIqEPv`D3h=ZR7le6S zGhY9H`RZ*o?NA)^Ddl0?h(dl3 zq-Tx$N`0a>lR2>z!EgVD7ICRl#e}~i4L7GM2SG?(IySO{2fO~tTI=o5PF2uxP+T(5 zW9(Dt6B1-zvP1LI4_C2g8l0Oa!Ge&S4umY8h6%Y0g@Xn$*(hYPU%Y&BK$pwY*)z#c zxnOiSW^6QEPDsnqp{Bw4%jz^h-_zyf_!!E6Z4e-BR-Y`zUQ*Txloykq$Z&&rkv79^ zLnGipT2edLZ|!xaOipqc*_J zL1*s%d?=TS3As_#^mS8#5azyw%gQtuFbTOvG=Ky-(`uX&DXX$0IoJitmuw{`5nrn^ zPpm$Y5W#xgGTXeTGBNKY6_q&PZa;ZcDGzBvcyn;+@IQ2o8`OyeF3}*2OQbZu+|Kn$ z`H~1XO3A`WOadM`ehVUDp_CaUqx_iUs;J_bR@0Zn`W0-#&+e6n#ERO`lNgz+yZ^sj zFL+_O4Z7E={Vz6!}Ds+VY*f{24|)WKg&18WT+r*J&ll!HdQ zKIMUembUtzraCUm8jYm%v9yCdNE)!7Tl8YzuAoQ!i`|f#ZP#@TIHE~S4qibvuEc^Y z(*E7}k;ZHNDG=F@aax&jO&swvd&)3n-w*=s5j$y4xoAtwrY{0+WlrJ3q_zSr9JG)^ zeAQ3*p*BdQlvvpLUX@&mzEtbM02mgDwnsVR<~eP+O8IfxwT>z0`#zb0=W*kGgkL8+ z0-%1X?a@N4tWgLEq932P6y;4EPJzLkeUFhpaMoKXmdPX2Mzo%@96SGP8r&au5Eguk ze-{C{mq)qD3GP`VVWxv6AR33*jC;1Q$GWQW?vwO5S!GL2VjXI>>#Z^OQHkeVA&)*%@uP1b{LsyRGfbR<_c1c}V*=p&UgYD!ooi+bAr;N&E^{qP zY1dMaxRGXi-26U!h8fKBAMj!N`jE9WuC&#=$NGl(l``uR=Dv+1^ z$gH+|1lGy%*87v%=<;KtJCG$Q*eIGgc}&iEZh5r7qk6(0u^d-j=H^4;D#FI|aW)eX z-$JxM*xsb~Kg#s7Fy5H`YwPy%=R5gMc%%;GScrFO^XYVS*x}`qJt$O5eUJlBR-sU%z555JrS=Brht00yBGm*&9_2f@E59zljQ5e;)bBwQB+BQ{8I$q$ zwrZpewbu0er9!3?7!Yz>@|J2JRO&z6md1%drhrXc#%Y|+TG)=|U}|as2~m|n0s0xh zL(D6Sl_9At(4@WH1RSK5X06X@jr2Gp+6dA8VNxCNbI2<*-48z1XjO=iM~l4Lu**x} zx4Q5PZu@6jh$Fvh2~vySM03kRA`EE!e~?2@$94GJ3@V83pyH^f z_`oye@xfyeA_f8d&WU3Ndg(MGLlh3icp-B>bsj^d{~WiEP5*uiG1B2{19CAyv9g8E z{(T+oNBkqWtnBKt4M0?^ew_qD_yFrgsZe}^{(+tY_2El}vrU?_#!soBs#wPute~bE z2!M_Q>5>7Xi8I67@h;I=8|ZKx!wTt_lM3!A&1`5NA5>q*ktkBniqHH4&vzmyuB|Af zLUX$}O6xKjFRg7XlEgPJh2^ms33`mY!Dp|k9E!dBh|bfmI8-a=J+Xq+Rb%DX|BImC zG87|YelMt;k%fRC=Sh|dbw+cGb<5LPg(a9*vy)Nc`(ad-c!OMwym?`h=FKnv zu(mOlTjmhGZaTzH4zderLRd`ZifhETi|QQILRaaBnO*;H%oRgN%@hT53Tw^>2D^2J zA*`Jv9bh9k;O;TF~6^Xol z*)D_}92tk2Pp!m@c5|}Y=Fy6?E>??5ZZ;nPA3PGaSViQ9TH^n(vqK1WRve>fNNqJg zQS5_bQipQ37xC5Y3b5tRKc%---r;wPaDYFS=0I};p$nL4gbvBNhad7IZyXJT6bWH4 zm@Fmk-pPV~Cuuy7UnSv_AMce(K0HWV9TVR_<7bI>eFPKYd!%zkzQ2F9zWv*$^71Bdpu&5RX$s-oiW1m8J9StCk?(Sl@HG7Nxnjq? z6(?kh{rb=Drr=F&fBsEY{;n$UvmOE2daVIJkMRFsca;U0*{Ek9Mf!5z*;-Mw>GpHu zLg24by^QNnP$R|Y4OJ-*WR?O|{WztctF%Z2zMEkxUe1OHfNl##?pRbify~xY+e>4@ z?h0p%zjP8kORoI^xk(9#^EumIs?`Dq*3%^V!&8Prc4ZOD7U?sRpBoWg?_Bw9F3;pD zN-$Eycckb)Me-Ti+)6r-Y&JD@Ob@O8DNSopzA|J{8As8!*1AofO~goCNz9%s3rxXv zf60TpE7OhF@z0hQlA>7S{rr3=K8~`wzg^>b0epJ=@o}3swT+htn~|)luPjJxsVjuw zcbxyF_Itf=S2sb^vMAwK7!P|K|L+Lilnp8r3oRsk?0*zCZIcSy;MHfE=&b@NvT|Y9 z%f2oK?QIv8WH*kFbw54eoE+F1k3h1eL0490!xRe9+kwJxH|j?*xIje{JF7=n z*XnwuG|FIpfgQ9oMI`GQ_Rd@x!-RS?lZ?Oc&Wf2X+(O&=<61$RUZBermYp22S`2Z| zaXn=c3pBtwmfanGPJ?2^H$}2y;3#gb&3nlC^vD7p_f;yJH%}aHS!pC&|E)s-*uP!G z9CJR;1>cNzey~^y6yMoUf2Pp*`QH2!;q{&#-teoXaek$@d-Y4jk@BGJTJZZx?1n6P z%}j1cbr!M;2n!J{4?^iMS^RL{MtC4A5ykd$QF%co5&Ut zX$)l;Mr4_h7?XsdFp@pXsELd)$TpEBd)AmREygZe7(^nwWE=bPKI(nn>-X<-u5-?F z&V8DztnKa-3`8tNl*h|@uZeqHn9h&Qwkxh=9? zz)f$&)8|3@2kiaJ9->~!rSa_2>=N>6+JRTkf%`L$yC6)82dqiv^I=360-(Mj&-;8}ECZQ5r5t#yXFW^~{sQD!2*s zth!stBO@<%-r}jdOOH?~Ws@=Q*4wdfujR^K9B#mBJU97_aX@)FgP{0PW}A~7ZH<^x zcEjgG^vl^X?-XAE@>lOKmFSf2?AOJ!m9JVVmhh6T;EaHk{Bj|s*em(Hj}3x0Q$_L_ zAf;-DoCULf(*+$`)B8`BKaqJEx4aFKgZH)^%c`PVO{#^o=j2kPjxEgco#Tb2uI);f z`F)M@?)xSREO2A*40+v(!V$kI3+lKKx)Pa{6U8zpL4I26Oq+b<*YGY8m%k)q7?hd$=+ z?l)UY&rwp@TGtN+sqq$q62h!=P_C?o7Cihz$}&C?aVI)#){oan-LjC&?U|X(sOz+P zH(5_C+)-*%=iREhGjZP*Y*Haj!Sfq5CRY-RU0=^_gbDz{FrPRAhZm@R@4%F?cNHVum(VMi!&?)R3lUjJRLL z-|~{X!<0|j5t6y1i+qshg{QuS_io6Xw{nvmq^>hKhN~0`KXq2AocL8uIi4{h&c!63 zV!(|?3VCcVBPX8TyY^js8rWf0GvaDHUw2+!wxB_L;L@s|=geoz1%2Vxztx?0n@4v> z9K=Z=P~yuYg~wuJa?GW8V$H3LThy@F%dig*ipcy9?>A$gy1s&9=TJOx*Rgl|^DcES zw@jHQ8CVkPPCDshiTNnx0~f@?a30a|T>a^tPTkY4a754ct&HY{>^Mq#*6Ou^tldtx zvnIbe>hXr6wASX06mNW9_k{ckW53A|=3wHJYek>^t?XDjv4RsT9gB7yda5}ib|JS)AMX6jjqcUz=wwbVi z`sLa2{8{rwE(`fF=ls56&Q7Y|8wi|zXO|O+W+YZdQQ#mtombr&@mmiZXkAJq69=IeEuTh5n%xr()H_WOPJf> z_iQC0M1$DL_UK$DCx>L~46X;)$C-&!^J!3&_~>*Hqkzk}ueAbS&I zuK#4ivRNJB^jlvqE=B#KC3_#ednq8R8>Qx{(ms7ktB~b`>rDVBzxnw%NUdRgIv7yG zF$Ek#F4*=xr_uKMi1j)x0hy>&DD=^2e%8)XQky?95%^hBYgwWP?|PqVW!DSq@_KFO zseIJ#`h_H-xP{&_8gFhz5KN`l!X~{SJXAt5UCdJ0pUuQ#$%}2Ac?{)s`B+TjoA0`H zs3F7yAz8B0*CobP6@MTpC(PgE4y~~Xzz1Iq9m!j={wi-}YIhG!<27{Y43OZH zUH}s>q^V11`G!^kccWudaGEad_v}%%OR*mO+CVa5{Hyp`uED0%n>A5qRwWI7;wn;p zU2D$~LruqVHzhSfvlZ_==$p_Jf0Q;L$Hqu2Gg{aa3~>(GvU$=<7hfLyA~FKA42kL< zdaI_CM(Vnl?}5lL)5*={m5&gpm@s{1CAfavB?{xsNOR$y;j>FP>SMjQEsPE(e99bZ zJp(ao_Yo?`k#9k>FPDCU3^;3dkxwR=EmlM*^^wZ#ZdAJ+QR+O-;jYi;c}CPhnjYUD z5)>;5jSDgPsDUD9zKsx-qG^~aaP}ySntq&Zn)#8nKd>T2TvgN{(F4ixX%zu8G4qe@ zpq>cL=LvXxBWpPE`7nfK5VM^s?MM;xH(RI?s#6XBR_AX_2_HPIQ?*o5J0k7(sVEaO zTW-1}Gkk0nKEEvd>$WmNlBa)Te+U$dltlh3HvlzP!{|+ zkI7_ad&?rL;A-rZ@l?rQHNM5s9gfFaT$srMv|Ac5_oiUo|~2b?%Wgmz<3~*XVta}tOp$8P!%9RYWp!UYD+2K6%#u)wYJ;Y z*eC%xv*Bu$2&e0cgD6qr%3HH94>{TVNUpu-Ge_szyFbG@^Gw`KL~u2}Wrq23=0((- zwyB#HZX6E18t%<$Qe1WAr$tglQ!iJlnd?4Mhs)zib-9lyxfZ%jgV%A60?MQ9`3VRq zoRgh5cH38~z1*4Q;SjqIRiRf0phShc^~1smP)VHAw1?ti^g|Q_3re&I5aWmkKt5a% z8kWVU6r`)BW|S&9OXdMDp0Y3L$wQ(QBL&NF{!}TKY_5Le{ATxoM!^Z{a+2*ungoR4j=Af zG^_sUmT&3zCz)e??E<9D1*6^bO>8|I_|759V2`A$HEg>g>0LSZmKh685Iq9rui zI(=MYH)-?J(yok3=ye5(aH-#c-Y zY=Is*yD>w`8oB__G&mi`1EZ8AB;Cf0h{lW@T5_qzS(ARJv3n&m8HpjO^9alF$?>6Ag z08bq>jPvAjv%{5x+Ay4IyWswVkJ3~)y4Y40%qt7jB!B%|6ZUCHt(g3OMa5;1F2WzO zQ}}xMd@!Jy2uQ-Jy|;avHoj0Pw=~_G*35?Je?B8S-<4FqDNb)FpM~f|f95OR_%ppR zBy+RyE4LNh?G6Jz;nQIS@s93*01QajQ@s(6#76I;-}it>#PP<#qlAjT6Cc^|ZxO{+ zI9W!gvthDUN$kMV0;yUqr^1U8RXQiWkUU$SVKL)UEG>q%lLre@AQnvs`Yq*>Lp0b| zg^Pt!&#*Z03_Sp(ZlDN|tGCyI{>bvvA0GOB{%bZx7?3Xs+`GO3sM49Rc`%ZO%z--W zWNoimxWmzEcY=*hIJzwq8LClt2e4M;%d4wF*}>Cd7O%Kbz$0;oV0y;7MLKpN{{d)) B(gFYg literal 0 HcmV?d00001 diff --git a/source/user/manual/model/elements/bbarBrickUP.rst b/source/user/manual/model/elements/bbarBrickUP.rst new file mode 100644 index 00000000..f3cbaaf2 --- /dev/null +++ b/source/user/manual/model/elements/bbarBrickUP.rst @@ -0,0 +1,40 @@ +.. _bbarBrickUP: + +bbarBrickUP Element +^^^^^^^^^^^^^^^^^^^ + +This command constructs an eight-node brick element with the B-bar method for coupled u-p analysis of saturated porous media. Use with ``-ndm 3 -ndf 4``. + +.. function:: element bbarBrickUP $eleTag $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8 $matTag $bulk $fmass $permX $permY $permZ <$bX $bY $bZ> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $N1 $N2 $N3 $N4 $N5 $N6 $N7 $N8, |integer|, eight node tags in standard brick order + $matTag, |integer|, tag of a previously defined ND material + $bulk, |float|, combined undrained bulk modulus + $fmass, |float|, fluid mass density + $permX $permY $permZ, |float|, permeability in x; y; and z directions + $bX $bY $bZ, |float|, optional body-force components (default 0.0) + +.. note:: + + For the standard formulation without B-bar see :ref:`BrickUP`. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element bbarBrickUP 1 1 2 3 4 5 6 7 8 1 2.2e6 1000.0 1.0e-5 1.0e-5 1.0e-5 + + 2. **Python Code** + + .. code-block:: python + + element('bbarBrickUP', 1, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2.2e6, 1000.0, 1.0e-5, 1.0e-5, 1.0e-5) + +Code developed by: Zhaohui Yang, UC San Diego diff --git a/source/user/manual/model/elements/bbarQuadUP.rst b/source/user/manual/model/elements/bbarQuadUP.rst new file mode 100644 index 00000000..7616cfe9 --- /dev/null +++ b/source/user/manual/model/elements/bbarQuadUP.rst @@ -0,0 +1,42 @@ +.. _bbarQuadUP: + +bbarQuadUP Element +^^^^^^^^^^^^^^^^^^ + +This command constructs a four-node plane-strain quadrilateral element with the B-bar method to mitigate volumetric locking in coupled u-p analysis. Use with ``-ndm 2 -ndf 3``. + +.. function:: element bbarQuadUP $eleTag $iNode $jNode $kNode $lNode $thick $matTag $bulk $fmass $hPerm $vPerm <$b1 $b2 $t> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $eleTag, |integer|, unique element tag + $iNode $jNode $kNode $lNode, |integer|, four nodes in counter-clockwise order + $thick, |float|, element thickness + $matTag, |integer|, tag of a previously defined ND material + $bulk, |float|, combined undrained bulk modulus + $fmass, |float|, fluid mass density + $hPerm $vPerm, |float|, permeability in horizontal and vertical directions + $b1 $b2, |float|, optional body-force components (default 0.0) + $t, |float|, optional uniform normal traction (default 0.0) + +.. note:: + + For the standard formulation without B-bar see :ref:`FourNodeQuadUP`. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + element bbarQuadUP 1 1 2 3 4 1.0 1 2.2e6 1000.0 1.0e-5 1.0e-5 + + 2. **Python Code** + + .. code-block:: python + + element('bbarQuadUP', 1, 1, 2, 3, 4, 1.0, 1, 2.2e6, 1000.0, 1.0e-5, 1.0e-5) + +Code developed by: Zhaohui Yang, UC San Diego diff --git a/source/user/manual/model/elements/figures/SFI_MVLEM/SFI_MVLEM_3D_formulation.jpg b/source/user/manual/model/elements/figures/SFI_MVLEM/SFI_MVLEM_3D_formulation.jpg new file mode 100644 index 0000000000000000000000000000000000000000..565f01c0fd00cc9d5580de53b9fe4007ee09df6b GIT binary patch literal 216280 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

L`7# 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 dHBD=-NciJiJZ;JU$?xR <-rayleigh $alphaM $betaK $betaKinit $betaKcomm> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $regTag, |integer|, unique region tag + -ele, |string|, flag followed by a list of element tags + -eleOnly, |string|, same as ``-ele`` but connected nodes are not included + -eleRange, |string|, flag followed by $startEle and $endEle + -eleOnlyRange, |string|, element range with ``-eleOnly`` behavior + -node, |string|, flag followed by a list of node tags + -nodeOnly, |string|, same as ``-node`` but connected elements are not included + -nodeRange, |string|, flag followed by $startNode and $endNode + -nodeOnlyRange, |string|, node range with ``-nodeOnly`` behavior + -rayleigh, |string|, "flag followed by Rayleigh damping factors: $alphaM $betaK $betaKinit $betaKcomm" + +.. note:: + + The user cannot define a region using both element and node selection flags in the same command. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + region 1 -ele 1 5 -eleRange 10 15 + region 2 -node 2 4 6 -nodeRange 9 12 -rayleigh 0.0 0.01 0.0 0.0 + + 2. **Python Code** + + .. code-block:: python + + ops.region(1, '-ele', 1, 5, '-eleRange', 10, 15) + ops.region(2, '-node', 2, 4, 6, '-nodeRange', 9, 12, '-rayleigh', 0.0, 0.01, 0.0, 0.0) + +Code Developed by: |fmk| diff --git a/source/user/manual/output/DriftRecorder.rst b/source/user/manual/output/DriftRecorder.rst new file mode 100644 index 00000000..cd99bd9d --- /dev/null +++ b/source/user/manual/output/DriftRecorder.rst @@ -0,0 +1,52 @@ +.. _driftRecorder: + +Drift Recorder +^^^^^^^^^^^^^^ + +The Drift recorder records the displacement drift between pairs of nodes. Drift is computed as the relative displacement along a specified degree of freedom divided by the distance between the node pair, measured in a perpendicular global direction. This is commonly used for inter-story drift in building models. + +.. function:: recorder Drift <-file $fileName> <-xml $fileName> <-binary $fileName> <-fileCSV $fileName> <-precision $nSD> <-time> <-dT $deltaT> <-rTolDt $rTol> <-closeOnWrite> -iNode $iNode1 $iNode2 ... -jNode $jNode1 $jNode2 ... -dof $dof -perpDirn $dirn + :noindex: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $fileName, |string|, file to which output is sent (one of ``-file``, ``-xml``, ``-binary``, or ``-fileCSV``) + $nSD, |integer|, number of significant digits (optional, default 6) + -time, |string|, place domain time in the first column of each output line + $deltaT, |float|, record only when elapsed time since last write exceeds this value + $rTol, |float|, relative tolerance on $deltaT (optional, default 0.00001) + -closeOnWrite, |string|, open and close the output file on each write + $iNode1 $iNode2 ..., |listInt|, tags of the first node in each drift pair + $jNode1 $jNode2 ..., |listInt|, tags of the second node in each drift pair (same length as ``-iNode`` list) + $dof, |integer|, global degree of freedom along which relative displacement is measured (1 through ndf) + $dirn, |integer|, global direction used to compute the distance between nodes (1 = X, 2 = Y, 3 = Z) + +.. note:: + + 1. The number of nodes listed after ``-iNode`` must equal the number listed after ``-jNode``. Node pairs are matched by position in the two lists. + + 2. Only one output destination option may be used: ``-file``, ``-xml``, ``-binary``, or ``-fileCSV``. + + 3. | The function returns a value: + | SUCCESS: **>0** an integer tag that can be used as a handle to remove a recorder with the :ref:`remove` command. + | FAILURE: **-1** recorder command failed (read the log) + +.. admonition:: Example + + The following example records drift in DOF 1 between node pairs (1, 3) and (2, 4), using the Y direction to compute story height. + + 1. **Tcl Code** + + .. code-block:: tcl + + recorder Drift -file drift.out -time -iNode 1 2 -jNode 3 4 -dof 1 -perpDirn 2 + + 2. **Python Code** + + .. code-block:: python + + recorder('Drift', '-file', 'drift.out', '-time', '-iNode', 1, 2, '-jNode', 3, 4, '-dof', 1, '-perpDirn', 2) + +Code developed by: |mhs| diff --git a/source/user/manual/output/EnvelopeElementRecorder.rst b/source/user/manual/output/EnvelopeElementRecorder.rst new file mode 100644 index 00000000..caccdc22 --- /dev/null +++ b/source/user/manual/output/EnvelopeElementRecorder.rst @@ -0,0 +1,58 @@ +.. _envelopeElementRecorder: + +Envelope Element Recorder +^^^^^^^^^^^^^^^^^^^^^^^^^ + +The EnvelopeElement recorder tracks the minimum, maximum, and maximum absolute value of element response quantities over the analysis. The response arguments are the same as for the :ref:`elementRecorder`; see that page for fiber and section recording options. + +.. function:: recorder EnvelopeElement <-file $fileName> <-xml $fileName> <-binary $fileName> <-tcp $inetAddress $port> <-precision $nSD> <-time> <-dT $deltaT> <-rTolDt $rTol> <-closeOnWrite> <-ele $ele1 $ele2 ...> <-eleRange $startEle $endEle> <-region $regionTag> $responseArgs + :noindex: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $fileName, |string|, file to which output is sent + $inetAddr, |string|, IP address of remote machine (with ``-tcp``) + $port, |integer|, TCP port on remote machine + $nSD, |integer|, number of significant digits (optional, default 6) + -time, |string|, include the time at which each envelope extremum occurred + $deltaT, |float|, time interval for updating the envelope + $rTol, |float|, relative tolerance on $deltaT (optional, default 0.00001) + -closeOnWrite, |string|, open and close the output file on each write + $ele1 $ele2 ..., |listInt|, element tags to record + $startEle $endEle, |integer|, inclusive range of element tags + $regionTag, |integer|, tag of a previously defined :ref:`region` + $responseArgs, |list|, element response request (e.g. ``globalForce``, ``localForce``, ``section 1 force``) + +.. note:: + + 1. Only one of ``-file``, ``-xml``, ``-binary``, or ``-tcp`` may be used to specify the output destination. + + 2. Only one of ``-ele``, ``-eleRange``, or ``-region`` may be used to select elements. + + 3. For each recorded quantity, the output contains three values: minimum, maximum, and maximum absolute value. When ``-time`` is used, the time at which each extremum occurred is also recorded. + + 4. Common beam-column response requests include ``globalForce``, ``localForce``, ``section $secNum force``, ``section $secNum deformation``, and ``section $secNum fiber $y $z stressStrain``. + + 5. | The function returns a value: + | SUCCESS: **>0** an integer tag that can be used as a handle to remove a recorder with the :ref:`remove` command. + | FAILURE: **-1** recorder command failed (read the log) + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + recorder EnvelopeElement -file ele1global.out -time -ele 1 globalForce + recorder EnvelopeElement -file ele1sec1.out -time -ele 1 section 1 force + + 2. **Python Code** + + .. code-block:: python + + recorder('EnvelopeElement', '-file', 'ele1global.out', '-time', '-ele', 1, 'globalForce') + recorder('EnvelopeElement', '-file', 'ele1sec1.out', '-time', '-ele', 1, 'section', 1, 'force') + +Code developed by: |fmk| diff --git a/source/user/manual/output/PlotRecorder.rst b/source/user/manual/output/PlotRecorder.rst new file mode 100644 index 00000000..94fb9613 --- /dev/null +++ b/source/user/manual/output/PlotRecorder.rst @@ -0,0 +1,48 @@ +.. _plotRecorder: + +Plot Recorder +^^^^^^^^^^^^^ + +The Plot recorder opens a graphical window and plots columns from a text file as the analysis progresses. The input file is typically the output of another recorder (for example, a :ref:`nodeRecorder`). + +.. function:: recorder Plot $fileName $windowTitle $xLoc $yLoc $xPixels $yPixels -columns $xCol $yCol <-columns $xCol2 $yCol2 ...> <-dT $deltaT> <-rTolDt $rTol> + :noindex: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $fileName, |string|, name of the file from which data is read + $windowTitle, |string|, title displayed in the plot window + $xLoc $yLoc, |integer|, screen coordinates of the top-left corner of the window (pixels) + $xPixels $yPixels, |integer|, width and height of the plot window (pixels) + $xCol $yCol, |integer|, column indices for the x and y axes (1-based) + $deltaT, |float|, minimum time between plot updates (optional) + $rTol, |float|, relative tolerance on $deltaT (optional, default 0.00001) + +.. note:: + + 1. At least one ``-columns`` (or ``-cols`` / ``-col``) pair must be specified. Additional pairs may be supplied to overlay multiple curves. + + 2. Column indices are 1-based. If the source recorder uses ``-time``, column 1 is typically time. + + 3. This recorder requires a build with graphics support. It is available in the Tcl interpreter; there is no direct OpenSeesPy equivalent. + + 4. The only way to save the plotted image is a screen capture. + + 5. | The function returns a value: + | SUCCESS: **>0** an integer tag that can be used as a handle to remove a recorder with the :ref:`remove` command. + | FAILURE: **-1** recorder command failed (read the log) + +.. admonition:: Example + + The following example plots column 2 (displacement) versus column 1 (time) from a node recorder output file. + + 1. **Tcl Code** + + .. code-block:: tcl + + recorder Node -file node.out -time -node 1 -dof 2 disp + recorder Plot node.out "Nodal Displacement" 10 10 400 400 -columns 1 2 + +Code developed by: |fmk| diff --git a/source/user/manual/output/VTK.rst b/source/user/manual/output/VTK.rst new file mode 100644 index 00000000..0e7da650 --- /dev/null +++ b/source/user/manual/output/VTK.rst @@ -0,0 +1,59 @@ +.. _vtkRecorder: + +VTK Recorder +^^^^^^^^^^^^ + +The VTK recorder writes the model mesh and selected response quantities to VTK XML format for visualization in `ParaView `_. It creates a directory named after the recorder base name, writes a ParaView collection file (``.pvd``), and stores time-step data in ``.vtu`` files. + +For newer workflows, consider also the :ref:`pvdRecorder`, which provides similar ParaView output. + +.. function:: recorder vtk $baseName $respType1 $respType2 ... <-precision $nSD> <-dT $deltaT> <-rTolDt $rTol> + :noindex: + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $baseName, |string|, base name for the output directory and ``.pvd`` collection file + $respType, |string|, response quantity to record (see note 2) + $nSD, |integer|, output precision (optional, default 10) + $deltaT, |float|, minimum time between writes (optional) + $rTol, |float|, relative tolerance on $deltaT (optional, default 0.00001) + +.. note:: + + 1. Valid nodal response types include: + + .. code:: none + + disp + disp2 + disp3 + vel + accel + reaction + reaction2 + reaction3 + mass + unbalancedLoad + eigen $mode + + 2. Element response may be requested with ``eleResponse`` followed by the same arguments used in an :ref:`elementRecorder` (for example, ``eleResponse localForce``). + + 3. This recorder is available in the Tcl interpreter. It is not registered in the standard OpenSeesPy recorder map; use Tcl or the :ref:`pvdRecorder` / :ref:`gmshRecorder` for Python-based visualization workflows. + + 4. Open ``$baseName.pvd`` in ParaView to animate results over time. + + 5. | The function returns a value: + | SUCCESS: **>0** an integer tag that can be used as a handle to remove a recorder with the :ref:`remove` command. + | FAILURE: **-1** recorder command failed (read the log) + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + recorder vtk results disp accel -dT 0.1 + +Code developed by: |fmk| diff --git a/source/user/manual/section/BidirectionalSection.rst b/source/user/manual/section/BidirectionalSection.rst new file mode 100644 index 00000000..3f409896 --- /dev/null +++ b/source/user/manual/section/BidirectionalSection.rst @@ -0,0 +1,37 @@ +.. _BidirectionalSection: + +BidirectionalSection +^^^^^^^^^^^^^^^^^^^^ + +This command constructs a bidirectional elastoplastic section model with combined isotropic and kinematic hardening. The command name in OpenSees is ``Bidirectional``. + +.. function:: section Bidirectional $secTag $E $sigY $Hiso $Hkin <$code1 $code2> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $E, |float|, elastic modulus + $sigY, |float|, yield stress + $Hiso, |float|, isotropic hardening modulus + $Hkin, |float|, kinematic hardening modulus + $code1 $code2, |string|, optional section response components (default ``Vy`` and ``P``) + +Valid response codes are ``P``, ``Mz``, ``My``, ``Vy``, ``Vz``, and ``T``. + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section Bidirectional 1 1000.0 10.0 0.0 100.0 Vy P + + 2. **Python Code** + + .. code-block:: python + + ops.section('Bidirectional', 1, 1000.0, 10.0, 0.0, 100.0, 'Vy', 'P') + +Code Developed by: |mhs| diff --git a/source/user/manual/section/ElasticMembranePlateSection.rst b/source/user/manual/section/ElasticMembranePlateSection.rst new file mode 100644 index 00000000..4dea10c1 --- /dev/null +++ b/source/user/manual/section/ElasticMembranePlateSection.rst @@ -0,0 +1,35 @@ +.. _ElasticMembranePlateSection: + +ElasticMembranePlateSection +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs an elastic membrane-plate section for shell elements. The section provides both in-plane membrane stiffness and out-of-plane plate bending stiffness. + +.. function:: section ElasticMembranePlateSection $secTag $E $nu $h <$rho> <$EpModifier> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $E, |float|, Young's modulus for membrane action + $nu, |float|, Poisson's ratio + $h, |float|, section thickness + $rho, |float|, mass density (optional, default 0) + $EpModifier, |float|, multiplier applied to $E for out-of-plane plate bending stiffness (optional, default 1) + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section ElasticMembranePlateSection 1 3000.0 0.2 10.0 0.0 1.0 + + 2. **Python Code** + + .. code-block:: python + + ops.section('ElasticMembranePlateSection', 1, 3000.0, 0.2, 10.0, 0.0, 1.0) + +Code Developed by: |fmk| diff --git a/source/user/manual/section/Isolator2springSection.rst b/source/user/manual/section/Isolator2springSection.rst new file mode 100644 index 00000000..27e69045 --- /dev/null +++ b/source/user/manual/section/Isolator2springSection.rst @@ -0,0 +1,38 @@ +.. _Isolator2springSection: + +Isolator2springSection +^^^^^^^^^^^^^^^^^^^^^^ + +This command constructs a two-spring isolator section based on the Koh and Kelly model for elastomeric bearing buckling, with optional material nonlinearity and strength degradation. In Tcl the command is ``Iso2spring``; in Python it is ``Isolator2spring``. + +.. function:: section Iso2spring $secTag $tol $k1 $Fy $k2 $kv $hb $Pe <$Po> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $tol, |float|, convergence tolerance for the internal solution + $k1, |float|, pre-buckling stiffness + $Fy, |float|, yield force + $k2, |float|, post-buckling stiffness + $kv, |float|, vertical stiffness + $hb, |float|, bearing height + $Pe, |float|, Euler buckling load + $Po, |float|, axial load (optional, default 0) + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section Iso2spring 1 1.0e-6 100.0 50.0 10.0 500.0 6.0 200.0 0.0 + + 2. **Python Code** + + .. code-block:: python + + ops.section('Isolator2spring', 1, 1.0e-6, 100.0, 50.0, 10.0, 500.0, 6.0, 200.0, 0.0) + +Code Developed by: |fmk| diff --git a/source/user/manual/section/NDFiberSection.rst b/source/user/manual/section/NDFiberSection.rst new file mode 100644 index 00000000..0ec4feff --- /dev/null +++ b/source/user/manual/section/NDFiberSection.rst @@ -0,0 +1,48 @@ +.. _NDFiberSection: + +NDFiberSection +^^^^^^^^^^^^^^ + +This command constructs a fiber section in which each fiber uses an nD material in a **beam-fiber** stress state. Unlike a standard ``Fiber`` section (Bernoulli theory with uniaxial materials), an ``NDFiber`` section captures **axial-shear** interaction in 2D and **axial-shear-torsion** interaction in 3D. Section geometry is defined with ``patch``, ``layer``, and ``fiber`` subcommands inside a braced block, the same way as for a ``Fiber`` section. + +.. function:: section NDFiber $secTag { $subcommands } + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $subcommands, |list|, braced block of ``patch`` ``layer`` and ``fiber`` commands referencing nD materials + +.. note:: + + 1. **Direct beam-fiber materials.** ``J2BeamFiber`` and ``ElasticIsotropicBeamFiber`` are nD materials formulated directly for the beam-fiber stress condition and are the usual choice for steel or other J2 beam fibers. + + 2. **Wrapping general nD materials.** A three-dimensional nD material can also be placed in an ``NDFiber`` section. OpenSees obtains a ``BeamFiber2d`` (2D) or ``BeamFiber`` (3D) copy by wrapping the material with ``BeamFiberMaterial2d`` or ``BeamFiberMaterial``, which performs static condensation to the beam-fiber stress state. This approach can be expensive for complicated constitutive models. + + 3. Use ``section NDFiberWarping`` instead of ``section NDFiber`` when warping behavior is required in 2D models. + + 4. Further discussion and verification examples are available in `Fibers of Higher Dimensions `_ on OpenSees Digital. + +.. admonition:: Example + + The following example defines a 3D ``NDFiber`` section for a hollow steel tube using ``J2BeamFiber`` and a circular ``patch``. + + 1. **Tcl Code** + + .. code-block:: tcl + + nDMaterial J2BeamFiber 1 29000.0 0.3 60.0 0.0 145.73 + section NDFiber 1 { + patch circ 1 8 4 0.0 0.0 2.25 2.50 0.0 360.0 + } + + 2. **Python Code** + + .. code-block:: python + + nDMaterial('J2BeamFiber', 1, 29000.0, 0.3, 60.0, 0.0, 145.73) + section('NDFiber', 1) + patch('circ', 1, 8, 4, 0.0, 0.0, 2.25, 2.50, 0.0, 360.0) + +Code Developed by: |mhs| diff --git a/source/user/manual/section/ParallelSection.rst b/source/user/manual/section/ParallelSection.rst new file mode 100644 index 00000000..5888efde --- /dev/null +++ b/source/user/manual/section/ParallelSection.rst @@ -0,0 +1,31 @@ +.. _ParallelSection: + +ParallelSection +^^^^^^^^^^^^^^^ + +This command constructs a section that acts in parallel with two or more existing sections. The resultant section deformation is the sum of the component section deformations, and the section forces are shared among the components. + +.. function:: section Parallel $secTag $secTag1 $secTag2 ... + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag for the parallel section + $secTag1 $secTag2 ..., |listInt|, tags of previously defined sections connected in parallel + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section Parallel 3 1 2 + + 2. **Python Code** + + .. code-block:: python + + ops.section('Parallel', 3, 1, 2) + +Code Developed by: |mhs| diff --git a/source/user/manual/section/PlateFiberSection.rst b/source/user/manual/section/PlateFiberSection.rst new file mode 100644 index 00000000..7a33ee47 --- /dev/null +++ b/source/user/manual/section/PlateFiberSection.rst @@ -0,0 +1,33 @@ +.. _PlateFiberSection: + +PlateFiberSection +^^^^^^^^^^^^^^^^^ + +This command constructs a membrane-plate fiber section for shell elements. The section integrates an nD material through the thickness using Lobatto or Gauss integration. + +.. function:: section PlateFiber $secTag $matTag $h <$integrationType> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $matTag, |integer|, tag of the nD material + $h, |float|, section thickness + $integrationType, |string|, optional integration rule: ``Lobatto`` (default), ``Gauss``, or ``Legendre`` + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section PlateFiber 1 2 10.0 Lobatto + + 2. **Python Code** + + .. code-block:: python + + ops.section('PlateFiber', 1, 2, 10.0, 'Lobatto') + +Code Developed by: |fmk| diff --git a/source/user/manual/section/RCSection.rst b/source/user/manual/section/RCSection.rst new file mode 100644 index 00000000..b22bc226 --- /dev/null +++ b/source/user/manual/section/RCSection.rst @@ -0,0 +1,42 @@ +.. _RCSection: + +RCSection +^^^^^^^^^ + +This command constructs a reinforced-concrete rectangular section by discretizing the cross section into fibers. The command name in OpenSees is ``RCSection2d``. + +.. function:: section RCSection2d $secTag $coreTag $coverTag $steelTag $h $b $cover $Atop $Abottom $Aside $nfcore $nfcover $nfs + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $coreTag, |integer|, uniaxial material tag for the concrete core + $coverTag, |integer|, uniaxial material tag for the concrete cover + $steelTag, |integer|, uniaxial material tag for the longitudinal reinforcement + $h, |float|, section depth + $b, |float|, section width + $cover, |float|, concrete cover thickness + $Atop, |float|, total area of top reinforcement steel + $Abottom, |float|, total area of bottom reinforcement steel + $Aside, |float|, total area of side reinforcement steel + $nfcore, |integer|, number of fibers in the core + $nfcover, |integer|, number of fibers in each cover region + $nfs, |integer|, number of fibers used to discretize each steel layer + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section RCSection2d 1 1 2 3 24.0 18.0 1.5 4.0 4.0 0.0 10 2 4 + + 2. **Python Code** + + .. code-block:: python + + ops.section('RCSection2d', 1, 1, 2, 3, 24.0, 18.0, 1.5, 4.0, 4.0, 0.0, 10, 2, 4) + +Code Developed by: |mhs| diff --git a/source/user/manual/section/SectionAggregator.rst b/source/user/manual/section/SectionAggregator.rst new file mode 100644 index 00000000..c48c8cea --- /dev/null +++ b/source/user/manual/section/SectionAggregator.rst @@ -0,0 +1,36 @@ +.. _SectionAggregator: + +SectionAggregator +^^^^^^^^^^^^^^^ + +This command constructs a section by aggregating one or more uniaxial materials with an optional base section. Each uniaxial material is assigned to a specific section force-deformation component. The command name in OpenSees is ``Aggregator`` (alias ``AddDeformation``). + +.. function:: section Aggregator $secTag $matTag1 $code1 ... <-section $baseSecTag> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $matTag1 $code1 ..., |list|, pairs of uniaxial material tag and section response code + $baseSecTag, |integer|, optional tag of an existing section providing the remaining response components + +Valid response codes ($code) are ``P``, ``Mz``, ``My``, ``Vy``, ``Vz``, and ``T``. + +.. admonition:: Example + + The following example adds a uniaxial torsion spring to an existing fiber section. + + 1. **Tcl Code** + + .. code-block:: tcl + + section Aggregator 2 5 T -section 1 + + 2. **Python Code** + + .. code-block:: python + + ops.section('Aggregator', 2, 5, 'T', '-section', 1) + +Code Developed by: |mhs| diff --git a/source/user/manual/section/UniaxialSection.rst b/source/user/manual/section/UniaxialSection.rst new file mode 100644 index 00000000..93a248a6 --- /dev/null +++ b/source/user/manual/section/UniaxialSection.rst @@ -0,0 +1,32 @@ +.. _UniaxialSection: + +UniaxialSection +^^^^^^^^^^^^^^^ + +This command constructs a section with a single force-deformation component modeled by one uniaxial material. The command name in OpenSees is ``Uniaxial``. + +.. function:: section Uniaxial $secTag $matTag $code + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $matTag, |integer|, tag of the uniaxial material + $code, |string|, section response component: ``P``, ``Mz``, ``My``, ``Vy``, ``Vz``, or ``T`` + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section Uniaxial 1 3 Mz + + 2. **Python Code** + + .. code-block:: python + + ops.section('Uniaxial', 1, 3, 'Mz') + +Code Developed by: |mhs| diff --git a/source/user/manual/section/WideFlangeSection.rst b/source/user/manual/section/WideFlangeSection.rst new file mode 100644 index 00000000..88fb5430 --- /dev/null +++ b/source/user/manual/section/WideFlangeSection.rst @@ -0,0 +1,42 @@ +.. _WideFlangeSection: + +WideFlangeSection +^^^^^^^^^^^^^^^^^ + +This command constructs a wide-flange (I-shaped) steel section by discretizing the cross section into fibers. The command name in OpenSees is ``WFSection2d`` (alias ``WSection2d``). + +.. function:: section WFSection2d $secTag $matTag $d $tw $bf $tf $nfdw $nftf <$nfbf $nftw> <-GJ $GJ> <-nd $shape> <-warping> + +.. csv-table:: + :header: "Argument", "Type", "Description" + :widths: 10, 10, 40 + + $secTag, |integer|, unique section tag + $matTag, |integer|, tag of uniaxial or nD material assigned to all fibers + $d, |float|, section depth + $tw, |float|, web thickness + $bf, |float|, flange width + $tf, |float|, flange thickness + $nfdw, |integer|, number of fibers along the web depth + $nftf, |integer|, number of fibers along each flange thickness + $nfbf, |integer|, number of fibers along each flange width (optional, default 1) + $nftw, |integer|, number of fibers along the web thickness (optional, default 1) + $GJ, |float|, torsional rigidity (3D uniaxial models only) + $shape, |float|, nD fiber shape factor (used with ``-nd``) + ``-warping``, |string|, enable warping formulation (3D uniaxial models with ``-GJ``) + +.. admonition:: Example + + 1. **Tcl Code** + + .. code-block:: tcl + + section WFSection2d 1 1 14.0 0.44 14.5 0.71 16 2 + + 2. **Python Code** + + .. code-block:: python + + ops.section('WFSection2d', 1, 1, 14.0, 0.44, 14.5, 0.71, 16, 2) + +Code Developed by: |mhs| From cf48b69649379f6163d9232508674ed6da6455fc Mon Sep 17 00:00:00 2001 From: gaaraujo Date: Fri, 5 Jun 2026 17:30:36 -0700 Subject: [PATCH 4/4] Fix uniaxialMaterial section numbering in the manual toctree. Use explicit section numbers instead of RST auto-numbering, which restarted at 1 after commented-out toctree entries. --- source/user/manual/material/uniaxialMaterial.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/user/manual/material/uniaxialMaterial.rst b/source/user/manual/material/uniaxialMaterial.rst index 5610a0e9..98ec7f83 100644 --- a/source/user/manual/material/uniaxialMaterial.rst +++ b/source/user/manual/material/uniaxialMaterial.rst @@ -18,7 +18,7 @@ This command is used to construct a uniaxial material, which provides a uniaxial The following subsections contain information about **$matType** -#. Steel & Reinforcing-Steel Materials +1. Steel & Reinforcing-Steel Materials .. toctree:: :maxdepth: 1 @@ -36,7 +36,7 @@ The following subsections contain information about **$matType** uniaxialMaterials/DuctileFracture -#. Concrete Materials +2. Concrete Materials .. toctree:: :maxdepth: 1 @@ -56,7 +56,7 @@ The following subsections contain information about **$matType** .. uniaxialMaterials/FRPConfinedConcrete .. uniaxialMaterials/ConcreteCM -#. Some Standard Uniaxial Materials +3. Some Standard Uniaxial Materials .. toctree:: :maxdepth: 1 @@ -70,7 +70,7 @@ The following subsections contain information about **$matType** uniaxialMaterials/Hardening uniaxialMaterials/MultiLinear -#. Generic Multilinear Hysteretic Materials +4. Generic Multilinear Hysteretic Materials .. toctree:: :maxdepth: 1 @@ -84,7 +84,7 @@ The following subsections contain information about **$matType** .. uniaxialMaterials/Pinching4 -#. Wrapper Uniaxial Materials +5. Wrapper Uniaxial Materials .. toctree:: :maxdepth: 1 @@ -102,7 +102,7 @@ The following subsections contain information about **$matType** uniaxialMaterials/Penalty uniaxialMaterials/Multiplier -#. Other Uniaxial Materials +6. Other Uniaxial Materials .. toctree:: :maxdepth: 1 @@ -133,7 +133,7 @@ The following subsections contain information about **$matType** .. uniaxialMaterials/BoucWen .. uniaxialMaterials/BWBN -#. PyTzQz uniaxial materials for p-y, t-z and q-z elements +7. PyTzQz uniaxial materials for p-y, t-z and q-z elements .. toctree:: :maxdepth: 1