ACES Namelist Properties
last modified: 1 April 2003
It is easier to explain the namelist as a group of patterns instead of as a
group of distinct keywords. Every key token (the name of a keyword or ACES
State Variable) has an associated value token of a known type. Currently, the
allowed types are: handle, string, long integer, and double.
- Handles
Handles are strings that dereference to a number or integer index. An
example of this is the CALC state variable. When the parser reads
'CALC=SCF', it scans the CALC lookup table for the case-insensitive string
that matches 'SCF'. Upon finding a match, the value of CALC is set to the
offset of 'SCF' in the table. In this case, CALC is set to 0 (zero) since
SCF is the first element. Alternatively, the namelist could have read
'CALC=0' and the effect would be the same.
- Some keys take boolean values like 'SYMMETRY=ON' or 'ECP=OFF'. For these
cases, the key token may be speficied without a value and the parser will
assume the value is 'ON'. Similarly, the negation operator '!' may be used
to turn the value token to 'OFF'. An example is 'sym,!ecp' meaning
'SYM=ON,ECP=OFF'.
- Strings
Strings are character arrays that are treated differently depending on the
actual key token they define. There are two types: plain text strings and
array strings.
- plain text strings
- Currently, only the BASIS key token accepts this type. This means
the exact case-sensitive value token read in for BASIS is used to find
the basis set definition in the GENBAS file.
- array strings
- matrices
- The state variables OCCUPATION, IP_SYM, EA_SYM, etc. are entered
as matrices loosely defined as irrep-by-spin. This means the parser
expects to find 'spin' columns of 'nirrep' rows. The row delimiter
is a dash and the column delimiter is a forward slash.
- Here are some examples:
(4 irreps, 2 spins)
'occ=1-1-2-2/1-1-2-2',
(2 irreps, 1 spin)
'ip_sym=1-0',
(8 irreps, 3 spin pairs)
'ee_sym=1-1-1-1-0-0-0-0/1-1-1-1-0-0-0-0/1-1-1-1-0-0-0-0'.
- For future expansion, negative values may be surrounded by
parentheses. Observe: 'future_token=(-1)-(-2)/3-4'.
- sets
- Sets are merely one-dimensional arrays of values. The set
delimiters are the same as the matrix ones except that the dash
specifies a range of values and the forward slash separates single
values. Currently, the only key tokens that accept this type of
string are: DROPMO, FD_IRREPS, ESTATE_SYM, QRHF_GEN, QRHF_ORB, and
QRHF_SPIN.
- Here are some examples:
(drop orbitals 1, 2, 3, 10, 11, and 12) 'dropmo=1-3/10-12',
(compute frequencies of modes that transform as irreps 1, 3, and 4)
'fd_irreps=1/3/4',
(add an electron to the third lowest virtual of irrep 2 and remove
an electron from the highest occupied of irrep 4)
'qrhf_gen=2/(-4),qrhf_orb=3/1'.
- NOTE: This syntax is very different from the previous
versions. Some value tokens may be allowed by any version but may
mean entirely different things. For example, 'DROPMO=1-31' used to
mean dropping orbitals 1 and 31 from the correlated calculation. If
that string was parsed by the new xjoda, vtran would attempt to
remove every orbital from 1 to 31 from the correlated calculation.
Additionally, QRHF_GENERAL would have accepted the value string
'2/-4' before, but now negative values must be surrounded by
parentheses as seen in '2/(-4)'.
- (long) Integers
Parsing value tokens of integers is fairly straight forward. For example,
'print=1' and 'charge=-1'. Notice, the CHARGE value token is not set off by
parentheses. This is because the parser knows the CHARGE state variable only
accepts values of type integer.
- There is one special state variable that recognizes units appended to
the value and that is MEMORY. Recognized units are (b)ytes and (w)ords with
SI prefixes (k)ilo, (m)ega, and (g)iga. The scaling factor is 1024, not
1000.
- Doubles
Although we have this capability, there are no key tokens with values of
this type. Examples would be: 'double1=1.', 'double2=-2.d0',
'double3=3.5e-6'.
Version 2.3 introduced environment variable awareness for value tokens. It is
now possible to enter a value token as "${VARNAME}" and have xjoda pull the
value from the shell environment. The most practical application of this
would be to loop over variables in a shell script that define various keywords.
Here is an example:
#!/bin/sh
cat <<. >ZMAT
envvar test job
H
H 1 R
R=0.7
*ACES2
calc=\${CALC}
basis=\${BASIS}
.
for CALC in scf ccsd
do export CALC
for BASIS in DZP TZP TZ2P
do export BASIS
clean # or other cleaning script
xaces2 > $CALC.$BASIS.out
done
done
clean
exit