From chemistry-request@ccl.net Thu Jun 18 14:03:23 1992 Date: Thu, 18 Jun 92 11:02:13 CDT From: george@archimedes.cray.COM (George Fitzgerald) Subject: MOPAC 6 bug To: chemistry@ccl.net Status: R Manish Sud writes: > Using keyword ESP in conjunction with MULLIK in MOPAC 6.0 generates > excessively large values for the charges - scaled and unscaled - for > any molecular system. I have traced this to the use of the array C in COMMON/VECTOR/. In routine MULLIK, C is used as scratch, so the eigenvectors are destroyed. Unfortunately, the esp routines expect to find the eigenvectors in that array. I solved this problem in my own version by creating a scratch array of size MORB2 in routine WRITMO (which calls MULLIK). I saved a copy of C at the start of WRITMO, and copy it back into C at the end of WRITMO. I realize that there are more elegant solutions, but this was the quickest one I could code up. Does anybody know of a formal way to submit this fix to QCPE? George Fitzgerald Cray Research, Inc. george@gravity.cray.com From chemistry-request@ccl.net Thu Jun 18 17:08:20 1992 Date: Thu, 18 Jun 92 14:48:08 EDT From: system@alchemy.chem.utoronto.CA Subject: MOPAC 6 bug To: chemistry@ccl.net Status: R >I have traced this to the use of the array C in COMMON/VECTOR/. >In routine MULLIK, C is used as scratch, so the eigenvectors are >destroyed. Unfortunately, the esp routines expect to find the eigenvectors >in that array. I solved this problem in my own version by creating a scratch >array of size MORB2 in routine WRITMO (which calls MULLIK). I saved a copy >of C at the start of WRITMO, and copy it back into C at the end of WRITMO. >I realize that there are more elegant solutions, but this was the quickest one >I could code up. > >Does anybody know of a formal way to submit this fix to QCPE? This bug was already reported in QCPE Bulletin Vol. 12, No. 1, page 5, and for those who didn't see it, the solution is (envelope please...) --- around lines 500,512 of writmo.f ---- IF (INDEX(KEYWRD,' MULLIK') +INDEX(KEYWRD,' GRAPH') .NE. 0) THEN IF (INDEX(KEYWRD,' MULLIK') .NE. 0) 1 WRITE(6,'(/10X,'' MULLIKEN POPULATION ANALYSIS'')') + c Following 2 line patch from QCPE Bulletin Vol. 12, No. 1, page 5. + DO 172 I=1,NORBS + 172 Q(I) = P((I*(I+1))/2) CALL MULLIK(C,H,F,NORBS,P,RXYZ) + c Following 2 line patch from QCPE Bulletin Vol. 12, No. 1, page 5. + DO 174 I=1,NORBS + 174 P((I*(I+1))/2) = Q(I) IF (INDEX(KEYWRD,' GRAPH') .NE. 0) 1 WRITE(6,'(/10X,'' DATA FOR GRAPH WRITTEN TO DISK'')') ENDIF Mike.