Sensitivity of structural response with respect to modeling parameters provides search directions for gradient-based algorithms in reliability analysis, optimization, and system identification. In addition to these applications, stand-alone sensitivity analysis gives useful information about the effect of parameters on the structural response.

There are three methods to compute response sensitivity for nonlinear, path-dependent analysis of structural models: finite differences, complex perturbation, and direct differentiation.

The finite difference and complex perturbation methods require the analysis to be re-run for each model parameter of interest, making the computational burden high for response history analysis of large models with many parameters. Furthermore, even though it’s more accurate than finite differences, the complex perturbation method requires complex arithmetic through all computations in the finite element analysis. No one really wants to do that.

The direct differentiation method (DDM) computes accurate sensitivity concurrent with the response, but it requires significant derivation and implementation effort, i.e., there’s sport to the DDM. And by sport, I mean journal articles can be written about it–about a quarter to a third of my articles are on this subject.

OpenSees implements the DDM for nonlinear static and dynamic analyses. Sensitivity is computed based on parameter objects that point to the uncertain parameters of the model. I’ll demonstrate with the steel moment frame shown below.

Let’s define two parameters: *F _{y}* and

*E*for the columns. I like to create blank parameters, then add model components with the

`addToParameter`

command. After assigning parameters, define the regular analysis options, then define a `sensitivityAlgorithm`

, which tells OpenSees when to compute sensitivities, either at each step (shown below) or only when told (`-computeByCommand`

).```
#
# Define model
#
ops.parameter(1)
ops.parameter(2)
for ele in [1,2,3,4]: # Column elements
ops.addToParameter(1,'element',ele,'E')
ops.addToParameter(2,'element',ele,'Fy')
#
# Define regular analysis options
#
ops.sensitivityAlgorithm('-computeAtEachStep')
#
# Do the analysis
#
```

The parameters you can identify in a structural model depend on the element and constitutive models. Take a look at the *setParameter* method, which works a lot like the *setResponse* method with recorders. However, the implementation of the *setParameter* method does not mean the DDM is enabled, so also look for implementations of *getResistingForceSensitivity* in elements and *getStressSensitivity* in materials.

Load-controlled pushover analysis of the frame gives the base shear-roof displacement response shown below. Also plotted are the sensitivities of the roof displacement which you can record with node recorders (currently undocumented) as well as the `sensNodeDisp`

command.

The results indicate that an increase in either *E* or *F _{y}* will lead to a decrease in roof displacement–increasing these parameters makes the structure stiffer and stronger, as expected. Furthermore, we see that the sensitivity with respect to

*F*is zero prior to yield, i.e.,

_{y}*F*doesn’t matter at low load levels. Finite difference calculations confirm the DDM results.

_{y}Note that the sensitivities are scaled by the nominal parameter value so that the sensitivities have the same units as the response. Multiplying the ordinates by a % change in parameter value will approximate the change in displacement.

Now the pushover analysis is repeated using displacement control (on the roof displacement), giving the same base shear-roof displacement relationship (shown below) as obtained with load control. The sensitivity of the base shear (load factor) to the model parameters is obtained with the `sensLambda`

command and scaled by the nominal parameter values.

We see that with displacement control, increases in *F _{y}* and

*E*will lead to an increase in base shear, i.e., as these parameters increase, more load is required to reach a target displacement. The elastic modulus

*E*has a significant effect on the base shear prior to yield–it’s a stiff system. After yield, the sensitivity with respect to

*E*reduces while the sensitivity to

*F*becomes significant. Again, finite difference calculations confirm the DDM results.

_{y}Although not shown here, we can also compute dynamic response sensitivity with the Newmark integrator. In most common cases, sensitivity of inertial and damping forces are computed at the structural level, so the elements don’t have to do anything extra for dynamic response sensitivity.

Currently, the DDM in OpenSees is limited to a handful of element and material models; however, I’m working on wrapper functions that use finite differences at the material level and DDM at the section, element, and higher levels of the analysis. With these wrappers, you’ll be able to use *Concrete23* and *Steel08* in your DDM-based analyses without having to go through the pain of differentiating the equations that govern the *Concrete23* and *Steel08* stress-strain response.

I struggled with the title for this post, but then thought about Michael G. Scott.

Dear P.D.,

Nice post! I like it. I look forward to reading your new posts.

Please provide more posts about sensitivity.

LikeLike

Thanks, MSB! Will do, sensitivity is one of my favorite subjects.

PD

LikeLike

Dear P.D.,

I am trying to build a background reading list in Sensitivity.

What books do you recommend?

LikeLike

Hello MSB,

The book “Parameter Sensitivity in Nonlinear Mechanics” by Kleiber et al is a good starting point.

Stay tuned to the blog though, I plan to make many more posts about sensitivity!

PDF

LikeLike