English
Documentation
> > Validation Case: Nonlinear analysis of an internally pressurized spherical shell

# Validation Case: Nonlinear analysis of an internally pressurized spherical shell

## Overview

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.

## Geometry

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}

## Material

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}

## Physics

With reference to Figure 1:

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

## Meshing

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 =
\begin{cases}
\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}.
\end{cases}

## 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.

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.

## 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
on.settings.EnabledPhysics(["mechanical"])
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(
data=[
"Displacement",
"VonMises",
"Stress",
"Strain",
"PrincipalStress",
"PrincipalStrain",
"StrainEnergyDensity",
"EigenVector",
"PlasticStrain",
"EquivalentPlasticStrain",
],
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


# References

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