What if … you could let Abaqus draw a Christmas tree for you, according to your own specifications, and would then show it deforming under the load of the balls?
If wouldn’t change the world, but it would be kind of fun, wouldn’t it? At least that’s what I thought, which led to the Christmas tree plugin, that you can download from this page.
As with other plug-ins, this one can be installed by placing it in an ‘abaqus_plugins’ directory in your home directory or work directory, or in the ‘plugin_central_dir’ that is defined in your environment file. Create the ‘abaqus_plugins’ directory if it doesn’t exist, extract the files there and open Abaqus. Then go to plug-ins à christmas tree configurator to open the plug-in.
The GUI is shown below:
The height and width of the tree are given in the example image. The number of layers is the number of ‘triangles’. The name of the model can be specified. This will also be used as job name if the analysis is run. The ‘submit analysis’ tick box allows you to decide whether to only draw the tree, or also perform an analysis on it. A very coarse mesh is used so the analysis won't take very long: with default setting around half a minute.
The model drawn consists of a trunk, a tree, a specified number of balls placed randomly on the outer surface of the tree and a star on top. Anisotropic material properties are assigned, and a gravity loading is applied. The bottom of the trunk is constrained.
Randomly placing balls
One of the things I wanted to do, is to position the balls randomly on the outer surface of the tree. This looks reasonable and running the plug-in multiple times gives different results, which is interesting. After some thinking, I decided to generate two random coordinates, a height and an angle, and determining the outer surface of the tree at this position. A check is made so that a newly placed ball does not overlap existing balls.
Fix balls to tree
To run the analysis, the balls must be fixed to the tree. My first idea was to use an embedded constraint. This gave errors, because half of the ball is not embedded in the tree. I then tried tying the entire ball, but because the outer surface of the ball did not really match the outer surface of the tree, this did not work very well. In the end, I decided to make the balls rigid and tie the reference point (which is nicely on the outer surface of the tree) to the tree. This works well 😊 Sometimes trying to use a quick and dirty approach (balls overlapping the tree) doesn't make things easier later on 😉
Anisotropic material properties
Wood doesn’t have the same material properties in all directions. The structure of a Christmas tree, with branches and all, doesn’t seem isotropic either. The material properties in the model were inspired by actual values, and then modified to make things look as I wanted. The trunk is a factor 1000 stiffer than the tree. The trunk is stiffer along it’s axis than in the other two directions, while the rest of the tree is stiffer in radial direction (the main branch direction) than in the other two directions.
Mass of the ball
I wanted the tree to hang and bend under the weight of the balls, so a point mass is added to the reference point of each ball. This scales with the radius of the ball squared (proportional to the surface area) so different radii influence the results in an intuitive way.
Finding surfaces to tie
To create the script underlying the plug-in, the surfaces that need to be tied need to be specified. If would be possible to do this based on their position, but in this case, I was lazy and simply used all surfaces of the instance. Why make things more difficult than you have to?
I tested the plug-in on my five-year-old daughter and she was very clear that the most important thing of all (apart from having a star on the top of the tree) was to make sure it had the right colours. So, especially for A.Q. (and because I agree with her in this sense) the trunk is brown, the tree is green and the star is yellow.