Step-by-Step Tutorial: Homework of Session 2 - Level 2

NOTE: This tutorial was updated on 08/2016 to match the updated version of the platform

If you would like to watch the second session of the Drone Workshop again or in the case you missed it, you can access the full recording below.

Level 2


Since our drone consists of different components from different materials, they have to be connected somehow. In this case we are manly using screws to connect these parts. One of the most loaded connection is the one between the drone arm and the two base plates.
The decisive factor for the stability of this connection is the preload between the base plates and the arm which can be controlled by the tightening of the nut. The simplification we made in the first level of this homework can therefore have a big impact on the deformation of the arm.


Our aim is to set up the deformation of the drone arm when applying the lift force on it. In contrast to the level 1 exercise where we just fixed two sides of the arm, in this level we will use the full assembly of the drone arm including the screw connection to consider the preload of the screws and the connection between arm and base plates.

Additonaly to this we will investiage the effect of mesh refinement on the result. We will therefore perform the simulation with a coarse and a fine mesh.

Step-by-Step instruction

Note: These instructions refer to the coarser mesh. For the finer mesh just replace the refinement parameters for both mesh refinements by the values which you find at the end of this tutorial.

First of all you have to import the geometries into your SimScale workspace. For this, you only have to click on this link and a project with everything you need will be added to your workspace. Please note that this can take several minutes.


  • In the Mesh Creator tab, click on the geometry Drone_Arm_Assembly
  • Then, click on New Mesh button in the options panel.
  • Select Tetrahedral with local refinements and define following parameters:
  • Name: Mesh_Coarse (optional)
  • Maximum mesh edge length [m]: 0.001
  • Minimal mesh edge length [m]: 0.0006
  • Specify the mesh order: First order
  • NETGEN3D fineness parameter: 2 - Coarse
  • Activate NETGEN3D optimization: true
  • Number of computing cores: 4
  • Click on Save to save the setting.

Now we have defined a range for the base mesh size which is fine for regions where we are not expecting high stress. Here you should keep in mind that, in general, the mesh size is related to the local accuracy of the simulation. It is therefore necessary to refine the mesh in those areas where high stresses is expected and the curved surfaces with very small curvatures (fillets) where the stress concentration will appear.

We will now apply local refinements on two areas where we expect high stresses and high deformations.

We will start with the two screws which connect the arm with the two base plates.

  • Click on the New button under Mesh Refinement.

  • Specify the following parameters
  • Name: Screws Refinement (optional)
  • Maximum mesh edge length: 0.0008
  • Minimal mesh edge length: 0.0004
  • NETGEN3D fineness parameter: 3 - Moderate

Now we have to assign the volume where we want apply this mesh refinement.

  • Change the selection mode to volume (1) select the volumes in the 3D model window on the left side by clicking on them with the left mouse button (2) ; to add them to the list, just click on the Add selection from Viewer button in the middle column (3) and Save your settings (4).

  • Create an additional mesh refinement by clicking on the Mesh refinements in the project tree and then Click on New button.

  • Now we will add refinement to some curved surfaces of the arms and the base plates. Specify the refinement as follows:
  • Name: High Stress Zone Refinement (optional)
  • Maximum mesh edge length: 0.0003
  • Minimal mesh edge length: 0.0001
  • NETGEN3D fineness parameter: 3 - Moderate
  • Choose faces for Filter for entity types and click on so that you can select the faces which you need to refine. For this, click on the eye symbol in the model tree to hide them (solid 3 and solid 4).

  • Select all the faces shown in the figure below and click on Add selection from viewer to assign the mesh refinement to all the curved surface and Save the settings.

  • Now our mesh is ready for computation. Click on the Coarse_mesh in the project tree and click the Start button.

  • Once the mesh computation is finished, you will see Finished status in lower left corner and in the viewer you will see the meshed geometry.

Simulation Setup

  • After the mesh is completed we will set up the simulation. Click on the Simulation Designer tab.

  • Click on New button to create a new simulation and give it a suitable name- Mesh_Coarse (optional).

  • Select Static analysis - advanced as Analysis Types, set Nonlinear analysis to True and then click on Save.

Going forward, this tree will guide us through all necessary steps. Please note that some of the items are optional.

Domain selection

  • Next you have to specify which mesh you want to use for your simulation. Click on Domain item in the project tree and select Drone_Arm_Assembly mesh from the menu and then Save.

  • Select surfaces in Rendering mode to hide the mesh in the geometry.


