Skip to content

Lack of convergence in Sobol indices and standard deviation using Gauss quadrature in chaospy #445

Description

@Masilokwa-bantu

Hello Jonathan,

Firstly, thank you for developing chaospy and its great documentation.I’m using it for a sensitivity analysis of a CFD (finite volume) model coupled with an ODE. There are 3 uniformly distributed uncertain parameters shown below:

R1 = [47975880.0, 79959800.0]
R2 = [300844875.0, 501408125.0]
C = [3.07206e-09, 5.120099999999999e-09]

I used gauss quadrature to generate gauss nodes to evaluate the CFD for polynomial orders 1 to 3. The mean, standard deviation, and Sobol indices were computed using chaospy.E(), chaospy.Std(), and chaospy.Sens_m() respectively.

However, the Sobol indices and standard deviation do not show convergence or a consistent trend with increasing polynomial order. The figure attached shows that the indices vary between the polynomial order without a similar trend.

For reference the convergence metrics are shown below (the metric is the mean relative error between successive polynomial orders):

pressure mean convergence: [12.1479473   0.77818001] %
pressure std convergence: [83.37969258 54.11365791] %
pressure SI convergence: [4.79972721 3.39656272] %

A 3rd-order expansion was expected to be sufficient, as observed in similar studies (albeit with two uncertain parameters and finite element models). The same methodology for sensitivity analysis was used.

Below is the function used to conduct the analysis.

def gauss_sobol_analysis_data(distribution, samples_evals, coeff_order, output=1, rule="gaussian"):
    gauss_quads = chaospy.generate_quadrature(coeff_order, distribution, rule=rule)
    nodes, weights = gauss_quads
    gauss_evals = samples_evals
    gauss_expansion = chaospy.generate_expansion(coeff_order, distribution) 
    gauss_model_approx = chaospy.fit_quadrature(gauss_expansion, nodes, weights, gauss_evals[:, output, -51:-1])

    mean = chaospy.E(gauss_model_approx, distribution)
    std = chaospy.Std(gauss_model_approx, distribution)
    S1 = chaospy.Sens_m(gauss_model_approx, distribution)

    return mean, std, S1, gauss_model_approx

Any insights into possible causes for the lack of convergence or suggestions for improving stability would be greatly appreciated.

Thank you in advance!

Image

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions