5. Computational Methods
5.4. Simulating Cyclic Loading
5.4.2. Script Development
The following describes the development of the script in more detail, as development was performed on a series of models representing vertebrae of increasing resolution, firstly using a simple cube model and secondly a low resolution vertebrae model, which solve very quickly in comparison to the 1mm3 mesh resolution models used to optimise the material properties. This also allowed for thorough interrogation of individual elements in order to assess whether the changes being made by the script were correct, and that a reduction in material properties of one element would cause neighbouring elements to accumulate plastic strain. Each type of model had the same density-based Youngβs modulus and yield strain as was determined for the higher resolution models, and were set up in the same manner with load applied axially via an analytical plate. A basic flowchart of how the script works is shown in Figure 5-7, where the number of iterations, or cycles, is user-defined in the script. This level of development was necessary due to difficulties manipulating the large numbers of elements and different material sets seen in the vertebrae models which result from having varying material properties through the vertebrae. In the initial model, materials were grouped in sets of elements with the same Youngβs modulus value, by assigning a section
containing the relevant properties to a set of elements (rather than have an individual assignment for each element). This forms the basis of how models are manipulated.
Figure β5-7, Flowchart showing the basic process the script iterates to simulate cyclic loading.
New sections and materials were created only when necessary, as having large numbers of these takes a large amount of time to create and solve. A failure criteria for stopping the iteration process was not determined, because it was noticed that models could no longer solve after large plastic strain were seen, so this non-convergence was taken as the end of the cyclic modelling.
Imports and runs FE model with the force used experimentally for that specimen in the fatigue experiment.
Interrogates all vertebra elements only to read equivalent plastic strain, and creates a list of all elements with non- zero values, identified in the list by unique element number.
For each of these, a new section and material property, that could be modified independently of other elements, is created.
New modulus and yield stress are calculated according to Keaveney equations, according to the plastic strain in each element.
A new .cae and job file are created and the model solved, displacement at reference point is found and the number of new plastic elements is recorded.
Repeat using output database from previous iteration to find new list of plastic elements, using initial geometry and mesh at each iteration.
Initially a simple cube with 27 1mm3 elements with greyscale values similar to those seen in bone was used to trial development versions of the script until it successfully iterated. The cube had a layer of stiff elements above and below a layer of mixed-value less-stiff elements, and the model had a load applied centrally via a analytically rigid plate and was constrained across the base. The cube model showed successful accumulation of plastic strain in elements as well as plastic strain occurring in new elements over a small number of cycles, as a result of changes in neighbouring elements, Figure 5-8. Throughout this work, the equivalent plastic strain (PEEQ), was used as the model output, as a way of taking into account all the components of the plastic strain tensor. The calculation for equivalent plastic strain is shown in Equation 3.
ππΈπΈπ = 1 1+πβ² Γ β( 1 2 [(ππ1β ππ2) 2 + (ππ2β ππ2)2+ (ππ3β ππ1)2]) Equation 3
Where Ξ½' is the effective Poissonβs ratio, assumed to be 0.5 for plastic strain, and πππ is the
plastic strain in the x, y and z directions.
The simple cube model allowed evaluation of the changes in all elements as there are so few, so the calculations done by the script could be checked easily, ensuring the correct changes to material properties were made for a given input and the resultant plastic strain. The accumulation of plastic strain was seen to be gradual, and is shown in Figure 5-8 for the first two cycles and then the sixth cycle, after which the model was stopped. Peak plastic strain values range from around 0.01 to 0.03. These values are not representative of what is seen in a vertebrae due to the much smaller shape, however they do appear to be in the correct order.
Figure β5-8, Progressive increase in plastic strain seen in the simple cube model used to develop the iterative cyclic loading script, shown at cycle 1, 2 and 6.
In order to add complexity to the cube model to develop the script for a vertebrae model, whilst keeping the number of elements low enough to allow the model to solve quickly, a very low resolution vertebra model was created by down-sampling a specimen-specific bovine tail vertebra model to a 7mm resolution, as shown in Figure 5-9. Again, the model was set up with the boundary conditions and constraints described in previously for the 1mm resolution models.
Figure β5-9, Low resolution mesh of the vertebrae model, down-sampled to a 7mm3 voxel resolution.
It was only possible to run a small number of cycles using this model, approximately 10, before plastic strain caused some elements to deform too much for the model to solve. It was noted that as there were so few elements, some were forced by the meshing tool to have more severe aspect ratios than others, and these were the elements accumulating the most plastic strain, and stopping the model from running, Figure 5-10. Further iterations of this model were made to improve the element shape by allowing the mesh to have a less accurate fit to the surface of the geometry, allowing for 0.2mm boundary space around the surface to allow for the improvement of surface element shapes. Plastic strain values from approximately 0.03 to 0.27 were predicted over four cycles (Figure 5-10 A-D).
Figure β5-10, Plastic strain response of the low-resolution vertebra model at four different stages during the iterative loading (A-D, cycles 1-4 respectively), showing the greatest accumulation of plastic strain in a small number of surface elements.
At this stage a number of extra features were added into the code as a way of evaluating changes across the cyclic loading. Firstly, a continuously updating list of elements storing information regarding whether the element had been modified, the original material properties and the new material properties was created, and updated with each iteration. Secondly, a calculation was carried out at the end of each load and unload step in each cycle
A
B
to determine the displacement at the load application point. Calculations of the total number of plastic elements in the model and the number of new elements created during each step were also added. These changes allowed a .csv file with updated information about the vertebrae each iteration to be created. Information stored was the maximum and minimum displacement and the number of new plastic elements created each cycle. This was added to allow for direct comparison with fatigue experiment displacement data.
The script was then run for a 1mm mesh resolution model, which showed an accumulation of plastic strain in the anterior wall of the vertebra. The code ran for five cycles before failing to solve, and large plastic strains were predicted in a number of elements, Figure 5-11. However the general values and displacements seen were appropriate for taking the process forward to investigate the cyclic response in a group of vertebrae.
Figure β5-11, Cut though section view of a vertebrae modelled with the fatigue simulation script, showing the accumulation of plastic strain over five iterations.