Since we are simulation an assembly of five parts it is necessary to define ** Contacts** which are describing the kinematic behaviour of the parts.

  • Click on the Contacts item in the project tree which will open a new middle column menu where you can add new contacts by clicking on the New button.

  • First hide the mesh in the geometry by selecting Surfaces in the rendering mode located at the Top menu.


Now we have to create two contacts which are connecting the contact surface of the arm with the base plate. To select them graphically it is necessary to hide some of the parts.

Contact #1\

  • Name: Upper_Arm (optional)
  • Type: Bonded Contact
  • Master entitiy: faceGroupOnGeoFaces_20
  • Slave entity: faceGroupOnGeoFaces_212

Contact #2

  • Name: Lower_Arm (optional)
  • Type: Bonded Contact
  • Master entitiy: faceGroupOnGeoFaces_68
  • Slave entity: faceGroupOnGeoFaces_189

Physical Contacts

Next we will define the Physical Contacts. In contrast to Contacts, they are also covering the physical interaction between parts. We will use them to specify the contact between the head of bolt respectively the nut and the base plate.

  • Click on the Physical Contacts item in the project tree. This will open a new middle column menu where we first will adapt two general settings:
  • Solution method: Augmented Lagrange
  • Nonlinearity resolution: Newton
  • Save the settings.

Now we will create a new contact by clicking the New button.

This will add a new contact to the project tree.

  • Specify the following parameters:
  • Name: Screw_1 (optional)
  • Type: Frictionless augmented lagrange
  • Master entitiy: faceGroupOnGeoFaces_35, faceGroupOnGeoFaces_46 (contact surface of the base plate with the screw connection)

  • Slave entity: faceGroupOnGeoFaces_225, faceGroupOnGeoFaces_237 (contact surface of the screw connection with the base plate)

Please repeat the step for the other screw. The result should look like this:

Select Solid Materials

Now we define and assign material properties to the different parts.

*Click on the Material item in the project tree. This will open a middle column menu where you can edit and create materials and assign them to volumes. Click on the New

Now you can define your new material based on your own material properties or access our *Material Library which includes ready-to-use material models for several materials.

We will start with the manual definition of an ABS Thermoplastic.

  • Specify the following parameters:
  • Name: ABS Thermoplastic
  • Young’s Modulus [N/m2]: 1800000000
  • Poisson’s ratio: 0.35
  • Densiy[kg/m3]: 1040

And assign in to all parts except the screw connection (volumeOnGeoVolumes_0, volumeOnGeoVolumes_1, volumeOnGeoVolumes_2)

  • Save the settings.

Next we will create and assign the steel material model to the screw connection.

  • Add an additional material to your project tree by going back to Materials and then clicking on

Now we will access our material library instead of creating the material model manually. Click on the Import from material library which will open a widget.

Please select steel from the list on the left side and save your selection by clicking on Save.

Now assign the material to the two screw connections (volumeOnGeoVolumes_3, volumeOnGeoVolumes_4)

Boundary Conditions

Next we can start to define the boundary conditions.

There are two kinds of boundary conditions for static structural simulations.

  • Constraint conditions are used to limit the degrees of freedom of the model.
  • Load conditions are applying an external load to the model

*First we will add four constraint boundary conditions which are needed.


This bounday condition is necessary to define a relative reference point for the crew. We will define the centre of the screw as prescribed. This will make sure that the screw is stretching symmetrically.

  • Click therefore on the Constraint under Boundary Conditions in the tree and then click New.

  • Change the following parameters:

  • Name: Screw_1
  • Type: Remote displacement
  • Translation: All displacements (x, y, z) are prescribed with a value of 0
  • Rotation: All rotations (x,y,z) are prescribed with a value of 0

  • External point: Explicit definition´
  • x [m] = 0.0226
  • y [m] = 0.0157
  • z [m] = 0.0311
  • Deformation behavior: deformable

  • Finally map this boundary condition to the two opposite faces of the screw head (faceGroupOnGeoFaces_234, faceGroupOnGeoFaces_235) and then click on Save to save yoru settings.

The role of this boundary conditions is similar to Screw_1 but related to the second screw.

  • Change the following parameters:
  • Name: Screw_2
  • Type: Remote displacement
  • Translation: All displacements (x, y, z) are prescribed with a value of 0
  • Rotation: All rotations (x,y,z) are prescribed with a value of 0
  • External point: Explicit definition
  • x [m] = 0.0311
  • y [m] = 0.0157
  • z [m] = 0.0226
  • Deformation behavior: deformable
  • Finally map this boundary condition to the two opposite faces of the screw head (faceGroupOnGeoFaces_256, faceGroupOnGeoFaces_257) and save your settings by clicking on Save.


