Enabling PDDG/PM3 and PDDG/MNDO within MOPAC6

MOPAC6 is a semiempirical package for calculating physical properties of molecules. Its source code is written in FORTRAN 77 and is freely available. This page has been written with the goal of helping those interested to add the PDDG methods into MOPAC6 to run on a unix or linux machine. The instructions and source code presented have not been tested with any windows versions of MOPAC.

The simplest way to add the PDDG methods to MOPAC6 is to replace either PM3 or MNDO with PDDG/PM3 or PDDG/MNDO. However, the more robust approach which is discussed herein is to add PDDG/PM3 and PDDG/MNDO into MOPAC6 as seperate methods. By following this approach all prior functionality of MOPAC6 is retained with the addition of the PDDG/PM3 and PDDG/MNDO methods using the keywords, PDG (for PDDG/PM3) or MDG (for PDDG/MNDO).

Only five source files will need to be modified to achieve this goal. These are listed for downloading below.


Modified files required to add PDDG/PM3 and PDDG/MNDO:

block.f Add PDDG/PM3 and PDDG/MNDO parameters
moldat.f Read PDDG/PM3 and PDDG/MNDO parameters into production arrays and deal with the addition of PDG and MDG methods
refer.f Deal with the addition of PDG and MDG methods
rotate.f Add PDDG function to core-core repulsion function
wrtkey.f Deal with the addition of PDG and MDG keywords

Steps for adding the PDDG methods to MOPAC6

  1. Obtain a copy of the MOPAC6 source code. If needed the source code is available via the CCL at http://server.ccl.net/cca/software/SOURCES/FORTRAN/mopac6_sources/

  2. Download the five modified files above (block.f, moldat.f, refer.f, rotate.f, and wrtkey.f) and use them to replace the original MOPAC6 versions of these files.

  3. Compile MOPAC6. Generally this is done by entering the source code directory and typing make. For additional information see documentation included with the source code and/or the Makefile.

  4. Change the Hamiltonian keyword in input files from AM1/PM3/MNDO to PDG/MDG.

  5. Test against results presented in supplimentary information tables (available for download here) listing heats of formation for several hundred organic molecules

These steps are all that are reqired to add PDDG/PM3 and PDDG/MNDO to MOPAC6. Furthermore, as the changes necessary for the PDDG methods are minor and as many semiempirical packages contain similar algorithms, adding the PDDG methods to other programs should prove relatively simple.

Overview of modifications

block.f
Added common blocks: PDDGP, PDDGM
Store the PDDG/PM3 and PDDG/MNDO parameters.
Expanded common blocks: REFS
Store references for the PDDG/PM3 and PDDG/MNDO methods
Added variables: CHARACTERS REFPDG, REFMDG
References for PDDG/PM3 and PDDG/MNDO methods

The added common blocks store the reoptimized parameters for PDDG/PM3 and PDDG/MNDO in a format very similiar to the storage of PM3 and MNDO parameters. The block storing PDDG/PM3 terms is shown below, notice the PAPDG, DAPDG, PBPDG, and DBPDG variables which are the important pairwise distance directed gaussian parameters.


      COMMON /PDDGP/  USSPDG(107), UPPPDG(107), UDDPDG(107), ZSPDG(107),
     1ZPPDG(107), ZDPDG(107), BETASG(107), BETAPG(107), BETADG(107),
     2ALPPDG(107), EISOLG(107), DDPDG(107), QQPDG(107), AMPDG(107),
     3ADPDG(107), AQPDG(107) ,GSSPDG(107), GSPPDG(107), GPPPDG(107),
     4GP2PDG(107), HSPPDG(107),POLVOG(107),PAPDG(107),PBPDG(107),
     5DAPDG(107),DBPDG(107)
moldat.f
Added common blocks: PDDGP, PDDGM, W4G
Store the PDDG/PM3 and PDDG/MNDO parameters. W4G contains arrays which store PDDG gaussian parameters for use in rotate.f
Expanded common blocks: REFS
Add store for the references for PDDG/PM3 and PDDG/MNDO methods
Added variables: LPDG, LMDG
Logical flags indicating use of PDDG/PM3 or PDDG/MNDO

