A Quick Guide To Running DFTB (With Available Parameters) In GAMESS-US

This post comes out of my great appreciation for just how well Yoshio Nishimoto’s DFTB (density functional-based tight binding method) implementation in GAMESS-US runs, both as an additional functionality in an already considerable program and in comparison to a few other programs I’ve worked with to do the same.

Also, the use of unmodified Slater-Koster files in the GAMESS-US implementation is a nice touch.

This all begins at the dftb.org website with the downloading of available Slater-Koster parameter files for available sets of elements. Note that your favorite elements might not yet have parameters – or parameters within any given parameter set – for immediate use. Until others publish new parameter sets and post them somewhere – and if you’re an academic – you might consider giving Stefan Grimme’s XTB serious consideration.

Additionally! A recent find while looking for new parameter sets was the KIST Integrated Force Field Platform (kiff.vfab.org), providing the complete set of DFTB parameters and up-to-date ReaxFF parameters as well.

Basic Input Format

A few key points (highlighted in the generic pointer input file) below:

! $scf soscf=.t. fdiff=.f. shift=.f. extrap=.f. damp=.t. diis=.f. $end
$system modio=31 $end
$basis gbasis=dftb $end
! $dftb ndftb=2 dampxh=.t. dampex=4.0 itypmx=0 etemp=300 $end
$dftb ndftb=3 dampxh=.t. dampex=4.0 disp=skhp etemp=300
disppr(1)=0.31,0.386,0.386,0.000,0.000,0.000,0.000,3.5,3.5,3.5,
3.5,3.5,3.5,0.80,0.69,1.382,1.382,1.382,1.064,1.064,1.064,3.8,3.8,
3.8,3.8,3.8,3.8,2.50 $end
$dftb hubder(1)=-0.1857,-0.1492 $end
$dftbsk
C C "/path/to/skfiles/3ob-3-1/C-C.skf"
C Si "/path/to/skfiles/3ob-3-1/C-Si.skf"
C H "/path/to/skfiles/3ob-3-1/C-H.skf"
Si C "/path/to/skfiles/3ob-3-1/Si-C.skf"
Si Si "/path/to/skfiles/3ob-3-1/Si-Si.skf"
Si H "/path/to/skfiles/3ob-3-1/Si-H.skf"
H C "/path/to/skfiles/3ob-3-1/H-C.skf"
H Si "/path/to/skfiles/3ob-3-1/H-Si.skf"
H H "/path/to/skfiles/3ob-3-1/H-H.skf"
$end $data

C1
C 6.0 -2.775607 0.000000 0.000000
...
H 1.0 -2.809590 0.000420 50.594100
$end

1. There have been many improvements to the DFTB code. The myweb.liu.edu/~nmatsuna/gamess manual (among others hosted *not* on the official GAMESS-US website) is among the first that *always* come up when searching out GAMESS-US keywords – and it’s several years out of date (esp. for DFTB keywords). The 2019.1 manual has a significantly expanded $DFTB section, including calls for including dispersion corrections from the original $DFT block.

2. No $SCF – as the manual states, converger specifications are pre-defined in the ITYPMX keyword, with additional keywords in the $DFTB block (esp. ETEMP) available to aid in problematic convergence.

3. One big $DFTBSK – as addressed on Jan Jensen’s initial post about running DFTB in GAMESS-US, GAMESS-US will only read atom pairs needed for the atoms listed in the $DATA section. You are fine to simply make an all-encompassing $DFTBSK block for all pairs in a parameter folder and write that to the input file.

4. DISPPR for SKHP – a mild manual issue. For the “Slater–Kirkwood + bond number polarizability dependence” dispersion correction, the current manual states that “For DISP=SKHP, a set for a species has 14 parameters. The first six are the polarizabilities depending on the number of bonds, and the next six are cutoff length, and the last is atomic charge.” You’ll note that 6 + 6 + 1 adds up to 13. The 14 numbers needed for each element in this keyword begins with the covalent atomic radius for the element. In the absence of a list for those values, Table S1.1 (freely available) from “DFTB Parameters for the Periodic Table: Part 1, Electronic Structure” is an excellent resource. I did not bother to address the “different covalent radii values for different hybridizations” issue and have seen little on the topic related to DFTB calculations. For the other 13 numbers, the DFTB+ manual contains a set in Appendix E and reproduced below, with notes to consider other publications for more and different versions of the same elements (and note the NOTES column in the Appendix E table for P and S). Local copy of the manual – 2019Aug24_DFTBplus_manual.pdf

