What is the Aims Gem?

The Aims gem is a ruby interface to the FHI-Aims ab-initio molecular simulation package published by the Fritz-Haber Institute [aimsclub.fhi-berlin.mpg.de/]. It provides a set of tools for parsing and generating the input and output files for AIMS.

The aims gem is written by Joshua Shapiro and release under the MIT license.

Copyright © Joshua Shapiro 2012

Why should I use the Aims Gem?

If you like Ruby, and you like AIMS, then this gem provides you with a pure Ruby object-oriented interface to AIMS. You can use this library to:

  • Simplify the generation of complex geometries

    • Bulk and common surface geometries of ZincBlende and Wurtzite are predefined.

  • Automate the generation of geometry and control files

  • Parse the output of Aims into ruby objects for analysis

  • Summarize the output of AIMS using simple scripts that come with the gem

  • Whatever else you can imagine..

Installation

To use this gem, you will need to have an installation of ruby. If you own a mac or a linux machine, then you already have ruby. If you have a windows machine, then you need to install ruby. The recommended way to install Ruby on windows (as of June 2012) is via rubyinstaller.org .

Once you have ruby, then just invoke the following from a terminal window.

gem install aims

Usage

Using the Aims GEM to generate geometry.in files

The following code can be used interactively in an irb ruby interpreter, or can be invoked in a ruby script.

Example 1: Generate a primitive unit cell of Silicon

require 'aims'
include Aims

# Define the lattice constant
lattice_const = 5.43

# Define the basis
a1 = Atom.new(0,0,0, "Si")
a2 = Atom.new(lattice_const/4, lattice_const/4, lattice_const/4, "Si")

# Define the primitive vectors
v1 = [lattice_const/2, lattice_const/2, 0]
v2 = [lattice_const/2, 0, lattice_const/2]
v3 = [0, lattice_const/2, lattice_const/2]

# Define the unit cell
uc = Geometry.new([a1, a2], [v1, v2, v3])

# Output the unit cell
puts uc.format_geometry_in

Example 2: Shortcut for generating a primitive unit cell of Zinc-Blende

require 'aims'
include Aims

zb = ZincBlende.new("Ga", "As", 5.65)

# Get the bulk geometry
puts zb.get_bulk.format_geometry_in

And here is how you get a (100) surface with 7 layers and 20 angstrom of vacuum

layers = 7
vacuum = 20
puts zb.get_001_surface(layers, vacuum)

And here is how you can constrain the bottom three layers

constrain = 3
puts zb.get_001_surface(layers, vacuum, constrain)

Scripts that come with the Aims GEM

There are currently two scripts that come with the GEM

aims_output.rb

Quickly output the total energy, and timing information from the calculation to make sure everything went smoothly.

Don’t use this as a replacement for actually looking at the output of Aims.

usage: aims_output.rb [options] file1 [file2 ...]
    -s, --step [N]                   Output information for relaxation step.
                                     Specify an integer, 'first', 'last', or 'all'
                                     Default is 'all'
        --debug                      Debug output
        --geometry-delta             Display change from input geometry to final geometry
    -c, --self-consistency           Output self-consistency information
    -f                               Output max force component for each geometry relaxation step
    -t                               Output timings

aims_summary.rb

Display a one-line summary for a list of calculations in tabular form. Useful for copying and pasting into a spreadsheet.

usage: aims_summary.rb file1 [file2] ...