Grain Boundary Crystallography


This website archives software resources, test data, examples, and tutorials for grain boundary crystallography calculations. It is currently under construction, but ultimately will include programs for the two-dimensional (2D) and three-dimensional (3D) grain boundary crystallography analysis with test data, examples, and tutorial instructions.


News


The Materials Science & Engineering Department of Carnegie Mellon University will host a workshop on 3D Microstructures Aug. 13-15, 2025. For details, see:

Workshop on Methods for Three-Dimensional Microstructure Studies


Overview


The resources on this website were developed by G.S. Rohrer, together with a long list of students and collaborators at Carnegie Mellon University over a long period of time, beginning in about 2000. These programs take 2D and 3D orientation maps and calculate distributions of grain boundary areas and properties. In many cases, they are not unique. Similar or identical calculations can be performed using resources such as MTEX, Dream.3D, OIM Analysis, and others. As always, every resource has its advantages, unique capabilities, limitations, and drawbacks. These resources have some unique capabilities and the goal here is to make them available to users as needed.


Preliminaries


The programs are mostly all in Fortran. As a result, they should be relatively platform independent. However, they were specifically developed on Macintosh computers and I do not have any guidance for using them on other platforms. They were developed with Xcode and compiled with GCC. You can get the compiler at sourceforge. The linked page provides instructions for downloading and installing the compiler. I am currently using the version: gcc-11.2-bin.tar.gz. Other tools that are necessary for the graphic displays are GMT, ImageMagick, and Ghostscript. You will also have to make sure that GMT is in the PATH of your profile file. All of these programs are also available on a GitHub site, gbXstallography. However, GitHub limits the size of files it can host and, for better or worse, orientation maps can be gigantic. So, to provide sample data and results all in one place, I created this resource.


Each program comes in directory that contains code (main.f) various subroutines (symmetry.f, sub.f, sub2.f), and a common file. There is also a file named input.txt. This is where you set the program parameters. These parameters are defined in the input.txt file, immediately after the parameter list. Finally each program has a Makefile to compile the program (type 'make' on the command line) and remove executables (type 'make clean' on the command line). To use the programs, I open a terminal window, navigate to the folder with the program, type make to compile (if it has not be compiled in this location already), and then type the name of the executable to run it. The input data is expected to be found in the same folder and the output is written to files in the same folder.

Programs


Represent grain boundary traces on a plane as discrete line segments (extract_GB_traces)

This program extracts grain boundary lines segments from 2D orientation maps. For example, it will read *.ang files and produce a list of line segments (specified by the coordinates of the end points) and the Euler angles of the grain on each side of the boundary



Regularize grain boundary trace data (condition_segs)

This program prepares line segment data for further analysis. Segment data from different sources comes in different formats. This program converts data to a uniform format so that it can be read accurately by the other programs on this site.


Bin GB data into discrete distributions (calc_discrete_dist)

This program accepts line segment (2D) or triangle (3D) data and computes the one-dimensional (1D) disorientation angle distribution, two-dimensional grain boundary plane distribution (GBPD) irrespective of disorientation, and the five-dimensional (5D) grain boundary plane distribution (GBCD). The distributions are computed using a finite set of discrete bins that span the parameters. 2D data is interpreted stereologically, 3D data is interpreted without approximation. There is also an option to interpret the 2D data as columnar. The 1D distribution can be visualized in a plane using any graphics program. The GBPD and GBCD are visualized using graph_discrete_dist


Produce contour plots of discrete GB distributions (graph_discrete_dist)

This program produces graphs of grain boundary distributions (axis-angle distributions, the grain boundary plane distribution irrespective of disorientation, and grain boundary plane distributions at fixed misorientations) using discrete distributions that were calculated by calc_discrete_dist.


Graph GB distributions from 3D data without discretizing the 5D GB space (3D_dist_graph)

This program produces graphs of grain boundary area and property distributions from 3D data. Information about individual grain boundary triangles in a 3D microstructure (such as the *.ph file output from D3D) is used as input. The program can calculate the one-dimensional (1D) disorientation angle distribution, the 2D grain boundary plane distribution irrespective of disorientation, the grain boundary plane distributions at fixed disorientation, or the value of the distribution at a list of points in the 5D space.


Deconstruct 3D orientation maps into parallel layers (voxel_to_pixel)

This program takes 3D orientation maps, typically created in Dream.3D, and creates *.ang files for each layer. The translation of 3D data to 2D data is a necessary step for the processing of triple line data to calculate grain boundary dihedral angle distributions or grain boundary energy distributions. The expected input is a text file, created by Dream.3D, using the "Export Los Alamos FFT File" filter. The output is an orientation map for each layer, in the *.ang format, but without a TSL compatible header.


Find Triple Junctions (find_tjs)

This program analyzes lists of grain boundary line segments to detect groups of three that meet at a single point, a triple junction. It then writes a file containing all of the segments meeting at a triple point.


Find triple junctions on parallel layers that match (match)

This program analyzes lists of triple junctions on parallel layers and finds those that match based on the crystal orientations. The matched junctions can then be used to interpolate triple lines between the layers.



Page last updated June 17, 2022