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. 
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 corecore repulsion function  
wrtkey.f  Deal with the addition of PDG and MDG keywords 

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*(RIJDA(NI)DA(NJ))**2) 2 (ZAF*PREA(NI)+ZBF*PREB(NJ))*EXP(10.0D0*(RIJDA(NI)DB(NJ))**2)+ 3 (ZAF*PREB(NI)+ZBF*PREA(NJ))*EXP(10.0D0*(RIJDB(NI)DA(NJ))**2)+ 4 (ZAF*PREB(NI)+ZBF*PREB(NJ))*EXP(10.0D0*(RIJDB(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 