Chapter 1. Introduction

Table of Contents

The guiding principles of ohmms development

The guiding principles of ohmms development

ohmms is developed as object-oriented frameworks for materials research. The main applications built upon ohmms are to perform atomistic simulations to study various materials properties, e.g., interstitial-defect diffusions, the excitations in quantum dots. The secondary goal of developing ohmms is to provide the developers and users with simple interfaces to perform simulations and to write codes for new applications.

The design of ohmms has been dictated by the need not to compromise performance in high-performance computing environments and follows few simple rules. Of course, all these are learned from C++ books.

  • Use ANSI standard: compilers are getting better and using standard makes the implementation cleaner and portable.

  • Use generic algorithms: computer architectures are getting more complicated. Simpler, generic codes are easier for the compilers to optimize and have better chances to get better.

  • Lazy computation: do not create nor calculate anything until needed.

  • Lazy implementation: use better codes written by experts.

However, many compromises are made to make ohmms portable on common platforms. Not all compilers are created equal and many beautiful and elegant concepts in C++ often fail to work well on real machines due to inadequate compilers. Instead of using pure template-based implementations as desired, we mix template classes and concrete classes to reduce compiler time and to make it easier for the new developers who are not too familiar with advanced C++ to start writing codes for their applications.

We divide ohmms classes into two main categories:

  • Base packages: mostly template classes and simple utility classes and functions

  • Application packages: application-specific classes defined in namespace OHMMMS

Developers are expected to work on application classes with the functions provided by the base classes and the application classes that are already in use. The source documentation generated by doxygen is available here.