English
Documentation
> > Validation Case: Elongation of a Solid Tapered Bar

# Problem statement

This mechanical simulation is part of the series of validation cases performed using OnScale Solve. It consists of a tapered steel bar of square cross section which is fixed at one end face and a tensile force is applied to the other end face. The predicted axial elongation in the bar and the axial stress at the middle of the bar from the simulation results are compared against the reference solution given by Harris’ Introduction to Stress Analysis [1].

## Geometry

The geometry is a 200 millimeter long tapered beam as shown in fig. 1. The CAD file for this geometry is available as an Onshape document. The bar width taperes from 50 \times 50 mm to a 25 \times 25 mm.

## Boundary Conditions

A restraint boundary condition is imposed on the larger end face of the bar in all directions. A 10,000 N tensile force is imposed at the other end face of the bar.

## Material Properties

Homogeneous isotropic linear elastic properties of structural steel are used.

PropertySymbolValue
Young modulusE200 GPa
Poisson’s ratio\nu0.3

## Mesh

OnScale Solve generated a second-order tetrahedral mesh. Five simulations are run with the mesh density ranging from very coarse to very fine.

Mesh density# of elements# of dofs
very coarse7644,413
coarse2,13511,313
medium5,11725,788
fine12,13758,860
very fine62,251290,208

# Results

The axial elongation \Delta \ell in the bar from the simulation is compared against the reference solution [1]. The variables for the reference solution are as shown in fig. 2.

The reference solution for the axial elongation \Delta \ell in the bar is given by:

\Delta \ell = \frac{P \cdot L}{E \cdot d_1 \cdot d_2}

Where P is the imposed tensile force, L is the length of the bar, E is the Young’s Modulus of the bar material, d_1 is the width of the bar at the largest end face and d_2 is the width of the bar at the smallest end face as shown in fig. 2. The axial elongation is calculated to be \Delta \ell = 8 \cdot 10^{-3}~\text{mm}. The axial stress \sigma_z at a point z along the length of the bar L compared against the reference solution. The reference solution for the axial stress \sigma_z in the bar is given by:

\sigma_z(z) = \frac{P}{A(z)}

Where A(z) is the cross-sectional area at a distance z along the length of the bar L from the largest end face and P is the imposed tensile force as shown in fig. 2. The axial stress at a distance z = 100 mm along the length of the bar is calculated to be \sigma_z(100) = 7.11 MPa. Note the reference solution is not expected to converge towards zero as the reference solution is approximate because it does not take \nu into account. Also, in this case we are interested in the stress at a single point which requires a relatively refined mesh in that region. OnScale computes the stress precisely at the requested point coordinates by interpolating around the probe location. Often if only displacements are of interest, a less refined mesh can be used.

Mesh density# of dofsRef. \Delta \ell\mum]Sim. \Delta \ell\mum]Diff. [%]Ref. \sigma_z [MPa]Sim. \sigma_z [MPa]Diff. [%]
very coarse4,4138.0000008.0570180.717.110007.162530.74
coarse11,3138.0000008.0582950.737.110007.162480.74
medium25,7888.0000008.0584280.737.110007.156850.66
fine58,8608.0000008.0563570.707.110007.157600.67
very fine290,2088.0000008.0565960.717.110007.158510.68

# 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 = '0.8.1') as sim:
# General simulation settings
on.settings.EnabledPhysics(["mechanical"])
# Define geometry
geometry = on.CadFile('Case_26_JLD.x_t', unit="m")
point = on.Point(0, 0, -0.1)
# Define meshing
on.meshes.MeshFile('very_fine_mesh_volume.msh')
# Define material database and materials
materials = on.CloudMaterials('onscale')
structural_steel = materials['Structural steel']
structural_steel >> geometry.parts[0]
# Define and apply loads
restraint = on.loads.Restraint(x=True, y=True, z=True, alias='Fixture 1')
restraint >> geometry.parts[0].faces[0]
force = on.loads.Force(-10000, [0, 0, 1], alias='Force 1')
force >> geometry.parts[0].faces[1]
# Define output variables
field_sensor = on.sensors.FieldSensor(data=["Displacement", "VonMises", "Stress",
"Strain", "PrincipalStress",
"PrincipalStrain", "StrainEnergyDensity",
"EigenVector"], alias='Global Sensor')
field_sensor >> geometry
probe_sensor = on.sensors.ProbeSensor(data="Displacement", alias='Sensor 2')
probe_sensor >> geometry.parts[0]
probe_sensor_2 = on.sensors.ProbeSensor(data=["Stress", "VonMises"], alias='Sensor 1')
probe_sensor_2 >> point
reaction_sensor = on.sensors.ReactionSensor(alias='Reaction_Fixture 1')
reaction_sensor >> restraint


# References

[1]
C. O. Harris, Introduction to stress analysis. New York: The Macmillan Co., 1959.