The List of MQCP Datatypes
Datatypes specify the data format of inputs and outputs of modules, which are files in nature.
Input file (inp
)
This datatype is used to set up runtime parameters for modules using human-readable format. It has a following format:
TITLE
MOLECULE DESCRIPTION SECTION
PARAMETERS SECTION
The title is a single line describing the calculation. It’s not used by modules.
In the MOLECULE DESCRIPTION SECTION
the number of atoms, the atomic types
and their coordinates are given. It resembles the chemical .xyz
file format.
First the number of atoms is given and then every atom is specified by its
nucleic charge (Q
) and Cartesian coordinates (X
, Y
and Z
) in
Angstrom:
NATOM=<number of atoms>
Q X Y Z
...
Q X Y Z
In the parameters section various options for modules are specified in the format OPTION=VALUE
. Only one option per line is allowed.
Here is an example of input file:
C3H8 molecule
natom=11
6.0 -0.2814116433 -0.0914064155 0.0569146050
6.0 -0.0108420173 1.3451955038 -0.4302553427
6.0 -1.5164903822 -0.7099985842 -0.6138764961
1.0 0.5852250728 -0.7142140575 -0.1449089075
1.0 -0.3980187758 -0.0846805453 1.1288285918
1.0 0.2402967369 1.3696657263 -1.4851529300
1.0 -0.9033547396 1.9429289671 -0.2719580118
1.0 0.8176724909 1.7961170180 0.1140239055
1.0 -1.9541584238 -1.5030395028 -0.0171310512
1.0 -1.2780973834 -1.1336105793 -1.5855662126
1.0 -2.2852454650 0.0377688194 -0.7774286105
charge=0
scftype=rhf
Simulation metadata (inf
)
This datatype contains common parameters of simulation which is shared among modules. It can be read and written as an unformatted Fortran 90 structure.
The corresponding Fortran 90 type is defined as follows:
type inf
integer :: natom !< The number of atom
integer :: charge !< Molecular charge
integer :: hamilton !< The method of calculations,
!< 1= EHT, 2=CNDO/2, 3=INDO, 10=HF, 20=DFT
integer :: scftype !< Reference wavefunction,
!< 1= RHF 2= UHF 3= ROHF
integer :: nelec !< The number of electron
integer :: nelec_A !< The number of alpha electron
integer :: nelec_B !< The number of beta electron
integer :: mult !< Spin multiplicity
integer :: nvelec !< The number of valence electron
integer :: nocc !< The number of occupied orbitals
!< nOCC = nelec/2 for RHF
!< nOCC = nelec_A for ROHF/UHF with mult=3
!< nOCC = nelec/2 for ROHF/UHF with mult=1
integer :: maxit !< The maximum number of iterations
real(REAL64) :: conv !< Convergency criteria of SCF
integer :: idamp !< Damp the density if idamp=1
integer :: mulliken !< Print out Mulliken population charge if mulliken=1
integer :: nbasis !< The number of basis set functions
integer :: n2basis !< n2basis : nbasis*(nbasis+1)/2
integer :: l1 !< Used for compatibility, L1 = nbasis
integer :: l2 !< Used for compatibility, L2 = nbasis * (nbasis+1)/2 = n2basis
integer :: l3 !< Used for compatibility, L3 = nbasis * nbasis
real(REAL64) :: energy !< Total energy
real(REAL64) :: enuc !< Nuclear repulsion energy
integer :: nalpha !< Number of alpha electrons
integer :: nbeta !< Number of beta electrons
character(len=20) :: &
basis_name = '' !< The basis set name for ab initio method
integer :: npfunc !< The number of p functions
integer :: mem !< Available memory size in Mega Byte
integer :: runtype !< Run type
!< 1 - energy, 2 - gradient, 3 - geometry optimization
integer :: geomit !< Maximum number of geometry optimization iteration
integer :: guess !< Not used now
real(REAL64) :: xdamp !< Not used now
real(REAL64) :: psinrm !< Wavefunction normalization
real(REAL64) :: ehf1 !< One-electron energy
real(REAL64) :: vee !< Two-electron energy
real(REAL64) :: nenergy !< Nuclear repulsion energy
real(REAL64) :: etot !< Total energy
real(REAL64) :: vne !< Nucleus-electron potential energy
real(REAL64) :: vnn !< Nucleus-nucleus potential energy
real(REAL64) :: vtot !< Total potential energy
real(REAL64) :: tkin !< Total kinetic energy
real(REAL64) :: virial !< Virial ratio (v/t)
real(REAL64) :: olde !< For geometry optimizations, energy of the previous step
real(REAL64) :: depre !< For geometry optimizations, predicted energy change
integer(I2B) :: nolds !< For geometry optimizations, number of steps performed
integer :: acell !< Not used now
real(REAL64) :: ebot !< Bottom bound of energy range in band calculations
real(REAL64) :: etop !< Upper bound of energy range in band calculations
real(REAL64) :: &
dfttyp(20) !< Parameters of XC functional
character(len=1024) :: &
XC_functional_name = '' !< Name of the XC functional
integer :: &
periodic_dim
end type
Todo
Replace with generic config format
Atomic information (xyz
)
Describes molecular structure.
The xyz
file contains the total number of atoms as well as the atomic information.
The formatting of the mqcp.xyz file format is as follows:
Natom=<N:=number of atoms>
ATOM(1)
ATOM(2)
...
ATOM(N)
The ATOM type is defined as follows
TYPE atom
INTEGER(INT32) :: &
! The number of atomic basis set
basis_n, &
! The highest principal quantum number, n
n_max, &
! The real high principal quantum number, n:w
nc_atm, &
! The number of core electrons
izcore
REAL(REAL64) :: &
! Atomic number or nuclear charge
zn, &
! Number of valence electrons
ezn, &
! Cartesian coordinates
coord(3), &
! The highest zeta
zet_atm, &
! Atomic mass
mass, &
! Gradient
De(3)
CHARACTER(LEN=2) :: &
! Atomic symbol
Symbol
END TYPE atom
Atomic basis set (bas
)
Provides basis set library.
This type of data is used to pass basis set library to the MQCP program. The
library format is basically GAMESS(US)-style with minor adjustments. The basis
set file contains several basis set entries for different elements separated by
blank line. Symbols !
, $
, #
, and &
are recognized as in-line
comment symbols and the rest of the line will be ignored. Comments can appear
anywhere in the file.
! this is a comment
ATOM BASIS ENTRY
<blank line>
ATOM BASIS ENTRY
<blank line>
ATOM BASIS ENTRY
<blank line>
Note
The last blank line is mandatory.
Atom basis set entry starts from the line containing the element name or its
chemical symbol (e.g. CARBON
or C
). Next, one or more shell entries
appears. They must not be separated by blank lines. The atom basis entry format:
<Element name | symbol>
SHELL ENTRY
SHELL ENTRY
...
SHELL ENTRY
The shell entry contains information of the shell type, the contraction degree, and all exponents and contraction coefficients for every primitive Gaussian in the shell. Shell type denotes the angular momentum and is given as a letter S, P, D, F, G, H, or I, corresponding to angular momentum 0, 1, 2, 3, 4, 5, and 6 respectively.
Warning
In contrast to GAMESS(US) basis set format, Pople’s SP
(or L
)
shell types are not supported. S
and P
components of these shells
should be present as separate entries.
After the header, representing the shell type and contraction degree, the parameters of primitive Gaussians are give one at a line. Each primitive gaussian statement contains integer sequence number (which is ignored and is present only for compatibility), and two double precision numbers corresponding to the exponential and contraction coefficients respectively. Hereby, the shell entry format is as follows:
<shell type := {S,P,D,F,G,H,I}> <N, contraction degree>
1 exponent 1 contraction coefficient 1
...
k exponent k contraction coefficient k
...
N exponent N contraction coefficient N
Here is an example of the 6-31G++ basis set entry for the carbon:
CARBON
S 6
1 0.3047524880E+04 0.1834737132E-02
2 0.4573695180E+03 0.1403732281E-01
3 0.1039486850E+03 0.6884262226E-01
4 0.2921015530E+02 0.2321844432E+00
5 0.9286662960E+01 0.4679413484E+00
6 0.3163926960E+01 0.3623119853E+00
S 3
1 0.7868272350E+01 -0.1193324198E+00
2 0.1881288540E+01 -0.1608541517E+00
3 0.5442492580E+00 0.1143456438E+01
S 1
1 0.1687144782E+00 0.1000000000E+01
S 1
1 0.4380000000E-01 0.1000000000E+01
P 3
1 0.7868272350E+01 0.6899906659E-01
2 0.1881288540E+01 0.3164239610E+00
3 0.5442492580E+00 0.7443082909E+00
P 1
1 0.1687144782E+00 0.1000000000E+01
P 1
1 0.4380000000E-01 0.1000000000E+01
The set pre-formatted basis sets is available here
. All provided basis sets can be also downloaded from
the Basis Set Exchange website.
One-electron integrals (hst
)
In the hst
data type the matrices of one-electron integrals are stored.
They are namely:
Core hamiltonian matrix (\(H_\mathrm{core}\))
Matrix of overlap integrals (\(S\))
Matrix of electronic kinetic energy integrals (\(T\))
The core hamiltonian matrix comprises both electron-nuclei Coulomb attraction integrals (\(V^\mathrm{en}\)) and electronic kinetic energy integrals and is virtually a sum of \(T\) and \(V^\mathrm{en}\) matrices:
\(H_\mathrm{core}\), \(S\), and \(T\) are symmetric (\(N\times N\)) matrices. They are represented in the
packed format where only an
upper (U
) triangle of a matrix is stored. Matrix dimensions \(N\) is equal to
the number of basis set function for the given molecule. In the output, these
three matrices are written as a plain text sequentially one after another using
Fortran 90 unformatted output. The order, in which matrices are written is
precisely \(H_\mathrm{core}\), then \(S\), and finally \(T\).
Wavefunction (den
)
This datatype contains information about the molecular orbitals and electronic density for \(\alpha\) and optionally \(\beta\) spin. It includes the following components in order:
\(\alpha\)-spin density matrix (\(D_\alpha\));
matrix \(Q\) of orthonormal molecular orbitals constructed from the atomic basis set;
\(\alpha\)-spin molecular orbitals;
eigenvalues of the \(\alpha\)-spin molecular orbitals;
(optional) \(\beta\)-spin density matrix;
(optional) \(\beta\)-spin molecular orbitals
\(D_\alpha\) and \(D_\beta\) density are symmetric \(N\times N\) matrices and are stored in a packed format (upper triangle). Here, \(N\) denotes the number of basis set functions. \(\alpha\) and \(\beta\) molecular orbitals, as well as matrix \(Q\) are \(N\times N\) matrices which are stored in the full square format. \(\alpha\)-orbital energies is a vector of dimension \(N\). All the data is written using the Fortran 90 unformatted I/O.
Shells data (shl
)
This datatype contains a structured shell data for a given molecule. It can be read and written as an unformatted Fortran 90 structure.
The corresponding Fortran 90 type is defined as follows:
TYPE shell_structure
REAL(REAL64), DIMENSION(MXGTOT) :: &
! Exponential coefficients for shells
EX, &
! Contraction coefficients for shells
CS, CP, CD, CF, CG, CH, CI
INTEGER(INT32), DIMENSION(MXSH) :: &
! Location of the first exponent and the first
! contraction coefficient contained in a particular shell
KSTART, &
! Atomic center indices
KATOM, &
! Shell types, 1,2,3,4,5,6,7 for S,P,D,F,G,H,I respectively
KTYPE, &
! Degrees of shell contraction
KNG, &
! Indices of first AO of the shell in the basis set
KLOC, &
! Starting and ending indices of the shell
! S P D F G H I L
! KMIN 1 2 5 11 21 36 57 1
! KMAX 1 4 10 20 35 56 84 4
KMIN, KMAX
! Normalization constant
REAL(REAL64) :: PNRM(84)
! AO symbol
CHARACTER(LEN=8) :: BFLAB(MXAO)
END TYPE shell_structure
Log output (log
)
This datatype is a simple text-based log file which contain status report of all modules. It has no specific format.