Dylan Jayatilaka

Daniel James Grimwood

Table of Contents
An Overview of TONTO
Welcome to TONTO
The mission of TONTO
Who is TONTO for?
How is TONTO different from other packages?
What can TONTO do?
How do I get TONTO
What do I need to compile and install TONTO
How do I use TONTO for calculations?
What do I need to start programming in TONTO?
Contributing code to TONTO
Citation and attribution in TONTO
Compiling and Installing TONTO
Compiler requirements for TONTO
System requirements for TONTO
Known problems installing TONTO
Compiling TONTO
Making the TONTO html documentation
Installing TONTO
What to do if compiling TONTO fails
Your system is not known to us
You are missing the BLAS and LAPACK libraries
There are Fortran compiler problems
There are Fortran code problems
There are foo preprocessor problems
Compiling the BLAS and LAPACK libraries
What you can do if a site_config file does not exist for your system
Using TONTO to do calculations
How to run a TONTO calculation
Writing an input file: the basics
What is an input file?
What does an input file look like?
How do I know which are the allowed input keywords?
What about keywords which aren't in this manual?
How do I know when to enter data?
What kinds of data are there?
How do I enter data?
How do I enter simple data?
How do I change units with simple data?
How do I enter derived data?
How do I enter lists of derived data?
Altering the input order for lists of derived data
Embedded commands in lists of derived data
Examples of derived data input
Example input for a GAUSSIAN
Example input for a SHELL
Examples of TONTO input files
A restricted Hartree-Fock calculation
Using the library basis sets
Input from a gaussian checkpoint file
Outputting a MORPHY input file
A constrained X-ray wavefunction calculation
An MO pair-energy decompisitoin
Morokuma-like analysis
Spin density plot
ELF density plot
A ZORA relativistic calculation, gzz tensor calculation, and parity violating weak force energy shift calculation
Keyword documentation for TONTO
The online documentation
The short documentation
The long documentation
Finding keywords in TONTO online
ATOM
Purpose
Synopsis
Default input data order
Listing of keywords
BASIS
Purpose
Synopsis
Default input data order
Listing of keywords
CRYSTAL
Purpose
Synopsis
Default input data order
Listing of keywords
DFTGRID
Purpose
Synopsis
Default input data order
Listing of keywords
GAUSSIAN
Purpose
Synopsis
Default input data order
Listing of keywords
MOL
Purpose
Synopsis
Special note
Default input data order
Listing of keywords
PLOTGRID
Purpose
Synopsis
Default input data order
Listing of keywords
POINTGROUP
Purpose
Synopsis
Default input data order
Listing of keywords
REFLECTION
Purpose
Synopsis
Default input data order
Listing of keywords
SCFDATA
Purpose
Synopsis
Default input data order
Listing of keywords
SHELL
Purpose
Synopsis
Default input data order
Listing of keywords
SHELL1
Purpose
Synopsis
Default input data order
Listing of keywords
SPACEGROUP
Purpose
Synopsis
References
Default input data order
Listing of keywords
TEXTFILE
Purpose
Synopsis
Important note
Default input data order
Listing of keywords
Writing programs with TONTO
The design of TONTO
Modules in TONTO
The foo language in TONTO
The documentation and style in TONTO
Conventional routines
Customisability and efficiency of TONTO
Communication and data storage in TONTO
Compiling customised versions of TONTO
What can be customised, and what is the default?
Which Fortran compiler options to use?
The FC variable
The FOPTNS variable
The FFLAGS variable
The FFAST variable
The FDEBUG variable
The FPROF variable
The FSUFFIX variable
The PROGSUFFIX variable
The MODSUFFIX variable
The OBJSUFFIX variable
The LIBS variable
The MODCASE variable
The DEFS variable
Which C-preprocessor options to use?
The USE_ERROR_MANAGEMENT switch
The USE_PRE_AND_POST_CONDITIONS switch
The USE_CALL_STACK_MANAGEMENT switch
The LANGUAGE_FORTRAN_90 switch
The BROKEN_TYPE_INITIALIZATION switch
How TONTO builds executables
The make program and the Makefile
Machine specific code in TONTO
Code dependencies in TONTO
The problem of unnecessary recompilation of Fortran90 modules
make and the recompilation strategy used in TONTO
The TONTO input file: technical specification
Rules to explain the rules for writing input file
The input file: KEYWORD and DATA
SIMPLE-DATA
SIMPLE-ARRAY-DATA
DERIVED-DATA
Writing Fortran modules for TONTO
Critical requirements
Aesthetic requirements
Linking your Fortran code
The foo preprocessor
Key advantages of the foo preprocessor
How foo works
Rules for valid foo preprocessor code
What foo does to produce Fortran95 code
Automatic function and subroutine detection
Automatic insertion of first argument to a routine
Automatic end keyword completion
Dot notation
Automatic overloading and interface files
Explicit overloading
New syntax for recursive, pure and elemental routines
Functionals and subroutinals
Preconditions, postconditions, and error management facilities
Memory and call-stack management
C-preprocessor macros and type definitions
Writing foo modules for TONTO
What is the module supposed to do?
Deciding what is data and what should be a routine
Defining the type in the types.foo file
Modifying the foo pre-processor
Pre-processor changes for array types
The conventional routines
Principles for well designed modules
Large modules
Function arguments
Writing the main run_XXXX program
Are we hypocrites?
Examples of simple TONTO programs
The TEXTFILE module
Code
Results
The BUFFER module
Code
Results
The INT module
Code
Results
The STRVEC module
Code
Results
The REAL module
Code
Results
The REALVEC module
Code
Results
The GAUSSIAN2 and DFTGRID modules
Code
Results
The SHELL4 module
Code
Results
The underlying philosophy of TONTO
Cooperation: naiveté or just good sense?
Final word
List of Tables
1. Modules available in TONTO.
2. Shorthand symbols for simple data with input examples
3. Shorthand symbols for simple vector data with input examples
4. Shorthand symbols for simple matrix data with input examples