***************************************************************************** N B O P R O G R A M (SYSTEM INDEPENDENT ROUTINES) LAST PROGRAM MODIFICATION: OCTOBER 22, 1991 !!! CRAY COMPILATION REQUIRES 64 BIT (-i64) INTEGERS !!! (SEE, IN PARTICULAR, SR JOBOPT, SR NBOPEN, AND SR DEBYTE) ***************************************************************************** MAIN SUBROUTINE: SUBROUTINE NBO(CORE,NBOOPT,MEMORY) JOB INITIALIZATION ROUTINES: (CALLED BY SR NBO) SUBROUTINE NBOSET(NBOOPT) SUBROUTINE JOBOPT(NBOOPT) SUBROUTINE NBODIM(MEMORY) NAO/NBO/NLMO FORMATION ROUTINES: (CALLED BY SR NBO) SUBROUTINE NAODRV(DM,T,A) SUBROUTINE NAOSIM(DM,T,A) SUBROUTINE DMNAO(DM,T,A) SUBROUTINE DMSIM(DM,T,A) SUBROUTINE NBODRV(DM,T,A,MEMORY) ROUTINES CALLED BY THE NAO DRIVERS: SUBROUTINE SIMTRM(A,S,V,NDIM,N,IWMULP,IWCUBF) SUBROUTINE MULANA(BS,VMAYER,BMAYER,IWMULP,IWCUBF) SUBROUTINE DFGORB(RENORM,DM,T,ITRAN,IWCUBF,ITOPT,LFNPR) SUBROUTINE NAO(T,S,OCC,BLK,SBLK,EVAL,C,EVECT,EVAL2,LISTAO,NBLOCK) SUBROUTINE NAOANL(DM,SPNAO,BINDEX,BINDT,BMO,OVPOP,F,ENAO) SUBROUTINE FRMTMO(T,TMO,C,SCR,INDEX,IFLG) ROUTINES CALLED BY SR NAO: SUBROUTINE LOADAV(LISTAO,NL,M,S,NDIM,A,B,MXAOLM) SUBROUTINE ATDIAG(N,A,B,EVAL,C) SUBROUTINE SETBAS(LSTOCC,LSTEMT,NOCC,NEMT,IAT,L,NL,NF,NDIM) SUBROUTINE NEWWTS(S,T,WT) SUBROUTINE WORTH(S,T,BLK,LIST,NDIM,NBAS,N,OCC,EVAL,BIGBLK) SUBROUTINE SHMDT(T,S,NDIM,NBAS,NOCC,LSTOCC,NEMT,LSTEMT,SBLK) SUBROUTINE NEWRYD(T,S,TPNAO,DMBLK,SBLK,EVECT,OCC,EVAL,EVAL2, + LIST,IRPNAO) SUBROUTINE RYDIAG(T,S,TPNAO,DMBLK,SBLK,OCC,EVAL,EVECT,EVAL2, + IORB,NC,NM,NSTART,NRYDC,LARC,LIST,IRPNAO) SUBROUTINE RYDSEL(LSTEMT,NEMT,NSEL1,LIST1,NSEL2,LIST2,WT) SUBROUTINE REDIAG(DM,T,TPNAO,EVAL,BLK,C,IRANK,IRPNAO) SUBROUTINE REDBLK(T,TPNAO,IL,DM,BLK,EVAL,C,NF,IORB,NC,IRANK,IRPNAO) ROUTINES CALLED BY THE NBO/NLMO DRIVERS: SUBROUTINE NATHYB(DM,T,GUIDE,BNDOCC,POL,Q,V,BLK,C,EVAL,BORB, + P,TA,HYB,VA,VB,TOPO) SUBROUTINE CHSDRV(DM,T,GUIDE,BNDOCC,POL,Q,V,BLK,C,EVAL,BORB, + P,TA,HYB,VA,VB,TOPO) SUBROUTINE CHOOSE(DM,T,GUIDE,BNDOCC,POL,Q,V,BLK,C,EVAL,BORB, + P,TA,HYB,VA,VB,TOPO,IFLG) SUBROUTINE SRTNBO(T,BNDOCC) SUBROUTINE XCITED(DM,T,HYB,THYB,S,OCC,SCR,ISCR) SUBROUTINE ANLYZE(T,BNDOCC,HYB,HYCOEF,THYB) SUBROUTINE HTYPE(HYB,LTYP,MXAO,NH,COEF,PCT,NL,ISGN) SUBROUTINE FRMHYB(HYB,THYB,COEF,HYCOEF,KL,KU,NHYB) SUBROUTINE HYBDIR(BNDOCC,ATCOOR,THYB,TBND,SCR) SUBROUTINE HYBCMP(XYZ,PCENT,IHYB,JCTR,HYB) SUBROUTINE FNDMOL(IATOMS) SUBROUTINE NBOCLA(BNDOCC,ACCTHR) SUBROUTINE FNBOAN(BNDOCC,F,MOLNBO) SUBROUTINE NBOSUM(F,BNDOCC,LIST,LISTA,SCR) SUBROUTINE GETDEL(IBO,OCC,THR1,THR2,NL,LIST,DEL,DELOC,IFLG) SUBROUTINE DLCSTR(IBO,IL,NL,LIST,ML,ISTR) SUBROUTINE NLMO(N,A,EVAL,EVEC,TSYM,RESON,NOCC,IALARM) SUBROUTINE LMOANL(T,S,RESON,OCC,TS,BORDER,OWBORD,ATLMO,SIAB,NOCC,NAB) SUBROUTINE DIPANL(DM,T,C,TNBO,DX,DY,DZ,SCR,INDEX) SUBROUTINE DIPELE(DXYZ,C,T,SCR,ETA,NOCC,INDEX) SUBROUTINE DIPNUC(DX,DY,DZ,ATCOOR,ETA,NOCC) ROUTINES CALLED BY SR NATHYB, SR CHOOSE: SUBROUTINE CORE(DM,T,BORB,POL,Q,HYB,BNDOCC,IBD,DETAIL,LFNPR) FUNCTION IWPRJ(NCTR) SUBROUTINE DEPLET(DM,T,Q,POL,BORB,BNDOCC,NBD) SUBROUTINE LOAD(DM,IAT1,IAT2,IAT3,BLK,NB) SUBROUTINE PRJEXP(BORB,IAT1,IAT2,IAT3,Q,P,PK,HYB,VA,VB,HYBEXP) SUBROUTINE STASH(BORB,IBD,IAT1,IAT2,IAT3,POL,Q,HYB) SUBROUTINE ORTHYB(Q,S,TA,EVAL,C,IALARM,IFLG) SUBROUTINE FRMPRJ(P,IA,Q,NK,PK,VK,PI) SUBROUTINE AUGMNT(P,BLK,C,EVAL,DM,TA,BORB,V,LARC,IA,NOCC,NORB) SUBROUTINE REPOL(DM,Q,POL,BLK,EVAL,C,NBD) SUBROUTINE FORMT(T,Q,POL) SUBROUTINE CYCLES(ITER,THRESH,GUIDE,BNDOCC,TOPO,ICONT) ROUTINES CALLED BY SR NLMO: SUBROUTINE SYMUNI(TSYM,A,COS,SIN,OVLP,BLK,EVAL,NROT, + NIUNIQ,NJUNIQ,ILIST,JLIST,NOFF,IOFF,JOFF,NDIM) SUBROUTINE SYMORT(S,T,BLK,NDIM,N,EVAL) NBO ENERGETIC ANALYSIS ROUTINES: SUBROUTINE NBOEAN(A,MEMORY,NBOOPT,IDONE) SUBROUTINE NBODEL(A,MEMORY,IDONE) SUBROUTINE DELETE(F,TRF,NDIM,IDEL,LEN,ITYPE,NDEL,NTRUNC,DONE, + ISPIN) SUBROUTINE NEWDM(DM,U,EIG,NDIM,IDEL,LEN,NDEL,ITYPE,NMOOCC,ISPIN) SUBROUTINE RNKEIG(RANK,EIG,N,NDIM,ARCRNK) SUBROUTINE SIMLTR(N,NDIM,F,U,R,S,KNTROL) NBO DIRECT ACCESS FILE (DAF) ROUTINES: SUBROUTINE NBFILE(NEW,ERROR) SUBROUTINE NBOPEN(NEW,ERROR) SUBROUTINE NBWRIT(IX,NX,IDAR) SUBROUTINE NBREAD(IX,NX,IDAR) SUBROUTINE NBCLOS(SEQ) SUBROUTINE NBINQR(IDAR) SUBROUTINE FETITL(TITLE) SUBROUTINE FEE0(EDEL,ETOT) SUBROUTINE SVE0(EDEL) SUBROUTINE FECOOR(ATCOOR) SUBROUTINE FESRAW(S) SUBROUTINE FEDRAW(DM,SCR) SUBROUTINE FEFAO(F,IWFOCK) SUBROUTINE FEAOMO(T,IT) SUBROUTINE FEDXYZ(DXYZ,I) SUBROUTINE SVNBO(T,OCC,ISCR) SUBROUTINE FENBO(T,OCC,ISCR,NELEC) SUBROUTINE FETNBO(T) SUBROUTINE SVPNAO(T) SUBROUTINE FEPNAO(T) SUBROUTINE SVSNAO(S) SUBROUTINE FESNAO(S) SUBROUTINE SVTNAB(T) SUBROUTINE FETNAB(T) SUBROUTINE SVTLMO(T) SUBROUTINE FETLMO(T) SUBROUTINE SVTNHO(T) SUBROUTINE FETNHO(T) SUBROUTINE SVPPAO(DM) SUBROUTINE FEPPAO(DM) SUBROUTINE SVTNAO(T) SUBROUTINE FETNAO(T) SUBROUTINE SVNLMO(T) SUBROUTINE FENLMO(T) SUBROUTINE SVDNAO(DM) SUBROUTINE FEDNAO(DM) SUBROUTINE SVFNBO(F) SUBROUTINE FEFNBO(F) SUBROUTINE SVNEWD(DM) SUBROUTINE FENEWD(DM) SUBROUTINE FEINFO(ICORE,ISWEAN) SUBROUTINE FEBAS(NSHELL,NEXP,ISCR) FREE FORMAT INPUT ROUTINES: SUBROUTINE STRTIN(LFNIN) SUBROUTINE RDCRD SUBROUTINE IFLD(INT,ERROR) SUBROUTINE RFLD(REAL,ERROR) SUBROUTINE HFLD(KEYWD,LENG,ENDD) SUBROUTINE FNDFLD FUNCTION EQUAL(IA,IB,L) OTHER SYSTEM-INDEPENDENT I/O ROUTINES: SUBROUTINE GENINP(NEWDAF) SUBROUTINE NBOINP(NBOOPT,IDONE) SUBROUTINE CORINP(IESS,ICOR) SUBROUTINE CHSINP(IESS,ICHS) SUBROUTINE DELINP(NBOOPT,IDONE) SUBROUTINE RDCORE(JCORE) SUBROUTINE WRPPNA(T,OCC,IFLG) SUBROUTINE RDPPNA(T,OCC,IFLG) SUBROUTINE WRTNAO(T,IFLG) SUBROUTINE RDTNAO(DM,T,SCR,IFLG) SUBROUTINE WRTNAB(T,IFLG) SUBROUTINE RDTNAB(T,DM,BNDOCC,SCR,IFLG) SUBROUTINE WRTNBO(T,BNDOCC,IFLG) SUBROUTINE WRNLMO(T,DM,IFLG) SUBROUTINE WRBAS(SCR,ISCR,LFN) SUBROUTINE WRARC(SCR,ISCR,LFN) SUBROUTINE AOUT(A,MR,NR,NC,TITLE,INDEX,IFLG) SUBROUTINE APRINT(A,MR,NR,NC,TITLE,INDEX,MCOL) SUBROUTINE AWRITE(A,MR,NR,NC,TITLE,LFN) SUBROUTINE AREAD(A,MR,NR,NC,JOB,LFN,ERROR) SUBROUTINE ALTOUT(A,MR,MC,NR,NC) SUBROUTINE KEYPAR(STRING,LEN,IFLG,LFN,READ,ERROR) FUNCTION IOINQR(IFLG) SUBROUTINE LBLAO SUBROUTINE LBLNAO SUBROUTINE LBLNBO SUBROUTINE LBLNHO(INHO,INBO,ICTR,NCTR) GENERAL UTILITY ROUTINES: SUBROUTINE ANGLES(X,Y,Z,THETA,PHI) FUNCTION BDFIND(IAT,JAT) SUBROUTINE CHEM(NAT,NATOMS,LISTA,NL,ISTR) SUBROUTINE CONSOL(AUT,ALT,NDIM,N) SUBROUTINE CONVIN(IJ,LEN,IK,ERROR) SUBROUTINE CONVRT(N,NC1,NC2) SUBROUTINE COPY(A,B,NDIM,NR,NC) SUBROUTINE CORTBL(IAT,ICORE,IECP) SUBROUTINE DEBYTE(I,IBYTE) SUBROUTINE HALT(WORD) SUBROUTINE IDIGIT(KINT,IK,ND,MAXD) FUNCTION IHTYP(IBO,JBO) SUBROUTINE JACOBI(N,A,EIVU,EIVR,NDIM,NVDIM,ICONTR) SUBROUTINE LIMTRN(T,M,A,B,NDIM,NBAS,NCDIM,NC,IOPT) SUBROUTINE MATMLT(A,B,V,NDIM,N) SUBROUTINE MATML2(A,B,V,NDIM,N) FUNCTION NAMEAT(IZ) SUBROUTINE NORMLZ(A,S,M,N) SUBROUTINE ORDER(RANK,LIST,N,NDIM,ARCRNK) SUBROUTINE PACK(T,NDIM,NBAS,L2) SUBROUTINE RANK(EIG,N,NDIM,ARCRNK) SUBROUTINE SIMTRN(A,T,V,NDIM,N) SUBROUTINE SIMTRS(A,S,V,NDIM,N) SUBROUTINE TRANSP(A,NDIM,N) SUBROUTINE UNPACK(T,NDIM,NBAS,L2) SUBROUTINE VALTBL(IAT,IVAL) FUNCTION VECLEN(X,N,NDIM) SUBROUTINE LINEQ(A,X,B,SCR,N,M,NDIM,MDIM,ZERTOL,EPS,MAXIT,LFNPR, + IERR) SUBROUTINE FACTOR(A,W,D,IPIVOT,N,NDIM,ZERTOL,IFLAG) SUBROUTINE FNDSOL(A,X,B,W,R,E,IPIVOT,N,NDIM,EPS,MAXIT,LFNPR,IERR) SUBROUTINE SUBST(X,W,B,IPIVOT,N,NDIM) ***************************************************************************** SUBROUTINE NBO(CORE,MEMORY,NBOOPT) ***************************************************************************** Input: CORE Core memory to be dynamically allocated for storage needs. MEMORY The number of REAL*8 words available in `CORE'. NBOOPT(10) List of NBO options as summarized below: NBOOPT(1) = -2 Do nothing = -1 Natural Population Analysis (NPA) only = 0 Perform NPA/NBO/NLMO analyses = 1 Perform NPA/NBO/NLMO analyses, don't read keywords = 2 Perform one Fock matrix deletion, forming new DM = 3 Evaluate and print the energy change from deletion NBOOPT(2) = 0 SCF density = 1 MP first order density = 3 MP2 density = 4 MP3 density = 5 MP4 density = 6 CI one-particle density = 7 CI density = 8 QCI/CC density = 9 Density correct to second order NBOOPT(3) = 1 Transform dipole moment matrices to NBO/NLMO bases NBOOPT(4) = 1 Allow strongly resonant Lewis Structures (Force the RESONANCE keyword) NBOOPT(5) = 1 Spin-annihilated UHF (AUHF) wavefunction NBOOPT(6-9) Unused NBOOPT(10) = 0 General version of the NBO program (GENNBO) = 1 AMPAC version = 6 GAMESS version = 7 HONDO version = 8x Gaussian 8x version ------------------------------------------------------------------------------ IMPLICIT REAL*8 (A-H,O-Z) LOGICAL NEWDAF,ERROR,SEQ NBO COMMON BLOCKS: PARAMETER(MAXATM = 99,MAXBAS = 500) COMMON/NBFLAG/ROHF,UHF,CI,OPEN,COMPLX,ALPHA,BETA,MCSCF,AUHF,ORTHO LOGICAL ROHF,UHF,CI,OPEN,COMPLX,ALPHA,BETA,MCSCF,AUHF,ORTHO COMMON/NBINFO/ISPIN,NATOMS,NDIM,NBAS,MXBO,MXAO,MXAOLM,MUNIT COMMON/NBOPT/IWDM,IW3C,IWAPOL,IWHYBS,IWPNAO,IWTNAO,IWTNAB, + IWTNBO,IWFOCK,IWCUBF,IPSEUD,KOPT,IPRINT,IWDETL,IWMULP,ICHOOS, + JCORE,JPRINT(60) COMMON/NBBAS/LABEL(MAXBAS,6),NBOUNI(MAXBAS),NBOTYP(MAXBAS), + LSTOCC(MAXBAS),IBXM(MAXBAS),LARC(MAXBAS),LBL(MAXBAS), + LORBC(MAXBAS),LORB(MAXBAS) COMMON/NBAO/LCTR(MAXBAS),LANG(MAXBAS) COMMON/NBATOM/IATNO(MAXATM),INO(MAXATM),NORBS(MAXATM),LL(MAXATM), + LU(MAXATM),IZNUC(MAXATM),IATCR(MAXATM) COMMON/NBIO/LFNIN,LFNPR,LFNAO,LFNPNA,LFNNAO,LFNPNH,LFNNHO,LFNPNB, + LFNNBO,LFNPNL,LFNNLM,LFNMO,LFNDM,LFNNAB,LFNPPA,LFNARC, + LFNDAF,LFNDEF DIMENSION CORE(MEMORY),NBOOPT(10) IF NBOOPT(1).EQ.-2, THEN NO NBO ANALYSIS WAS REQUESTED: IF(NBOOPT(1).EQ.-2) RETURN SET DEFAULT OPTIONS: CALL NBOSET(NBOOPT) IF THIS IS THE GENERAL VERSION OF THE PROGRAM, READ THE $GENNBO KEYLIST: IF(NBOOPT(10).EQ.0) THEN CALL GENINP(NEWDAF) ELSE NEWDAF = .TRUE. END IF SEARCH THE INPUT FILE FOR THE $NBO KEYLIST: CALL NBOINP(NBOOPT,IDONE) IF(IDONE.EQ.1) RETURN READ IN JOB OPTIONS FROM THE $NBO KEYLIST: CALL JOBOPT(NBOOPT) CHECK FILENAME AND OPEN SEQUENTIAL FILES: CALL NBFILE(NEWDAF,ERROR) IF(ERROR) RETURN OPEN THE NBO DIRECT ACCESS FILE: CALL NBOPEN(NEWDAF,ERROR) IF(ERROR) THEN WRITE(LFNPR,900) RETURN END IF FETCH ATOMS, BASIS, AND WAVE FUNCTION INFORMATION: CALL FEAOIN(CORE,CORE,NBOOPT) IF(COMPLX) RETURN WRITE THE JOB TITLE TO THE OUTPUT FILE: CALL FETITL(CORE) WRITE(LFNPR,910) (CORE(I),I=1,8) SET UP DIMENSIONING INFORMATION AND DETERMINE IF ENOUGH SPACE IS AVAILABLE: CALL NBODIM(MEMORY) SET UP BASIC STORAGE: CORE(NDM) : NDIM BY NDIM MATRIX TO STORE DENSITY MATRIX CORE(NT) : NDIM BY NDIM MATRIX TO HOLD OVERLAP OR TRANSFORMATION MATRICES CORE(NSCR): SCRATCH STORAGE, DYNAMICALLY ALLOCATED ACCORDING NEEDS N2 = NDIM*NDIM NDM = 1 NT = NDM + N2 NSCR = NT + N2 MEM = MEMORY - NSCR + 1 READ IN INPUT OVERLAP AND DENSITY MATRICES, AO BASIS: ALPHA = .FALSE. BETA = .FALSE. ISPIN = 0 CALL FEDRAW(CORE(NDM),CORE(NSCR)) SIMULATE THE NATURAL POPULATION ANALYSIS IF THE INPUT BASIS IS ORTHOGONAL: IF(ORTHO) THEN CALL NAOSIM(CORE(NDM),CORE(NT),CORE(NSCR)) LOAD THE OVERLAP MATRIX INTO CORE(NT) AND PERFORM THE NATURAL POPULATION ANALYSIS: ELSE CALL FESRAW(CORE(NT)) CALL NAODRV(CORE(NDM),CORE(NT),CORE(NSCR)) END IF NOTE: CORE(NDM) NOW CONTAINS THE TOTAL DENSITY MATRIX IN THE NAO BASIS AND CORE(NT) CONTAINS THE AO TO NAO TRANSFORMATION PERFORM CLOSED SHELL NBO ANALYSIS: IF(.NOT.OPEN) THEN CALL NBODRV(CORE(NDM),CORE(NT),CORE(NSCR),MEM) ELSE PERFORM OPEN SHELL NBO ANALYSIS: FIRST, ANALYZE ALPHA DENSITY MATRIX: ALPHA = .TRUE. BETA = .FALSE. ISPIN = 2 IF(ORTHO) THEN CALL DMSIM(CORE(NDM),CORE(NT),CORE(NSCR)) ELSE CALL DMNAO(CORE(NDM),CORE(NT),CORE(NSCR)) END IF CALL NBODRV(CORE(NDM),CORE(NT),CORE(NSCR),MEM) NOW, ANALYZE BETA DENSITY MATRIX: ALPHA = .FALSE. BETA = .TRUE. ISPIN = -2 IF(ORTHO) THEN CALL DMSIM(CORE(NDM),CORE(NT),CORE(NSCR)) ELSE CALL DMNAO(CORE(NDM),CORE(NT),CORE(NSCR)) END IF CALL NBODRV(CORE(NDM),CORE(NT),CORE(NSCR),MEM) END IF CLOSE THE NBO DIRECT ACCESS FILE AND OTHER EXTERNAL FILES: SEQ = .TRUE. CALL NBCLOS(SEQ) RETURN 900 FORMAT(/1X,'NBO direct access file could not be opened. NBO ', + 'program aborted.') 910 FORMAT(/1X,'Job title: ',8A8) END ***************************************************************************** JOB INITIALIZATION ROUTINES: (CALLED BY SR NBO) SUBROUTINE NBOSET(NBOOPT) SUBROUTINE JOBOPT(NBOOPT) SUBROUTINE NBODIM(MEMORY) ***************************************************************************** SUBROUTINE NBOSET(NBOOPT) ***************************************************************************** IMPLICIT REAL*8 (A-H,O-Z) DIMENSION NBOOPT(10) PARAMETER(MAXATM = 99,MAXBAS = 500) PARAMETER(MAXFIL = 40) COMMON/NBFLAG/ROHF,UHF,CI,OPEN,COMPLX,ALPHA,BETA,MCSCF,AUHF,ORTHO LOGICAL ROHF,UHF,CI,OPEN,COMPLX,ALPHA,BETA,MCSCF,AUHF,ORTHO COMMON/NBINFO/ISPIN,NATOMS,NDIM,NBAS,MXBO,MXAO,MXAOLM,MUNIT COMMON/NBOPT/IWDM,IW3C,IWAPOL,IWHYBS,IWPNAO,IWTNAO,IWTNAB, + IWTNBO,IWFOCK,IWCUBF,IPSEUD,KOPT,IPRINT,IWDETL,IWMULP,ICHOOS, + JCORE,JPRINT(60) COMMON/NBIO/LFNIN,LFNPR,LFNAO,LFNPNA,LFNNAO,LFNPNH,LFNNHO,LFNPNB, + LFNNBO,LFNPNL,LFNNLM,LFNMO,LFNDM,LFNNAB,LFNPPA,LFNARC, + LFNDAF,LFNDEF COMMON/NBTHR/THRSET,PRJSET,ACCTHR,CRTSET,E2THR,ATHR,PTHR,ETHR, + DTHR,DLTHR,CHSTHR COMMON/NBLBL/NLEW,NVAL,LBL(10,MAXBAS,4) COMMON/NBNAME/FILENM,NFILE,IFILE(MAXFIL) CHARACTER*80 FILENM DATA TENTH,HALF/0.1D0,0.5D0/ SET DEFAULT JOB OPTIONS: (MODIFICATIONS TO THESE DEFAULTS SHOULD NOT BE MADE HERE BUT LATER IN THIS SUBROUTINE) USE THE BOND-ORDER MATRIX, NOT THE OCCUPATION MATRIX (EXPECTATION VALUES OF THE DENSITY OPERATOR) IWDM = 1 IW3C = 0 IWAPOL = 0 IWHYBS = 0 IWPNAO = 0 IWTNAO = 0 IWTNAB = 0 IWTNBO = 0 USE THE FOCK MATRIX, IF THERE IS ONE: IWFOCK = 1 SET TO THE DESIRED PRINT LEVEL + 10: IPRINT = 12 IPSEUD = 0 IWDETL = 0 IWMULP = 0 ICHOOS = 0 KOPT = 0 JCORE = 0 IWCUBF = 0 OPEN = .FALSE. ORTHO = .FALSE. UHF = .FALSE. AUHF = .FALSE. ROHF = .FALSE. CI = .FALSE. MCSCF = .FALSE. COMPLX = .FALSE. DO 10 I = 1,60 JPRINT(I) = 0 10 CONTINUE LFNAO = 31 LFNPNA = 32 LFNNAO = 33 LFNPNH = 34 LFNNHO = 35 LFNPNB = 36 LFNNBO = 37 LFNPNL = 38 LFNNLM = 39 LFNMO = 40 LFNDM = 41 LFNNAB = 42 LFNPPA = 43 LFNARC = 47 SET POSITIVE IN ROUTINE JOBOPT IF CHOSEN BY THE USER: LFNDAF = -48 LFNDEF = 49 SETTING NVAL NEGATIVE INDICATES THAT THIS VARIABLE HAS NOT BEEN DETERMINED YET: NVAL = -1 INITIALIZE THE CHARACTER STRING USED TO CREATE FILENAMES: FILENM(1:4) = 'FILE' DO 50 I = 5,80 FILENM(I:I) = CHAR(32) 50 CONTINUE THAT SOME THRESHOLDS ARE .LT.0 INDICATES THAT THESE VARIABLES HAVE NOT BEEN SET BY THE USER: THRSET = -1.9D0 PRJSET = -0.2D0 ACCTHR = -TENTH CRTSET = 1.999 E2THR = -HALF ATHR = -1.000 PTHR = -25.000 ETHR = -0.100 DTHR = -0.020 DLTHR = -1.000 CHSTHR = -0.100 SET JOB OPTIONS ACCORDING TO NBOOPT: SKIP THE COMPUTATION OF THE NBOS? IF(NBOOPT(1).EQ.-1) JPRINT(1) = 1 TURN OFF $CHOOSE AND $CORE KEYLISTS IF $NBO KEYLIST IS NOT TO BE READ: IF(NBOOPT(1).EQ.1) ICHOOS = -1 IF(NBOOPT(1).EQ.1) JCORE = -1 FORCE DIPOLE ANALYSIS? IF(NBOOPT(3).NE.0) THEN JPRINT(46) = 1 END IF FORCE RESONANCE KEYWORD? IF(NBOOPT(4).NE.0) JPRINT(14) = 1 PROGRAM VERSION: JPRINT(2) = NBOOPT(10) RETURN END ****************************************************************************** SUBROUTINE JOBOPT(NBOOPT) ****************************************************************************** IMPLICIT REAL*8 (A-H,O-Z) LOGICAL ERROR,END,EQUAL,NEXTWD,READ DIMENSION NBOOPT(10),INTTMP(80) PARAMETER(KEYLEN = 9) PARAMETER(MAXFIL = 40) COMMON/NBFLAG/ROHF,UHF,CI,OPEN,COMPLX,ALPHA,BETA,MCSCF,AUHF,ORTHO LOGICAL ROHF,UHF,CI,OPEN,COMPLX,ALPHA,BETA,MCSCF,AUHF,ORTHO COMMON/NBINFO/ISPIN,NATOMS,NDIM,NBAS,MXBO,MXAO,MXAOLM,MUNIT COMMON/NBOPT/IWDM,IW3C,IWAPOL,IWHYBS,IWPNAO,IWTNAO,IWTNAB, + IWTNBO,IWFOCK,IWCUBF,IPSEUD,KOPT,IPRINT,IWDETL,IWMULP,ICHOOS, + JCORE,JPRINT(60) COMMON/NBIO/LFNIN,LFNPR,LFNAO,LFNPNA,LFNNAO,LFNPNH,LFNNHO,LFNPNB, + LFNNBO,LFNPNL,LFNNLM,LFNMO,LFNDM,LFNNAB,LFNPPA,LFNARC, + LFNDAF,LFNDEF COMMON/NBTHR/THRSET,PRJSET,ACCTHR,CRTSET,E2THR,ATHR,PTHR,ETHR, + DTHR,DLTHR,CHSTHR COMMON/NBNAME/FILENM,NFILE,IFILE(MAXFIL) CHARACTER*80 FILENM DIMENSION KEYWD(KEYLEN),K3CBND(6),KEPERT(6),KLFNPR(5),KTHRSH(6), * KDETL(6),KMULA(5),KMULOR(6),KPRJTH(6),KNBNLM(7), * KAOPRE(6),KNLMO(4),KNAOMO(5),KNBOMO(5),KNOBND(6),KNPA(3), * KSKIPB(6),KRPNAO(5),KBNDID(6),KNLMMO(6),KRESON(5),KPPNAO(7), * KAONAO(5),KNANBO(6),KAONBO(5),KAONLM(6),KFNBO(4),KFNLMO(5), * KDMNBO(5),KDMNLM(6),KPRINT(5),KNANLM(7),KSPNAO(5),KSPNHO(5), * KSPNBO(5),KAOINF(6),KAOPNB(6),KAOMO(4),KNAONH(6),KNHNLM(7), * KAONHO(5),KFNHO(4),KAOPNH(6),KFNAO(4),KNHONB(6),KSPNLM(6), * KNRT(3),KDMNHO(5),KDMNAO(5),KPLOT(4),KAOPNL(7),KDIAO(4), * KBEND(4),KNHOMO(5),KSAO(3),KFAO(3),KDMAO(4),KBOAO(4),KDINLM(6), * KNBOSM(6),KNBO(3),KDIPOL(6),KDINAO(5),KDINHO(5),KDINBO(5), * KNBDAF(6),KARCHV(7),KFILE(4),KPOLAR(6),KNRTOP(6),KNRTRF(6), * KCHSTH(6),KNRTDT(6),KNRTTH(6) DIMENSION KALT(4),KBFGS(4),KPOWEL(6),KSAP(3) DATA K3CBND/1H3,1HC,1HB,1HO,1HN,1HD/,KLFNPR/1HL,1HF,1HN,1HP,1HR/, * KTHRSH/1HT,1HH,1HR,1HE,1HS,1HH/,KEPERT/1HE,1H2,1HP,1HE,1HR,1HT/, * KPLOT/1HP,1HL,1HO,1HT/,KDETL/1HD,1HE,1HT,1HA,1HI,1HL/, * KMULA/1HM,1HU,1HL,1HA,1HT/,KMULOR/1HM,1HU,1HL,1HO,1HR,1HB/, * KPRJTH/1HP,1HR,1HJ,1HT,1HH,1HR/,KAOPRE/1HA,1HO,1HP,1HN,1HA,1HO/, * KNLMO/1HN,1HL,1HM,1HO/,KNPA/1HN,1HP,1HA/,KNBO/1HN,1HB,1HO/, * KNAOMO/1HN,1HA,1HO,1HM,1HO/,KNBOMO/1HN,1HB,1HO,1HM,1HO/, * KNOBND/1HN,1HO,1HB,1HO,1HN,1HD/,KSKIPB/1HS,1HK,1HI,1HP,1HB,1HO/, * KRPNAO/1HR,1HP,1HN,1HA,1HO/,KBNDID/1HB,1HN,1HD,1HI,1HD,1HX/, * KNLMMO/1HN,1HL,1HM,1HO,1HM,1HO/,KRESON/1HR,1HE,1HS,1HO,1HN/, * KPPNAO/1HP,1HA,1HO,1HP,1HN,1HA,1HO/,KAONAO/1HA,1HO,1HN,1HA,1HO/, * KNANBO/1HN,1HA,1HO,1HN,1HB,1HO/,KAONBO/1HA,1HO,1HN,1HB,1HO/ DATA KAONLM/1HA,1HO,1HN,1HL,1HM,1HO/,KFNBO/1HF,1HN,1HB,1HO/, * KFNLMO/1HF,1HN,1HL,1HM,1HO/,KPRINT/1HP,1HR,1HI,1HN,1HT/, * KDMNBO/1HD,1HM,1HN,1HB,1HO/,KDMNLM/1HD,1HM,1HN,1HL,1HM,1HO/, * KNANLM/1HN,1HA,1HO,1HN,1HL,1HM,1HO/,KAOMO/1HA,1HO,1HM,1HO/, * KSPNAO/1HS,1HP,1HN,1HA,1HO/,KSPNHO/1HS,1HP,1HN,1HH,1HO/, * KSPNBO/1HS,1HP,1HN,1HB,1HO/,KFNAO/1HF,1HN,1HA,1HO/, * KAOINF/1HA,1HO,1HI,1HN,1HF,1HO/,KAOPNB/1HA,1HO,1HP,1HN,1HB,1HO/, * KAONHO/1HA,1HO,1HN,1HH,1HO/,KFNHO/1HF,1HN,1HH,1HO/, * KAOPNH/1HA,1HO,1HP,1HN,1HH,1HO/,KNRT/1HN,1HR,1HT/, * KNBNLM/1HN,1HB,1HO,1HN,1HL,1HM,1HO/,KDIAO/1HD,1HI,1HA,1HO/, * KDMNHO/1HD,1HM,1HN,1HH,1HO/,KDMNAO/1HD,1HM,1HN,1HA,1HO/, * KBEND/1HB,1HE,1HN,1HD/,KNBOSM/1HN,1HB,1HO,1HS,1HU,1HM/, * KNHOMO/1HN,1HH,1HO,1HM,1HO/,KSAO/1HS,1HA,1HO/,KFAO/1HF,1HA,1HO/ DATA KDMAO/1HD,1HM,1HA,1HO/,KBOAO/1HB,1HO,1HA,1HO/, * KDIPOL/1HD,1HI,1HP,1HO,1HL,1HE/,KNAONH/1HN,1HA,1HO,1HN,1HH,1HO/, * KNHNLM/1HN,1HH,1HO,1HN,1HL,1HM,1HO/,KDINAO/1HD,1HI,1HN,1HA,1HO/, * KNHONB/1HN,1HH,1HO,1HN,1HB,1HO/,KSPNLM/1HS,1HP,1HN,1HL,1HM,1HO/, * KAOPNL/1HA,1HO,1HP,1HN,1HL,1HM,1HO/,KDINHO/1HD,1HI,1HN,1HH,1HO/, * KDINBO/1HD,1HI,1HN,1HB,1HO/,KDINLM/1HD,1HI,1HN,1HL,1HM,1HO/, * KNBDAF/1HN,1HB,1HO,1HD,1HA,1HF/, * KARCHV/1HA,1HR,1HC,1HH,1HI,1HV,1HE/,KFILE/1HF,1HI,1HL,1HE/, * KPOLAR/1HA,1HP,1HO,1HL,1HA,1HR/,KNRTOP/1HN,1HR,1HT,1HO,1HP,1HT/, * KNRTRF/1HN,1HR,1HT,1HR,1HE,1HF/,KCHSTH/1HC,1HH,1HS,1HT,1HH,1HR/, * KNRTDT/1HN,1HR,1HT,1HD,1HT,1HL/, * KNRTTH/1HN,1HR,1HT,1HT,1HH,1HR/ DATA KALT/1H$,1HE,1HN,1HD/,KBFGS/1HB,1HF,1HG,1HS/, * KPOWEL/1HP,1HO,1HW,1HE,1HL,1HL/,KSAP/1HS,1HA,1HP/ DATA ZERO,ONE/0.0D0,1.0D0/ DATA IFULL,IVAL,ILEW/4HFULL,3HVAL,3HLEW/ DATA IPRNT,IWRIT,IREAD/4HPRNT,4HWRIT,4HREAD/ DATA IA,IB,IP/1HA,1HB,1HP/ READ IN JOB OPTIONS, IN A KEYWORD DIRECTED MANNER: NUMOPT = 0 LENNM = 0 IF(NBOOPT(1).EQ.1) GOTO 4500 BEGIN LOOP TO IDENTIFY KEYWORD "KEYWD": NEXTWD = .TRUE. 100 LENG = KEYLEN IF(NEXTWD) CALL HFLD(KEYWD,LENG,END) NEXTWD = .TRUE. IF((LENG.EQ.0).OR.END) GO TO 4500 IF(EQUAL(KEYWD,KALT,4)) GO TO 4500 NUMOPT = NUMOPT + 1 KEYWORD: 3CBOND -- SEARCH FOR THREE-CENTER BONDS (DEFAULT IS TO SEARCH ONLY FOR ONE- AND TWO-CENTER NBOS) IF(.NOT.EQUAL(KEYWD,K3CBND,6)) GO TO 500 IW3C = 1 GO TO 100 KEYWORD: LFNPR -- SPECIFY OUTPUT LFN 500 IF(.NOT.EQUAL(KEYWD,KLFNPR,5)) GO TO 510 CALL IFLD(LFNPR,ERROR) IF(ERROR) CALL HALT('LFNPR') GO TO 100 KEYWORD: THRESH -- SPECIFY FIXED OCCUPANCY THRESHOLD FOR NBO SEARCH 510 IF(.NOT.EQUAL(KEYWD,KTHRSH,6)) GO TO 540 CALL RFLD(THRSET,ERROR) IF(ERROR) CALL HALT('THRESH') GO TO 100 KEYWORD: DETAIL -- PRINT DETAILS OF NBO SEARCH PROCEDURE 540 IF(.NOT.EQUAL(KEYWD,KDETL,6)) GO TO 550 IWDETL = 1 GO TO 100 KEYWORD: MULAT -- PRINT MULLIKEN POPULATIONS BY ATOM 550 IF(.NOT.EQUAL(KEYWD,KMULA,5)) GO TO 560 IWMULP = 1 GO TO 100 KEYWORD: MULORB -- PRINT MULLIKEN POPULATIONS BY ORBITAL AND ATOM 560 IF(.NOT.EQUAL(KEYWD,KMULOR,6)) GO TO 580 IWMULP = 2 GO TO 100 KEYWORD: PRJTHR -- USER SETS VALUE OF PROJECTION THRESHOLD FOR NBO SEARCH FOR REJECTING LINEARLY DEPENDENT HYBRIDS 580 IF(.NOT.EQUAL(KEYWD,KPRJTH,6)) GO TO 610 CALL RFLD(PRJSET,ERROR) IF(ERROR) CALL HALT('PRJTHR') GO TO 100 KEYWORD: FNBO -- PRINT NBO FOCK MATRIX 610 IF(.NOT.EQUAL(KEYWD,KFNBO,4)) GO TO 620 JPRINT(37) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(37),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(37).EQ.IVAL) JPRINT(37) = IFULL END IF GO TO 100 KEYWORD: AOPNAO -- OUTPUT RAW AO TO PNAO TRANSFORMATION 620 IF(.NOT.EQUAL(KEYWD,KAOPRE,6)) GO TO 640 JPRINT(44) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(44),LFNPNA,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(44).EQ.IVAL) JPRINT(44) = IFULL IF(JPRINT(44).EQ.ILEW) JPRINT(44) = IFULL END IF GO TO 100 KEYWORD: NLMOMO -- COMPUTE AND PRINT NLMO TO MO TRANSF. 640 IF(.NOT.EQUAL(KEYWD,KNLMMO,6)) GO TO 650 JPRINT(13) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(13),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. END IF GO TO 100 KEYWORD: NLMO -- COMPUTE AND PRINT NLMOS 650 IF(.NOT.EQUAL(KEYWD,KNLMO,4)) GO TO 660 IF(LENG.NE.4) GO TO 660 JPRINT(8) = 1 GO TO 100 KEYWORD: NAOMO -- COMPUTE AND PRINT NAO TO MO TRANSF. 660 IF(.NOT.EQUAL(KEYWD,KNAOMO,5)) GO TO 670 JPRINT(9) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(9),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. END IF GO TO 100 KEYWORD: NBOMO -- COMPUTE AND PRINT NBO TO MO TRANSF. 670 IF(.NOT.EQUAL(KEYWD,KNBOMO,5)) GO TO 680 JPRINT(45) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(45),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. END IF GO TO 100 KEYWORD: NOBOND -- COMPUTE ONLY ONE-CENTER NBOS 680 IF(.NOT.EQUAL(KEYWD,KNOBND,6)) GO TO 690 JPRINT(10) = 1 GO TO 100 KEYWORD: SKIPBO -- SKIP NBO PROCEDURE 690 IF(.NOT.EQUAL(KEYWD,KSKIPB,6)) GO TO 700 JPRINT(1) = 1 GO TO 100 KEYWORD: RPNAO -- COMPUTE REVISED PURE AO TO PNAO TRANSF. 700 IF(.NOT.EQUAL(KEYWD,KRPNAO,5)) GO TO 710 JPRINT(11) = 1 GO TO 100 KEYWORD: BNDIDX -- PRINT BOND INDICES 710 IF(.NOT.EQUAL(KEYWD,KBNDID,6)) GO TO 730 JPRINT(12) = 1 GO TO 100 KEYWORD: RESONANCE -- ALLOW STRONGLY "NON-LEWIS" NBO OCCUPANCIES (OVERRIDES AUTOMATIC SHUTDOWN OF NBO PROCEDURE IN STRONGLY DELOCALIZED CASES) 730 IF(.NOT.EQUAL(KEYWD,KRESON,5)) GO TO 740 JPRINT(14) = 1 GO TO 100 KEYWORD: PAOPNAO -- I/O WITH PAO TO PNAO TRANSFORMATION 740 IF(.NOT.EQUAL(KEYWD,KPPNAO,7)) GO TO 750 IWPNAO = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .TRUE. CALL KEYPAR(KEYWD,LENG,IWPNAO,LFNPPA,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(IWPNAO.EQ.IVAL) IWPNAO = IFULL IF(IWPNAO.EQ.ILEW) IWPNAO = IFULL END IF GO TO 100 KEYWORD: AONAO -- I/O WITH AO TO NAO TRANSFORMATION 750 IF(.NOT.EQUAL(KEYWD,KAONAO,5)) GO TO 760 IWTNAO = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .TRUE. CALL KEYPAR(KEYWD,LENG,IWTNAO,LFNNAO,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(IWTNAO.EQ.IVAL) IWTNAO = IFULL IF(IWTNAO.EQ.ILEW) IWTNAO = IFULL END IF GO TO 100 KEYWORD: NAONBO -- I/O WITH NAO TO NBO TRANSFORMATION 760 IF(.NOT.EQUAL(KEYWD,KNANBO,6)) GO TO 770 IWTNAB = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .TRUE. CALL KEYPAR(KEYWD,LENG,IWTNAB,LFNNAB,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(IWTNAB.EQ.IVAL) IWTNAB = IFULL END IF GO TO 100 KEYWORD: AONBO -- OUTPUT AO TO NBO TRANSF. INFORMATION 770 IF(.NOT.EQUAL(KEYWD,KAONBO,5)) GO TO 780 IWTNBO = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,IWTNBO,LFNNBO,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(IWTNBO.EQ.IVAL) IWTNBO = IFULL END IF GO TO 100 KEYWORD: FNLMO -- PRINT NLMO FOCK MATRIX 780 IF(.NOT.EQUAL(KEYWD,KFNLMO,5)) GO TO 790 JPRINT(15) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(15),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(15).EQ.IVAL) JPRINT(15) = IFULL END IF GO TO 100 KEYWORD: DMNBO -- PRINT NBO DENSITY MATRIX 790 IF(.NOT.EQUAL(KEYWD,KDMNBO,5)) GO TO 800 JPRINT(16) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(16),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(16).EQ.IVAL) JPRINT(16) = IFULL END IF GO TO 100 KEYWORD: DMNLMO -- PRINT NLMO DENSITY MATRIX 800 IF(.NOT.EQUAL(KEYWD,KDMNLM,6)) GO TO 810 JPRINT(17) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(17),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(17).EQ.IVAL) JPRINT(17) = IFULL END IF GO TO 100 KEYWORD: AONLMO -- COMPUTE AND OUTPUT AO TO NLMO TRANSF. 810 IF(.NOT.EQUAL(KEYWD,KAONLM,6)) GO TO 820 JPRINT(23) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(23),LFNNLM,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(23).EQ.IVAL) JPRINT(23) = IFULL END IF GO TO 100 KEYWORD: PRINT -- READ IN PRINT OPTION LEVEL "IPRINT" 820 IF(.NOT.EQUAL(KEYWD,KPRINT,5)) GO TO 830 CALL IFLD(IPRINT,ERROR) IF(ERROR) CALL HALT('PRINT') GO TO 100 KEYWORD: NAONLMO -- PRINT NAO TO NLMO TRANSFORMATION MATRIX 830 IF(.NOT.EQUAL(KEYWD,KNANLM,7)) GO TO 840 JPRINT(18) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(18),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(18).EQ.IVAL) JPRINT(18) = IFULL END IF GO TO 100 KEYWORD: SPNAO -- PRINT S-PNAO OVERLAP MATRIX 840 IF(.NOT.EQUAL(KEYWD,KSPNAO,5)) GO TO 850 JPRINT(19) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(19),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(19).EQ.IVAL) JPRINT(19) = IFULL IF(JPRINT(19).EQ.ILEW) JPRINT(19) = IFULL END IF GO TO 100 KEYWORD: SPNHO -- PRINT S-PNHO OVERLAP MATRIX 850 IF(.NOT.EQUAL(KEYWD,KSPNHO,5)) GO TO 860 JPRINT(20) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(20),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(20).EQ.IVAL) JPRINT(20) = IFULL IF(JPRINT(20).EQ.ILEW) JPRINT(20) = IFULL END IF GO TO 100 KEYWORD: NHONLMO -- OUTPUT THE NHO TO NLMO TRANSFORMATION 860 IF(.NOT.EQUAL(KEYWD,KNHNLM,7)) GO TO 870 JPRINT(24) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(24),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(24).EQ.IVAL) JPRINT(24) = IFULL END IF GO TO 100 KEYWORD: SPNBO -- PRINT S-PNBO OVERLAP MATRIX 870 IF(.NOT.EQUAL(KEYWD,KSPNBO,5)) GO TO 880 JPRINT(21) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(21),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(21).EQ.IVAL) JPRINT(21) = IFULL END IF GO TO 100 KEYWORD: AOINFO -- WRITE BASIS SET INFO 880 IF(.NOT.EQUAL(KEYWD,KAOINF,6)) GO TO 910 JPRINT(22) = LFNAO CALL IFLD(ITEMP,ERROR) IF(.NOT.ERROR) JPRINT(22) = ABS(ITEMP) GO TO 100 KEYWORD: AOPNBO -- WRITE AO TO PNBO TRANSFORMATION 910 IF(.NOT.EQUAL(KEYWD,KAOPNB,6)) GO TO 920 JPRINT(25) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(25),LFNPNB,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(25).EQ.IVAL) JPRINT(25) = IFULL END IF GO TO 100 KEYWORD: AOMO -- WRITE AO TO MO TRANSFORMATION 920 IF(.NOT.EQUAL(KEYWD,KAOMO,4)) GO TO 930 JPRINT(26) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(26),LFNMO,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. END IF GO TO 100 KEYWORD: DMAO -- WRITE AO DENSITY MATRIX 930 IF(.NOT.EQUAL(KEYWD,KDMAO,4)) GO TO 940 JPRINT(27) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(27),LFNDM,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(27).EQ.IVAL) JPRINT(27) = IFULL IF(JPRINT(27).EQ.ILEW) JPRINT(27) = IFULL END IF GO TO 100 KEYWORD: AONHO -- WRITE AO TO NHO TRANSFORMATION 940 IF(.NOT.EQUAL(KEYWD,KAONHO,5)) GO TO 950 JPRINT(28) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(28),LFNNHO,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(28).EQ.IVAL) JPRINT(28) = IFULL IF(JPRINT(28).EQ.ILEW) JPRINT(28) = IFULL END IF GO TO 100 KEYWORD: FNHO -- PRINT NHO FOCK MATRIX 950 IF(.NOT.EQUAL(KEYWD,KFNHO,4)) GO TO 960 JPRINT(29) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(29),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(29).EQ.IVAL) JPRINT(29) = IFULL IF(JPRINT(29).EQ.ILEW) JPRINT(29) = IFULL END IF GO TO 100 KEYWORD: AOPNHO -- WRITE AO TO PNHO TRANSFORMATION 960 IF(.NOT.EQUAL(KEYWD,KAOPNH,6)) GO TO 970 JPRINT(30) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(30),LFNPNH,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(30).EQ.IVAL) JPRINT(30) = IFULL IF(JPRINT(30).EQ.ILEW) JPRINT(30) = IFULL END IF GO TO 100 KEYWORD: FNAO -- PRINT NAO FOCK MATRIX 970 IF(.NOT.EQUAL(KEYWD,KFNAO,4)) GO TO 990 JPRINT(31) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(31),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(31).EQ.IVAL) JPRINT(31) = IFULL IF(JPRINT(31).EQ.ILEW) JPRINT(31) = IFULL END IF GO TO 100 KEYWORD: NAONHO -- OUTPUT THE NAO TO NHO TRANSFORMATION 990 IF(.NOT.EQUAL(KEYWD,KNAONH,6)) GO TO 1010 JPRINT(33) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(33),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(33).EQ.IVAL) JPRINT(33) = IFULL IF(JPRINT(33).EQ.ILEW) JPRINT(33) = IFULL END IF GO TO 100 KEYWORD: DMNHO -- PRINT NHO DENSITY MATRIX 1010 IF(.NOT.EQUAL(KEYWD,KDMNHO,5)) GO TO 1020 JPRINT(34) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(34),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(34).EQ.IVAL) JPRINT(34) = IFULL IF(JPRINT(34).EQ.ILEW) JPRINT(34) = IFULL END IF GO TO 100 KEYWORD: DMNAO -- PRINT NAO DENSITY MATRIX 1020 IF(.NOT.EQUAL(KEYWD,KDMNAO,5)) GO TO 1040 JPRINT(35) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(35),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(35).EQ.IVAL) JPRINT(35) = IFULL IF(JPRINT(35).EQ.ILEW) JPRINT(35) = IFULL END IF GO TO 100 KEYWORD: BEND -- PRINT NHO DIRECTIONALITY AND BOND BENDING INFO 1040 IF(.NOT.EQUAL(KEYWD,KBEND,4)) GO TO 1050 JPRINT(36) = 1 CALL RFLD(TEMP,ERROR) IF(ERROR) GO TO 100 ATHR = ABS(TEMP) CALL RFLD(TEMP,ERROR) IF(ERROR) GO TO 100 PTHR = ABS(TEMP) IF(PTHR.LT.ONE) PTHR = ONE CALL RFLD(TEMP,ERROR) IF(ERROR) GO TO 100 ETHR = ABS(TEMP) GO TO 100 KEYWORD: NHOMO -- COMPUTE AND PRINT NHO TO MO TRANSF. 1050 IF(.NOT.EQUAL(KEYWD,KNHOMO,5)) GO TO 1060 JPRINT(38) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(38),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. END IF GO TO 100 KEYWORD: SAO -- PRINT AO OVERLAP MATRIX 1060 IF(.NOT.EQUAL(KEYWD,KSAO,3)) GO TO 1070 JPRINT(39) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(39),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(39).EQ.IVAL) JPRINT(39) = IFULL IF(JPRINT(39).EQ.ILEW) JPRINT(39) = IFULL END IF GO TO 100 KEYWORD: FAO -- PRINT AO FOCK MATRIX 1070 IF(.NOT.EQUAL(KEYWD,KFAO,3)) GO TO 1080 JPRINT(40) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(40),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(40).EQ.IVAL) JPRINT(40) = IFULL IF(JPRINT(40).EQ.ILEW) JPRINT(40) = IFULL END IF GO TO 100 KEYWORD: NHONBO -- OUTPUT NHO TO NBO TRANSFORMATION 1080 IF(.NOT.EQUAL(KEYWD,KNHONB,6)) GO TO 1090 JPRINT(41) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(41),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(41).EQ.IVAL) JPRINT(41) = IFULL END IF GO TO 100 KEYWORD: BOAO -- PRINT AO BOND-ORDER MATRIX 1090 IF(.NOT.EQUAL(KEYWD,KBOAO,4)) GO TO 1100 JPRINT(42) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(42),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(42).EQ.IVAL) JPRINT(42) = IFULL IF(JPRINT(42).EQ.ILEW) JPRINT(42) = IFULL END IF GO TO 100 KEYWORD: E2PERT -- 2ND-ORDER PERTURBATIVE ANALYSIS OF THE NBO FOCK MATRIX 1100 IF(.NOT.EQUAL(KEYWD,KEPERT,6)) GO TO 1110 JPRINT(3) = 1 CALL RFLD(TEMP,ERROR) IF(ERROR) GO TO 100 E2THR = ABS(TEMP) GO TO 100 KEYWORD: PLOT -- WRITE AO BASIS, DENSITY, AND TRANSFORMS FOR PLOTTING 1110 IF(.NOT.EQUAL(KEYWD,KPLOT,4)) GO TO 1120 JPRINT(43) = 1 GO TO 100 KEYWORD: NPA -- PRINT THE NATURAL POPULATION ANALYSIS 1120 IF(.NOT.EQUAL(KEYWD,KNPA,3)) GO TO 1130 JPRINT(4) = 1 GO TO 100 KEYWORD: NBOSUM -- PRINT THE NBO SUMMARY 1130 IF(.NOT.EQUAL(KEYWD,KNBOSM,6)) GO TO 1140 JPRINT(6) = 1 GO TO 100 KEYWORD: NBO -- PRINT THE NBO ANALYSIS 1140 IF(.NOT.EQUAL(KEYWD,KNBO,3)) GO TO 1150 IF(LENG.NE.3) GO TO 1150 JPRINT(5) = 1 GO TO 100 KEYWORD: DIPOLE -- PRINT NBO/NLMO DIPOLE ANALYSIS: 1150 IF(.NOT.EQUAL(KEYWD,KDIPOL,6)) GO TO 1160 JPRINT(46) = 1 CALL RFLD(TEMP,ERROR) IF(ERROR) GO TO 100 DTHR = ABS(TEMP) GO TO 100 KEYWORD: NBONLMO -- PRINT NBO TO NLMO TRANSFORMATION MATRIX 1160 IF(.NOT.EQUAL(KEYWD,KNBNLM,7)) GO TO 1170 JPRINT(47) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(47),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(47).EQ.IVAL) JPRINT(47) = IFULL END IF GO TO 100 KEYWORD: SPNLMO -- OUTPUT THE PNLMO OVERLAP MATRIX 1170 IF(.NOT.EQUAL(KEYWD,KSPNLM,6)) GO TO 1180 JPRINT(48) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(48),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(48).EQ.IVAL) JPRINT(48) = IFULL END IF GO TO 100 KEYWORD: AOPNLMO -- OUTPUT THE AO-PNLMO TRANSFORMATION MATRIX 1180 IF(.NOT.EQUAL(KEYWD,KAOPNL,7)) GO TO 1190 JPRINT(49) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(49),LFNPNL,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(49).EQ.IVAL) JPRINT(49) = IFULL END IF GO TO 100 KEYWORD: DIAO -- OUTPUT THE AO DIPOLE INTEGRALS 1190 IF(.NOT.EQUAL(KEYWD,KDIAO,4)) GO TO 1200 JPRINT(50) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(50),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(50).EQ.IVAL) JPRINT(50) = IFULL IF(JPRINT(50).EQ.ILEW) JPRINT(50) = IFULL END IF GO TO 100 KEYWORD: DINAO -- OUTPUT THE NAO DIPOLE INTEGRALS 1200 IF(.NOT.EQUAL(KEYWD,KDINAO,5)) GO TO 1210 JPRINT(51) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(51),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(51).EQ.IVAL) JPRINT(51) = IFULL IF(JPRINT(51).EQ.ILEW) JPRINT(51) = IFULL END IF GO TO 100 KEYWORD: DINHO -- OUTPUT THE NHO DIPOLE INTEGRALS 1210 IF(.NOT.EQUAL(KEYWD,KDINHO,5)) GO TO 1220 JPRINT(52) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(52),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(52).EQ.IVAL) JPRINT(52) = IFULL IF(JPRINT(52).EQ.ILEW) JPRINT(52) = IFULL END IF GO TO 100 KEYWORD: DINBO -- OUTPUT THE NBO DIPOLE INTEGRALS 1220 IF(.NOT.EQUAL(KEYWD,KDINBO,5)) GO TO 1230 JPRINT(53) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(53),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(53).EQ.IVAL) JPRINT(53) = IFULL END IF GO TO 100 KEYWORD: DINLMO -- OUTPUT THE NLMO DIPOLE INTEGRALS 1230 IF(.NOT.EQUAL(KEYWD,KDINLM,6)) GO TO 1240 JPRINT(54) = IFULL LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN READ = .FALSE. CALL KEYPAR(KEYWD,LENG,JPRINT(54),LFNDEF,READ,ERROR) IF(ERROR) NEXTWD = .FALSE. IF(JPRINT(54).EQ.IVAL) JPRINT(54) = IFULL END IF GO TO 100 KEYWORD: NBODAF -- CHOOSE AN ALTERNATE DAF 1240 IF(.NOT.EQUAL(KEYWD,KNBDAF,6)) GO TO 1250 LFNDAF = ABS(LFNDAF) CALL IFLD(ITEMP,ERROR) IF(.NOT.ERROR) LFNDAF = ABS(ITEMP) GO TO 100 KEYWORD: ARCHIVE -- WRITE THE ARCHIVE FILE 1250 IF(.NOT.EQUAL(KEYWD,KARCHV,7)) GO TO 1260 JPRINT(7) = LFNARC CALL IFLD(ITEMP,ERROR) IF(.NOT.ERROR) JPRINT(7) = ABS(ITEMP) GO TO 100 KEYWORD: FILE -- SELECT ALTERNATE FILENAME 1260 IF(.NOT.EQUAL(KEYWD,KFILE,4)) GO TO 1270 LENG = 80 CALL HFLD(INTTMP,LENG,END) IF(.NOT.END) LENNM = LENG GO TO 100 KEYWORD: APOLAR -- ENFORCE APOLAR BONDS: 1270 IF(.NOT.EQUAL(KEYWD,KPOLAR,6)) GO TO 1290 IWAPOL = 1 GO TO 100 KEYWORD: NRTOPT -- OPTIMIZE NRT WEIGHTS: 1290 IF(.NOT.EQUAL(KEYWD,KNRTOP,6)) GO TO 1300 IF(JPRINT(14).EQ.0) JPRINT(14) = 1 IF(JPRINT(32).EQ.0) JPRINT(32) = 1 JPRINT(55) = IB LENG = KEYLEN CALL HFLD(KEYWD,LENG,END) IF(.NOT.END) THEN IF(EQUAL(KEYWD,KBFGS,4)) THEN JPRINT(55) = IB ELSE IF(EQUAL(KEYWD,KPOWEL,6)) THEN JPRINT(55) = IP ELSE IF(EQUAL(KEYWD,KSAP,3)) THEN JPRINT(55) = 1234567 IF(LENG.GT.3) CALL CONVIN(KEYWD(4),LENG-3,JPRINT(55),ERROR) IF(ERROR) CALL HALT('NRTOPT') JPRINT(55) = ABS(JPRINT(55)) ELSE IF(EQUAL(KEYWD,KSAP,2)) THEN JPRINT(55) = -1234567 IF(LENG.GT.2) CALL CONVIN(KEYWD(3),LENG-2,JPRINT(55),ERROR) IF(ERROR) CALL HALT('NRTOPT') JPRINT(55) = -ABS(JPRINT(55)) ELSE NEXTWD = .FALSE. END IF END IF GO TO 100 KEYWORD: NRTREF -- NUMBER OF REFERENCE STRUCTURES IN NRT ANALYSIS 1300 IF(.NOT.EQUAL(KEYWD,KNRTRF,6)) GO TO 1310 IF(JPRINT(14).EQ.0) JPRINT(14) = 1 IF(JPRINT(32).EQ.0) JPRINT(32) = 1 CALL IFLD(ITEMP,ERROR) IF(ERROR) GO TO 100 JPRINT(56) = MAX(1,ABS(ITEMP)) GO TO 100 KEYWORD: CHSTHR -- SET THE OCCUPANCY THRESHOLD IN CHOOSE 1310 IF(.NOT.EQUAL(KEYWD,KCHSTH,6)) GO TO 1320 CHSTHR = ABS(CHSTHR) CALL RFLD(TEMP,ERROR) IF(ERROR) GO TO 100 CHSTHR = ABS(TEMP) GO TO 100 KEYWORD: NRTDTL -- DETAIL NRT ANALYSIS 1320 IF(.NOT.EQUAL(KEYWD,KNRTDT,6)) GO TO 1340 IF(JPRINT(14).EQ.0) JPRINT(14) = 1 IF(JPRINT(32).EQ.0) JPRINT(32) = 1 JPRINT(57) = 1 CALL IFLD(ITEMP,ERROR) IF(ERROR) GO TO 100 JPRINT(57) = MAX(1,ABS(ITEMP)) GO TO 100 KEYWORD: NRTTHR -- SET THRESHOLD FOR DELOCALIZATION LIST 1340 IF(.NOT.EQUAL(KEYWD,KNRTTH,6)) GO TO 1360 IF(JPRINT(14).EQ.0) JPRINT(14) = 1 IF(JPRINT(32).EQ.0) JPRINT(32) = 1 DLTHR = ABS(DLTHR) CALL RFLD(TEMP,ERROR) IF(ERROR) GO TO 100 DLTHR = ABS(TEMP) GO TO 100 KEYWORD: NRT -- PERFORM NATURAL RESONANCE THEORY ANALYSIS: (NOTE THAT WE SHOULD CHECK THIS KEYWORD AFTER WE CHECK THE OTHER `NRT' KEYWORDS, LIKE `NRTOPT'. OTHERWISE, KEYWORD CONFLICTS CAN OCCUR.) 1360 IF(.NOT.EQUAL(KEYWD,KNRT,3)) GO TO 1370 JPRINT(14) = 1 JPRINT(32) = 1 CALL IFLD(ITEMP,ERROR) IF(.NOT.ERROR) JPRINT(32) = ITEMP GO TO 100 1370 GO TO 4800 ------------------------------------------------------------------------------ 4500 CONTINUE IF OPTION `FILE' WAS SELECTED, EXTRACT THE FILENAME FROM HOLLERITH ARRAY INTTMP: IF(LENNM.NE.0) THEN IDIV = IB - IA DO 4510 I = 1,LENNM FILENM(I:I) = CHAR(MOD((INTTMP(I)-IA)/IDIV,256) + 65) 4510 CONTINUE DO 4520 I = LENNM+1,80 FILENM(I:I) = CHAR(32) 4520 CONTINUE END IF ------------------------------------------------------------------------------ IF THE PRINT LEVEL IS SET TO ZERO AND NO OTHER OPTIONS WERE ENTERED, COMPLETELY SHUT OFF PROGRAM PRINTING: IF(NUMOPT.EQ.1.AND.IPRINT.EQ.0) IPRINT = -1 CHECK FOR JOB OPTIONS THAT ARE CURRENTLY INCOMPATABLE: IF((IWDM.EQ.0).AND.(IWMULP.NE.0)) GO TO 4900 CHECK FOR JOB OPTIONS THAT ARE STRICTLY INCOMPATIBLE: IF(ORTHO) THEN IWTNAO = 0 JPRINT(9) = 0 JPRINT(11) = 0 JPRINT(18) = 0 JPRINT(19) = 0 JPRINT(20) = 0 JPRINT(21) = 0 JPRINT(25) = 0 JPRINT(30) = 0 JPRINT(31) = 0 JPRINT(33) = 0 JPRINT(35) = 0 JPRINT(39) = 0 JPRINT(44) = 0 JPRINT(48) = 0 JPRINT(49) = 0 JPRINT(51) = 0 END IF ------------------------------------------------------------------------------ START PRINTING NBO OUTPUT: IF(IPRINT.GE.0) THEN WRITE(LFNPR,6000) IF(NUMOPT.GT.0) WRITE(LFNPR,6010) ------------------------------------------------------------------------------ 6000 FORMAT(/1X,79('*')/,13X, * 'N A T U R A L A T O M I C O R B I T A L A N D'/, * 10X,'N A T U R A L B O N D O R B I T A L ', * 'A N A L Y S I S',/1X,79('*')) 6010 FORMAT(1X) ------------------------------------------------------------------------------ JOB CONTROL KEYWORDS: IF(JPRINT(4).NE.0) WRITE(LFNPR,6020) IF(JPRINT(5).NE.0) WRITE(LFNPR,6030) IF(JPRINT(6).NE.0) WRITE(LFNPR,6040) IF(JPRINT(14).NE.0) WRITE(LFNPR,6050) IF(JPRINT(10).NE.0) WRITE(LFNPR,6060) IF(IW3C.NE.0) WRITE(LFNPR,6070) IF(JPRINT(1).NE.0) WRITE(LFNPR,6080) IF(JPRINT(8).NE.0) WRITE(LFNPR,6090) IF(JPRINT(32).NE.0) WRITE(LFNPR,6100) IF(JPRINT(55).EQ.IB) THEN WRITE(LFNPR,6110) ELSE IF(JPRINT(55).EQ.IP) THEN WRITE(LFNPR,6111) ELSE IF(JPRINT(55).LT.0) THEN WRITE(LFNPR,6112) ELSE IF(JPRINT(55).GT.0) THEN WRITE(LFNPR,6113) END IF IF(JPRINT(56).NE.0) WRITE(LFNPR,6120) JPRINT(56) IF(DLTHR.GE.ZERO) WRITE(LFNPR,6160) DLTHR IF(JPRINT(57).NE.0) WRITE(LFNPR,6170) JPRINT(57) ------------------------------------------------------------------------------ 6020 FORMAT(1X,' /NPA / : Print Natural Population Analysis') 6030 FORMAT(1X,' /NBO / : Print Natural Bond Orbital Analysis') 6040 FORMAT(1X,' /NBOSUM / : Print summary of the NBO analysis') 6050 FORMAT(1X,' /RESON / : Allow strongly delocalized NBO ', * 'set') 6060 FORMAT(1X,' /NOBOND / : No two-center NBO search') 6070 FORMAT(1X,' /3CBOND / : Search for 3-center bonds') 6080 FORMAT(1X,' /SKIPBO / : Skip NBO transformation step') 6090 FORMAT(1X,' /NLMO / : Form Natural Localized Molecular', * ' Orbitals') 6100 FORMAT(1X,' /NRT / : Perform Natural Resonance Theory ', * 'Analysis') 6110 FORMAT(1X,' /NRTOPT / : Optimize resonance weights with ', * 'BFGS method') 6111 FORMAT(1X,' /NRTOPT / : Optimize resonance weights with ', * 'POWELL method') 6112 FORMAT(1X,' /NRTOPT / : Optimize resonance weights with ', * 'ANNEAL method') 6113 FORMAT(1X,' /NRTOPT / : Optimize resonance weights with ', * 'ANNEAL method + penalty') 6120 FORMAT(1X,' /NRTREF / : Number of reference structures set', * ' to',I3) 6160 FORMAT(1X,' /NRTTHR / : Set to ',F5.2) 6170 FORMAT(1X,' /NRTDTL / : Set to ',I2) ------------------------------------------------------------------------------ JOB THRESHOLD KEYWORDS: IF(JPRINT(36).NE.0) WRITE(LFNPR,6500) IF(ATHR.GE.ZERO.OR.PTHR.GE.ZERO.OR.ETHR.GE.ZERO) + WRITE(LFNPR,6510) ABS(ATHR),ABS(PTHR),ABS(ETHR) IF(JPRINT(3).NE.0) WRITE(LFNPR,6520) IF(E2THR.GT.ZERO) WRITE(LFNPR,6530) E2THR IF(JPRINT(46).NE.0) WRITE(LFNPR,6540) IF(DTHR.GE.ZERO) WRITE(LFNPR,6550) ABS(DTHR) IF(THRSET.GT.ZERO) WRITE(LFNPR,6560) THRSET IF(PRJSET.GT.ZERO) WRITE(LFNPR,6570) PRJSET IF(CHSTHR.GT.ZERO) WRITE(LFNPR,6580) CHSTHR ------------------------------------------------------------------------------ 6500 FORMAT(1X,' /BEND / : Print NHO directionality table') 6510 FORMAT(1X,' Print thresholds set to (',F4.1, * ',',F5.1,',',F5.2,')') 6520 FORMAT(1X,' /E2PERT / : Analyze NBO Fock matrix') 6530 FORMAT(1X,' Print threshold set to ',F5.2) 6540 FORMAT(1X,' /DIPOLE / : Print NBO/NLMO dipole moment ', * 'analysis') 6550 FORMAT(1X,' Print threshold set to ',F5.2) 6560 FORMAT(1X,' /THRESH / : Set to ',F5.2) 6570 FORMAT(1X,' /PRJTHR / : Set to ',F5.2) 6580 FORMAT(1X,' /CHSTHR / : Set to ',F5.2) ------------------------------------------------------------------------------ MATRIX OUTPUT KEYWORDS: IF(JPRINT(44).EQ.IFULL) THEN WRITE(LFNPR,7000) ELSE IF(IOINQR(JPRINT(44)).EQ.IPRNT) THEN WRITE(LFNPR,7002) JPRINT(44) ELSE IF(IOINQR(JPRINT(44)).EQ.IWRIT) THEN WRITE(LFNPR,7004) ABS(JPRINT(44)) END IF IF(IWTNAO.EQ.IFULL) THEN WRITE(LFNPR,7010) ELSE IF(IOINQR(IWTNAO).EQ.IPRNT) THEN WRITE(LFNPR,7012) IWTNAO ELSE IF(IOINQR(IWTNAO).EQ.IWRIT) THEN WRITE(LFNPR,7014) ABS(IWTNAO) ELSE IF(IOINQR(IWTNAO).EQ.IREAD) THEN WRITE(LFNPR,7016) ABS(IWTNAO/1000) END IF IF(JPRINT(30).EQ.IFULL) THEN WRITE(LFNPR,7020) ELSE IF(IOINQR(JPRINT(30)).EQ.IPRNT) THEN WRITE(LFNPR,7022) JPRINT(30) ELSE IF(IOINQR(JPRINT(30)).EQ.IWRIT) THEN WRITE(LFNPR,7024) ABS(JPRINT(30)) END IF IF(JPRINT(28).EQ.IFULL) THEN WRITE(LFNPR,7030) ELSE IF(IOINQR(JPRINT(28)).EQ.IPRNT) THEN WRITE(LFNPR,7032) JPRINT(28) ELSE IF(IOINQR(JPRINT(28)).EQ.IWRIT) THEN WRITE(LFNPR,7034) ABS(JPRINT(28)) END IF IF(JPRINT(25).EQ.IFULL) THEN WRITE(LFNPR,7040) ELSE IF(JPRINT(25).EQ.ILEW) THEN WRITE(LFNPR,7042) ELSE IF(IOINQR(JPRINT(25)).EQ.IPRNT) THEN WRITE(LFNPR,7044) JPRINT(25) ELSE IF(IOINQR(JPRINT(25)).EQ.IWRIT) THEN WRITE(LFNPR,7046) ABS(JPRINT(25)) END IF IF(IWTNBO.EQ.IFULL) THEN WRITE(LFNPR,7050) ELSE IF(IWTNBO.EQ.ILEW) THEN WRITE(LFNPR,7052) ELSE IF(IOINQR(IWTNBO).EQ.IPRNT) THEN WRITE(LFNPR,7054) IWTNBO ELSE IF(IOINQR(IWTNBO).EQ.IWRIT) THEN WRITE(LFNPR,7056) ABS(IWTNBO) END IF IF(JPRINT(49).EQ.IFULL) THEN WRITE(LFNPR,7060) ELSE IF(JPRINT(49).EQ.ILEW) THEN WRITE(LFNPR,7062) ELSE IF(IOINQR(JPRINT(49)).EQ.IPRNT) THEN WRITE(LFNPR,7064) JPRINT(49) ELSE IF(IOINQR(JPRINT(49)).EQ.IWRIT) THEN WRITE(LFNPR,7066) ABS(JPRINT(49)) END IF IF(JPRINT(23).EQ.IFULL) THEN WRITE(LFNPR,7070) ELSE IF(JPRINT(23).EQ.ILEW) THEN WRITE(LFNPR,7072) ELSE IF(IOINQR(JPRINT(23)).EQ.IPRNT) THEN WRITE(LFNPR,7074) JPRINT(23) ELSE IF(IOINQR(JPRINT(23)).EQ.IWRIT) THEN WRITE(LFNPR,7076) ABS(JPRINT(23)) END IF IF(JPRINT(26).EQ.IFULL) THEN WRITE(LFNPR,7080)