Note
Go to the end to download the full example code.
Compression cylinder setup with a linear elastic constitutive model
This experiment setup models a cylinder under compression with two options for the boundary conditions: free and fixed. The material model used is a linear elastic constitutive model.
Parameters
The following parameters can be defined for this setup:
E (Young’s modulus)
nu (Poisson’s ratio)
radius (radius of the cylinder)
height (height of the cylinder)
dim (dimension of the problem) either 2 or 3
degree (degree of the finite element space) either 1 or 2
bc_setting (boundary condition setting) either ‘free’ or ‘fixed’
mesh_density (mesh density) in 1/m
The parameters must be defined as pint objects Parameters required but not defined are set to default values (from class function default_parameters).
Example code
In this example, we define the parameters for the compression cylinder setup, set the displacement and sensor, and then create the experiment and the problem using fenicxconcrete. Finally, we solve the problem and get the measured reaction force at the bottom of the cylinder.
from fenicsxconcrete.experimental_setup.compression_cylinder import CompressionCylinder
from fenicsxconcrete.finite_element_problem.linear_elasticity import LinearElasticity
from fenicsxconcrete.sensor_definition.reaction_force_sensor import ReactionForceSensor
from fenicsxconcrete.util import ureg
parameters = {}
parameters["E"] = 1023 * ureg("MPa")
parameters["nu"] = 0.0 * ureg("")
parameters["radius"] = 0.006 * ureg("m")
parameters["height"] = 0.012 * ureg("m")
parameters["dim"] = 3 * ureg("")
parameters["degree"] = 2 * ureg("")
parameters["bc_setting"] = "fixed" * ureg("")
parameters["mesh_density"] = 10 * ureg("")
displacement = -0.003 * ureg("m")
sensor = ReactionForceSensor()
experiment = CompressionCylinder(parameters)
problem = LinearElasticity(experiment, parameters)
problem.add_sensor(sensor)
problem.experiment.apply_displ_load(displacement)
problem.solve()
measured = problem.sensors[sensor.name].data[0][-1]
print(f"The reaction force is {abs(measured):.2f} {sensor.units}.")
The reaction force is 28924.59 newton.
Total running time of the script: (0 minutes 13.746 seconds)