This boundary condition is required because we are using a quarter model of the drone.

Create a new constraint boundary condition by clicking the New button after going back to Constraints in the project tree.

  • Change the following parameters
  • Name: Symmetry
  • Type: Symmetry Plane
  • Please assign all surfaces of the drone base plates which are bounding with the two imaginery symmetry planes and therefore behaving like a symmetry plane (faceGroupOnGeoFaces_25, faceGroupOnGeoFaces_32, faceGroupOnGeoFaces_49, faceGroupOnGeoFaces_50, faceGroupOnGeoFaces_77, faceGroupOnGeoFaces_80, faceGroupOnGeoFaces_90, faceGroupOnGeoFaces_91, faceGroupOnGeoFaces_3)

Fix in y-dir

The last constraint boundary conditions we have to define is a fixiation in Y direction. This is only necessary for Y direction since the model is already fixed in X and Z direction by the symmetry plane boundary condition.

  • Create a new constraint boundary conditions following the step mentioned above.

  • Change the following parameters:

  • Name: fix in y-dir
  • Type: Fixed value
  • x displacement: unconstrained
  • y displacement: prescribed with a value of 0
  • z displacement: unconstrained

In contrast with the other three boundary conditions, we will map this one only to a single node of the model. For graphical selection you have to change the selection mode to nodes.


We are now on the home straight. We will apply the lift created by the propeller on the arm. We therefore apply load boundary condition.

Create a new Load boundary condtion by clicking on New button after to going to the Load entry in the project tree.

  • Change the following parameters:
  • Name: Lift
  • Type: Force

Again, in this tutorial we want to investiagte and compare several values for the lift force. Instead of creating four different simulations, we will use a smart work flow.

  • Define a force of 3N in Y direction and click on the small function button below the field (1). That will open a new field (2) where you have to enter the following Formula: 3*t. This will increase the force for every Timestep (t) and create for every of this forces a dedicate simulation result.

  • Finally assign this boundary condition to the top surface of the engine mount.

Numerics, which is the next item in the project tree, can be skipped since the default settings are fine.

Simulation Control

Click on the Simulation Control item in the project tree to specify how fast and accurate you want the simulation to be computed.

  • Change following values/settings:
  • Timestep definition: Auto
  • Simulation interval: 1
  • Initial time step lengths: ** 0.25**
  • Number of computing cores: 8 (that will accelerate the computing process)

Please note that static linear simulations are not solved iteratively. The simulation time here is a kind of ‘pseudo-time’ which is for example used to modify the lift force based on the function we defined. The calculation will stop automatically when an aimed residual is reached.

Result Control

  • Click on the Result Control item in the project tree which will open a new middle column menu.

  • Click on the New button near *Edge calculation

  • Now define the Result Control item as follows:
  • Name: Arm
  • Type: average
  • Field selection: displacement
  • Component selection: y displacement
  • Map it to the leading edge of the arm (edgeGroupOnGeoEdges_378) by first changing the render mode to surface with wireframe and choose edges for Filter for entity types (1).
  • Change the selection mode to Edges (2) and select the leading ege (3) and click Add selection from viewer (4).
    *Click Save to save all settings (5).

Simulation Runs

  • To start the simulation, click on the Simulation Runs item in the tree and click on the New button.

You can now start the simulation run by selecting it from the project tree and then click on the Start button.

  • Once your simulation is finished, you will see a Finished status in the lower left corner.


  • Click on Post-processing tab.

First of all we will take a look at the Result Control item we added.

  • Expand the Edge calculation item in the project tree and click an the lowest element.

This will plot the change of average displacement for the arm versus the ‘Time’ which is equal to the lift force. The graph shows how the displacement is increasing with the force.

  • Next we will take a look at the 3D result. Click on the Solution fields in the project tree. Now you can perform the solution field post-processing. Please use the instructions of Level 1.

Keep in mind that this simulation contains four load cases. This is why you can switch between this loads by using the related time step (0.25 = 0.75N, 0.5 = 1.5N, 0.75=2.25N, 1 = 3.0N)

  • To complete this level please repeat the meshing and simulation setup for the same geometry with a higher refinement:

Screws Refinement

  • Maximum mesh edge length: 0.0004
  • Minimal mesh edge length: 0.00002
  • NETGEN3D fineness parameter: 3 - Moderate

