Note
Go to the end to download the full example code.
Inverse FORM with a cantilever beam¶
This example uses the cantilever beam model from the OpenTURNS use cases
to demonstrate the InverseFORM algorithm.
The beam tip displacement is given by:
where is Young’s modulus,
is the load,
is the length, and
is the moment of inertia.
We treat the length as a parameter to calibrate. Given a
target reliability index
, we seek the beam length
such that the Hasofer-Lind reliability index of the failure event
(displacement exceeding a threshold) equals
.
import openturns as ot
import otrobopt
from openturns.usecases import cantilever_beam
ot.RandomGenerator.SetSeed(0)
# Load the cantilever beam use case
cb = cantilever_beam.CantileverBeam()
print(cb.model)
[E,F,L,I]->[F*L^3/(3*E*I)]
Freeze the beam length L (input index 2) as a parameter with initial value 2.55 m. The remaining random inputs are E, F, I.
g = ot.ParametricFunction(cb.model, [2], [2.55])
# Build the joint distribution of the random inputs (E, F, I)
marginals = [cb.E, cb.F, cb.II]
distribution = ot.JointDistribution(marginals)
# Starting point: median values of the random inputs
x0 = [dist.computeQuantile(0.5)[0] for dist in marginals]
Define the failure event: displacement > 0.15 m.
vect = ot.RandomVector(distribution)
output = ot.CompositeRandomVector(g, vect)
event = ot.ThresholdEvent(output, ot.Greater(), 0.15)
Run the inverse FORM algorithm with a target reliability index
.
algo = otrobopt.InverseFORM(event, 'L', x0)
algo.setTargetBeta(3.0)
algo.run()
result = algo.getResult()
print('Calibrated L =', result.getParameter())
print('Hasofer-Lind beta =', result.getHasoferReliabilityIndex())
print('Convergence criteria =', result.getConvergenceCriteria())
Calibrated L = [2.18001]
Hasofer-Lind beta = 2.9999999999999996
Convergence criteria = [4,0,1.83978e-05,4.44089e-16]
The calibrated length is the beam length that achieves
the target reliability index
for the given
failure threshold. If the initial length leads to a reliability
above the target, the algorithm increases it (making the beam more
flexible and thus less reliable), and vice versa.
otrobopt