| SUBROUTINE DIMOID(DEN,RLMO,SSQU,STRI,ATMU,IATM,IWHI,MAPT,INAT, |
| * IATB,L1,L2,M1,M2,NATS,NOSI,NCAT,NSWE) |
| C |
| IMPLICIT DOUBLE PRECISION(A-H,O-Z) |
| C |
| DIMENSION RLMO(L1,L1),SSQU(L1,L1),STRI(L2),ATMU(NATS),DEN(M2) |
| DIMENSION IATM(NATS,M1),IWHI(M1+NATS),MAPT(M1),INAT(M1+NATS) |
| DIMENSION IATB(NATS,M1) |
| C |
| PARAMETER (MXATM=500, MXSH=1000, MXGTOT=5000, MXAO=2047) |
| C |
| LOGICAL GOPARR,DSKWRK,MASWRK |
| C |
| COMMON /INFOA / NAT,ICH,MUL,NUM,NQMT,NE,NA,NB, |
| * ZAN(MXATM),C(3,MXATM) |
| COMMON /IOFILE/ IR,IW,IP,IJKO,IJKT,IDAF,NAV,IODA(400) |
| COMMON /NSHEL / EX(MXGTOT),CS(MXGTOT),CP(MXGTOT),CD(MXGTOT), |
| * CF(MXGTOT),CG(MXGTOT), |
| * KSTART(MXSH),KATOM(MXSH),KTYPE(MXSH), |
| * KNG(MXSH),KLOC(MXSH),KMIN(MXSH), |
| * KMAX(MXSH),NSHELL |
| COMMON /OPTLOC/ CVGLOC,MAXLOC,IPRTLO,ISYMLO,IFCORE,NOUTA,NOUTB, |
| * MOOUTA(MXAO),MOOUTB(MXAO) |
| COMMON /PAR / ME,MASTER,NPROC,IBTYP,IPTIM,GOPARR,DSKWRK,MASWRK |
| COMMON /RUNLAB/ TITLE(10),A(MXATM),B(MXATM),BFLAB(MXAO) |
| C |
| C |
| DO 920 II=1,M1 |
| INAT(II) = 0 |
| 920 CONTINUE |
| C |
| |
| DO 900 IO = NOUTA+1,NUMLOC |
| IZ = IO - NOUTA |
| DO 895 II=NST,NEND |
| ATMU(II) = 0.0D+00 |
| IATM(II,IZ) = 0 |
| 895 CONTINUE |
| IFUNC = 0 |
| DO 890 ISHELL = 1,NSHELL |
| IAT = KATOM(ISHELL) |
| IST = KMIN(ISHELL) |
| IEN = KMAX(ISHELL) |
| DO 880 INO = IST,IEN |
| IFUNC = IFUNC + 1 |
| IF (IAT.LT.NST.OR.IAT.GT.NEND) GOTO 880 |
| ZINT = 0.0D+00 |
| DO 870 II = 1,L1 |
| ZINT = ZINT + RLMO(II,IO)*SSQU(II,IFUNC) |
| 870 CONTINUE |
| ATMU(IAT) = ATMU(IAT) + RLMO(IFUNC,IO)*ZINT |
| 880 CONTINUE |
| 890 CONTINUE |
| IF (MASWRK) WRITE(IW,9010) IZ,(ATMU(II),II=NST,NEND) |
| 900 CONTINUE |
| C |
| NOSI = 0 |
| DO 700 II=1,M1 |
| NO=0 |
| DO 720 JJ=1,NAT |
| NO = NO + 1 |
| 720 CONTINUE |
| 740 CONTINUE |
| IF (NO.GT.1.OR.NO.EQ.0) THEN |
| NOSI = NOSI + 1 |
| IWHI(NOSI) = II |
| ENDIF |
| IF (MASWRK) |
| * WRITE(IW,9030) II,(IATM(J,II),A(IATM(J,II)),J=1,NO) |
| 700 CONTINUE |
| C |
| IF (MASWRK) THEN |
| WRITE(IW,9035) NOSI |
| IF (NOSI.GT.0) THEN |
| WRITE(IW,9040) (IWHI(I),I=1,NOSI) |
| WRITE(IW,9040) |
| ELSE |
| WRITE(IW,9040) |
| ENDIF |
| ENDIF |
| C |
| CALL DCOPY(L1*L1,RLMO,1,SSQU,1) |
| CALL DCOPY(M2,DEN,1,STRI,1) |
| C |
| IP2 = NOUTA |
| IS2 = M1+NOUTA-NOSI |
| DO 695 II=1,NAT |
| INAT(II) = 0 |
| 695 CONTINUE |
| C |
| DO 690 IAT=1,NAT |
| DO 680 IORB=1,M1 |
| IP1 = IORB + NOUTA |
| IF (IATM(1,IORB).NE.IAT) GOTO 680 |
| IF (IATM(2,IORB).NE.0) GOTO 680 |
| INAT(IAT) = INAT(IAT) + 1 |
| IP2 = IP2 + 1 |
| CALL DCOPY(L1,SSQU(1,IP1),1,RLMO(1,IP2),1) |
| CALL ICOPY(NAT,IATM(1,IORB),1,IATB(1,IP2-NOUTA),1) |
| MAPT(IORB) = IP2-NOUTA |
| 680 CONTINUE |
| DO 670 IORB=1,NOSI |
| IS1 = IWHI(IORB) + NOUTA |
| IF (IAT.EQ.NAT.AND.IATM(1,IWHI(IORB)).EQ.0) GOTO 675 |
| IF (IATM(1,IWHI(IORB)).NE.IAT) GOTO 670 |
| 675 CONTINUE |
| IS2 = IS2 + 1 |
| MAPT(IWHI(IORB)) = IS2-NOUTA |
| 670 CONTINUE |
| 690 CONTINUE |
| C |
| NSWE = 0 |
| NCAT = 0 |
| LASP = 1 |
| NLAST = 0 |
| DO 620 II=1,NAT |
| NSWE = NSWE + (IWHI(II)*(IWHI(II)-1))/2 |
| NCAT = NCAT + 1 |
| INAT(NCAT) = LASP + NLAST |
| LASP = INAT(NCAT) |
| NLAST = IWHI(II) |
| IWHI(NCAT) = II |
| 620 CONTINUE |
| C |
| DO 610 II=1,NOSI |
| NCAT = NCAT + 1 |
| INAT(NCAT) = LASP + NLAST |
| LASP = INAT(NCAT) |
| NLAST = 1 |
| IWHI(NCAT) = 0 |
| 610 CONTINUE |
| C |
| RETURN |
| C |
| 8000 FORMAT(/1X,'** MULLIKEN ATOMIC POPULATIONS FOR EACH NON-FROZEN ', |
| * 'LOCALIZED ORBITAL **') |
| 9000 FORMAT(/3X,'ATOM',2X,100(I2,1X,A4)) |
| 9005 FORMAT(1X,'LMO') |
| 9010 FORMAT(1X,I3,3X,100F7.3) |
| 9015 FORMAT(/1X,'** ATOMIC POPULATIONS GREATER THAN ',F4.2, |
| * ' ARE CONSIDERED MAJOR **') |
| 9020 FORMAT(/2X,'LMO',3X,'MAJOR CONTRIBUTIONS FROM ATOM(S)') |
| 9030 FORMAT(2X,I3,2X,100(I2,1X,A2,2X)) |
| 9035 FORMAT(/1X,'NO OF LMOS INVOLVING MORE THAN ONE ATOM =',I3) |
| 9040 FORMAT(1X,'THESE ARE LMOS :',100I3) |
| C |
| END |