Overview

Estimation of first-passage probability under stochastic wind excitations

The Wind module estimates the probability that structural response exceeds a prescribed threshold under stochastic wind excitation. Its practical goal is to produce accurate first-passage probability curves with far fewer dynamic simulations by combining surrogate modeling and adaptive learning.

Primary objective

Quantify threshold exceedance risk for wind-excited structures without relying on exhaustive Monte Carlo simulation.

Core engine

A heteroscedastic Gaussian-process surrogate captures both the trend and the changing uncertainty of the maximum response.

Main outputs

Estimated first-passage probability curves together with surrogate predictions that describe the adaptive learning process.

How it works

The workflow reduces a high-dimensional stochastic problem into a tractable conditional-surrogate estimation task.

The Wind algorithm targets the first-passage probability, meaning the probability that the maximum structural response within a time interval exceeds a threshold:

$$p_f(u_0,\tau)=P\left(\max_{0<t\le\tau}|u(\mathbf{X},\mathbf{Z},t)| \ge u_0\right)$$

Here, $\mathbf{X}$ contains time-invariant uncertain parameters such as structural properties and wind-model parameters, while $\mathbf{Z}$ represents the stochastic wind-excitation sequence. Direct evaluation is expensive because the excitation process makes the problem very high-dimensional.

To reduce that difficulty, the method reformulates the problem in terms of the conditional distribution of the maximum response given the time-invariant variables:

$$p_f=\int p_{f|X}(\mathbf{x}^*) f_X(\mathbf{x}^*)\,d\mathbf{x}^*$$

The conditional first-passage probability is then approximated using a lognormal model for the maximum response:

$$p_{f|X}(\mathbf{x}^*) = 1-\Phi\left(\frac{\ln u_0-\lambda(\mathbf{x}^*)}{\zeta(\mathbf{x}^*)}\right)$$

Once $\lambda(\mathbf{x})$ and $\zeta(\mathbf{x})$ are known, the total failure probability can be estimated efficiently by sampling only over the lower-dimensional variable space $\mathbf{X}$.

Those distribution parameters are estimated with a heteroscedastic Gaussian process:

$$\ln M = y(\mathbf{x}) + \varepsilon(\mathbf{x}), \qquad \varepsilon(\mathbf{x}) \sim N(0,r(\mathbf{x}))$$

This matters because the variability caused by stochastic wind loads is not uniform across the input space. The surrogate therefore models both the response trend and the location-dependent uncertainty.

From this model, the algorithm predicts

$$\hat{\lambda}_{GP}(\mathbf{x}^*) = E_p[\ln M^*], \qquad \hat{\zeta}_{GP}(\mathbf{x}^*) = \sqrt{\mathrm{Var}_p[\ln M^*]}$$

and substitutes them into the conditional failure expression. Adaptive learning then adds the most informative simulation points for the target threshold:

$$\mathbf{x}_{best} = \arg\max_{\mathbf{x}_k} \, p_{f|X}(\mathbf{x}_k) = \arg\min_{\mathbf{x}_k} \Phi\left(\frac{\ln u_0-\hat{\lambda}_{GP}(\mathbf{x}_k)}{\hat{\zeta}_{GP}(\mathbf{x}_k)}\right)$$

This strategy focuses new simulations near influential threshold-crossing regions, so the module can estimate wind-induced first-passage probability accurately with many fewer structural simulations than a direct Monte Carlo approach.

What you need

One Python configuration file defines the structural model, wind environment, geometry, thresholds, and simulation controls.

  • The required root sections are St, wind, Geo, samp, and u_o_exact.
  • St defines the structural model, including numStory, dimensions, density, damping ratio vector zeta, and stiffness vector k.
  • wind defines the wind environment, including V_refer, Gust_factor, drag, rho_air, kappa, optional EC, and the nested coherence decay parameters in CohDecay.
  • Geo defines the spatial grid for the wind field, and samp defines the sampling frequency and duration.
  • u_o_exact is the threshold vector used for probability evaluation.
  • Main control values include numb_sim, adap_sim, n_sample, iter_hyp, x_test_min, and x_test_max, with optional values such as numb_rvs, u_id_p, and target_n.
Implementation note: all numeric fields must be valid numbers, vector lengths in the structural model must match the number of stories, and the file is evaluated directly as a Python-style configuration.