Log in
Log in Simulate Now
Log in Simulate Now
Help > OnScale Solve Validation Cases > Validation Case: Circular Plate with a Localized Distributed Load

Validation Case: Circular Plate with a Localized Distributed Load

Problem Statement

This mechanical simulation is part of a series of validation cases performed using OnScale Solve. A thin circular plate is subject to a distributed load at its center. Numerical analysis results for the displacement due to the prescribed geometry and load are compared against hand calculations of the analytical solution in Roark’s Formulas for Stress and Strain [1].


Figure 1: Circular Plate

The geometry for this case was composed of a circular disk with a radius of a and a thickness of t. Tbl. 1 shows the value of the dimensions of the geometry which can be downloaded here.

Table 1: Key parameters of disk.
Plate ParameterSymbolDimension [\text{mm}]
Plate radiusa150
Load radiusr_010
Plate Thicknesst1.5

Boundary Conditions

The circumferential edge of the disk was fixed against both rotation and translation. A pressure q of 10 \text{kPa} was applied over a region of radius r_0 about the center of the disk. Fig. 2 illustrates the applied boundary conditions and loads.

Figure 2: Boundary Conditions

The force load W applied was calculated from W = q \cdot \pi \cdot r_0^2

Material Properties

The disk was made to consist of uniform structural steel material whose relevant properties are below.

Young’s ModulusE200 \text{GPa}
Poisson’s Ratio\nu0.29


OnScale Solve automatically generated a 3D second-order straight-edge tetrahedral mesh. For this study, several levels of mesh refinement were used having the properties in Tbl. 2 along with further refinements using OnScale’s refinement process.

Table 2: Mesh data.
Mesh DensityNumber of CellsNumber of VerticesDegrees of Freedom
very coarse21,8617,760135,099
very fine254,27079,4521,464,516


The vertical displacement \delta(r) of the disk given by \delta(r) = \frac{-W}{16 \pi D} \left[a^2 - r^2 \left(1 + 2\ln\left(\frac{a}{r}\right)\right) \right]

where r is the radial distance from the centre of the disk, a is the radius of the disk, W is the force load and D the flexural rigidity which is given by the expression D = \frac{E \cdot t^3}{12\cdot(1-\nu^2)}

The displacement equation was evaluated from the solution for the problem of an edge clamped circular disk with a uniformly distributed load over a very small central circular area of radius r_0 [1]. As such, the expression for vertical displacement was an approximation which became a more accurate description as the radius r_0 decreased. This equation for displacement simplifies to the following expression at the centre of the disk where displacement is greatest. \delta_\text{max} = \frac{-W \cdot a^2}{16 \cdot \pi \cdot D}

These expressions gave the maximum displacement at the centre of the disk as being -22.898 \mu\text{m} while 10 mm from the centre of the disk the vertical displacement was -22.245 \mu\text{m} and at 75 mm from the centre of the disk it was -9.238 \mu\text{m}.

Tbl. 3, tbl. 4 and tbl. 5 compares the values obtained using the analytical formula and those obtained from finite element analysis performed with OnScale Solve for the centre of the disk and at a radial distance of 10 mm from the centre of the disk for different mesh densities.

Figure 3: Simulation Results
Table 3: Comparison of analytical solution and FEA result for displacement at centre of disk.
Mesh DensityDegrees of FreedomNumerical Result [\mu\text{m}]Difference [\mu\text{m}]Difference [%]
very coarse135,099-22.4090.4892.1
very fine1,464,516-22.4580.4401.9
Table 4: Comparison of analytical solution and FEA result for displacement 10 mm from centre of disk.
Mesh DensityDegrees of FreedomNumerical Result [\mu\text{m}]Difference [\mu\text{m}]Difference [%]
very coarse135,099-21.8860.3591.6
very fine1,464,516-21.9320.3131.4
Table 5: Comparison of analytical solution and FEA result for displacement 75 mm from centre of disk.
Mesh DensityDegrees of FreedomNumerical Result [\mu\text{m}]Difference [\mu\text{m}]Difference [%]
very coarse135,099-9.1520.0860.9
very fine1,464,516-9.1630.0750.8

Simulation Definition

The complete simulation definition is given below. The metadata tags for parts and faces correspond to the version of the CAD file that was imported from OnShape.

    Auto-generated simulation code.
 import onscale as on 
with on.Simulation('Simulation', 'Generated in SOLVE', version = '0.8.8') as sim: 
# General simulation settings
    coord = on.GlobalCoordinates()
    on.settings.Mesher(use_feature_detection=True, mesh_index=0, use_regular_mesh_for_tube_model=False) 
# Define geometry 
geometry = on.CadFile('Assembly_1.x_t', unit="m")
    point = on.Point(0, 0, 0)
    point_2 = on.Point(0, 0, 0.0015) 
# Define meshing 
# Define material database and materials 
materials = on.CloudMaterials('onscale')
    structural_steel = materials['Structural steel']
    structural_steel.alias = 'Custom Structural steel 1'
    structural_steel >> geometry.parts.search('MkkDc5M7JEIhYlBkf', field='partIDTag')
    structural_steel >> geometry.parts.search('MlW33Ax8mTQcx7rNd', field='partIDTag')
    structural_steel.set('density', 7750.0)
    structural_steel.set('poissons_ratio', 0.29) 
# Define and apply loads 
restraint = on.loads.Restraint(x=True, y=True, z=True, alias='Restraint 1')
    restraint >> geometry.parts.search('MkkDc5M7JEIhYlBkf', field='partIDTag').faces.search('JHC', field='faceIDTag')
    pressure = on.loads.Pressure(1000000, alias='Pressure 1')
    pressure >> geometry.parts.search('MlW33Ax8mTQcx7rNd', field='partIDTag').faces.search('JHK', field='faceIDTag') 
# 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
    probe_sensor = on.sensors.ProbeSensor(data=["Displacement", "Stress", "Strain", "VonMises", "Temperature", "Pressure", "Velocity", "AcousticPressure"], alias='Sensor 1')
    probe_sensor >> point
    probe_sensor_2 = on.sensors.ProbeSensor(data=["Displacement", "Stress", "Strain", "VonMises", "Temperature", "Pressure", "Velocity", "AcousticPressure"], alias='Sensor 2')
    probe_sensor_2 >> point_2
    reaction_sensor = on.sensors.ReactionSensor(alias='Reaction_Restraint 1')
    reaction_sensor >> restraint 
# For OnScale System use only 
geometry.set('onshape_workspace_id', "cc9cbeccfd96fde352ca8f6d")
    geometry.set('onshape_doc_id', "56fe84938c96d582a170bb5d")
    geometry.set('onshape_doc_microversion', "c957542fe93a5ebde02a1034")
    geometry.set('onshape_assembly_microversion', "379b7da1bc556b91d2f0e332")

geometry.set('onshape_assembly_microversion', "379b7da1bc556b91d2f0e332")


W. Young, R. Budynas, and A. Sadegh, “Roark’s formulas for stress and strain. 8 edn.” McGraw-Hill Professional, pp. 514–515, 2011.