Element Polarisability (6 #'s) ---- [Å3]Cutoff (6 #'s) -- [Å]Chrg

O 0.560 0.560 0.000 0.000 0.000 0.0003.8 3.8 3.8 3.8 3.8 3.8 3.15
N 1.030 1.030 1.090 1.090 1.090 1.0903.8 3.8 3.8 3.8 3.8 3.8 2.82
C 1.382 1.382 1.382 1.064 1.064 1.0643.8 3.8 3.8 3.8 3.8 3.8 2.50
H 0.386 0.386 0.000 0.000 0.000 0.0003.5 3.5 3.5 3.5 3.5 3.5 0.80
P 1.600 1.600 1.600 1.600 1.600 1.6004.7 4.7 4.7 4.7 4.7 4.7 4.50
S 3.000 3.000 3.000 3.000 3.000 3.0004.7 4.7 4.7 4.7 4.7 4.7 4.80

5. HUBDER – If you don’t specify Hubbard Derivatives in your input file, GAMESS-US will include them from internal values. Values appear to be the set from the 3ob-3-1 parameter set and are available in the set’s README file (reproduced from that file below for available elements).

List of all atomic Hubbard derivatives (atomic units):

Br = -0.0573
 C = -0.1492
Ca = -0.0340
Cl = -0.0697
 F = -0.1623
 H = -0.1857
 I = -0.0433
 K = -0.0339
Mg = -0.02
 N = -0.1535
Na = -0.0454
 O = -0.1575
 P = -0.14
 S = -0.11
Zn = -0.03

6. HUBDER order – the order for these numbers is as per the FIRST appearance of the element in the $DATA block. This is ieasy to see if you don’t specity the HUBDER values in the input file and simply let GAMESS-US write out the “HUBBARD DERIVATIVES” block in your DFTB3 run.

7. $DFT Dispersion – according to the manual, you can now use more the traditional dispersion corrections in $DFTB calculations. In the $DFTB block, use DISP=DFT, then modify your $DFT section as you otherwise would – and include DC=.T. in your $DFT block.

8. DFTB Block Summary in the output file – below for a DFTB3 run of a CH-containing molecule using the 3ob-3-1 SK parameters:

 **********************************************************
 **  DENSITY-FUNCTIONAL TIGHT-BINDING (DFTB) CALCULATION **
 **********************************************************
       WRITTEN BY YOSHIO NISHIMOTO (NAGOYA UNIVERSITY)

  NUMBER OF SPECIES:  2
         SPECIES 1 :  H       WITH S     ORBITAL
         SPECIES 2 :  C       WITH S+P   ORBITALS
 
      $DFTB OPTIONS
      -------------
  NDFTB  =       3     SCC    =       T     DFTB3  =       T
  SRSCC  =       F     DAMPXH =       T     DAMPEX =    4.00
  DISP   =NONE         ITYPMX =       0     ETEMP  =    0.00
  MODESD =       0     MODGAM =       8     PRTORB =       F

 --- SCC CALCULATION ---
      INCLUDE 3RD ORDER CORRECTION

 SETTING HUBBARD DERIVATIVES FOR DFTB3
  H       :     -0.14920 (USER DEFINED)
  C       :     -0.18570 (USER DEFINED)
      USE X-H DAMPING:  4.00000

 BROYDEN'S CHARGE MIXING

 4 SLATER-KOSTER FILES WILL BE READ

 START READING SLATER-KOSTER FILES

 1  1 (H        - H       ) = /home/ec2-user/3ob-3-1/H-H.skf
 1  2 (H        - C       ) = /home/ec2-user/3ob-3-1/H-C.skf
 2  1 (C        - H       ) = /home/ec2-user/3ob-3-1/C-H.skf
 2  2 (C        - C       ) = /home/ec2-user/3ob-3-1/C-C.skf

DFTB2

Starting with the less keyword-involved run, below is a completely generic DFTB2 input file with no funny business in the $DFTB block to aid in convergence (my first test would be to change ETEMP to something higher, which has often done the trick when a run won’t complete its first SCF cycle in 200 steps).

 $contrl runtyp=optimize icharg=0 maxit=200 $end
 $system mwords=100 $end
 $system modio=31 $end
 $basis gbasis=dftb $end
 $dftb ndftb=2 dampxh=.t. dampex=4.0 itypmx=0 etemp=0 $end
 $data
C1
C   6.0        -2.775607   0.000000    0.000000
…
H   1.0        -2.809590   0.000420    50.594100
 $end
  $dftbsk
 C C "/path/to/dftb/params/pbc-0-3/C-C.skf"
 C H "/path/to/dftb/params/pbc-0-3/C-H.skf"
 H C "/path/to/dftb/params/pbc-0-3/H-C.skf"
 H H "/path/to/dftb/params/pbc-0-3/H-H.skf"
  $end

DFTB3

A more involved DFTB3 input file, including (1) the SKHP dispersion-correction and carriage returns to show that all 14 numbers are there – in order of appearance – for the atoms in $DATA, (2) the $SCF block as a comment that is ignored by DFTB calculations, (3) a reordering of all keywords above the $DATA block (because why not?), (4) the HUBDER values in order of appearance in the $DATA block, and (5) the Si-containing pairs in the $DFTBSK block just to show that their presence isn’t an issue for the run.

! $scf soscf=.t. fdiff=.f. shift=.f. extrap=.f. damp=.t. diis=.f. $end
 $system modio=31 $end
 $basis gbasis=dftb $end
 $dftb ndftb=3 dampxh=.t. dampex=4.0 disp=skhp etemp=300 
disppr(1)=
0.31,0.386,0.386,0.000,0.000,0.000,0.000,3.5,3.5,3.5,3.5,3.5,3.5,0.80,
0.69,1.382,1.382,1.382,1.064,1.064,1.064,3.8,3.8,3.8,3.8,3.8,3.8,2.50
$end
 $dftb hubder(1)=-0.1857,-0.1492 $end
 $dftbsk
C C "/path/to/skfiles/3ob-3-1/C-C.skf"
C Si "/path/to/skfiles/3ob-3-1/C-Si.skf"
C H "/path/to/skfiles/3ob-3-1/C-H.skf"
Si C "/path/to/skfiles/3ob-3-1/Si-C.skf"
Si Si "/path/to/skfiles/3ob-3-1/Si-Si.skf"
Si H "/path/to/skfiles/3ob-3-1/Si-H.skf"
H C "/path/to/skfiles/3ob-3-1/H-C.skf"
H Si "/path/to/skfiles/3ob-3-1/H-Si.skf"
H H "/path/to/skfiles/3ob-3-1/H-H.skf"
 $end 
 $data

C1
H   1.0        -2.775607   0.000000    0.000000
C   6.0        -3.775607   0.000000    0.000000
....
H   1.0        -2.809590   0.000420    50.594100
 $end

And, just to keep you from bouncing between tabs, the $DFTB section from the 2019.1 version of the manual (obviously check there at some point for changes and improvements).

$DFTB group                  (relevant for GBASIS=DFTB)

Density-functional tight-binding (DFTB) is turned on by
selecting GBASIS=DFTB in $BASIS.  $DFTB controls optional
parameters for a DFTB calculation.  DFTB is formulated in a
two-center approximation utilizing implicitly a minimal
pseudoatomic orbital basis set with corresponding,
pretabulated one- and two-center integrals.   Because of
this, many properties (for instances, multipoles higher
than dipoles) and many options are ignored or not available
in the current implementations of DFTB.  DFTB also uses an
independent SCF driver (SCF in DFTB is also called SCC, see
below), so most SCF options are not available for DFTB.

Only SCFTYP=RHF and UHF are implemented. SCFTYP=ROHF is
available, only when all SPNCST values are zero. DFTB does
not explicitly use symmetry (C1 throughout) since integrals
are never computed during the calculations.  Slater-Koster
tables are only defined for spherical functions (5d) so
DFTB sets ISPHER=1.  Most $GUESS options do not work for
DFTB (DFTB does not use initial orbitals in the usual
sense).  Other than the default (METHOD=HUCKEL, which is
ignored), only METHOD=MOREAD works (note that SCC-DFTB can
use initial charges on atoms, derived from the orbitals).

RUNTYP=OPTIMIZE, HESSIAN and RAMAN are available for full
(non-FMO) DFTB and FMO-DFTB. Excited state calculations for
full DFTB may be performed through the standard (linear-
response) time-dependent formalism (only closed shell). PCM
can be used for both ground and excited state calculations,
and energy and gradient can be evaluated.

In DFTB calculation, the atom type is determined by its
name, not its nuclear charge as elsewhere in GAMESS. The
nuclear charge (the second column in $DATA) is used only in
population analysis, but not in SCF.  DFTB uses a notion of
"species", which means an atomic type.  The species are
numbered according to the order in which atoms appear in
$DATA. For instances, in water there are two species, O and
H.  An atomic type of each species needs MAXANG, which for
most but not all atoms is set automatically.


NDFTB  order of the Taylor expansion of the total energy
       around a reference density in the DFTB model.
       = 1 NCC-DFTB, also called DFTB1.
           NCC stands for non-charge-consistent, i.e., no
           explicity charge-charge interaction term is
           included in the energy calculation.
       = 2 SCC-DFTB, also called DFTB2.
           SCC means a self-charge-consistent approach,
           and SCC implies that SCF iterations are carried
           out that converge monopolar charges towards
           self-consistency.
       = 3 DFTB3, including 3rd order correction using
           Hubbard derivatives (HUBDER).
           In order to reproduce the published DFTB3
           approach, it is necessary to also specify
           DAMPXH=.TRUE. to add other terms.
           Gaus, M. et al. J. Chem. Theory Comput. 2011,
           7, 931-948 is referred to as Gaus2011 below.
           Default: 2.

DAMPXH =  a flag to include the damping function for X-H
          atomic pair in DFTB3. See also DAMPEX, and eq 21
          in Gaus2011.
          The damping function is used when at least one
          atom in a pair is "H". "HYDROGEN" and any other
          name will turn off the damping.
          Default: .FALSE.

DAMPEX =  an exponent used in the damping function for X-H
          atomic pairs.  The default value is 4.0 (taken
          from the 3OB parameter set).

SRSCC  =  a flag to perform shell-resolved SCC calculation.
          If set to .FALSE., the code uses the Hubbard
          value for an s orbital for p and d orbitals,
          ignoring their Hubbard values defined in Slater-
          Koster tables.
          Using .TRUE. enables the use of proper Hubbard
          values for p and d orbitals, implemented only
          for DFTB1 and DFTB2.
          Default: .FALSE.

ITYPMX    Convergence method of SCC calculations.
       = -1 Use standard GAMESS convergence methods.
            SOSCF and DIIS are supported, but DEM is not.
       = 0  Broyden's method.
            Interpolation is applied for atomic
            (or shell-resolved when SRSCC=.TRUE.)
            charges, but not Hamiltonian matrix.
       = 1  (reserved)
       = 2  DIIS for charges.
            Default: 0.

ETEMP  = electronic temperature in Kelvin. Non-zero values
         of ETEMP help SCF convergence of nearly-degenerate
         systems by smearing occupation numbers around the
         Fermi-level. Only the Fermi-Dirac distribution
         function is available as a smearing function.  The
         default value is 0 Kelvin, meaning the smearing
         function is not used.
         ETEMP is implemented only for SCFTYP=RHF and when
         FMO is not used.

DISP     dispersion model for DFTB.
       = NONE no Dispersion correction.
       = UFF  UFF-type dispersion correction.
              Parameters for atomic numbers up to 54 are
              available internally or can be supplied in
              DISPPR for any atom.
              Built-in parameters are taken from Rappe
              et al. J. Am. Chem. Soc. 1992, 114, 10024.
       = SK   The Slater-Kirkwood type dispersion
              correction omitting the change polarizability
              depending on the number of bonds.
              No default values of DISPPR are available.
              Some are listed in the manual of the DFTB+
              program.
       = SKHP The Slater--Kirkwood type dispersion with
              the dependence of polarizabilities on the
              number of bonds.
       = DFT  Use so-called DFT-D. See $DFT for further
              details. DISP=GRIMME is a synonym.

DISPPR   an array of parameters used for dispersion
         correction, listed in sets for each species.
         For DISP=UFF, DISPPR(1) and DISPPR(2) define the
         non-bonded distance (Angs.) and energy (kcal/mol)
         for the first species, respectively, and so on.
         For DISP=SK, a set for a species has 3 parameters,
         the polarizability (Angstrom^3), cutoff length
         (Angstrom), and atomic charge.
         For DISP=SKHP, a set for a species has 14
         parameters. The first six are the polarizabilities
         depending on the number of bonds, and the next six
         are cutoff length, and the last is atomic charge.
         Default: see DISP.

HUBDER   an array of Hubbard derivatives for each species
         (1 per species) used only for DFTB3 calculations.
         Default values are set for the elements included
         in the 3OB parameters (Br, C, Ca, Cl, F, H, I,
         K, Mg, N, Na, O, P, S, Zn).

MAXANG   array of maximum angular momentum of each species,
         which determines the number of basis functions.
         DFTB uses only valence orbitals and electrons!
         Most elements have proper default values, but for
         some atomic types (i.e., species) you need to
         manually define the values.

QREF     array of the number of reference electrons of each
         species.  QREF is usually automatically taken from
         Slater-Koster parameters, so this option is seldom
         used.

SPNCST   an array of spin constants used in unrestricted
         (UHF) DFTB calculation. Provide 6 spin constants,
         W_{ss}, W_{sp}, W_{pp}, W_{sd}, W_{pd}, & W_{dd},
         for each species in a continuous array. Constants
         for some elements can be found in the manual of
         the DFTB+ program.

PARAM    specifies the directory from which DFTB parameters
         are taken. If you wish to mix parameters from
         different directories, this option cannot be used.
         Specifying PARAM means no $DFTBSK; otherwise,
         $DFTBSK is read.
         Nota bene-bene: the actual path for parameters includes
         $DFTBPAR, defined in rungms. All directory names
         used in PARAM should be ** UPPER CASE **, as 3OB-3-1 in
         ~/gamess/dftb/param/3OB-3-1 where
         $DFTBPAR=~/gamess/auxdata/DFTB
         PARAM=3OB-3-1
         The length of PARAM is maximum 8 characters!
         Each parameter file name has a limit of 150 characters.
         GAMESS includes 3OB-3-1 and MATSCI03 (properly called
         matsci-0-3), which you may specify in PARAM.
         3ob-3-1 should be used with DFTB3 (biochemistry+water).
         matsci-0-3 should be used with DFTB2 (iorganics).
         You can find more parameter sets at dftb.org.
         Before using DFTB parameters, ~/gamess/dftb/README.dftb
         should be consulted regarding lisense and citations.
         Default: "", meaning that $DFTBSK is read.

ISPDMP   An array of integer specifying species X to which
         the X--H damping function (DAMPXH) is applied. By
         default, with DAMPXH=.TRUE., ISPDMP for all
         elements is 1 (apply). Setting 1 for H does not
         do anything.

                        * * *


The following options are FMO-DFTB specific (Nishimoto, Y.
et al. J. Chem. Theory Comput. 2014, 10, 4801-4812.).

FMO-DFTB has many limitations and some FMO options are not
supported (for instance, multilayer FMO etc).  Only single
layer, restricted closed-shell FMO2/3-DFTB1/2/3
are implemented at present. SRSCC, ETEMP etc are not
available. The analytic gradient is available for FMO-DFTB,
requiring solving SCZV as in other FMO methods.

MODESD = controls the behavior of ES-DIM (electrostatic
         dimer) approximation (bit additive).
         1 Calculate interfragment repulsive energy for ES
           dimers (almost never used).
         2 Add up all ES-DIM energies. This means that
           individual ES dimer energies are not calculated,
           but only their total lump sum, computed with the
           dynamic load balancing.
         4 Lump ES-DIM routine with static load balancing.
           The bits of 2 or 4 are mutually exclusive.
           Default: 0 (i.e., individual ES dimer energies).

MODGAM = controls the calculation of gamma values
         (interatomic 1/R-like function) in FMO-DFTB2 and
         FMO-DFTB3 (bit additive).
         0 Calculate gamma values on the fly.
         1 Calculate once and prestore gamma values in
           triangular matrix.
         2 Calculate once and prestore gamma values in
           square matrix.
         4 With the bits of 1 or 2, the calculation of
           gamma values is parallelized with GDDI.
           The bits of 1 or 2 are mutually exclusive. These
           options are faster but takes more memory.
         8 Using this option omits computing ESP in dimer
           and trimer calculations by accumulating
           contributions of each fragment and subtracting
           double-counting contributions.
           Default: 8

                        * * *


The following options are relevant to second- and
third-order derivative calculations (RUNTYP=HESSIAN and
RAMAN).

CPCONV = Convergence criterion during coupled-pertrubed DFTB
         iterations, similar to CONV in $SCF. In DFTB,
         the program uses Mulliken charges for testing the
         convergence, but not density matrix itself.
         By default, CPCONV=1.0D-06.

MXCPIT = Maximum number of coupled-perturbed DFTB iterations.
         By default, MXCPIT=50.

DEGTHR = An array of two degeneracy thresholds. If the
         difference of two eigenvalues are less than the
         threshold, two orbitals are seen as degenerated.
         The first threshold is employed in solving
         coupled-perturbed equations, while the second
         threshold is in computing third-order derivatives
         analytically. By default, these are set to 1.0D-12
         and 1.0D-08, whieh are usually reasonable.

ARAMAN = A flag to compute third-order derivatives (static
         hyperpolarizability and polarizability derivative)
         analytically, in addition to Hessian. If this
         option is activated, users do not have to give
         $HESSIAN and $DIPDR in the input, and
         non-resonance Raman spectra can be simulated by
         a single run. This option requires that RUNTYP must
         be RAMAN. By default, ARAMAN=.FALSE.

                        * * *


The following optinos are relevant to long-ranged corrected
DFTB. The formulation is based on Lutsker, V. et al. 2015,
143, 184107. With LC-DFTB, using ITYPMX=-1 options is highly
recommended.

LCDFTB = A flag to activate long-range correctios

EMU    = A parameter for long-range corrections. The meaning
         is very similar to MU in $DFT. By default, EMU=0.0,
         and this corresponds to regular DFTB.

ICUT   = A parameter applied in the screening using the
         Schwarz inequiality. The meaning is similar to ICUT
         in $CONTRL. By default, the screening is not
         employed, but this is usually as fast as ICUT=9,
         depending on the performance of the math library.

Conversion Of DFTB Parameter Sets From dftb.org For Use In Gaussian 09 And Gaussian 16 – Errors And Fixes

Addressing the conversion of the 3ob-3-1, matsci-0-3, mio-1-1, and pbc-0-3 parameter sets (with fixes transferable to others).

While there is some information available online about converting dftb.org Slater-Koster (.skf) files for use in Gaussian 09/16, the simple procedures you might see for set A might not work for set B because of subtle formatting issues between the different sets.

As is often the case, some of the issues below would not have been confirmed/remedied without the kind assistance of feedback from Gaussian Technical Support. Also as usual for this site, error messages are provided for each stage of the conversion process for relevant parameter sets, with the searches for these errors likely being the way you found this page in the first place.

Continue reading “Conversion Of DFTB Parameter Sets From dftb.org For Use In Gaussian 09 And Gaussian 16 – Errors And Fixes”

More On The Virtues Of VirtualBox – ACID (or AICD) Under Ubuntu 14.04 (By Way Of OpenSuse 11.2)

“Stop that!” – George Carlin

If you’ve obtained source code from an academic lab that was last developed some time ago and you spent a whole day installing libraries and symbolic links and redefining variables in your .bashrc and downgrading libraries and redefining paths and have 20 tabs open in your browser that all go to 20 different obscure error discussions on Stack Overflow and it’s late and you’re tired and you think you might not need the program after all if you do a bunch of other workaround things instead – what’s below is for you.

Academics have been developing small code for (nearly) millions of years to make their lives easier – and we all benefit when that code is made available to others (esp. when it helps in data analysis). When that code is a series of perl or python scripts, there’s generally little reason why you should have any run issues. When they call on external libraries or specific tools, generally that information is available in the README somewhere. Generally speaking, there’s no reason why a code shouldn’t work in a straightforward manner when the developer doesn’t make it known that something else needs be installed to make it work.

So, why doesn’t code A work on your linux box? A few possibilities.

0. You didn’t read the README right.

1. The developer skipped some documentation and you’re missing a library or program that they installed months earlier but forgot about (and they forgot to acknowledge that that was a needed item to run their program).

2. Your linux distro is too new, they developed it on something much older, have never updated their own machine, and something fundamental changed between, for instance, Ubuntu 8.04 and 14.04 (I’ve run into a few in that category – depending on the code, this can sometimes just be chalked up to a compiler difference issue that went unnoticed by the developers).

3. The one you learn the harder way – Ubuntu is not Fedora is not OpenSuse is not [insert distro here]. Half of the Ubuntu posts on this website stem from my having needed to do something under Ubuntu to make it look a little tiny bit more like whatever distro a developer developed their code with.

Let’s hammer on point 3 for a minute – I know precious few academics who use computers as part of research who are both (1) experts in coding and (2) experts in interpreting the output of some code. A properly working code in the hands of a productive researcher can mean the difference between an OK interpretation of data and a very descriptive interpretation of data that anyone else could follow (which, let’s not lie to ourselves, may also mean the difference between a journal with an impact factor of 0.5 and one of 5.0). Disregarding any “it was hard to code, it should be hard to use” mentality, finding out that a program runs painlessly on distro A with NO effort after trying in vain on distro B with CONSIDERABLE effort is a rather important piece of information.

For the record – this isn’t about a user’s ability to program, install, admin their machine, etc. It’s simply about ease-of-use for ALL users regardless of their computational aptitude (which is why many of the Ubuntu posts on this website are exhaustive in their reporting of errors as well as work-arounds).

Which brings me to one of the most versatile (and storage-consuming) programs on my Ubuntu 14.04 machine – VirtualBox. VirtualBox (and related) are absolutely awesome for their abilities to let you try – very quickly – the quick fix that is the building or running of a strange code “somewhere else.” For the record, I ALWAYS try something new using a clean Ubuntu 14.04 image under VirtualBox before I ever let it touch my main machine – and that’s because I’ve had more than one instance in the past of trying to build a piece of software that then destroyed (well, sort of) my machine. When you destroy an image with a bad installation attempt – all you have to do is trash the image and copy a fresh one over from some “clean image” folder. Could not be easier. Furthermore, I’ve still ONE app that works in Windows XP that doesn’t work anywhere else. And I’ve two or three under Windows that I use generally – all ready for use under VirtualBox without having to reboot anything.

Additionally importantly – Virtual Machines allow you to “sample in time” – working around new & improved features and functionality in new compilers and libraries by instead building code on what was available at the time of the code’s release.

Anisotropy of the Current (Induced) Density – ACID

2016mar29_benzol.nmr_40000_0.050_1_0_0_Aniso_4

Sample output (from a successful Gaussian09 benzene tutorial run).

From the website of Prof. Dr. Rainer Herges

The “density of delocalized electrons” is a concept that is intuitively used to explain the electronic structure of conjugated systems. Unfortunately, however, there is no rigorous way to separate the total electron density in a density of localized and delocalized electrons. Like aromaticity, bond order, point charge, and other important concepts of chemistry, a definition for the density of delocalized electrons has to be derived from more fundamental quantum theoretical parameters.

As observables, magnetic properties are a suitable starting point for a general description of of delocalization and conjugation. In analogy to the anisotropy of the magnetic susceptibility, which is a powerful measure of aromaticity, we investigate the anisotropy of the current (induced) density (ACID). Similar to the square of the wavefunction which defines the total electron density, the ACID scalar field defines the density of delocalized electrons.

The ACID method proved to be an extremely versatile and descriptive tool to analyze delocalization in ground-state molecules, excited states, transition states, organometallics, hyperconjugation and other through-bond and through-space interactions.

Having spent quite some time determining the best way to account for electron delocalization in an upcoming project, the ACID method (“Delocalization of Electrons in Molecules,” J. Phys. Chem. A 2001, 105, 3214-3220. dx.doi.org/10.1021/jp0034426) struck me as near-ideal, leading to my request for the code from the developers.

With the code graciously provided, my first run attempt under Ubuntu 14.04 (and Cygwin, and Ubuntu 10.04 because it was waaaaay back when) went less-than successfully after the successful Gaussian run.

Ubuntu 14.04 make Results (Note: Using gcc 4.8)

user@hostname:~/AICD-2.0.0/$ make

sh modify_shellpath_in_scripts.sh AICD AICD-extract.pl ModifyPov.pl AICD-convert.pl
wd=`pwd` ; \
	sed -i -e "2s+^AICD_BaseDir=.*+AICD_BaseDir=$wd+" AICD
g++ -O2 -ffast-math -march=native -o AICD-smooth_isosurface.o -c AICD-smooth_isosurface.cpp
g++ AICD-smooth_isosurface.o -Wl,-s -o AICD-smooth_isosurface
g++ -O2 -ffast-math -march=native -o AICD-isosurface.o -c AICD-isosurface.cpp
g++ AICD-isosurface.o -Wl,-s -o AICD-isosurface
g++ -O2 -ffast-math -march=native -o AICD-extract.o -c AICD-extract.cpp
g++ AICD-extract.o -Wl,-s -o AICD-extract
g++ -O2 -ffast-math -march=native -o AICD-cube.o -c AICD-cube.cpp
g++ AICD-cube.o -Wl,-s -o AICD-cube
g++ -O2 -ffast-math -march=native -o AICD-remap.o -c AICD-remap.cpp
g++ AICD-remap.o -Wl,-s -o AICD-remap
g++ -O2 -ffast-math -march=native -o AICD-opt_remap.o -c AICD-opt_remap.cpp
g++ AICD-opt_remap.o -Wl,-s -o AICD-opt_remap
g++ -O2 -ffast-math -march=native -o AICD-rotate_mol.o -c AICD-rotate_mol.cpp
g++ AICD-rotate_mol.o -Wl,-s -o AICD-rotate_mol
g++ -O2 -ffast-math -march=native -o AICD-isocut.o -c AICD-isocut.cpp
g++ AICD-isocut.o -Wl,-s -o AICD-isocut
cc -O2 -ffast-math -march=native -o povchem/povchem.o -c povchem/povchem.c
povchem/povchem.c: In function ‘Get_User_Input':
povchem/povchem.c:1173:10: warning: ignoring return value of ‘scanf', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%c",&string[i]);
          ^
povchem/povchem.c: In function ‘main':
povchem/povchem.c:2958:13: warning: ignoring return value of ‘system', declared with attribute warn_unused_result [-Wunused-result]
       system(tmp);
             ^
povchem/povchem.c:2965:17: warning: ignoring return value of ‘system', declared with attribute warn_unused_result [-Wunused-result]
           system(tmp);
                 ^
povchem/povchem.c:2985:15: warning: ignoring return value of ‘system', declared with attribute warn_unused_result [-Wunused-result]
         system(tmp);
               ^
povchem/povchem.c:2989:15: warning: ignoring return value of ‘system', declared with attribute warn_unused_result [-Wunused-result]
         system(tmp);
               ^
povchem/povchem.c:2994:15: warning: ignoring return value of ‘system', declared with attribute warn_unused_result [-Wunused-result]
         system(tmp);
               ^
povchem/povchem.c:3003:15: warning: ignoring return value of ‘system', declared with attribute warn_unused_result [-Wunused-result]
         system(tmp);
               ^
g++ povchem/povchem.o -Wl,-s -o povchem/povchem

Warnings are not errors, so meh. Google searching indicated a code issue (version issue) that someone on Stack Overflow proposed fixing by turning off optimization (removing -O2 from the Makefile). The error goes away.

sh modify_shellpath_in_scripts.sh AICD AICD-extract.pl ModifyPov.pl AICD-convert.pl
wd=`pwd` ; \
	sed -i -e "2s+^AICD_BaseDir=.*+AICD_BaseDir=$wd+" AICD
g++ -O2 -ffast-math -march=native -o AICD-smooth_isosurface.o -c AICD-smooth_isosurface.cpp
g++ AICD-smooth_isosurface.o -Wl,-s -o AICD-smooth_isosurface
g++ -O2 -ffast-math -march=native -o AICD-isosurface.o -c AICD-isosurface.cpp
g++ AICD-isosurface.o -Wl,-s -o AICD-isosurface
g++ -O2 -ffast-math -march=native -o AICD-extract.o -c AICD-extract.cpp
g++ AICD-extract.o -Wl,-s -o AICD-extract
g++ -O2 -ffast-math -march=native -o AICD-cube.o -c AICD-cube.cpp
g++ AICD-cube.o -Wl,-s -o AICD-cube
g++ -O2 -ffast-math -march=native -o AICD-remap.o -c AICD-remap.cpp
g++ AICD-remap.o -Wl,-s -o AICD-remap
g++ -O2 -ffast-math -march=native -o AICD-opt_remap.o -c AICD-opt_remap.cpp
g++ AICD-opt_remap.o -Wl,-s -o AICD-opt_remap
g++ -O2 -ffast-math -march=native -o AICD-rotate_mol.o -c AICD-rotate_mol.cpp
g++ AICD-rotate_mol.o -Wl,-s -o AICD-rotate_mol
g++ -O2 -ffast-math -march=native -o AICD-isocut.o -c AICD-isocut.cpp
g++ AICD-isocut.o -Wl,-s -o AICD-isocut
cc -O2 -ffast-math -march=native -o povchem/povchem.o -c povchem/povchem.c
g++ povchem/povchem.o -Wl,-s -o povchem/povchem

And the tutorial run output itself is below – complete with error.

$ AICD -m 2 -rot 90 0 0 -b 1 0 0 -runpov benzol.nmr.log

Datei benzol.nmr.log wird bearbeitet.
rufe jetzt AICDcube auf

1. Dateienpaar: benzol.nmr.icd40000 und benzol.nmr.pdb

Molek?linformationen:
6 0 0 0 2.6192
6 0 0 2.2677 1.3096
6 0 0 2.2677 -1.3096
6 0 0 0 -2.6192
6 0 0 -2.2677 -1.3096
6 0 0 -2.2677 1.3096
1 0 0 0 4.6525
1 0 0 4.0289 2.3263
1 0 0 4.0289 -2.3263
1 0 0 0 -4.6525
1 0 0 -4.0289 -2.3263
1 0 0 -4.0289 2.3263

40128 = 19 * 44 * 48
Grenzen:
-0.066811 < = Isotropie <= 0.066811
0 <= Anisotropie <= 1.1042
-2.0667 <= X <= 2.0667
-4.7203 <= Y <= 4.7203
-5.1407 <= Z <= 5.1407

Cube-file wird geschrieben. Bitte warten.

1. Input-file: benzol.nmr.icd40000
40128 = 19 * 44 * 48
Grenzen:
-0.0668113 <= Isotropie <= 0.0668113
0 <= Anisotropie <= 1.10423
-2.06672 <= X <= 2.06672
-4.72031 <= Y <= 4.72032
-5.14072 <= Z <= 5.14072

Punkte auf der Isooberfl?che
Z = 0
...................
...................
[...]
...................
...................

Es wurden 2604 Pfeile generiert.
Davon zeigen 1302 in die Isooberfl?che hinein (50%).

Mittelwert der Pfeill?nge: 3.65747
Pfeilstatistik:
0  0  0  0  0  0  0  0  0  0  0  2604  
Dreiecke werden generiert. Bitte warten.
Povray-input wird geschrieben. Bitte warten.
Bildgrenzen:
0 <= Isotropie <= 0
0.05 <= Anisotropie <= 0.05
-1.4586 <= X <= 1.4586
-4.29131 <= Y <= 4.29131
-4.64666 <= Z <= 4.64666

producing benzol.nmr.pov

Welcome to PovChem! This is version 1.00. For general
instructions see http://ludwig.scs.uiuc.edu/~paul/Manual.html

Read configuration file "/home/damianallis/AICD-2.0.0/povray-AICD-templates/povchem.cfg".
Read periodic table "/home/damianallis/AICD-2.0.0/povray-AICD-templates/periodic.tab".

Found 12 atoms...
...loaded into memory.
Wrote 12 spheres...
...and read 24 bonds into memory.

Wrote 0 single, 12 double, 0 triple, 0 higher order, and 0 hydrogen bonds.

benzol.nmr.inc created.
Writing color and atom definitions...
Writing bond definitions...
Pov header benzol.nmr.pov created.


modifying benzol.nmr.pov to benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.pov
*** Error in `AICD-rotate_mol': free(): invalid next size (fast): 0x0000000001f22160 ***
/opt/AICD-2.0.0/AICD: line 656: 17519 Aborted                 (core dumped) $Animation $inputbasename.pdb 
$Atom1 $Atom2 $Atom3 < "$RenderMich" > $Pov_RenderMich_pov
Replacing Camera Postion to \<0, 0, -250\>
Inserting #version directive in RenderMich.pov
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Isoober.inc
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.inc
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.pov
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.RenderMich.pov
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Rotate.inc
calling AICD-isocut -m -1 -M -1 -r 10000000 < benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Isoober.inc.noncut > benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Isoober.inc
This is AICD-isocut....
 arrow_maxlength = -1
 arrow_minlength = -1
 Point of origin:  0 0 0
 Maximum distance: 1e+07
Number of deleted arrows: 0
povray: cannot open the user configuration file /home/damianallis/.povray/3.7/povray.conf: No such file or directory
Persistence of Vision(tm) Ray Tracer Version 3.7.0.unofficial (g++ 4.8 @
x86_64-pc-linux-gnu)
This is an unofficial version compiled by:
Felix Geyer  for Debian 
The POV-Ray Team is not responsible for supporting this version.

POV-Ray is based on DKBTrace 2.12 by David K. Buck & Aaron A. Collins
Copyright 1991-2013 Persistence of Vision Raytracer Pty. Ltd.

Primary POV-Ray 3.7 Architects/Developers: (Alphabetically)
 Chris Cason         Thorsten Froehlich  Christoph Lipka   

...

Support libraries used by POV-Ray:
 ZLib 1.2.8, Copyright 1995-2012 Jean-loup Gailly and Mark Adler
 LibPNG 1.2.50, Copyright 1998-2012 Glenn Randers-Pehrson
 LibJPEG 80, Copyright 1991-2013 Thomas G. Lane, Guido Vollbeding
 LibTIFF 4.0.3, Copyright 1988-1997 Sam Leffler, 1991-1997 SGI
 Boost 1.54, http://www.boost.org/
 OpenEXR, Copyright (c) 2004-2007, Industrial Light & Magic.

Parser Options
 Input file: benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.RenderMich.pov
 Remove bounds........On 
 Split unions.........Off
 Library paths:
   /usr/share/povray-3.7
   /usr/share/povray-3.7/ini
   /usr/share/povray-3.7/include
   /usr/lib/povray3
   /usr/lib/povray3/include
 Clock value:    0.000  (Animation off)
Image Output Options
 Image resolution.....1024 by 768 (rows 1 to 768, columns 1 to 1024).
 Output file..........benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.png, 24 bpp PNG
 Dithering............Off
 Graphic display......Off
 Mosaic preview.......Off
 Continued trace......Off
Information Output Options
 All Streams to console..........On 
 Debug Stream to console.........On 
 Fatal Stream to console.........On 
 Render Stream to console........On 
 Statistics Stream to console....On 
 Warning Stream to console.......On 
==== [Parsing...] ==========================================================
Parse Warning: No objects in scene.
Parse Warning: assumed_gamma not specified, so gamma_correction is turned off
for compatibility with this pre POV-Ray 3.7 scene. See the documentation for
more details.
Parse Warning: This scene did not contain a #version directive. Please be aware
that as of POV-Ray 3.7, unless already specified via an INI option, a #version
is expected as the first declaration in a scene file. POV-Ray may apply
settings to some features that are intended to maintain compatibility with
pre-3.7 scenes. You are strongly encouraged to add a #version statement to the
scene to make your intent clear. Future versions of POV-Ray may make the
presence of a #version statement mandatory.
----------------------------------------------------------------------------
Parser Statistics
----------------------------------------------------------------------------
Finite Objects:            0
Infinite Objects:          0
Light Sources:             0
Total:                     0
----------------------------------------------------------------------------
Parser Time
 Parse Time:       0 hours  0 minutes  0 seconds (0.000 seconds)
             using 1 thread(s) with 0.000 CPU-seconds total
 Bounding Time:    0 hours  0 minutes  0 seconds (0.000 seconds)
             using 1 thread(s) with 0.000 CPU-seconds total
----------------------------------------------------------------------------
Render Options
 Quality:  9
 Bounding boxes.......On   Bounding threshold: 3
 Antialiasing.........Off
==== [Rendering...] ========================================================
Rendered 786432 of 786432 pixels (100%)
----------------------------------------------------------------------------
Render Statistics
Image Resolution 1024 x 768
----------------------------------------------------------------------------
Pixels:           786432   Samples:               0   Smpls/Pxl: 0.00
Rays:             786432   Saved:                 0   Max Level: 1/5
----------------------------------------------------------------------------
Ray->Shape Intersection          Tests       Succeeded  Percentage
----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------------------------------------
Render Time:
 Photon Time:      No photons
 Radiosity Time:   No radiosity
 Trace Time:       0 hours  0 minutes  0 seconds (0.031 seconds)
             using 12 thread(s) with 0.143 CPU-seconds total
POV-Ray finished

*******************************************************************************************************
*******************************************************************************************************

Not a particularly Ubuntu-looking problem, and not one for which anything online was available that helped at all. The .pov file is written, but the file is empty. Googling the error above…

*** Error in `AICD-rotate_mol’: free(): invalid next size (fast): 0x0000000001f22160 ***
/opt/AICD-2.0.0/AICD: line 656: 17519 Aborted … (core dumped) $Animation $inputbasename.pdb

… sends you to, among other pages, one Stack Overflow discussion that starts with the error and ends with recommendations of finding a good debugger – not something I’d any interest in pursuing as part of getting this code to work.

I did not find any version-dependence discussion with the errors above, but opted to try using an older gcc – that I wasn’t about to install on my new Ubuntu box. Ergo, find an older distro that installs an older gcc. I threw it on an OpenSUSE 11.2 image because the developer group is in Germany – that’s basically why – and because I couldn’t find an old enough Ubuntu distro that would update/upgrade/install apps from the current repositories.

OpenSUSE 11.2 make Results (Note: Using gcc 4.5)

From a fresh OpenSUSE 11.2 install, I added the appropriate developer tools to get the ACID code made (note the specific request for gcc 4.5):

sudo zypper install autoconf automake binutils-gold gcc gcc45 glibc-devel kernel-desktop-devel kernel-devel kernel-source linux-glibc-devel m4 make gcc-c++

Then added povray (and nano, but that’s because I hate vi)

sudo zypper install povray nano

The build process then goes as follows – with no issues.

sh modify_shellpath_in_scripts.sh AICD AICD-extract.pl ModifyPov.pl AICD-convert.pl
wd=`pwd` ; \
	sed -i -e "2s+^AICD_BaseDir=.*+AICD_BaseDir=$wd+" AICD
g++ -O2 -ffast-math -march=native -o AICD-smooth_isosurface.o -c AICD-smooth_isosurface.cpp
g++ AICD-smooth_isosurface.o -Wl,-s -o AICD-smooth_isosurface
g++ -O2 -ffast-math -march=native -o AICD-isosurface.o -c AICD-isosurface.cpp
g++ AICD-isosurface.o -Wl,-s -o AICD-isosurface
g++ -O2 -ffast-math -march=native -o AICD-extract.o -c AICD-extract.cpp
g++ AICD-extract.o -Wl,-s -o AICD-extract
g++ -O2 -ffast-math -march=native -o AICD-cube.o -c AICD-cube.cpp
g++ AICD-cube.o -Wl,-s -o AICD-cube
g++ -O2 -ffast-math -march=native -o AICD-remap.o -c AICD-remap.cpp
g++ AICD-remap.o -Wl,-s -o AICD-remap
g++ -O2 -ffast-math -march=native -o AICD-opt_remap.o -c AICD-opt_remap.cpp
g++ AICD-opt_remap.o -Wl,-s -o AICD-opt_remap
g++ -O2 -ffast-math -march=native -o AICD-rotate_mol.o -c AICD-rotate_mol.cpp
g++ AICD-rotate_mol.o -Wl,-s -o AICD-rotate_mol
g++ -O2 -ffast-math -march=native -o AICD-isocut.o -c AICD-isocut.cpp
g++ AICD-isocut.o -Wl,-s -o AICD-isocut
cc -O2 -ffast-math -march=native -o povchem/povchem.o -c povchem/povchem.c
g++ povchem/povchem.o -Wl,-s -o povchem/povchem

And then there’s the run through the tutorial again…

Datei benzol.nmr.log wird bearbeitet.
Weder benzol.nmr.icd40000 noch benzol.nmr.icd40000.gz existiert.
Weder benzol.nmr.icd noch benzol.nmr.icd.gz existieren.
Starting AICDextractsh
Separate AICD-output in file: test.txt
Extrahiere_Gitterpunkte

1. Input-file: benzol.nmr.icd-raw
Es wurden 84726 Stromdichtetensoren eingelesen.

Grenzen:
-0.0668113 < = Isotropie <= 0.0668113
0 <= Anisotropie <= 1.10423
-20.3137 <= X <= 20.3137
-23.6411 <= Y <= 23.6411
-24.2643 <= Z <= 24.2643

Atomposition:
0.0214824  
0  
2.61948  

Radius: 26.8838
Datei benzol.nmr wird bearbeitet.
Weder benzol.nmr.icd40000 noch benzol.nmr.icd40000.gz existiert.

Input-file: benzol.nmr.icd

Output-file: benzol.nmr.icd40000
========================
 1. Iteration
========================
AICD-remap 40000 1 - benzol.nmr.icd40000 benzol.nmr.icd 

Input-file: benzol.nmr.icd
Anzahl der Stromdichtetensoren: 84726
Grenzen:
-0.0668113 <= Isotropie <= 0.0668113
0 <= Anisotropie <= 1.10423
-10.3137 <= X <= 10.3137
-13.6411 <= Y <= 13.6411
-14.2643 <= Z <= 14.2643


Grenzen des kartesischen Netzes:
-0.0668113 <= Isotropie <= 0.0668113
0 <= Anisotropie <= 1.10423
-10.3137 <= X <= 10.3137
-13.6411 <= Y <= 13.6411
-14.2643 <= Z <= 14.2643

Globales Netz: 40404 = 28 * 37 * 39

Input-file: benzol.nmr.icd

1 %
2 %
3 %

...

Z = 47
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................

Es wurden 2604 Pfeile generiert.
Davon zeigen 1302 in die Isooberfl‰che hinein (50%).

Mittelwert der Pfeill‰nge: 0.0642683
Pfeilstatistik:
0  32  80  52  124  268  476  716  412  260  144  40  
Dreiecke werden generiert. Bitte warten.
Povray-input wird geschrieben. Bitte warten.
Bildgrenzen:
0 <= Isotropie <= 0
0.05 <= Anisotropie <= 0.05
-1.4586 <= X <= 1.4586
-4.29131 <= Y <= 4.29131
-4.64666 <= Z <= 4.64666

producing benzol.nmr.pov

Welcome to PovChem! This is version 1.00. For general
instructions see http://ludwig.scs.uiuc.edu/~paul/Manual.html

Read configuration file "/home/damianallis/ACID/AICD-2.0.0/povray-AICD-templates/povchem.cfg".
Read periodic table "/home/damianallis/ACID/AICD-2.0.0/povray-AICD-templates/periodic.tab".

Found 12 atoms...
 ...loaded into memory.
Wrote 12 spheres...
 ...and read 24 bonds into memory.

Wrote 0 single, 12 double, 0 triple, 0 higher order, and 0 hydrogen bonds.

benzol.nmr.inc created.
Writing color and atom definitions...
Writing bond definitions...
Pov header benzol.nmr.pov created.


modifying benzol.nmr.pov to benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.pov
Replacing Camera Postion to \<0, 0, -250\>
Inserting #version directive in RenderMich.pov
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Isoober.inc
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.inc
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.pov
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.RenderMich.pov
calling Replace_Pov_Filenames benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Rotate.inc
calling AICD-isocut -m -1 -M -1 -r 10000000 < benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Isoober.inc.noncut > benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Isoober.inc
This is AICD-isocut....
  arrow_maxlength = -1
  arrow_minlength = -1
  Point of origin:  0 0 0
  Maximum distance: 1e+07
Number of deleted arrows: 0
povray: cannot open the user configuration file /home/damianallis/.povray/3.6/povray.conf: No such file or directory
Persistence of Vision(tm) Ray Tracer Version 3.6.1 (g++ @ x86_64-unknown-linux-g
nu)
This is an unofficial version compiled by:
 SUSE LINUX Products GmbH, Nuernberg, Germany
 The POV-Ray Team(tm) is not responsible for supporting this version.
POV-Ray is based on DKBTrace 2.12 by David K. Buck & Aaron A. Collins
Copyright 1991-2003 Persistence of Vision Team
Copyright 2003-2004 Persistence of Vision Raytracer Pty. Ltd.

...

Support libraries used by POV-Ray:
  ZLib 1.2.5, Copyright 1995-1998 Jean-loup Gailly and Mark Adler
  LibPNG 1.4.4, Copyright 1998-2002 Glenn Randers-Pehrson
  LibJPEG 6b, Copyright 1998 Thomas G. Lane
  LibTIFF 3.9.4, Copyright 1988-1997 Sam Leffler, 1991-1997 SGI
Redirecting Options
  All Streams to console..........On 
  Debug Stream to console.........On 
  Fatal Stream to console.........On 
  Render Stream to console........On 
  Statistics Stream to console....On 
  Warning Stream to console.......On 
Parsing Options
  Input file: benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.RenderMich.pov (compatible
 to version 3.61)
  Remove bounds........On 
  Split unions.........Off
  Library paths:
    /usr/share/povray-3.6
    /usr/share/povray-3.6/ini
    /usr/share/povray-3.6/include
    /usr/lib/povray3
    /usr/lib/povray3/include
Output Options
  Image resolution 1024 by 768 (rows 1 to 768, columns 1 to 1024).
  Output file: /home/damianallis/ACID/AICD-2.0.0/tutorial-data/benzol.nmr_40000_
0.050_1_0_0_Aniso_4.2.png, 24 bpp PNG
  Graphic display......Off
  Mosaic preview.......Off
  CPU usage histogram..Off
  Continued trace......Off
Tracing Options
  Quality:  9
  Bounding boxes.......On   Bounding threshold: 3
  Light Buffer.........On 
  Vista Buffer.........On   Draw Vista Buffer....Off
  Antialiasing.........Off
  Clock value:    0.000  (Animation off)

  0:00:00 Parsing
File: /usr/share/povray-3.6/include/glass_old.inc  Line: 18
Parse Warning:  Due to changes in version 3.1, you must add interior {I_Glass}
 to all objects calling glass_old.inc textures and finishes... 
File: benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.pov  Line: 1
Possible Parse Error: All #version and #declares of float, vector, and color
 require semi-colon ';' at end.
File: benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.pov  Line: 2
Possible Parse Error: All #version and #declares of float, vector, and color
 require semi-colon ';' at end.
File: benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Molekuel.pov  Line: 21
Possible Parse Error: All #version and #declares of float, vector, and color
 require semi-colon ';' at end.
File: benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Isoober.inc  Line: 9
Possible Parse Error: Text may not be displayed as expected. Please refer to the
 user manual regarding changes in POV-Ray 3.5 and later.
File: benzol.nmr_40000_0.050_1_0_0_Aniso_4.2.Isoober.inc  Line: 17
Possible Parse Error: Text may not be displayed as expected. Please refer to the
 user manual regarding changes in POV-Ray 3.5 and later.

  0:00:01 Creating bounding slabs
  0:00:01 Creating vista buffer
  0:00:01 Creating light buffers
  0:00:01 Creating light buffers
  0:00:01 Creating light buffers 508K tokens
Scene Statistics
  Finite objects:         5233
  Infinite objects:          0
  Light sources:             4
  Total:                  5237

  0:00:00 Rendering line 1 of 768
  0:00:01 Rendering line 237 of 768
  0:00:02 Rendering line 292 of 768
  0:00:03 Rendering line 383 of 768
  0:00:04 Rendering line 479 of 768
  0:00:05 Rendering line 538 of 768
  0:00:05 Done Tracing
Render Statistics
Image Resolution 1024 x 768
----------------------------------------------------------------------------
Pixels:           786432   Samples:          786432   Smpls/Pxl: 1.00
Rays:             786432   Saved:                 0   Max Level: 1/5
----------------------------------------------------------------------------
Ray->Shape Intersection          Tests       Succeeded  Percentage
----------------------------------------------------------------------------
Cone/Cylinder                  1927296          164391      8.53
Mesh                            862314          164798     19.11
Sphere                           21764            5562     25.56
Bounding Box                  39215172        13715953     34.98
Light Buffer                  60713588        16726656     27.55
Vista Buffer                  11930298         6504493     54.52
----------------------------------------------------------------------------
Calls to Noise:                   0   Calls to DNoise:              10
----------------------------------------------------------------------------
Shadow Ray Tests:           1215156   Succeeded:                109903
----------------------------------------------------------------------------
Smallest Alloc:                   9 bytes
Largest  Alloc:             2097160 bytes
Peak memory used:          24172005 bytes
Total Scene Processing Times
  Parse Time:    0 hours  0 minutes  1 seconds (1 seconds)
  Photon Time:   0 hours  0 minutes  0 seconds (0 seconds)
  Render Time:   0 hours  0 minutes  5 seconds (5 seconds)
  Total Time:    0 hours  0 minutes  6 seconds (6 seconds)

Producing the beautiful and informative image shown above (despite the Parse Warning and Possible Parse Errors above).

For the record, compiler version differences can be subtle beasts – and my whole discussion above is not directly related to getting ACID to work. The above is a mix of brute force and resource consumption that provided a much faster turnaround in positive results than any amount of work spent in Ubuntu itself to make ACID run successfully – and does not require modifying anyone’s code (an added bonus for those who might have to ask questions of the developers).

So, I would posit that the issue turns out to be a 4.5 vs. 4.8 thing, but I’ve not explored the issue further (frankly, no time – and it’s working – so I don’t know at what point in gcc development that the make process began to produce errors in the ACID code). This isn’t technically the way to run it natively in Ubuntu, but is a way to get it to run in Ubuntu, which still counts in my book. In theory, a VirtualBox install and some book work on finding the dates of certain distros provides yet another way of getting stuff to just work.

That said, getting OpenSUSE to play with the Networking in VirtualBox appears to be a real pain. My solution for that for getting files back-and-forth to process?

DropBox.