High Stress Zone Refinement

  • Name: High Stress Zone Refinement
  • Maximum mesh edge length: 0.00015
  • Minimal mesh edge length: 0.00005
  • NETGEN3D fineness parameter: 3 - Moderate

Congratulations, you have completed the Homework of Session 2 - Level 2 and can now move on to Session 3:

Homework of Session 3 - Level 1


Hey what type of contact to choose for upper arm and lower arm.


the type should be Bounded Contact.

I also added it to the tutorial.



Slightly off-topic: I tried to generate a 2nd order mesh, based on the same parameters of the coarse mesh as described in the tutorial.
I get an error: the system identifies “a problem in the surface mesh generation”.
Any hint?

I was following the steps of the part two of the tutorial (correctly, I hope), but even with the coarser mesh I’m not able to reach a solution. The solver mainly hangs at 0.734 seconds and is not able to converge. I also tried to increase error margins but with no success.
It seems to me that the structure reaches some critical configuration. I wonder if it is a matter of some mistake or some different solver/parameter has to be used.

Hey @claudio ,

maybe you ignored a point in your settings. If you do not solve your problem alone I am offering you my help.

If you need help make sure you share the link to your project here in this thread.

Good luck!

Hi i made coarse mesh and got some nice results. Then i made fine mesh and i got such error
: “CA-BoundaryConditionTypes-Load.xml could not be resolved!” when i try to add constraints or loads. Btw contacts work well.

Thank you jousfem,
I went through the HW again but couldn’t find anything…
the link is the following:

Hey @claudio ,

just saw your answer. I will have a look at it and let you know where your mistake was. IF I can find one!

Cheers buddy!

So @claudio ,

found your mistakes. You have chosen the wrong faces for screw 1 in your boundaries. And I fixed the simulation control settings (\rightarrow see attachements)

Here is the link to your project again:

Everything is fine. I did the coarse mesh for you. You just have to fix the settings for the fine mesh and rerun your simulation.

Good luck mate :slight_smile:


Found another mistake 10 minutes later. Your convergence seemed suspicious to me. So I checked the load. See the picture. You need to type in 3 in the f_y field NOT 3*t.

Thank you very much jousefm,
you saved my day. That’s a good reminder for me to check also graphically
which surfaces are selected.
I was following the screenshots of the tutorial and there might be some
wrong faces selected.
Anyway thanks again for the help, and amazing tutorial, too…


While performing the level 2 homework for the second time with more screw and high stress refinement, I am unable to perform the meshing operation. Here is the screenshot of the error message that it display.

Hey @debroy84863568 ,

please make sure you check the other threads. Your problem has already been solved by @gholami .
Hope this helps you. If not I will have a look at your project.

Happy simulating!


Thanks guys for your help :smile:

I had the same situation. And if you haven’t solved your problem yet, then change order mesh from Second order to First order and everything should be fine.

Hi everyone!
I followed the steps of the homework - level 2 but I obtained another plot for the average displacement of the arm. I checked twice the homework tutorial and could´t find any error.

Thank you

@jousefm could you explain your logic? Cause to me it looks fine. We want to apply our load in 4 steps, gradually. We want to do it in a single simulation. So we set Simulation interval (total time) at 1 (which refers to 100%) and step as 0.25. Then when we multiply our ultimate load of 3 [N] by subsequent time steps we will get gradually increasing load at the drone’s frame.

Therefore we have time / load for:
step 1: 0.25 / 0.75 [N]
step 2: 0.50 / 1.50 [N]
step 3: 0.75 / 2.25 [N]
step 4: 1.00 / 3.00 [N]

Also, I know it’s Monday, but… Don’t you think there is something wrong with the displacement plot? Maybe Milad has pasted wrong image? Look at the curve and scale – does it have any sense to you?
This is how my plot looks like (coarse mesh):

Hi @Maciek ,

what you say is totally fine and correct. In the tutorial we type in 3N into the f_y[N] field and in the formula the time-dependency. Because 3\cdot t has NOT N as a unit. It would be more like N \cdot s. Therefore we put the time-dependency in the Formula field as mentioned in the tutorial. Does this make sense? I mean it is a simplistic way to explain the problem but I think that is the explanation for it.

@Iria & @Maciek Here are my plots for the displacement (coarse and fine mesh).



I think our first point is okay because @Milad_Mafi had -8.4703e-22 which is almost zero. But for his last iteration he goes to a maximum of -5e-5. Our displacement changes into a positive value whereas Milad’s stay negative. Maybe the error is negligible, maybe not.

If you have questions do not hesitate to ask. This is why we have the forum :smile:

Cheers and good luck!