Log in
Log in Simulate Now
Log in Simulate Now
Help > OnScale Solve Validation Cases > Validation Case: Nonlinear analysis of an internally pressurized spherical shell

Validation Case: Nonlinear analysis of an internally pressurized spherical shell


This article is part of the series of validation cases performed using OnScale Solve.

In this case, we have a thick-walled spherical shell subjected to a linearly increasing internal pressure. Since this problem is symmetric about three planes, only an eighth of the total geometry is needed for the analysis.


The tank geometry is available as an Onshape document.

  • \text{Internal radius} = a = 0.1~\text{m}
  • \text{External radius} = b = 0.2~\text{m}
One-eighth model of thick spherical shell


The material properties are presented in Table 1.

Values of material properties.
Material properties (symbol)Value (unit)
Young’s modulus (E)210~\text{GPa}
Poisson’s ratio (\nu)0.3
Yield strength (\sigma_y)240~\text{MPa}
Isotropic hardening modulus (H)0~\text{MPa}


With reference to Figure 1:

  • Symmetry Constraint
    • Applied to all planar faces (Face 3, 4 and 5)
  • Load
    • Pressure applied to internal face, parameterized from 0 \text{MPa} to 320 \text{MPa}


A second-order tetrahedral mesh with 1,133 vertices is used for this study.

Reference Solution

The solution is derived using methods in [1]. The relationship between the applied internal pressure and the radius c of the advancing front of plastic yield is given by

P = 2 \sigma_y \text{ln} \left( \frac{c}{a} \right) + \frac{2 \sigma_y}{3} \left( 1 -\frac{c^3}{b^3} \right)

By substituting c = a in the above equation, the initiation of plastic yield on the internal surface, P_0 can be determined. By substituting c = b, the pressure at complete plastic collapse, P_\text{lim} of the spherical shell is determined.

P_0 = \frac{2 \sigma_y}{3} \left( 1 - \frac{a^3}{b^3} \right)

P_\text{lim} = 2 \sigma_y \text{ln} \left( \frac{b}{a} \right)

Thus producing P_0 = 140 MPa and P_\text{lim} \approx 332.7 MPa.

The radial displacement at the outer surface u_b is given by

u_b =
\frac{3 P b}{2 E \left( \frac{b^3}{a^3} - 1 \right)} \left( 1 - \nu \right) \quad &\text{if } P < P_0, \\
\frac{\sigma_y c^3}{E b^2} \left( 1 - \nu \right) \quad &\text{otherwise}.

Results Comparison

The plot below compares the values obtained using the analytical equation described above and the analysis performed using OnScale Solve. The Load is plotted against the diplacement at the outer surface in Figure 2.

Solve results against analytical results

The distribution of von Mises stress across the thickness for an internal pressure of P = 320 MPa is shown Figure 3. This internal pressure is close to the plastic collapse limit where r=b so much of the section has yielded.

Von Mises stress distribution

Simulation Definition

The complete simulation definition is given below.

    Auto-generated simulation code.
import onscale as on
with on.Simulation("Simulation", "Generated in SOLVE", version="2.3.0") as sim:
    # Define simulation sweep parameters
    param = on.Parameter("Parameter 1", 0, 320000000, 10)
    # General simulation settings
    coord = on.GlobalCoordinates()
    on.settings.Mesher(use_feature_detection=True, mesh_index=2)
    # Define geometry
    geometry = on.CadFile("eigth_sphere_JHD.x_t", unit="m")
    # Define material database and materials
    materials = on.CloudMaterials("onscale")
    material = materials["material"]
    material.alias = "Custom Material 1"
    material >> geometry.parts[0]
    elastic_model = on.material_models.ElasticIsotropicLinear(
        youngs_modulus=210000000000, poissons_ratio=0.3
    plastic_model = on.material_models.PlasticVonMisesLinearHardening(
        yield_strength=240000000, isotropic_hardening_modulus=0
    material.set("density", "7850")
    material.set("elastic_model", elastic_model)
    material.set("plastic", True)
    material.set("plastic_model", plastic_model)
    # Define and apply loads
    symmetry = on.loads.Symmetry(alias="Symmetry 1")
    symmetry >> geometry.parts[0].faces[2]
    symmetry_2 = on.loads.Symmetry(alias="Symmetry 2")
    symmetry_2 >> geometry.parts[0].faces[4]
    symmetry_3 = on.loads.Symmetry(alias="Symmetry 3")
    symmetry_3 >> geometry.parts[0].faces[1]
    pressure = on.loads.Pressure(param, alias="Pressure 1")
    pressure >> geometry.parts[0].faces[0]
    # Define output variables
    field_sensor = on.sensors.FieldSensor(
        alias="Global Sensor",
    field_sensor >> geometry
    reaction_sensor = on.sensors.ReactionSensor(alias="Reaction_Symmetry 1")
    reaction_sensor >> symmetry
    reaction_sensor_2 = on.sensors.ReactionSensor(alias="Reaction_Symmetry 2")
    reaction_sensor_2 >> symmetry_2
    reaction_sensor_3 = on.sensors.ReactionSensor(alias="Reaction_Symmetry 3")
    reaction_sensor_3 >> symmetry_3


R. Hill., The mathematical theory of plasticity. Clarendon Pres, 1983.