Turbomole

Atoms and Basis Sets

After header section, our HTML resume will output a xyz coordinates table with current molecule atoms.

Initially its readed from coord file

Then we will read all instances from module <module cmlx:templateRef=”atomcoord”> and use last instance as final geometry

For every atom, we will output it’s serial number, atom type, coordinates in angstroms, and basis used.

In geometry optimizations calculations, next to geometry section header there will appear the word (optimized), pointing that this geometry is the last one from all optimization steps and has converged.

If the geometry optimization did not converge, there will appear the phrase (calculation did not converge).

If there are multiple geometries we’ll capture it’s last appearance.

image1

Molecular Info

This section captures molecule additional information not captured on previous section.

Molecular Info - Main fields
Field Source Description
Symmetry Appears in symmetry module. Symmetry information about the molecule (if it exists)
Multiplicity

Its value is set:

  • Set to 1 on closed shell calculations
  • On open shell calculations = alpha - beta electrons on occupied orbitals
 
Charge

Readed from:

 
Geometry restrictions <module cmlx:templateRef=”restrictions”> User defined geometry restrictions
Solvation <module cmlx:templateRef=”cosmo”> Solvation parameters

image2

Modules

Population analysis

Data source: <module cmlx:templateRef=’population.analysis’>

Data source: <module cmlx:templateRef=’fit.pointcharges’>

This module will hold Mulliken, Loewdin and Natural population analysis, will also contain (if exists) information from unpaired electrons from D(alpha)-D(beta)

image3

Electrostatic moments

Data source: <module cmlx:templateRef=’electrostatic.moments’>

This module will display charge, dipole and multipole values.

image4

Orbital specification

Data source: <module cmlx:templateRef=’orbitals’>

image5

Final results

Data source: <module cmlx:templateRef=’turbomole.energy’> Taken from last line of energy file

Data source: <module cmlx:templateRef=’energy’>

Data source: <module cmlx:templateRef=’nuclear.repulsion’>

Data source: <module cmlx:templateRef=’zero.point.energy’>

image6

IR spectrum

Data source: <module cmlx:templateRef=’vibrations’>

This module will display JSpecView + JSmol plugins (using javascript libraries) working together to represent molecule IR spectrum.

All information will come from “$vibrational normal modes” and “$vibrational spectrum” sections inside Turbomole control file, in case they are defined on external files such as vib_normal_modes and vibspectrumwe must copy them inside control file.

image7

TDDFT/TDHF

Data source: <module cmlx:templateRef=’excitation’>

image8

[1]

string turbo:getCalcType boolean isRestrictedOptimization boolean isOptimization boolean isIncomplete nodeset vibrations nodeset statpt nodeset soes

$isRestrictedOptimization       Exists module <module cmlx:templateRef="restrictions" > ?
$isOptimization                 Exists module <module cmlx:templateRef="convergence.info" > ?
$isIncomplete                   Last module <module cmlx:templateRef="convergence.info" > has a "NO" on converged fields?
$vibrations                     Vibrational frequencies information, headers and displacements. Refer to <module cmlx:templateRef="vibrations" >
$statpt                         statpt parameters section readed from control file
$soes                           soes parameters section readed from control file

    <xsl:param name="isRestrictedOptimization" as="xs:boolean"/>
    <xsl:param name="isOptimization" as="xs:boolean"/>
    <xsl:param name="isIncomplete" as="xs:boolean"/>
    <xsl:param name="vibrations" as="node()?"/>
    <xsl:param name="statpt" as="node()?"/>
    <xsl:param name="soes" as="node()?"/>

    <xsl:variable name="isMinimum" select="not(contains(replace($vibrations/cml:module[@cmlx:templateRef='spectrum']/array[@dictRef='cc:frequency'],'-0.00',''), '-'))"/>
    <xsl:variable name="isExcitedState">
        <xsl:if test="exists($soes) and number($soes/cml:array[@dictRef='t:irrep']/@size) = 1">
            <xsl:value-of select="$turbo:ExcitedState"/>
            <xsl:text> </xsl:text>
            <xsl:if test="$isRestrictedOptimization or $isOptimization">
                (<xsl:value-of select="$soes/cml:array[@dictRef='t:lowest']"/><xsl:value-of select="$soes/cml:array[@dictRef='t:irrep']"/>)
            </xsl:if>
        </xsl:if>
    </xsl:variable>

    <xsl:variable name="isTS" select="
        if(exists($statpt) and number($statpt//cml:scalar[@dictRef='t:itrvec']) > 0) then
            $turbo:TransitionState
        else
            ''
        "/>
    <xsl:variable name="itrvecdsd" select="number($statpt//cml:scalar[@dictRef='t:itrvec'])"/>
    <xsl:variable name="calcType" select="
        if($isRestrictedOptimization) then
            $turbo:RestrictedGeometryOptimization
        else if($isOptimization) then
            concat($turbo:GeometryOptimization, ' ', $isTS)
        else
            $turbo:SinglePoint
   "/>


    <xsl:variable name="vibration" select="
        if(exists($vibrations) and not($isRestrictedOptimization) and compare($isTS,'') = 0) then
            if($isMinimum) then
                $turbo:Minimum
            else
                $turbo:TransitionState
        else ''
    "/>
    <xsl:sequence select="concat($calcType, ' ', $vibration, ' ', $isExcitedState)"/>
[2]

string turbo:getMehod nodeset soes nodeset methodScalar

$soes           soes parameters section readed from control file <module cmlx:templateRef="soes">
$methodScalar   methods readed from control file ($dft|$uhf)   <module cmlx:templateRef="methods">


<xsl:variable name="methodsTmp">
    <xsl:for-each select="$methodScalar">
        <xsl:for-each select="tokenize(.,'\s+')">
            <xsl:element name="method">
                <xsl:value-of select="upper-case(.)"/>
                <xsl:text> </xsl:text>
            </xsl:element>
        </xsl:for-each>
    </xsl:for-each>
</xsl:variable>
<xsl:choose>
    <xsl:when test="not(exists($methodScalar))">
        <xsl:sequence select="
            if(exists($soes)) then
                'TDHF'
            else
                'HF'
            ">
        </xsl:sequence>
    </xsl:when>
    <xsl:otherwise>
        <xsl:variable name="step1">
            <xsl:choose>
                <xsl:when test="contains($methodsTmp, 'RIR12') and contains($methodsTmp, 'MP2') and contains($methodsTmp, 'RICC2')">
                    <xsl:text>MP2-F12 </xsl:text>
                    <xsl:value-of select="replace(replace(replace($methodsTmp,'RIR12', ''), 'MP2', ''), 'RICC2', '')"></xsl:value-of>
                </xsl:when>
                <xsl:otherwise><xsl:value-of select="$methodsTmp"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <xsl:variable name="step2">
            <xsl:choose>
                <xsl:when test="contains($step1, 'UHF') and contains($step1, 'DFT')">
                    <xsl:text>U-DFT </xsl:text>
                    <xsl:value-of select="replace(replace($step1,'UHF',''), 'DFT','')"/>
                </xsl:when>
                <xsl:otherwise><xsl:value-of select="$step1"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <xsl:variable name="step3">
            <xsl:choose>
                <xsl:when test="contains($step2, 'DFT') and exists($soes)">
                    <xsl:value-of select="replace($step2,'DFT', 'TDDFT')"/>
                </xsl:when>
                <xsl:otherwise><xsl:value-of select="$step2"/></xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <xsl:value-of select="$step3"/>
    </xsl:otherwise>
</xsl:choose>