Manual:The parser
From OctopusWiki
The parser is the part of octopus that reads user instructions to know what to calculate.
Contents |
Input file
Input options should be in a file called inp, in the directory Octopus is run from. This is a plain ACSII text file, to create or edit it you can use any text editor like emacs, vi, jed, pico, gedit, etc. For a fairly comprehensive example, just look at the file PREFIX/share/octopus/samples/Na2.
At the beginning of the program liboct reads the input file, parses it, and generates a list of variables that will be read by Octopus (note that the input is case independent). There are two kind of variables, scalar values (strings or numbers), and blocks (that you may view as matrices).
Scalar Variables
A scalar variable var can be defined by:
var = exp
var can contain any alphanumeric character plus _, and exp can be a quote delimited string, a number (integer, real, or complex), a variable name, or a mathematical expression.
Mathematical expressions
The parser can interpret several expressions in the input file and assign the result to the variable, the arguments can be numbers or other variables. Supported operations are:
In the expressions all arithmetic operators are supported (a+b, a-b, a*b, a/b; for exponentiation the syntax a^b is used), and the following functions can be used:
sqrt(x)- The square root of
x. exp(x)- The exponential of
x. log(x)orln(x)- The natural logarithm of
x. log10(x)- Base 10 logarithm of
x. sin(x),cos(x),tan(x),cot(x),sec(x),csc(x)- The sine, cosine, tangent, cotangent, secant and cosecant of
x. asin(x),acos(x),atan(x),acot(x),asec(x),acsc(x)- The inverse (arc-) sine, cosine, tangent, cotangent, secant and cosecant of
x. sinh(x),cosh(x),tanh(x),coth(x),sech(x),csch(x)- The hyperbolic sine, cosine, tangent, cotangent, secant and cosecant of
x. asinh(x),acosh(x),atanh(x),acoth(x),asech(x),acsch(x)- The inverse hyperbolic sine, cosine, tangent, cotangent, secant and cosecant of
x.
You can also use any of the predefined variables:
pi-
3.141592653589793, what else is there to say? e- The base of the natural logarithms.
falseorforno- False in all its flavors.
trueortoryes- The truthful companion of
false.
Blocks
Blocks are defined as a collection of values, organised in row and column format. The syntax is the following:
%varexp | exp | exp | ...exp | exp | exp | ......%
Rows in a block are separated by a newline, while columns are separated by the character | or by a tab. There may be any number of lines and any number of columns in a block. Note also that each line can have a different number of columns. Values in a block don't have to be of the same type.
If Octopus tries to read a variable that is not defined in the input file, it automatically assigns to it a default value. All variables read are output to the file status/out.oct. If you are not sure of what the program is reading, just take a look at it. Everything following the character # until the end of the line is considered a comment and is simply cast into oblivion.
Documentation
Each input variable has (or should have) its own documentation explaining what it does and the valid values it may take. This documentation can be obtained online or it can also be accessed by the oct-help command (not available in Octopus <= 2.1).
Good practices
In order to ensure compatibility with newer versions of Octopus and avoid problems have in mind the following good practice rules when writing input files:
- Although input variables that take an option as an input can also take a number, the number representation makes the input file less readable and it is likely to change in the future. So avoid using number instead of values. For example
Units = 2
should not be used instead of
Units = ev_angstrom
- Do not include variables that are not required in the input file, specially declarations of values that are just a copy of the default value, rely on default values. This makes the input file longer, less readable and, since defaults are likely to change, it makes more probable that your input file will have problems with newer versions of Octopus.