In moldat.f, parameters in the PDDGP and PDDGM common blocks are read into arrays used in the calculation of molecular properties. The logical variables are necessary for catching the PDG and MDG Hamiltonian keywords in the input file (instead of AM1, PM3, or MNDO). Switching in PDDG parameters is accomplished by the following code added immediately following assignment for AM1, PM3, and MNDO:


       ELSEIF(LPDG) THEN
 *
 *    SWITCH IN PDDG/PM3 PARAMETERS
 *
          DO 32 I=1,107
             DO 22 J=1,10
                GUESS1(I,J)=GUESG1(I,J)
                GUESS2(I,J)=GUESG2(I,J)
    22       GUESS3(I,J)=GUESG3(I,J)
             POLVOL(I)=POLVOG(I)
             ZS(I)=ZSPDG(I)
             ZP(I)=ZPPDG(I)
             ZD(I)=ZDPDG(I)
             USS(I)=USSPDG(I)
             UPP(I)=UPPPDG(I)
             UDD(I)=UDDPDG(I)
             BETAS(I)=BETASG(I)
             BETAP(I)=BETAPG(I)
             BETAD(I)=BETADG(I)
             ALP(I)=ALPPDG(I)
             EISOL(I)=EISOLG(I)
             DD(I)=DDPDG(I)
             QQ(I)=QQPDG(I)
             AM(I)=AMPDG(I)
             AD(I)=ADPDG(I)
             AQ(I)=AQPDG(I)
             GSS(I)=GSSPDG(I)
             GPP(I)=GPPPDG(I)
             GSP(I)=GSPPDG(I)
             GP2(I)=GP2PDG(I)
             HSP(I)=HSPPDG(I)
             PREA(I)=PAPDG(I)
             PREB(I)=PBPDG(I)
             DA(I)=DAPDG(I)
             DB(I)=DBPDG(I)
    32    CONTINUE
       ELSEIF(LMDG) THEN
 *
 *    SWITCH IN PDDG/MNDO PARAMETERS
 *
          DO 33 I=1,107
             POLVOL(I)=POLVOH(I)
             ZS(I)=ZSMDG(I)
             ZP(I)=ZPMDG(I)
             ZD(I)=ZDMDG(I)
             USS(I)=USSMDG(I)
             UPP(I)=UPPMDG(I)
             UDD(I)=UDDMDG(I)
             BETAS(I)=BETASH(I)
             BETAP(I)=BETAPH(I)
             BETAD(I)=BETADH(I)
             ALP(I)=ALPMDG(I)
             EISOL(I)=EISOLH(I)
             DD(I)=DDMDG(I)
             QQ(I)=QQMDG(I)
             AM(I)=AMMDG(I)
             AD(I)=ADMDG(I)
             AQ(I)=AQMDG(I)
             GSS(I)=GSSMDG(I)
             GPP(I)=GPPMDG(I)
             GSP(I)=GSPMDG(I)
             GP2(I)=GP2MDG(I)
             HSP(I)=HSPMDG(I)
             PREA(I)=PAMDG(I)
             PREB(I)=PBMDG(I)
             DA(I)=DAMDG(I)
             DB(I)=DBMDG(I)
    33    CONTINUE

refer.f
Expanded common blocks: REFS
Store references for PDDG/PM3 and PDDG/MNDO methods

In refer.f the keywords PDG and MDG are mapped to new modes, 5 and 6, a reqirement for adding the PDDG methods to mopac


rotate.f
Added common blocks: W4G
Stores values of PDDG gaussians used to adjust the core repulsion function

In rotate.f the PDDG function is added onto the core repulsion function in the case of PDG or MDG jobs via the following code:


         IF (ITYPE.EQ.5.OR.ITYPE.EQ.6) THEN
 C
 C THE PDDG FUNCTION HAS BEEN ADDED FOR THE PDDG METHODS
 C
             QCORR = 0.0D0
             ZAF=TORE(NI)/(TORE(NI)+TORE(NJ))
             ZBF=TORE(NJ)/(TORE(NI)+TORE(NJ))
             QCORR =
      1 (ZAF*PREA(NI)+ZBF*PREA(NJ))*EXP(-10.0D0*(RIJ-DA(NI)-DA(NJ))**2)
      2 (ZAF*PREA(NI)+ZBF*PREB(NJ))*EXP(-10.0D0*(RIJ-DA(NI)-DB(NJ))**2)+
      3 (ZAF*PREB(NI)+ZBF*PREA(NJ))*EXP(-10.0D0*(RIJ-DB(NI)-DA(NJ))**2)+
      4 (ZAF*PREB(NI)+ZBF*PREB(NJ))*EXP(-10.0D0*(RIJ-DB(NI)-DB(NJ))**2)
          ELSE
             QCORR = 0.0D0
          ENDIF
          ENUC=ENUC+SCALE+QCORR
wrtkey.f
Added variables: PDG, MDG
Logical flags indicating use of PDDG/PM3 or PDDG/MNDO

Make minor changes necessary to recognize PDG and MDG keywords as valid.


Hopefully this information will help in adding PDDG/PM3 and PDDG/MNDO to MOPAC6. For further assistance and aid please send email to Matt Repasky.



Last updated: 11.14.02



W. L. Jorgensen Reseach Group | Matt Repasky Web Site