Module 3: Finite Element Method calculation of averaged elastic constants

Project Brief

In this project, we will use OOF2 to investigate how the anisotropic elastic response of individual grains translates into the elastic response of a polycrystal. Successful completion of this work will demonstrate competence in using FEM software to analyze material elastic response.


You will produce a short report documenting your findings. Your report should contain a separate section for each of the tasks listed below, and provide the explicit deliverables requested for each task indicated by the [Report] below.

Your report should be formatted as a single pdf document comprising your report. You may wish to write your report in latex and convert using pdflatex, or in markdown and convert using pandoc report.text --to latex --out report.pdf; alternatively, you can put together a clearly formatted jupyter notebook. (module load pandoc and module load texlive to have the most up-to-date versions of each).

You should creating a subdirectory called
and copying your work into that directory by 11:59pm on 28 February 2022. Late submissions will not be accepted; let me know in advance if you will have difficulty with completion.

Voronoi tessellation microstructure

For the project, we will use an artificial microstructure generated as a “Voronoi tessellation” (see wikipedia for more information); you can generate your own interactively here. Alternatively, if you have a microstructure that you would like to try out on your own, you are welcome to consider it. The image containing a Voronoi diagram is in /class/mse404ela/OOF2/Project/Voronoi200.png.

Anisotropic elastic response and orientation

We will work with anisotropic (cubic) crystalline grains. In OOF2, you can specify anisotropic material properties, but you will also need to specify the orientation of the crystal. Normally, when material properties are anisotropic, we report them relative to clear material axes, such as the cube axes in a cubic material (e.g., \(C_{11}\), \(C_{12}\), \(C_{44}\) are the cubic elastic constants, relative to \(\langle 100\rangle\) directions). In general, the [100] axis of a cubic material will not be pointing along the axis of load in a material, so we need to specify how the crystal axes align with our laboratory frame. This is the Orientation property in OOF2. This can be understood as a rotation matrix; if the three orthogonal material directions \(\mathbf{e}_1\), \(\mathbf{e}_2\), \(\mathbf{e}_3\) each point along the \(x\), \(y\), and \(z\) axes of our laboratory frame, then the rotation matrix \(\theta_{ij} = \mathbf{e}_{i,j}\) is the \(j^\text{th}\) component of the \(i^\text{th}\) material vector. There are many ways to represent the rotation necessary to bring these axes into alignment; one of the more straightforward for our purposes is a unit quaternion representation (see Quaternions and spatial rotation for more info). The primary advantage is that unit quaternions make forming a distribution of random orientations very easy; the python script will do just that. You will need to have numpy installed in a virtual environment to run the script; alternatively, for this problem, you can use the entries in the file random-orientations.txt to define your sample.

A1. Upload micrograph.

Copy the file Voronoi200.png into your working directory for this project. You may also want to copy random-orientations.txt to select random quaternions. Take the vertical size of the image to be 1 mm. Import the microstructure into OOF2.

A2. Pixel groups.

Construct your pixel groups for your grains.

A3. Materials properties.

Define the cubic anisotropic elastic constants for aluminum. In the spirit of ICME, use your DFT values for \(C_{ij}\). Attach these materials to the pixel groups.

Next, you will need to give each of your grains their own orientation. As they are random, you can select quaternions from the random-orientations.txt file; as long as each grain has a unique orientation, you will have produced a random “sample”.

A4. Skeleton.

Construct a 25-by-25 TriSkeleton over the micrograph. Use a “moderate” arrangement.

A5. Skeleton adjustment.

Use the annealing, smoothing, and edge swapping tools to improve the initial skeleton to your satisfaction.

Do not use the refinement tool at this stage, since we wish to keep the number of elements fixed to keep the solution times reasonably short.

A6. Generate mesh.

Synthesize a mesh from your skeleton.

A7. Equations and boundary conditions.

Specify solution of the in-plane displacement fields by solving the force balance equation. Set up the following boundary conditions corresponding to a fixed displacement at the left end, and an imposed stress on the right end:

  1. fix the left edge of the micrograph to have zero x-displacement,
  2. fix the bottom edge of the micrograph to have zero y-displacement,
  3. apply Neumann boundary conditions on the right edge; set p0 to 1e10, p1 to 0, and keep normal unchecked. This provides an \(xx\) stress of 10GPa and no \(xy\) stress across the right boundary.

A8. Solve.

Solve the FEM problem to a tolerance of 1E-11.

A9. Analysis.

A10. Suggested improvements.

Considering your analysis protocol, reflect on possible improvements to your estimate. How might you go about the following, and what would you expect to be the improvement?

A11. Sampling (bonus)

You have now estimated one value of the Young’s modulus for one orientation choice. You can automate the calculation for several samples by saving your log, and editing it into a script were one could successively input different random orientations to compute the Young’s modulus.