2018–2019

Flexibility of Crystal Networks

Computer Science/Mathematics/Materials Science/Chemistry

This project aims at exploring, with new mathematical tools, the rigidity and flexibility of crystal frameworks, using data available in the Crystallography Open Database (COD). The crystal is modeled as a periodic graph with fixed bond lengths. The project involves several phases, which can be formulated as self-contained subprojects. They range from automating the extraction of various types of graphs from COD files to coding more advanced algorithms and experimenting with numerical methods on different software platforms. The individual subprojects can be carried out by different student partners, depending on their skills and interests.

Required skills: strong coding skills, possibly some experience with mathematical software or interest in learning a new one, interest in applying mathematical techniques to a problem in chemistry/materials science; rock-solid work ethic. Skills by sub-project: (1) strong Python coding skills, including parsing and processing files in several standard or non-standard formats. Prior knowledge of some basic crystallography and graph theory is welcome but not essential, as it can be learned quickly; (2) experience with at least one kind of mathematical software such as Mathematica, Sage, or Julia, willingness to learn another one; or (3) strong object-oriented programming skills, e.g., in Java. This more advanced aspect of the project requires a research partner with computer science-level background in data structures and algorithms, but such skills are not necessary for parts (1) and (2).

Benefit for the student: become engaged in an ongoing software development project that aims at making available to the larger computational chemistry/computational materials science community a new method for modeling and analyzing the flexibility of crystalline matter; learn and experiment different mathematical software techniques.

Benefit for the project: we already have developed various code prototypes that will serve as models or starting points (in Python, Mathematica and Java/C++). The project will be advanced if some of these existing prototypes (with already identified performance shortcomings) become fully functional or more efficient, or if new exploratory stand-alone small software prototypes (to be discussed with the research partner, and based on their experience and interests) will be developed.