Re: MOPAC 6 bug



 > 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...)
 I had not seen this solution. It seems very similar to what George Fitzgerald
 was suggesting. I implemented a slightly different solution on SGI's version of
 Mopac.
 Since MULLIK.f is the offending routine I decided to tackle the problem there.
 I use a scratch area (that I have been using as a REAL scratch area for some
 multiprocessing sections of the code). So, in MULLIK.f I declare:
         common /sgi_scrch/ scr_sgi(3*morb2)
 (some where after the inclusion of SIZES)
 and then, almost at the end of the routine, starting at the call to DENSIT
 I use "scr_sgi" instead of C:
       CALL DENSIT(VECS,NORBS,NORBS,NCLOSE,NOPEN,FRACT,scr_sgi,2)
       LINEAR=(NORBS*(NORBS+1))/2
       DO 100 I=1,LINEAR
   100 scr_sgi(I)=scr_sgi(I)*STORE(I)
       SUMM=0.D0
       DO 130 I=1,NORBS
          SUM=0
          DO 110 J=1,I
   110    SUM=SUM+scr_sgi(IFACT(I)+J)
          DO 120 J=I+1,NORBS
   120    SUM=SUM+scr_sgi(IFACT(J)+I)
          SUMM=SUMM+SUM
   130 scr_sgi(IFACT(I+1))=SUM
       CALL VECPRT(scr_sgi,NORBS)
       RETURN
       END
 Advantages of this approach:
 - No extra transfer of data (back and forth) to temporary arrays
 - If by any chance MULLIK is going to be called from other places of the
   program, no precautions have to be taken to protect C in /VECTOR/
 Disadvantage:
 - Need extra space (In SGI's version if use this space anyway...)
 I will be passing these suggestions to Richard Counts at QCPE..
 						Roberto Gomperts
 						roberto "at@at" sgi.com
 						phone: (508) 562 4800
 						Fax:   (508) 562 4755