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] ...