mopac7-1.15/0000777000175000017500000000000011274262042007633 500000000000000mopac7-1.15/ChangeLog0000644000175000017500000005200011053302064011310 000000000000002006-04-24 14:50 thassine * Makefile.am, configure, configure.ac, tests/.cvsignore, tests/Makefile.am, tests/Makefile.in: configuration changes for v1.11 (final?) 2006-04-24 14:45 thassine * .cvsignore, Makefile.in, fortran/.cvsignore, fortran/Makefile.am, fortran/c_src_bak/.cvsignore, fortran/c_src_bak/Makefile.am, src/.cvsignore, src/Makefile.in: some improvements added ; this is v1.11 2006-04-24 14:28 thassine * ChangeLog: updated the ChangeLog 2006-03-29 10:45 thassine * INSTALL: documentation update. 2006-03-29 10:40 thassine * .cvsignore: .cvsignore update 2006-03-29 10:37 thassine * aclocal.m4, autogen.sh, config.guess, config.sub, ltmain.sh: added autogen.sh and removed some unnecessary files. 2006-03-03 18:07 ghutchis * config.log: Don't track config.log in CVS -- it's a build source file and is machine-dependent. 2006-02-16 13:07 thassine * Makefile.in, aclocal.m4, config.guess, config.log, config.sub, configure, configure.ac, libmopac7.pc.in, ltmain.sh, src/Makefile.in, tests/Makefile.in: updated the configure script ; added -lg2c in .pc file. 2006-01-06 18:20 ghutchis * .cvsignore, ChangeLog, Makefile.in, aclocal.m4, config.guess, config.log, config.sub, configure, ltmain.sh, src/.cvsignore, src/Makefile.in, tests/Makefile.in: * ltmain.sh, config.sub, config.guess: Updated with libtool 1.5.22 version, which fixes some problems on Mac OS X. 2006-01-06 18:19 ghutchis * INSTALL: * INSTALL: Added notes for Mac OS X users. 2005-11-10 10:13 thassine * aclocal.m4, config.guess, config.log, config.sub, configure, configure.ac, ltmain.sh: changed the version number to 1.11 after a release. 2005-10-14 14:41 thassine * ChangeLog: updated the ChangeLog file ; this is now v1.10 release candidate 3. 2005-10-14 14:39 thassine * config.log, configure, configure.ac: a configure script fix added from Jean Brefort. 2005-10-11 11:35 thassine * INSTALL, README, config.log, fortran/cdiag.f, src/cdiag.c: changes in cdiag.f ; should now work with gcc-4.0 2005-10-10 11:08 thassine * ChangeLog: updated the ChangeLog file ; now ready for a v1.10 release. 2005-08-23 13:31 thassine * .cvsignore, config.log, configure, configure.ac, fortran/README.txt, fortran/esp.f, src/.cvsignore, src/Makefile.am, src/Makefile.in, src/esp.c, src/libmopac7.c, src/libmopac7.h: v1.10 is here ; added libmopac7.h that can be included by external programs (does not include f2h.h). 2005-08-19 13:39 thassine * INSTALL, Makefile.in, aclocal.m4, config.log, configure, fortran/README.txt, fortran/etime.c, fortran/mopac.f, fortran/mopac7app.f, fortran/mopac7lib.f, fortran/mopaclib.f, fortran/c_src_bak/etime.c, fortran/c_src_bak/fdate.c, src/Makefile.in, src/aababc.c, src/addfck.c, src/addhcr.c, src/addnuc.c, src/analyt.c, src/anavib.c, src/axis.c, src/block.c, src/bonds.c, src/brlzon.c, src/btoc.c, src/calpar.c, src/capcor.c, src/cdiag.c, src/chrge.c, src/cnvg.c, src/compfg.c, src/consts.c, src/cqden.c, src/datin.c, src/dcart.c, src/delmol.c, src/delri.c, src/denrot.c, src/densit.c, src/depvar.c, src/deri0.c, src/deri1.c, src/deri2.c, src/deri21.c, src/deri22.c, src/deri23.c, src/deritr.c, src/deriv.c, src/dernvo.c, src/ders.c, src/dfock2.c, src/dfpsav.c, src/dgemm.c, src/dgemv.c, src/dger.c, src/dgetf2.c, src/dgetrf.c, src/dgetri.c, src/diag.c, src/diat.c, src/diat2.c, src/diegrd.c, src/dielen.c, src/diis.c, src/dijkl1.c, src/dijkl2.c, src/dipind.c, src/dipole.c, src/dlaswp.c, src/dofs.c, src/dot.c, src/drc.c, src/drcout.c, src/dtrmm.c, src/dtrmv.c, src/dtrsm.c, src/dtrti2.c, src/dtrtri.c, src/dvfill.c, src/ef.c, src/enpart.c, src/esp.c, src/exchng.c, src/ffhpol.c, src/flepo.c, src/fmat.c, src/fock1.c, src/fock2.c, src/force.c, src/formxy.c, src/forsav.c, src/frame.c, src/freqcy.c, src/geout.c, src/geoutg.c, src/getgeg.c, src/getgeo.c, src/getsym.c, src/gettxt.c, src/gmetry.c, src/gover.c, src/greenf.c, src/grid.c, src/h1elec.c, src/haddon.c, src/hcore.c, src/helect.c, src/hqrii.c, src/ijkl.c, src/ilaenv.c, src/initsv.c, src/interp.c, src/iter.c, src/jcarin.c, src/linmin.c, src/local.c, src/locmin.c, src/lsame.c, src/makpol.c, src/mamult.c, src/matou1.c, src/matout.c, src/matpak.c, src/meci.c, src/mecid.c, src/mecih.c, src/mecip.c, src/moldat.c, src/molval.c, src/mopac7app.c, src/mopac7lib.c, src/mullik.c, src/mult.c, src/nllsq.c, src/nuchar.c, src/parsav.c, src/partxy.c, src/pathk.c, src/paths.c, src/perm.c, src/polar.c, src/powsav.c, src/powsq.c, src/prtdrc.c, src/quadr.c, src/react1.c, src/reada.c, src/readmo.c, src/refer.c, src/repp.c, src/rotat.c, src/rotate.c, src/rsp.c, src/search.c, src/second.c, src/setupg.c, src/solrot.c, src/swap.c, src/sympro.c, src/symtry.c, src/symtrz.c, src/thermo.c, src/timer.c, src/timout.c, src/update.c, src/upsurf.c, src/vecprt.c, src/writmo.c, src/wrtkey.c, src/wrttxt.c, src/xerbla.c, src/xyzint.c, tests/Makefile.in: added documentation, updated the .c from .f 2005-07-05 10:43 thassine * config.log, configure, configure.ac: a minor tweak in configure ; make sure that local copies of f2c.h do not leave hanging around. 2005-07-01 12:00 thassine * ChangeLog, config.log, configure, configure.ac: updated the changelog ; ready for a release now. 2005-06-30 11:40 thassine * Makefile.in, aclocal.m4, config.guess, config.log, config.sub, configure, configure.ac, configure.in, ltmain.sh, src/Makefile.in, tests/Makefile.in: some changes in configuration scripts. 2005-03-21 14:29 thassine * config.guess, config.log, config.sub, ltmain.sh, src/Makefile.SIMPLE: added an alternative simple makefile in src/ subdir. 2004-12-10 11:58 thassine * Makefile.am, Makefile.in, aababc.c, addfck.c, addhcr.c, addnuc.c, analyt.c, anavib.c, axis.c, block.c, bonds.c, brlzon.c, btoc.c, calpar.c, capcor.c, cdiag.c, chrge.c, cnvg.c, compfg.c, config.log, configure, configure.in, consts.c, cqden.c, datin.c, dcart.c, delmol.c, delri.c, denrot.c, densit.c, depvar.c, deri0.c, deri1.c, deri2.c, deri21.c, deri22.c, deri23.c, deritr.c, deriv.c, dernvo.c, ders.c, dfock2.c, dfpsav.c, dgemm.c, dgemv.c, dger.c, dgetf2.c, dgetrf.c, dgetri.c, diag.c, diat.c, diat2.c, diegrd.c, dielen.c, diis.c, dijkl1.c, dijkl2.c, dipind.c, dipole.c, dlaswp.c, dofs.c, dot.c, drc.c, drcout.c, dtrmm.c, dtrmv.c, dtrsm.c, dtrti2.c, dtrtri.c, dvfill.c, ef.c, enpart.c, esp.c, etime.c, exchng.c, fdate.c, ffhpol.c, flepo.c, fmat.c, fock1.c, fock2.c, force.c, formxy.c, forsav.c, frame.c, freqcy.c, geout.c, geoutg.c, getgeg.c, getgeo.c, getsym.c, gettxt.c, gmetry.c, gover.c, greenf.c, grid.c, h1elec.c, haddon.c, hcore.c, helect.c, hqrii.c, ijkl.c, ilaenv.c, initsv.c, interp.c, iter.c, jcarin.c, linmin.c, local.c, locmin.c, lsame.c, makpol.c, mamult.c, matou1.c, matout.c, matpak.c, meci.c, mecid.c, mecih.c, mecip.c, moldat.c, molval.c, mopac7app.c, mopac7lib.c, mullik.c, mult.c, nllsq.c, nuchar.c, parsav.c, partxy.c, pathk.c, paths.c, perm.c, polar.c, powsav.c, powsq.c, prtdrc.c, quadr.c, react1.c, reada.c, readmo.c, refer.c, repp.c, rotat.c, rotate.c, rsp.c, run_mopac7, search.c, second.c, setupg.c, solrot.c, swap.c, sympro.c, symtry.c, symtrz.c, thermo.c, timer.c, timout.c, update.c, upsurf.c, vecprt.c, writmo.c, wrtkey.c, wrttxt.c, xerbla.c, xyzint.c, src/Makefile.am, src/Makefile.in, src/aababc.c, src/addfck.c, src/addhcr.c, src/addnuc.c, src/analyt.c, src/anavib.c, src/axis.c, src/block.c, src/bonds.c, src/brlzon.c, src/btoc.c, src/calpar.c, src/capcor.c, src/cdiag.c, src/chrge.c, src/cnvg.c, src/compfg.c, src/consts.c, src/cqden.c, src/datin.c, src/dcart.c, src/delmol.c, src/delri.c, src/denrot.c, src/densit.c, src/depvar.c, src/deri0.c, src/deri1.c, src/deri2.c, src/deri21.c, src/deri22.c, src/deri23.c, src/deritr.c, src/deriv.c, src/dernvo.c, src/ders.c, src/dfock2.c, src/dfpsav.c, src/dgemm.c, src/dgemv.c, src/dger.c, src/dgetf2.c, src/dgetrf.c, src/dgetri.c, src/diag.c, src/diat.c, src/diat2.c, src/diegrd.c, src/dielen.c, src/diis.c, src/dijkl1.c, src/dijkl2.c, src/dipind.c, src/dipole.c, src/dlaswp.c, src/dofs.c, src/dot.c, src/drc.c, src/drcout.c, src/dtrmm.c, src/dtrmv.c, src/dtrsm.c, src/dtrti2.c, src/dtrtri.c, src/dvfill.c, src/ef.c, src/enpart.c, src/esp.c, src/etime.c, src/exchng.c, src/fdate.c, src/ffhpol.c, src/flepo.c, src/fmat.c, src/fock1.c, src/fock2.c, src/force.c, src/formxy.c, src/forsav.c, src/frame.c, src/freqcy.c, src/geout.c, src/geoutg.c, src/getgeg.c, src/getgeo.c, src/getsym.c, src/gettxt.c, src/gmetry.c, src/gover.c, src/greenf.c, src/grid.c, src/h1elec.c, src/haddon.c, src/hcore.c, src/helect.c, src/hqrii.c, src/ijkl.c, src/ilaenv.c, src/initsv.c, src/interp.c, src/iter.c, src/jcarin.c, src/linmin.c, src/local.c, src/locmin.c, src/lsame.c, src/makpol.c, src/mamult.c, src/matou1.c, src/matout.c, src/matpak.c, src/meci.c, src/mecid.c, src/mecih.c, src/mecip.c, src/moldat.c, src/molval.c, src/mopac7app.c, src/mopac7lib.c, src/mullik.c, src/mult.c, src/nllsq.c, src/nuchar.c, src/parsav.c, src/partxy.c, src/pathk.c, src/paths.c, src/perm.c, src/polar.c, src/powsav.c, src/powsq.c, src/prtdrc.c, src/quadr.c, src/react1.c, src/reada.c, src/readmo.c, src/refer.c, src/repp.c, src/rotat.c, src/rotate.c, src/rsp.c, src/search.c, src/second.c, src/setupg.c, src/solrot.c, src/swap.c, src/sympro.c, src/symtry.c, src/symtrz.c, src/thermo.c, src/timer.c, src/timout.c, src/update.c, src/upsurf.c, src/vecprt.c, src/writmo.c, src/wrtkey.c, src/wrttxt.c, src/xerbla.c, src/xyzint.c: moved source files under src/ subdir. 2004-12-10 09:22 thassine * config.log, configure, configure.in: now the libf2c/g2c configuration works ; a local f2c.h header file is created if libf2c is not present. 2004-12-08 16:57 thassine * Makefile.am, configure.in: just some whitespace fixes. 2004-12-08 16:37 thassine * Makefile.am, Makefile.in, aclocal.m4, config.log, configure, configure.in: added a patch (Jean Brefort) to handle better libf2c/g2c issues (the executable built only if libf2c available). 2004-11-09 15:39 thassine * ChangeLog, INSTALL, NEWS, README, run_mopac7: this is a release candidate 1 for v1.0 2004-11-02 15:29 thassine * Makefile.am, Makefile.in, config.guess, config.log: make install now installs also the libmopac7.pc file. 2004-08-25 13:36 thassine * Makefile.am, Makefile.in, README, config.guess, config.sub, configure, configure.in, ltmain.sh, m7MAIN.c, mopac7app.c, mopac7lib.c, tests/.cvsignore: added fixes to automake-related files. 2004-08-13 15:03 thassine * AUTHORS, COPYING, ChangeLog, INSTALL, Makefile.am, Makefile.in, NEWS, README, aclocal.m4, config.log, configure, configure.in, depcomp, ltmain.sh, missing, mkinstalldirs, tests/Makefile.am, tests/Makefile.in: added a new configuration system (Jean Brefort). 2003-12-19 16:44 thassine * Makefile.in, README, config.log, configure, configure.in, run_mopac7: both the app and the lib should work now. 2003-12-19 15:14 thassine * Makefile.SIMPLE, Makefile.in, config.log, libmopac7.pc.in: should now work as a static library. 2003-12-19 13:53 thassine * Makefile.in, config.guess, config.log, config.sub, configure, configure.in, install-sh: added the configuration scripts. 2003-07-11 16:39 thassine * .cvsignore, Makefile.in, README, aababc.c, addfck.c, addhcr.c, addnuc.c, analyt.c, anavib.c, axis.c, block.c, bonds.c, brlzon.c, btoc.c, calpar.c, capcor.c, cdiag.c, chrge.c, cnvg.c, compfg.c, config.log, consts.c, cqden.c, datin.c, dcart.c, delmol.c, delri.c, denrot.c, densit.c, depvar.c, deri0.c, deri1.c, deri2.c, deri21.c, deri22.c, deri23.c, deritr.c, deriv.c, dernvo.c, ders.c, dfock2.c, dfpsav.c, dgemm.c, dgemv.c, dger.c, dgetf2.c, dgetrf.c, dgetri.c, diag.c, diat.c, diat2.c, diegrd.c, dielen.c, diis.c, dijkl1.c, dijkl2.c, dipind.c, dipole.c, dlaswp.c, dofs.c, dot.c, drc.c, drcout.c, dtrmm.c, dtrmv.c, dtrsm.c, dtrti2.c, dtrtri.c, dvfill.c, ef.c, enpart.c, esp.c, etime.c, exchng.c, fdate.c, ffhpol.c, flepo.c, fmat.c, fock1.c, fock2.c, force.c, formxy.c, forsav.c, frame.c, freqcy.c, geout.c, geoutg.c, getgeg.c, getgeo.c, getsym.c, gettxt.c, gmetry.c, gover.c, greenf.c, grid.c, h1elec.c, haddon.c, hcore.c, helect.c, hqrii.c, ijkl.c, ilaenv.c, initsv.c, interp.c, iter.c, jcarin.c, linmin.c, local.c, locmin.c, lsame.c, makpol.c, mamult.c, matou1.c, matout.c, matpak.c, meci.c, mecid.c, mecih.c, mecip.c, Makefile.SIMPLE, m7MAIN.c, moldat.c, molval.c, mullik.c, mult.c, nllsq.c, nuchar.c, parsav.c, partxy.c, pathk.c, paths.c, perm.c, polar.c, powsav.c, powsq.c, prtdrc.c, quadr.c, react1.c, reada.c, readmo.c, refer.c, repp.c, rotat.c, rotate.c, rsp.c, run_mopac7, search.c, second.c, setupg.c, solrot.c, swap.c, sympro.c, symtry.c, symtrz.c, thermo.c, timer.c, timout.c, update.c, upsurf.c, vecprt.c, writmo.c, wrtkey.c, wrttxt.c, xerbla.c, xyzint.c, fortran/SIZES, fortran/aababc.f, fortran/addfck.f, fortran/addhcr.f, fortran/addnuc.f, fortran/analyt.f, fortran/anavib.f, fortran/axis.f, fortran/block.f, fortran/bonds.f, fortran/brlzon.f, fortran/btoc.f, fortran/calpar.f, fortran/capcor.f, fortran/cdiag.f, fortran/chrge.f, fortran/cnvg.f, fortran/compfg.f, fortran/consts.f, fortran/cqden.f, fortran/datin.f, fortran/dcart.f, fortran/delmol.f, fortran/delri.f, fortran/denrot.f, fortran/densit.f, fortran/depvar.f, fortran/deri0.f, fortran/deri1.f, fortran/deri2.f, fortran/deri21.f, fortran/deri22.f, fortran/deri23.f, fortran/deritr.f, fortran/deriv.f, fortran/dernvo.f, fortran/ders.f, fortran/dfock2.f, fortran/dfpsav.f, fortran/dgemm.f, fortran/dgemv.f, fortran/dger.f, fortran/dgetf2.f, fortran/dgetrf.f, fortran/dgetri.f, fortran/diag.f, fortran/diat.f, fortran/diat2.f, fortran/diegrd.f, fortran/dielen.f, fortran/diis.f, fortran/dijkl1.f, fortran/dijkl2.f, fortran/dipind.f, fortran/dipole.f, fortran/dlaswp.f, fortran/dofs.f, fortran/dot.f, fortran/drc.f, fortran/drcout.f, fortran/dtrmm.f, fortran/dtrmv.f, fortran/dtrsm.f, fortran/dtrti2.f, fortran/dtrtri.f, fortran/dvfill.f, fortran/ef.f, fortran/enpart.f, fortran/esp.f, fortran/etime.c, fortran/exchng.f, fortran/fdate.c, fortran/ffhpol.f, fortran/flepo.f, fortran/fmat.f, fortran/fock1.f, fortran/fock2.f, fortran/force.f, fortran/formxy.f, fortran/forsav.f, fortran/frame.f, fortran/freqcy.f, fortran/geout.f, fortran/geoutg.f, fortran/getgeg.f, fortran/getgeo.f, fortran/getsym.f, fortran/gettxt.f, fortran/gmetry.f, fortran/gover.f, fortran/greenf.f, fortran/grid.f, fortran/h1elec.f, fortran/haddon.f, fortran/hcore.f, fortran/helect.f, fortran/hqrii.f, fortran/ijkl.f, fortran/ilaenv.f, fortran/initsv.f, fortran/interp.f, fortran/iter.f, fortran/jcarin.f, fortran/linmin.f, fortran/local.f, fortran/locmin.f, fortran/lsame.f, fortran/makpol.f, fortran/mamult.f, fortran/matou1.f, fortran/matout.f, fortran/matpak.f, fortran/meci.f, fortran/mecid.f, fortran/mecih.f, fortran/mecip.f, fortran/moldat.f, fortran/molval.f, fortran/mopac.f, fortran/mullik.f, fortran/mult.f, fortran/nllsq.f, fortran/nuchar.f, fortran/parsav.f, fortran/partxy.f, fortran/pathk.f, fortran/paths.f, fortran/perm.f, fortran/polar.f, fortran/powsav.f, fortran/powsq.f, fortran/prtdrc.f, fortran/quadr.f, fortran/react1.f, fortran/reada.f, fortran/readmo.f, fortran/refer.f, fortran/repp.f, fortran/rotat.f, fortran/rotate.f, fortran/rsp.f, fortran/search.f, fortran/second.f, fortran/setupg.f, fortran/solrot.f, fortran/swap.f, fortran/sympro.f, fortran/symtry.f, fortran/symtrz.f, fortran/thermo.f, fortran/timer.f, fortran/timout.f, fortran/update.f, fortran/upsurf.f, fortran/vecprt.f, fortran/writmo.f, fortran/mopaclib.f, fortran/wrtkey.f, fortran/wrttxt.f, fortran/xerbla.f, fortran/xyzint.f, tests/1scf.dat, tests/elements.dat, tests/force.dat, tests/geometry.dat, tests/keys.dat, tests/nch34+.dat, tests/oldgeo.dat, tests/paras.dat, tests/test_cos.OUT, tests/test_cos.dat, tests/test_ef_.OUT, tests/test_ef_.dat, tests/test_gre.OUT, tests/test_gre.dat, tests/test_pol.OUT, tests/test_pol.dat: Initial revision 2003-07-11 16:39 thassine * .cvsignore, Makefile.in, README, aababc.c, addfck.c, addhcr.c, addnuc.c, analyt.c, anavib.c, axis.c, block.c, bonds.c, brlzon.c, btoc.c, calpar.c, capcor.c, cdiag.c, chrge.c, cnvg.c, compfg.c, config.log, consts.c, cqden.c, datin.c, dcart.c, delmol.c, delri.c, denrot.c, densit.c, depvar.c, deri0.c, deri1.c, deri2.c, deri21.c, deri22.c, deri23.c, deritr.c, deriv.c, dernvo.c, ders.c, dfock2.c, dfpsav.c, dgemm.c, dgemv.c, dger.c, dgetf2.c, dgetrf.c, dgetri.c, diag.c, diat.c, diat2.c, diegrd.c, dielen.c, diis.c, dijkl1.c, dijkl2.c, dipind.c, dipole.c, dlaswp.c, dofs.c, dot.c, drc.c, drcout.c, dtrmm.c, dtrmv.c, dtrsm.c, dtrti2.c, dtrtri.c, dvfill.c, ef.c, enpart.c, esp.c, etime.c, exchng.c, fdate.c, ffhpol.c, flepo.c, fmat.c, fock1.c, fock2.c, force.c, formxy.c, forsav.c, frame.c, freqcy.c, geout.c, geoutg.c, getgeg.c, getgeo.c, getsym.c, gettxt.c, gmetry.c, gover.c, greenf.c, grid.c, h1elec.c, haddon.c, hcore.c, helect.c, hqrii.c, ijkl.c, ilaenv.c, initsv.c, interp.c, iter.c, jcarin.c, linmin.c, local.c, locmin.c, lsame.c, makpol.c, mamult.c, matou1.c, matout.c, matpak.c, meci.c, mecid.c, mecih.c, mecip.c, Makefile.SIMPLE, m7MAIN.c, moldat.c, molval.c, mullik.c, mult.c, nllsq.c, nuchar.c, parsav.c, partxy.c, pathk.c, paths.c, perm.c, polar.c, powsav.c, powsq.c, prtdrc.c, quadr.c, react1.c, reada.c, readmo.c, refer.c, repp.c, rotat.c, rotate.c, rsp.c, run_mopac7, search.c, second.c, setupg.c, solrot.c, swap.c, sympro.c, symtry.c, symtrz.c, thermo.c, timer.c, timout.c, update.c, upsurf.c, vecprt.c, writmo.c, wrtkey.c, wrttxt.c, xerbla.c, xyzint.c, fortran/SIZES, fortran/aababc.f, fortran/addfck.f, fortran/addhcr.f, fortran/addnuc.f, fortran/analyt.f, fortran/anavib.f, fortran/axis.f, fortran/block.f, fortran/bonds.f, fortran/brlzon.f, fortran/btoc.f, fortran/calpar.f, fortran/capcor.f, fortran/cdiag.f, fortran/chrge.f, fortran/cnvg.f, fortran/compfg.f, fortran/consts.f, fortran/cqden.f, fortran/datin.f, fortran/dcart.f, fortran/delmol.f, fortran/delri.f, fortran/denrot.f, fortran/densit.f, fortran/depvar.f, fortran/deri0.f, fortran/deri1.f, fortran/deri2.f, fortran/deri21.f, fortran/deri22.f, fortran/deri23.f, fortran/deritr.f, fortran/deriv.f, fortran/dernvo.f, fortran/ders.f, fortran/dfock2.f, fortran/dfpsav.f, fortran/dgemm.f, fortran/dgemv.f, fortran/dger.f, fortran/dgetf2.f, fortran/dgetrf.f, fortran/dgetri.f, fortran/diag.f, fortran/diat.f, fortran/diat2.f, fortran/diegrd.f, fortran/dielen.f, fortran/diis.f, fortran/dijkl1.f, fortran/dijkl2.f, fortran/dipind.f, fortran/dipole.f, fortran/dlaswp.f, fortran/dofs.f, fortran/dot.f, fortran/drc.f, fortran/drcout.f, fortran/dtrmm.f, fortran/dtrmv.f, fortran/dtrsm.f, fortran/dtrti2.f, fortran/dtrtri.f, fortran/dvfill.f, fortran/ef.f, fortran/enpart.f, fortran/esp.f, fortran/etime.c, fortran/exchng.f, fortran/fdate.c, fortran/ffhpol.f, fortran/flepo.f, fortran/fmat.f, fortran/fock1.f, fortran/fock2.f, fortran/force.f, fortran/formxy.f, fortran/forsav.f, fortran/frame.f, fortran/freqcy.f, fortran/geout.f, fortran/geoutg.f, fortran/getgeg.f, fortran/getgeo.f, fortran/getsym.f, fortran/gettxt.f, fortran/gmetry.f, fortran/gover.f, fortran/greenf.f, fortran/grid.f, fortran/h1elec.f, fortran/haddon.f, fortran/hcore.f, fortran/helect.f, fortran/hqrii.f, fortran/ijkl.f, fortran/ilaenv.f, fortran/initsv.f, fortran/interp.f, fortran/iter.f, fortran/jcarin.f, fortran/linmin.f, fortran/local.f, fortran/locmin.f, fortran/lsame.f, fortran/makpol.f, fortran/mamult.f, fortran/matou1.f, fortran/matout.f, fortran/matpak.f, fortran/meci.f, fortran/mecid.f, fortran/mecih.f, fortran/mecip.f, fortran/moldat.f, fortran/molval.f, fortran/mopac.f, fortran/mullik.f, fortran/mult.f, fortran/nllsq.f, fortran/nuchar.f, fortran/parsav.f, fortran/partxy.f, fortran/pathk.f, fortran/paths.f, fortran/perm.f, fortran/polar.f, fortran/powsav.f, fortran/powsq.f, fortran/prtdrc.f, fortran/quadr.f, fortran/react1.f, fortran/reada.f, fortran/readmo.f, fortran/refer.f, fortran/repp.f, fortran/rotat.f, fortran/rotate.f, fortran/rsp.f, fortran/search.f, fortran/second.f, fortran/setupg.f, fortran/solrot.f, fortran/swap.f, fortran/sympro.f, fortran/symtry.f, fortran/symtrz.f, fortran/thermo.f, fortran/timer.f, fortran/timout.f, fortran/update.f, fortran/upsurf.f, fortran/vecprt.f, fortran/writmo.f, fortran/mopaclib.f, fortran/wrtkey.f, fortran/wrttxt.f, fortran/xerbla.f, fortran/xyzint.f, tests/1scf.dat, tests/elements.dat, tests/force.dat, tests/geometry.dat, tests/keys.dat, tests/nch34+.dat, tests/oldgeo.dat, tests/paras.dat, tests/test_cos.OUT, tests/test_cos.dat, tests/test_ef_.OUT, tests/test_ef_.dat, tests/test_gre.OUT, tests/test_gre.dat, tests/test_pol.OUT, tests/test_pol.dat: initial import 2003-07-11 mopac7-1.15/Makefile.am0000644000175000017500000000017611053302064011601 00000000000000SUBDIRS = fortran tests EXTRA_DIST = autogen.sh run_mopac7 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmopac7.pc mopac7-1.15/INSTALL0000644000175000017500000000240011053302064010566 00000000000000You can compile and install this package using commands ./autogen.sh export F77='g77 -fno-automatic' export F77='gfortran -std=legacy -fno-automatic' ./configure make make install In installation only the libmopac library is installed, not the standalone mopac7 executable which is also generated in the compilation stage. You can use the run_mopac7 script to start the standalone mopac7 application, for example to run some of the test files: ./run_mopac7 tests/force ########################################################################## 20051011 ; the mopac7 package should now be gcc-4 compliant, but if you still wish to use an older compiler, you need to do the following: CC=gcc-3.2 ./configure This makes sure that gcc-3 compiler is used. 20051106 ; if building on Mac OS X or Darwin, Geoff Hutchison recommends using Fink and: CFLAGS="-I/sw/include -fno-common" LDFLAGS="-L/sw/lib -Wl,-undefined \ -Wl,dynamic_lookup -Wl,-m -Wl,bind_at_load" ./configure 20070921 ; the fortran code is now re-converted using a more recent version of f2c and the compiler issues seem to disappear (gcc-4.1.2 works fine). 20080805 ; the configure-script now uses fortran compiler instead of f2c/gcc combination (no need to link with libf2c/libg2c anymore). mopac7-1.15/NEWS0000644000175000017500000000004011053302064010232 00000000000000v1.0 released in November 2004. mopac7-1.15/missing0000755000175000017500000002466611053302061011153 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2003-09-02.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: mopac7-1.15/install-sh0000755000175000017500000001273611053302064011556 00000000000000#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 mopac7-1.15/depcomp0000755000175000017500000003477111053302064011132 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2003-11-08.23 # Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit 0 ;; -v | --v*) echo "depcomp $scriptversion" exit 0 ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: mopac7-1.15/AUTHORS0000644000175000017500000000044711053302064010616 00000000000000MOPAC7 originally is a work of James J. P. Stewart and co-workers. The MOPAC7 package used as a base for this work was obtained from ftp://esca.atomki.hu/mopac7/LINUX/mopac-7.01-4.tar.gz Changes made by Tommi Hassinen, University of Kuopio, Finland, April 2001. email mopac7-1.15/COPYING0000644000175000017500000000133011053302064010571 00000000000000The original copyright notice of MOPAC7: C C Notice of Public Domain nature of MOPAC C C 'This computer program is a work of the United States C Government and as such is not subject to protection by C copyright (17 U.S.C. # 105.) Any person who fraudulently C places a copyright notice or does any other act contrary C to the provisions of 17 U.S. Code 506(c) shall be subject C to the penalties provided therein. This notice shall not C be altered or removed from this software and is to be on C all reproductions.' C Changes made to MOPAC7 code in this work may be used/distributed under the same rules as the original MOPAC7 package; this work is in Public Domain. mopac7-1.15/libmopac7.pc.in0000644000175000017500000000023711053302064012351 00000000000000prefix=@prefix@ libdir=${prefix}/lib Name: libmopac7 Description: A library for semi-empirical QM calculations. Version: @VERSION@ Libs: -L${libdir} -lmopac7 mopac7-1.15/aclocal.m40000644000175000017500000101772211274260537011430 00000000000000# generated automatically by aclocal 1.10.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(AC_AUTOCONF_VERSION, [2.61],, [m4_warning([this file was generated for autoconf 2.61. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # serial 52 Debian 1.5.26-4 AC_PROG_LIBTOOL # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) # ----------------------------------------------------------- # If this macro is not defined by Autoconf, define it here. m4_ifdef([AC_PROVIDE_IFELSE], [], [m4_define([AC_PROVIDE_IFELSE], [m4_ifdef([AC_PROVIDE_$1], [$2], [$3])])]) # AC_PROG_LIBTOOL # --------------- AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. AC_PROVIDE_IFELSE([AC_PROG_CXX], [AC_LIBTOOL_CXX], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX ])]) dnl And a similar setup for Fortran 77 support AC_PROVIDE_IFELSE([AC_PROG_F77], [AC_LIBTOOL_F77], [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 ])]) dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [ifdef([AC_PROG_GCJ], [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([A][M_PROG_GCJ], [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([LT_AC_PROG_GCJ], [define([LT_AC_PROG_GCJ], defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) ])])# AC_PROG_LIBTOOL # _AC_PROG_LIBTOOL # ---------------- AC_DEFUN([_AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl # Prevent multiple expansion define([AC_PROG_LIBTOOL], []) ])# _AC_PROG_LIBTOOL # AC_LIBTOOL_SETUP # ---------------- AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.50)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! AC_REQUIRE([AC_OBJEXT])dnl AC_REQUIRE([AC_EXEEXT])dnl dnl AC_LIBTOOL_SYS_MAX_CMD_LEN AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE AC_LIBTOOL_OBJDIR AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] # Same as above, but do not quote variable references. [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" AC_CHECK_TOOL(AR, ar, false) AC_CHECK_TOOL(RANLIB, ranlib, :) AC_CHECK_TOOL(STRIP, strip, :) old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then AC_PATH_MAGIC fi ;; esac _LT_REQUIRED_DARWIN_CHECKS AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], enable_win32_dll=yes, enable_win32_dll=no) AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes AC_ARG_WITH([pic], [AC_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= AC_LIBTOOL_LANG_C_CONFIG _LT_AC_TAGCONFIG ])# AC_LIBTOOL_SETUP # _LT_AC_SYS_COMPILER # ------------------- AC_DEFUN([_LT_AC_SYS_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_AC_SYS_COMPILER # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. AC_DEFUN([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` ]) # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. AC_DEFUN([_LT_COMPILER_BOILERPLATE], [AC_REQUIRE([LT_AC_PROG_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. AC_DEFUN([_LT_LINKER_BOILERPLATE], [AC_REQUIRE([LT_AC_PROG_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # -------------------------- # Check for some things on darwin AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. echo "int foo(void){return 1;}" > conftest.c $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib ${wl}-single_module conftest.c if test -f libconftest.dylib; then lt_cv_apple_cc_single_mod=yes rm -rf libconftest.dylib* fi rm conftest.c fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) case $host_os in rhapsody* | darwin1.[[0123]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}" fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil="~$DSYMUTIL \$lib || :" else _lt_dsymutil= fi ;; esac ]) # _LT_AC_SYS_LIBPATH_AIX # ---------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], [AC_REQUIRE([LT_AC_PROG_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_AC_SYS_LIBPATH_AIX # _LT_AC_SHELL_INIT(ARG) # ---------------------- AC_DEFUN([_LT_AC_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_AC_SHELL_INIT # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], [_LT_AC_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac echo=${ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(ECHO) ])])# _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_LOCK # ----------- AC_DEFUN([_LT_AC_LOCK], [AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], [*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; ]) esac need_locks="$enable_libtool_lock" ])# _LT_AC_LOCK # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_REQUIRE([LT_AC_PROG_SED]) AC_CACHE_CHECK([$1], [$2], [$2=no ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $rm conftest* ]) if test x"[$]$2" = xyes; then ifelse([$5], , :, [$5]) else ifelse([$6], , :, [$6]) fi ])# AC_LIBTOOL_COMPILER_OPTION # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ------------------------------------------------------------ # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_REQUIRE([LT_AC_PROG_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $rm -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then ifelse([$4], , :, [$4]) else ifelse([$5], , :, [$5]) fi ])# AC_LIBTOOL_LINKER_OPTION # AC_LIBTOOL_SYS_MAX_CMD_LEN # -------------------------- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [# find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi ])# AC_LIBTOOL_SYS_MAX_CMD_LEN # _LT_AC_CHECK_DLFCN # ------------------ AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h)dnl ])# _LT_AC_CHECK_DLFCN # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # --------------------------------------------------------------------- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ---------------------- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi ])# AC_LIBTOOL_DLOPEN_SELF # AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) # --------------------------------- # Check to see if options -c and -o are simultaneously supported by compiler AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], [AC_REQUIRE([LT_AC_PROG_SED])dnl AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* ]) ])# AC_LIBTOOL_PROG_CC_C_O # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) # ----------------------------------------- # Check to see if we can do hard links to lock some files if needed AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_REQUIRE([_LT_AC_LOCK])dnl hard_links="nottested" if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi ])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS # AC_LIBTOOL_OBJDIR # ----------------- AC_DEFUN([AC_LIBTOOL_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir ])# AC_LIBTOOL_OBJDIR # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) # ---------------------------------------------- # Check hardcoding attributes. AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_AC_TAGVAR(hardcode_action, $1)= if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existant directories. if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_AC_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_AC_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_AC_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi ])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH # AC_LIBTOOL_SYS_LIB_STRIP # ------------------------ AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], [striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi ])# AC_LIBTOOL_SYS_LIB_STRIP # AC_LIBTOOL_SYS_DYNAMIC_LINKER # ----------------------------- # PORTME Fill in your ld.so characteristics AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_REQUIRE([LT_AC_PROG_SED])dnl AC_MSG_CHECKING([dynamic linker characteristics]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" m4_if($1,[],[ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`echo $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[123]]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec], [lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"]) sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec], [lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"]) sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER # _LT_AC_TAGCONFIG # ---------------- AC_DEFUN([_LT_AC_TAGCONFIG], [AC_REQUIRE([LT_AC_PROG_SED])dnl AC_ARG_WITH([tags], [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], [include additional configurations @<:@automatic@:>@])], [tagnames="$withval"]) if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then AC_MSG_WARN([output file `$ofile' does not exist]) fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) else AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in "") ;; *) AC_MSG_ERROR([invalid tag name: $tagname]) ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then AC_MSG_ERROR([tag name \"$tagname\" already exists]) fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_LIBTOOL_LANG_CXX_CONFIG else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then AC_LIBTOOL_LANG_F77_CONFIG else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then AC_LIBTOOL_LANG_GCJ_CONFIG else tagname="" fi ;; RC) AC_LIBTOOL_LANG_RC_CONFIG ;; *) AC_MSG_ERROR([Unsupported tag name: $tagname]) ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" AC_MSG_ERROR([unable to update list of available tagged configurations.]) fi fi ])# _LT_AC_TAGCONFIG # AC_LIBTOOL_DLOPEN # ----------------- # enable checks for dlopen support AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_DLOPEN # AC_LIBTOOL_WIN32_DLL # -------------------- # declare package support for building win32 DLLs AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_WIN32_DLL # AC_ENABLE_SHARED([DEFAULT]) # --------------------------- # implement the --enable-shared flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([shared], [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]AC_ENABLE_SHARED_DEFAULT) ])# AC_ENABLE_SHARED # AC_DISABLE_SHARED # ----------------- # set the default shared flag to --disable-shared AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no) ])# AC_DISABLE_SHARED # AC_ENABLE_STATIC([DEFAULT]) # --------------------------- # implement the --enable-static flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([static], [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]AC_ENABLE_STATIC_DEFAULT) ])# AC_ENABLE_STATIC # AC_DISABLE_STATIC # ----------------- # set the default static flag to --disable-static AC_DEFUN([AC_DISABLE_STATIC], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no) ])# AC_DISABLE_STATIC # AC_ENABLE_FAST_INSTALL([DEFAULT]) # --------------------------------- # implement the --enable-fast-install flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([fast-install], [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) ])# AC_ENABLE_FAST_INSTALL # AC_DISABLE_FAST_INSTALL # ----------------------- # set the default to --disable-fast-install AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no) ])# AC_DISABLE_FAST_INSTALL # AC_LIBTOOL_PICMODE([MODE]) # -------------------------- # implement the --with-pic flag # MODE is either `yes' or `no'. If omitted, it defaults to `both'. AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl pic_mode=ifelse($#,1,$1,default) ])# AC_LIBTOOL_PICMODE # AC_PROG_EGREP # ------------- # This is predefined starting with Autoconf 2.54, so this conditional # definition can be removed once we require Autoconf 2.54 or later. m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi]) EGREP=$ac_cv_prog_egrep AC_SUBST([EGREP]) ])]) # AC_PATH_TOOL_PREFIX # ------------------- # find a file program which can recognize shared library AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="ifelse([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi ])# AC_PATH_TOOL_PREFIX # AC_PATH_MAGIC # ------------- # find a file program which can recognize a shared library AC_DEFUN([AC_PATH_MAGIC], [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# AC_PATH_MAGIC # AC_PROG_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH([gnu-ld], [AC_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no]) AC_REQUIRE([LT_AC_PROG_SED])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown ])# AC_DEPLIBS_CHECK_METHOD # AC_PROG_NM # ---------- # find the pathname to a BSD-compatible name lister AC_DEFUN([AC_PROG_NM], [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) NM="$lt_cv_path_NM" ])# AC_PROG_NM # AC_CHECK_LIBM # ------------- # check for math library AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac ])# AC_CHECK_LIBM # AC_LIBLTDL_CONVENIENCE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl convenience library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-convenience to the configure arguments. Note that # AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, # it is assumed to be `libltdl'. LIBLTDL will be prefixed with # '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/' # (note the single quotes!). If your package is not flat and you're not # using automake, define top_builddir and top_srcdir appropriately in # the Makefiles. AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case $enable_ltdl_convenience in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; esac LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_CONVENIENCE # AC_LIBLTDL_INSTALLABLE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl installable library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-install to the configure arguments. Note that # AC_CONFIG_SUBDIRS is not called here. If DIRECTORY is not provided, # and an installed libltdl is not found, it is assumed to be `libltdl'. # LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and top_srcdir # appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, lt_dlinit, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then AC_MSG_WARN([libltdl not installed, but installation disabled]) else enable_ltdl_install=yes fi ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" LTDLINCL= fi # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_INSTALLABLE # AC_LIBTOOL_CXX # -------------- # enable support for C++ libraries AC_DEFUN([AC_LIBTOOL_CXX], [AC_REQUIRE([_LT_AC_LANG_CXX]) ])# AC_LIBTOOL_CXX # _LT_AC_LANG_CXX # --------------- AC_DEFUN([_LT_AC_LANG_CXX], [AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([_LT_AC_PROG_CXXCPP]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) ])# _LT_AC_LANG_CXX # _LT_AC_PROG_CXXCPP # ------------------ AC_DEFUN([_LT_AC_PROG_CXXCPP], [ AC_REQUIRE([AC_PROG_CXX]) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP fi ])# _LT_AC_PROG_CXXCPP # AC_LIBTOOL_F77 # -------------- # enable support for Fortran 77 libraries AC_DEFUN([AC_LIBTOOL_F77], [AC_REQUIRE([_LT_AC_LANG_F77]) ])# AC_LIBTOOL_F77 # _LT_AC_LANG_F77 # --------------- AC_DEFUN([_LT_AC_LANG_F77], [AC_REQUIRE([AC_PROG_F77]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) ])# _LT_AC_LANG_F77 # AC_LIBTOOL_GCJ # -------------- # enable support for GCJ libraries AC_DEFUN([AC_LIBTOOL_GCJ], [AC_REQUIRE([_LT_AC_LANG_GCJ]) ])# AC_LIBTOOL_GCJ # _LT_AC_LANG_GCJ # --------------- AC_DEFUN([_LT_AC_LANG_GCJ], [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) ])# _LT_AC_LANG_GCJ # AC_LIBTOOL_RC # ------------- # enable support for Windows resource files AC_DEFUN([AC_LIBTOOL_RC], [AC_REQUIRE([LT_AC_PROG_RC]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) ])# AC_LIBTOOL_RC # AC_LIBTOOL_LANG_C_CONFIG # ------------------------ # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) AC_DEFUN([_LT_AC_LANG_C_CONFIG], [lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_AC_SYS_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_C_CONFIG # AC_LIBTOOL_LANG_CXX_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], [AC_LANG_PUSH(C++) AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([_LT_AC_PROG_CXXCPP]) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_AC_TAGVAR(no_undefined_flag, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Dependencies to place before and after the object being linked: _LT_AC_TAGVAR(predep_objects, $1)= _LT_AC_TAGVAR(postdep_objects, $1)= _LT_AC_TAGVAR(predeps, $1)= _LT_AC_TAGVAR(postdeps, $1)= _LT_AC_TAGVAR(compiler_lib_search_path, $1)= _LT_AC_TAGVAR(compiler_lib_search_dirs, $1)= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration AC_PROG_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_AC_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" if test "$GXX" = yes ; then output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else case $cc_basename in xlc*) output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[[12]]*) # C++ shared libraries reported to be fairly broken before switch to ELF _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_AC_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc*) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; openbsd2*) # C++ shared libraries are fairly broken _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd='echo' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; osf3*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx*) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx*) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ $rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_AC_TAGVAR(GCC, $1)="$GXX" _LT_AC_TAGVAR(LD, $1)="$LD" AC_LIBTOOL_POSTDEP_PREDEP($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld ])# AC_LIBTOOL_LANG_CXX_CONFIG # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) # ------------------------------------ # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP], [AC_REQUIRE([LT_AC_PROG_SED])dnl dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_AC_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac ])# AC_LIBTOOL_POSTDEP_PREDEP # AC_LIBTOOL_LANG_F77_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)]) AC_DEFUN([_LT_AC_LANG_F77_CONFIG], [AC_REQUIRE([AC_PROG_F77]) AC_LANG_PUSH(Fortran 77) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_AC_TAGVAR(no_undefined_flag, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_AC_TAGVAR(GCC, $1)="$G77" _LT_AC_TAGVAR(LD, $1)="$LD" AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_F77_CONFIG # AC_LIBTOOL_LANG_GCJ_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)]) AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG], [AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_CONFIG($1) AC_LANG_RESTORE CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_GCJ_CONFIG # AC_LIBTOOL_LANG_RC_CONFIG # ------------------------- # Ensure that the configuration vars for the Windows resource compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)]) AC_DEFUN([_LT_AC_LANG_RC_CONFIG], [AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes AC_LIBTOOL_CONFIG($1) AC_LANG_RESTORE CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_RC_CONFIG # AC_LIBTOOL_CONFIG([TAGNAME]) # ---------------------------- # If TAGNAME is not passed, then create an initial libtool script # with a default configuration from the untagged config vars. Otherwise # add code to config.status for appending the configuration named by # TAGNAME from the matching tagged config vars. AC_DEFUN([AC_LIBTOOL_CONFIG], [# The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ _LT_AC_TAGVAR(compiler, $1) \ _LT_AC_TAGVAR(CC, $1) \ _LT_AC_TAGVAR(LD, $1) \ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \ _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \ _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \ _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \ _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \ _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \ _LT_AC_TAGVAR(old_archive_cmds, $1) \ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \ _LT_AC_TAGVAR(predep_objects, $1) \ _LT_AC_TAGVAR(postdep_objects, $1) \ _LT_AC_TAGVAR(predeps, $1) \ _LT_AC_TAGVAR(postdeps, $1) \ _LT_AC_TAGVAR(compiler_lib_search_path, $1) \ _LT_AC_TAGVAR(compiler_lib_search_dirs, $1) \ _LT_AC_TAGVAR(archive_cmds, $1) \ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \ _LT_AC_TAGVAR(postinstall_cmds, $1) \ _LT_AC_TAGVAR(postuninstall_cmds, $1) \ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \ _LT_AC_TAGVAR(allow_undefined_flag, $1) \ _LT_AC_TAGVAR(no_undefined_flag, $1) \ _LT_AC_TAGVAR(export_symbols_cmds, $1) \ _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \ _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \ _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \ _LT_AC_TAGVAR(hardcode_automatic, $1) \ _LT_AC_TAGVAR(module_cmds, $1) \ _LT_AC_TAGVAR(module_expsym_cmds, $1) \ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \ _LT_AC_TAGVAR(fix_srcfile_path, $1) \ _LT_AC_TAGVAR(exclude_expsyms, $1) \ _LT_AC_TAGVAR(include_expsyms, $1); do case $var in _LT_AC_TAGVAR(old_archive_cmds, $1) | \ _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \ _LT_AC_TAGVAR(archive_cmds, $1) | \ _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \ _LT_AC_TAGVAR(module_cmds, $1) | \ _LT_AC_TAGVAR(module_expsym_cmds, $1) | \ _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \ _LT_AC_TAGVAR(export_symbols_cmds, $1) | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\[$]0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'` ;; esac ifelse([$1], [], [cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" AC_MSG_NOTICE([creating $ofile])], [cfgfile="$ofile"]) cat <<__EOF__ >> "$cfgfile" ifelse([$1], [], [#! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG], [# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_[]_LT_AC_TAGVAR(LD, $1) # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) # Commands used to build and install a shared archive. archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) # The directories searched by this compiler when creating a shared # library compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1) # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) # Flag that forces no undefined symbols. no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) # The commands to list exported symbols. export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) # Symbols that must always be exported. include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) ifelse([$1],[], [# ### END LIBTOOL CONFIG], [# ### END LIBTOOL TAG CONFIG: $tagname]) __EOF__ ifelse([$1],[], [ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ]) else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ])# AC_LIBTOOL_CONFIG # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([LT_AC_PROG_SED]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32*) symcode='[[ABCDGISTW]]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux* | k*bsd*-gnu) if test "$host_cpu" = ia64; then symcode='[[ABCDGIRSTW]]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[[]] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) # --------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) ifelse([$1],[CXX],[ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; esac ;; dgux*) case $cc_basename in ec++*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; icpc* | ecpc*) # Intel C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler. _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; vxworks*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; newsos6) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='' ;; esac ;; esac ;; osf3* | osf4* | osf5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1), [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" ;; esac # # Check to make sure the static flag actually works. # wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) ]) # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) # ------------------------------------ # See if the linker supports building shared libraries. AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_REQUIRE([LT_AC_PROG_SED])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ifelse([$1],[CXX],[ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw*) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) _LT_AC_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ],[ runpath_var= _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)= _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_AC_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. _LT_CC_BASENAME([$compiler]) case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_AC_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; interix[[3-9]]*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; *) tmp_sharedflag='-shared' ;; esac _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi _LT_AC_TAGVAR(link_all_deplibs, $1)=no else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=yes _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # see comment about different semantics on the GNU ld section _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; bsdi[[45]]*) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else case $cc_basename in xlc*) output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ;; dgux*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' if test "$GCC" = yes; then wlarc='${wl}' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_AC_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_AC_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_AC_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $rm conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) _LT_AC_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac ])# AC_LIBTOOL_PROG_LD_SHLIBS # _LT_AC_FILE_LTDLL_C # ------------------- # Be careful that the start marker always follows a newline. AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ ])# _LT_AC_FILE_LTDLL_C # _LT_AC_TAGVAR(VARNAME, [TAGNAME]) # --------------------------------- AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) # old names AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) # This is just to silence aclocal about the macro not being used ifelse([AC_DISABLE_FAST_INSTALL]) AC_DEFUN([LT_AC_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj, no) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS) ]) AC_DEFUN([LT_AC_PROG_RC], [AC_CHECK_TOOL(RC, windres, no) ]) # Cheap backport of AS_EXECUTABLE_P and required macros # from Autoconf 2.59; we should not use $as_executable_p directly. # _AS_TEST_PREPARE # ---------------- m4_ifndef([_AS_TEST_PREPARE], [m4_defun([_AS_TEST_PREPARE], [if test -x / >/dev/null 2>&1; then as_executable_p='test -x' else as_executable_p='test -f' fi ])])# _AS_TEST_PREPARE # AS_EXECUTABLE_P # --------------- # Check whether a file is executable. m4_ifndef([AS_EXECUTABLE_P], [m4_defun([AS_EXECUTABLE_P], [AS_REQUIRE([_AS_TEST_PREPARE])dnl $as_executable_p $1[]dnl ])])# AS_EXECUTABLE_P # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # # LT_AC_PROG_SED # -------------- # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. AC_DEFUN([LT_AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if AS_EXECUTABLE_P(["$as_dir/$lt_ac_prog$ac_exec_ext"]); then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ]) # Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.10' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.10.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.10.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 3 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 13 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.60])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR mopac7-1.15/Makefile.in0000644000175000017500000005006411274260541011623 00000000000000# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/libmopac7.pc.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ compile config.guess config.sub depcomp install-sh ltmain.sh \ missing mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = libmopac7.pc SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgconfigdir)" pkgconfigDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NMEDIT = @NMEDIT@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = fortran tests EXTRA_DIST = autogen.sh run_mopac7 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmopac7.pc all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) libmopac7.pc: $(top_builddir)/config.status $(srcdir)/libmopac7.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgconfigDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ $(pkgconfigDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgconfigdir)/$$f"; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgconfigdir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgconfigdir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d $(distdir) || mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-exec-am: install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-zip distcheck \ distclean distclean-generic distclean-libtool distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-pkgconfigDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mopac7-1.15/configure.ac0000644000175000017500000000554611274260526012054 00000000000000# Configuration for mopac7. # Copyright (c) 2003- Tommi Hassinen, Jean Brefort, Michael Banck, # Daniel Leidert. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # Process this file with autoconf to produce a configure script. AC_PREREQ([2.48]) AC_INIT([mopac7], [1.15], [ghemical-devel@bioinformatics.org]) AM_INIT_AUTOMAKE([-Wall]) ################################################################## ## also see fortran/Makefile.am when you change the version number!!! ################################################################## AC_CONFIG_SRCDIR([fortran/mopac7lib.f]) AC_CANONICAL_HOST # Get any build/host and enable/disable flags now. # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # Checks for programs. # ^^^^^^^^^^^^^^^^^^^^ AC_PROG_CC AC_PROG_F77 AC_PROG_INSTALL ##AC_PROG_RANLIB AC_PATH_PROG([AR], [ar], [ar]) AC_PATH_PROG([SHELL], [sh], [/bin/sh]) AM_PROG_LIBTOOL case "$F77" in g77*) FFLAGS="$FFLAGS -fno-automatic" ;; gfortran*) FFLAGS="$FFLAGS -std=legacy -fno-automatic" ;; esac # Checks for libraries. # ^^^^^^^^^^^^^^^^^^^^^ AC_CHECK_LIB([m], [acos]) # Here is a check whether we have libf2c or libg2c (Jean Brefort). # If libf2c is present, it is used and both the library and the executable is built. # If only libg2c is present, then only the library is built and the executable is not built. ############################################################################################## #saved_flags=$CFLAGS #CFLAGS="-Dmain=MAIN__" #have_f2c="no" #AC_CHECK_LIB([f2c], [main], [have_f2c="yes"; CFLAGS=$saved_flags], # [# If not found, try -lg2c: # CFLAGS=$saved_flags; # AC_CHECK_LIB([g2c], [main], , # # Still not found, drop out: # AC_MSG_ERROR([Cannot find either f2c or g2c library])] # ) #) #AM_CONDITIONAL(HAVE_F2C,test "$have_f2c" = "yes") # If we only have libg2c present, we must make a local copy of f2c.h # header file that includes g2c.h file and contains some definitions. ############################################################################################## #if test "$have_f2c" = "no"; then # echo "#include " > src/f2c.h # echo "#define VOID void" >> src/f2c.h # AC_MSG_WARN(mopac7 program cannot be built without f2c) # AC_MSG_WARN(a local copy of f2c.h header has been created in src/) #else # rm -f src/f2c.h #fi # Checks for header files. # ^^^^^^^^^^^^^^^^^^^^^^^^ # Checks for typedefs, structures, and compiler characteristics. # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AC_C_CONST AC_C_INLINE # Checks for library functions. # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AC_CONFIG_FILES([ Makefile fortran/Makefile fortran/c_src_bak/Makefile fortran/c_src_f2c/Makefile tests/Makefile libmopac7.pc ]) AC_OUTPUT mopac7-1.15/autogen.sh0000755000175000017500000000074111053302064011544 00000000000000#!/bin/sh OSTYPE=`uname -s` AMFLAGS="--add-missing" if test "$OSTYPE" = "IRIX" -o "$OSTYPE" = "IRIX64"; then AMFLAGS=$AMFLAGS" --include-deps"; fi echo "Running libtoolize" libtoolize --force --copy echo "Running aclocal" #rm -fr autom4te.cache aclocal --force echo "Running automake" automake $AMFLAGS echo "Running autoconf" autoconf echo "======================================" echo "Now you are ready to run './configure'" echo "======================================" mopac7-1.15/ltmain.sh0000644000175000017500000060646011005712103011371 00000000000000# ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION="1.5.26 Debian 1.5.26-4" TIMESTAMP=" (1.1220.2.493 2008/02/01 16:58:18)" # Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) extracted_serial=`expr $extracted_serial + 1` my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) echo "\ $PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.[fF][09]?) xform=[fF][09]. ;; *.for) xform=for ;; *.java) xform=java ;; *.obj) xform=obj ;; *.sx) xform=sx ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$deplibdir/$depdepl" ; then depdepl="$deplibdir/$depdepl" elif test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" else # Can't find it, oh well... depdepl= fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) case " $deplibs" in *\ -l* | *\ -L*) $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;; esac if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then major=`expr $current - $age` else major=`expr $current - $age + 1` fi case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then case $archive_cmds in *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; esac else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) case " $deplibs" in *\ -l* | *\ -L*) $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;; esac if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` else compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` fi ;; * ) compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible (taken from Autoconf:_AS_BOURNE_COMPATIBLE). if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \$*\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` else relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $? # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared disable_libs=shared # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static disable_libs=static # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: mopac7-1.15/README0000644000175000017500000001255311053302064010427 00000000000000The objective of this work is to make available both a stand-alone MOPAC7 application and a library containing MOPAC7 code, using the f2c tool. The original fortran source is included, and some careful modifications are added there. So far they are well-known bug fixes and some extensions, where original mopac subroutines copied, renamed and modified. The list of modifications follows: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2001-04-18 : We will link libmopac7.a into a C++ program at Linux/UNIX. Translate MOPAC7 into C using f2c package (version 19991025-1). Build it, and it should work... Copy mopac.f -> mopaclib.f, and for simplicity add some comments. We will convert the original program into two subroutines, which will either start or stop the MOPAC7. The idea is roughly following: start-begin call GETDAT open unit 6 as usual... call READMO (skip the NATOMS check)... (skip the keyword "AUTHOR")... call GEOUT (by default!!!) call MOLDAT (skip the SOLVATION stuff)... (skip the EXTERNAL stuff)... start-end (ALLOW NO JUMPS OUTSIDE THIS BLOCK!!!) stop-begin (start from the label "40") (skip the WRITMO stuff)... (skip the POLAR stuff)... (skip the ESP stuff)... write times to unit 6 stop-end (ALLOW NO JUMPS OUTSIDE THIS BLOCK!!!) 2001-08-17 : Added a modification to calculate electrostatic potential (ESP) plots. The original MOPAC contains a keyword "ESP" to fit atomic charges using ESP. However, it did not work. Found a message at CCL where a patch to MOPAC was included; other files than esp.f were already modified according to the message. At esp.f, the /STO6G/ common block sizes were different from those in the corresponding block at setupg.f; this was fixed. Now the plots are calculated by setting the point data and then calling elesp_() which calculates ESP. In elesp_() code, atom positions are first copied by calling a modified pdgrid_(). I haven't yet checked what the unit of ESP is in mopac, but it seems to be hartree; the plots look really nice when using the hartree->kJ/mol conversion factor. The plot calculation process is a bit slow however; perhaps some unnecessary results are also calculated? Those could be commented out... 2001-08-18 : The old ELESP subroutine is now divided in two parts; first will initialize the plotting code, and the second will calculate the value. Speed improvement is significant this way. 2001-09-03 : An idea about how to get rid of global variables: try to combine all separate common blocks into a single big block. Then that could perhaps be converted into a struct, and a pointer could be used to access it's elements? Could the addition of pointer code be done as a search/replace operation??? 2001-09-26 : Changes made to mopac.f and minimopac.f; we don't open unit 6 as a file anymore, and this will direct the output to console as text. This also affected iter.f because unit 6 was also opened there (no idea why). Also esp.f was slightly changed; unnecessary outputs/dumps were removed. 2001-09-27 : At iter.f, the STOP command at line 518 was removed, and failed SCF convergence now doesn't close the whole program (this has been a problem in MOPAC geometry optimizations). Instead of STOP, GOTO 380 is called like in a case few lines above where the job is continued. THIS CHANGE MIGHT CAUSE SOME PROBLEMS, BECAUSE WE WILL ACCEPT INACCURATE ENERGIES/FORCES AND WE WILL FEED THEM TO GEOMETRY OPTIMIZATION AND OTHER ALGORITHMS!!! However, there seems to be no negative side-effects in practice. 2002-01-31 : It turned out that I had modified etime.c file earlier by adding #include there (thanks Radek! :) The fortran/etime.c file is still the original unmodified version. 2003-05-06 : A new build system added, that allows one to build either the app or the lib. There is a new source file m7MAIN.c that contains both mopac.c and mopaclib.c sources, separated by some preprocessor macros that select which one gets compiled. 2003-12-19 : Added the configure scripts etc to build both the app and the lib. 2004-08-13 : Added improved configuration scripts (Jean Brefort). The old file m7MAIN.c is divided into mopac7app.c/mopac7lib.c files. 2004-11-09 : Some fixes and cleanups added for an initial release. 2005-10-11 : Compilers newer than gcc-3.2 had problems compiling cdiag.c file, where COMPLEX/REAL type tables were mismatching in subroutine EC08C and ME08B calls. The subroutines were moved to the top of cdiag.f source file, which helped resolve the problems. There were no changes in fortran code, just a rearrangement. How to update the C source files from fortran source: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ It seems to be a good strategy to implement most changes and extensions in fortran side, and then convert that to C. Some modifications in fortran side will cause *big* changes in C side, for example changes in SIZES file or any changes in fortran common blocks. However, some changes are better to do in C side. For example, both MOPAC and MPQC seems to use some BLAS routines, which have similar names, and therefore you can't link them together. In the following, this kind of changes are listed. If you update the C source from fortran, I guess you have to maintain these changes manually... ef.c : functions "daxpy", "dscal" and "dswap" conflicted with similar ones in MPQC; seem to be BLAS routines? Renamed them with mM prefix... etime.c : #include has been added to this file. mopac7-1.15/run_mopac70000755000175000017500000000100611053302064011536 00000000000000#! /bin/sh if test ! $# -eq 1 then echo usage : run_mopac7 inputfile exit 1 fi if test ! -f $1.dat then echo error : inputfile $1.dat not found exit 1 fi export FOR005=$1.dat ## input export FOR006=$1.out ## output export FOR009=$1.res ## restart export FOR010=$1.den ## density matrix export FOR011=$1.log ## logfile export FOR012=$1.arc ## archive/summary file echo starting mopac7 job $1 ./fortran/mopac7 > $1.OUT ##./src/mopac7 > $1.OUT echo mopac7 job $1 finished if test -f SHUTDOWN then rm SHUTDOWN fi mopac7-1.15/tests/0000777000175000017500000000000011274262042010775 500000000000000mopac7-1.15/tests/Makefile.am0000644000175000017500000000024011053302063012732 00000000000000EXTRA_DIST = \ 1scf.dat force.dat keys.dat oldgeo.dat \ test_cos.dat test_gre.dat elements.dat geometry.dat \ nch34+.dat paras.dat test_ef_.dat test_pol.dat mopac7-1.15/tests/test_pol.dat0000644000175000017500000000024711053302062013227 00000000000000 polar SYMMETRY Formaldehyde, for Demonstration Purposes O C 1.2 1 H 1.1 1 120 1 H 1.1 0 120 0 180 0 2 1 3 3 1 4 3 2 4 0 1 1 0.001 500 150 0.001 mopac7-1.15/tests/Makefile.in0000644000175000017500000002105211274260541012760 00000000000000# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = tests DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NMEDIT = @NMEDIT@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ 1scf.dat force.dat keys.dat oldgeo.dat \ test_cos.dat test_gre.dat elements.dat geometry.dat \ nch34+.dat paras.dat test_ef_.dat test_pol.dat all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mopac7-1.15/tests/1scf.dat0000644000175000017500000002447511053302063012244 00000000000000 SYMMETRY 1SCF GRADIENTS Formaldehyde, for Demonstration Purposes HEAT OF FORMATION SHOULD BE -32.8819 KCAL O 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.2902 C 1.2164870 1 0.000000 0 0.000000 0 1 0 0 0.2921 H 1.1061273 1 123.510934 1 0.000000 0 2 1 0 -0.0010 H 1.1061273 0 123.510934 0 -179.999994 0 2 1 3 -0.0010 3 1 4 3 2 4 1SCF T=25M GRADIENTS PULAY PRECISE DOUBLET RHF ETHYL RADICAL CALCULATED HEAT OF FORMATION SHOULD BE = 12.824 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1384 C 1.4791477 1 0.000000 0 0.000000 0 1 0 0 0.0558 H 1.1093748 1 111.309966 1 0.000000 0 2 1 0 -0.0023 H 1.1094442 1 111.719813 1 120.266333 1 2 1 3 -0.0035 H 1.1096173 1 110.109742 1 -119.815906 1 2 1 3 0.0005 H 1.0819233 1 121.212473 1 38.132703 1 1 2 3 0.0437 H 1.0817007 1 121.505329 1 -142.585074 1 1 2 3 0.0443 1SCF PRECISE GRADIENTS PULAY BIRADICAL SYMMETRY BIRADICAL FORM OF ETHYLENE CALCULATED HEAT OF FORMATION SHOULD BE = 45.146 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1003 C 1.4411597 1 0.000000 0 0.000000 0 1 0 0 -0.1003 H 1.0815188 1 120.939334 1 0.000000 0 2 1 0 0.0501 H 1.0815188 0 120.939334 0 180.000000 0 2 1 3 0.0501 H 1.0815188 0 120.939334 0 90.000000 0 1 2 3 0.0501 H 1.0815188 0 120.939334 0 -90.000000 0 1 2 3 0.0501 3 1 4 5 6 3 2 4 5 6 MECI DEBUG 1SCF PULAY EXCITED SYMMETRY EXCITED SINGLET STATE OF D2D ETHYLENE CALCULATED HEAT OF FORMATION SHOULD BE = 106.651 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0931 C 1.3297665 1 0.000000 0 0.000000 0 1 0 0 -0.0920 H 1.1003051 1 125.388161 1 0.000000 0 2 1 0 0.0462 H 1.1003051 0 125.388161 0 180.000000 0 2 1 3 0.0462 H 1.1003051 0 125.388161 0 90.000000 0 1 2 3 0.0463 H 1.1003051 0 125.388161 0 -90.000000 0 1 2 3 0.0463 3 1 4 5 6 3 2 4 5 6 GRADIENTS PULAY TRIPLET SYMMETRY NOANCI SCFCRT=1.D-9 1SCF RHF TRIPLET FORM OF D2D ETHYLENE CALCULATED HEAT OF FORMATION SHOULD BE = 45.136 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1003 C 1.4414372 1 0.000000 0 0.000000 0 1 0 0 -0.1003 H 1.0819773 1 120.961344 1 0.000000 0 2 1 0 0.0501 H 1.0819773 0 120.961344 0 180.000000 0 2 1 3 0.0501 H 1.0819773 0 120.961344 0 90.000000 0 1 2 3 0.0501 H 1.0819773 0 120.961344 0 -90.000000 0 1 2 3 0.0501 3 1 4 5 6 3 2 4 5 6 1SCF GRADIENTS PULAY UHF SYMMETRY UHF SINGLET FORM OF D2D ETHYLENE CALCULATED HEAT OF FORMATION SHOULD BE = 39.724 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0984 C 1.4336926 1 0.000000 0 0.000000 0 1 0 0 -0.0984 H 1.0845074 1 121.394373 1 0.000000 0 2 1 0 0.0492 H 1.0845074 0 121.394373 0 180.000000 0 2 1 3 0.0492 H 1.0845074 0 121.394373 0 90.000000 0 1 2 3 0.0492 H 1.0845074 0 121.394373 0 -90.000000 0 1 2 3 0.0492 3 1 4 5 6 3 2 4 5 6 1SCF GRADIENTS UHF HYPERFINE UHF DOUBLET CALCULATION OF ETHYL RADICAL CALCULATED HEAT OF FORMATION SHOULD BE = 10.546 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1337 C 1.4757902 1 0.000000 0 0.000000 0 1 0 0 0.0516 H 1.1108691 1 111.273246 1 0.000000 0 2 1 0 -0.0017 H 1.1095905 1 111.932278 1 120.651973 1 2 1 3 -0.0035 H 1.1123214 1 110.544048 1 -119.359340 1 2 1 3 -0.0001 H 1.0826801 1 121.170463 1 44.960564 1 1 2 3 0.0432 H 1.0822837 1 121.670325 1 -135.692653 1 1 2 3 0.0442 1SCF GRADIENTS TRIPLET PULAY UHF SYMMETRY UHF TRIPLET FORM OF D2D ETHYLENE CALCULATED HEAT OF FORMATION SHOULD BE = 41.668 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1000 C 1.4365573 1 0.000000 0 0.000000 0 1 0 0 -0.1000 H 1.0835106 1 121.240393 1 0.000000 0 2 1 0 0.0500 H 1.0835106 0 121.240393 0 180.000000 0 2 1 3 0.0500 H 1.0835106 0 121.240393 0 90.000000 0 1 2 3 0.0500 H 1.0835106 0 121.240393 0 -90.000000 0 1 2 3 0.0500 3 1 4 5 6 3 2 4 5 6 GRADIENTS MINDO3 PULAY SYMMETRY 1SCF PRECISE MINDO/3 CALCULATION OF FORMALDEHYDE CALCULATED HEAT OF FORMATION SHOULD BE = -25.561 XX 0.0000000 0 0.000000 0 0.000000 0 0 0 0 H 1.0000000 0 0.000000 0 0.000000 0 1 0 0 -0.1091 C 1.1230407 1 180.000000 0 0.000000 0 2 1 0 0.6433 H 1.1230407 0 106.817852 1 180.000000 0 3 2 1 -0.1091 O 1.1813937 1 126.591058 1 180.000000 0 3 2 4 -0.4250 XX 0.9800000 1 118.854084 1 180.000000 0 3 2 4 3 1 4 GRADIENTS MINDO3 PULAY PRECISE 1SCF MINDO/3 RHF CALCULATION OF ETHYL RADICAL CALCULATED HEAT OF FORMATION SHOULD BE = 21.786 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0871 C 1.4429517 1 0.000000 0 0.000000 0 1 0 0 0.1261 H 1.1104804 1 113.153612 1 0.000000 0 2 1 0 -0.0264 H 1.1109080 0 113.519501 0 120.856920 1 2 1 3 -0.0270 H 1.1123210 0 111.597420 0 -119.423264 0 2 1 3 -0.0264 H 1.0964460 0 122.469931 0 41.801964 0 1 2 3 0.0204 H 1.0964210 0 122.612868 0 -156.436885 0 1 2 3 0.0204 MMOK 1SCF GRADIENTS Formamide HEAT OF FORMATION SHOULD BE -39.381 KCAL H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.1889 N 0.9944977 1 0.000000 0 0.000000 0 1 0 0 -0.4301 H 0.9922729 1 115.682068 1 0.000000 0 2 1 0 0.1797 C 1.3889243 1 123.068510 1 -179.949693 1 2 1 3 0.3754 O 1.2269743 1 120.917841 1 -0.024668 1 4 2 1 -0.3704 H 1.1081569 1 114.505142 1 179.980350 1 4 2 1 0.0565 NOMM 1SCF GRADIENTS PM3 Formamide HEAT OF FORMATION SHOULD BE -41.823857 KCAL H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0600 N 0.9963059 1 0.000000 0 0.000000 0 1 0 0 -0.0312 H 0.9941621 1 113.012144 1 0.000000 0 2 1 0 0.0462 C 1.4128878 1 116.558032 1 135.656202 1 2 1 3 0.2141 O 1.2165264 1 118.501522 1 16.961282 1 4 2 1 -0.3693 H 1.1020440 1 117.785337 1 -167.664143 1 4 2 1 0.0803 1SCF GRADIENTS OPEN(1,1) SYMMETRY ESR DEPVAR=1.0 Methyl radical HEAT OF FORMATION SHOULD BE = 25.796 KCAL C 0.0000000 0 28.000000 0 0.000000 0 0 0 0 -0.0901 XX 1.0778455 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 1.0778455 0 90.003666 1 180.000000 0 1 2 3 0.0300 H 1.0778455 0 90.003666 0 60.000000 0 1 2 3 0.0300 H 1.0778455 0 90.003666 0 -60.000000 0 1 2 3 0.0300 2 1 4 5 2 18 6 4 2 5 6 SYMMETRY C.I.=(4,3) MICROS=16 1SCF GRADIENTS HEAT OF FORMATION SHOULD BE -6.830 N 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.2288 XX 1.0076190 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 1.0076190 0 113.280330 1 180.000000 0 1 2 3 0.0763 H 1.0076190 0 113.280330 0 60.000000 0 1 2 3 0.0763 H 1.0076190 0 113.280330 0 -60.000000 0 1 2 3 0.0763 2 1 4 5 6 4 2 5 6 MICROS 11101110 11101101 11101011 11100111 11011110 11011101 11011011 11010111 10111110 10111101 10111011 10110111 01111110 01111101 01111011 01110111 OPEN(2,2) MECI PRECISE GRADIENTS ROOT=2 SINGLET SYMMETRY T=25M 1SCF BIRADICAL FORM OF ETHYLENE HEAT OF FORMATION SHOULD BE = 106.651 KCAL C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0925 C 1.3297679 1 0.000000 0 0.000000 0 1 0 0 -0.0925 H 1.1003061 1 125.388703 1 0.000000 0 2 1 0 0.0463 H 1.1003061 0 125.388703 0 -179.998172 1 2 1 3 0.0463 H 1.1003061 0 125.388703 0 89.999422 0 1 2 3 0.0463 H 1.1003061 0 125.388703 0 -90.000682 0 1 2 3 0.0463 3 1 4 5 6 3 2 4 5 6 SCFCRT=1.D-9 PRECISE GRADIENTS + OPEN(2,2) TRIPLET SYMMETRY T=25M DEBUG 1SCF LARGE DEBUG MECI BIRADICAL FORM OF ETHYLENE CALCULATED HEAT OF FORMATION SHOULD BE = 45.1355 C 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1003 C 1.4411244 1 0.000000 0 0.000000 0 1 0 0 -0.1003 H 1.0814687 1 120.931175 1 0.000000 0 2 1 0 0.0502 H 1.0814687 0 120.931175 0 180.000000 0 2 1 3 0.0502 H 1.0814687 0 120.931175 0 90.000000 0 1 2 3 0.0502 H 1.0814687 0 120.931175 0 -90.000000 0 1 2 3 0.0502 3 1 4 5 6 3 2 4 5 6 mopac7-1.15/tests/force.dat0000644000175000017500000000712011053302062012471 00000000000000 FORCE TEST FOR FORCE CALCULATION ROOTS SHOULD BE WITHIN ONE CM**(-1) OF 1210, 1215, 1490, 2114, 3256, 3302. H 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0009 C 1.106143 1 0.000000 0 0.000000 0 1 0 0 0.2920 H 1.106078 1 113.047446 1 0.000000 0 2 1 0 -0.0008 O 1.216552 1 123.459523 1 180.002569 1 2 1 3 -0.2903 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 T=3 FORCE NOINTER NOXYZ SYMMETRY FORCE CALCULATION OF FORMALDEHYDE HIGHEST FREQUENCY SHOULD BE 3303 CM(-1) XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 H 1.000000 0 0.000000 0 0.000000 0 1 0 0 -0.0010 C 1.106004 1 180.000000 0 0.000000 0 2 1 0 0.2922 H 1.106004 0 112.940520 1 180.000000 0 3 2 1 -0.0010 O 1.216533 1 123.529882 1 180.000000 0 3 2 4 -0.2902 XX 0.970000 1 118.281126 1 180.000000 0 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, t=1h RESTART FORCE NOINTER NOXYZ SYMMETRY FORCE CALCULATION OF FORMALDEHYDE HIGHEST FREQUENCY SHOULD BE 3303 CM(-1) XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 H 1.000000 0 0.000000 0 0.000000 0 1 0 0 -0.0010 C 1.106004 1 180.000000 0 0.000000 0 2 1 0 0.2922 H 1.106004 0 112.940520 1 180.000000 0 3 2 1 -0.0010 O 1.216533 1 123.529882 1 180.000000 0 3 2 4 -0.2902 XX 0.970000 1 118.281126 1 180.000000 0 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, FORCE ISOTOPE thermo(298,298) rot=5 FORCE CALCULATION ON ETHYL RADICAL (NON-VARIATIONAL) HIGHEST FREQUENCY SHOULD BE 3450 +/- 1.0 CM(-1) C 0.000000 0 0.000000 0 0.000000 0 0 0 0 C 1.479146 1 0.000000 0 0.000000 0 1 0 0 H 1.109475 1 111.328433 1 0.000000 0 2 1 0 H 1.109470 1 111.753160 1 120.288410 1 2 1 3 H 1.109843 1 110.103163 1 240.205278 1 2 1 3 H 1.082055 1 121.214083 1 38.110989 1 1 2 3 H 1.081797 1 121.521232 1 217.450268 1 1 2 3 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 T=40 FORCE FORCE CALCULATION ON ETHYL RADICAL (NON-VARIATIONAL) HIGHEST FREQUENCY SHOULD BE 3450 +/- 1.0 CM(-1) C 0.000000 0 0.000000 0 0.000000 0 0 0 0 C 1.479146 1 0.000000 0 0.000000 0 1 0 0 H 1.109475 1 111.328433 1 0.000000 0 2 1 0 H 1.109470 1 111.753160 1 120.288410 1 2 1 3 H 1.109843 1 110.103163 1 240.205278 1 2 1 3 H 1.082055 1 121.214083 1 38.110989 1 1 2 3 H 1.081797 1 121.521232 1 217.450268 1 1 2 3 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 t=1d RESTART FORCE FORCE CALCULATION ON ETHYL RADICAL (NON-VARIATIONAL) HIGHEST FREQUENCY SHOULD BE 3450 +/-1.0 CM(-1) C 0.000000 0 0.000000 0 0.000000 0 0 0 0 C 1.479146 1 0.000000 0 0.000000 0 1 0 0 H 1.109475 1 111.328433 1 0.000000 0 2 1 0 H 1.109470 1 111.753160 1 120.288410 1 2 1 3 H 1.109843 1 110.103163 1 240.205278 1 2 1 3 H 1.082055 1 121.214083 1 38.110989 1 1 2 3 H 1.081797 1 121.521232 1 217.450268 1 1 2 3 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 mopac7-1.15/tests/elements.dat0000644000175000017500000010051011053302063013205 00000000000000 1SCF MINDO GRADIENTS PRECISE SYMMETRY METHANE HEAT OF FORMATION (MINDO/3) = -6.278, I.P.=13.30 TAKEN FROM "CORRECT" PROGRAM H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0096 C 1.1019593 1 0.000000 0 0.000000 0 1 0 0 0.0386 H 1.1019593 0 109.471221 0 0.000000 0 2 1 0 -0.0096 H 1.1019593 0 109.471221 0 -120.000000 0 2 1 3 -0.0096 H 1.1019593 0 109.471221 0 120.000000 0 2 1 3 -0.0096 2 1 3 4 5 1SCF GRADIENTS PRECISE SYMMETRY METHANE HEAT OF FORMATION (MNDO) = -11.947, I.P.=13.87 (DEWAR, M.J.S., THIEL, W., J.AM.CHEM.SOC. 99, 4907 1977.) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0176 C 1.1042316 1 0.000000 0 0.000000 0 1 0 0 0.0704 H 1.1042316 0 109.471221 0 0.000000 0 2 1 0 -0.0176 H 1.1042316 0 109.471221 0 -120.000000 0 2 1 3 -0.0176 H 1.1042316 0 109.471221 0 120.000000 0 2 1 3 -0.0176 2 1 3 4 5 1SCF GRADIENTS AM1 SYMMETRY METHANE HEAT OF FORMATION (AM1) = -8.777, I.P.= 13.31 (DEWAR, M.J.S., ET.AL. J.AM.CHEM.SOC., 107 3902 1985) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0665 C 1.1116115 1 0.000000 0 0.000000 0 1 0 0 -0.2659 H 1.1116115 0 109.471221 0 0.000000 0 2 1 0 0.0665 H 1.1116115 0 109.471221 0 -120.000000 0 2 1 3 0.0665 H 1.1116115 0 109.471221 0 120.000000 0 2 1 3 0.0665 2 1 3 4 5 PM3 PRECISE SYMMETRY 1SCF GRADIENTS METHANE HEAT OF FORMATION (PM3) = -13.015, I.P.=13.64 (TAKEN FROM "CORRECT" PROGRAM [MOPAC 4.20]) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0276 C 1.0870010 1 0.000000 0 0.000000 0 1 0 0 -0.1104 H 1.0870010 0 109.471221 0 0.000000 0 2 1 0 0.0276 H 1.0870010 0 109.471221 0 -120.000000 0 2 1 3 0.0276 H 1.0870010 0 109.471221 0 120.000000 0 2 1 3 0.0276 2 1 3 4 5 GRADIENTS PRECISE 1SCF Lithium Hydride HEAT OF FORMATION (MNDO)= 23.206 Kcal/mol Li 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4382 H 1.3761355 1 0.000000 0 0.000000 0 1 0 0 -0.4382 1SCF GRADIENTS PRECISE BEO HEAT OF FORMATION (MNDO)= 38.582, I.P.=11.23 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) Be 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4463 O 1.3354373 1 0.000000 0 0.000000 0 1 0 0 -0.4463 1SCF GRADIENTS PRECISE PM3 BEO HEAT OF FORMATION (PM3)= 53.045, I.P.=10.17 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) Be 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.6261 O 1.3039522 1 0.000000 0 0.000000 0 1 0 0 -0.6261 1SCF GRADIENTS PRECISE SYMMETRY MINDO/3 BF3 HEAT OF FORMATION (MINDO/3) = -270.161, I.P.=12.35 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) B 0.0000000 0 0.000000 0 0.000000 0 0 0 0 1.3345 XX 1.3023343 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 F 1.3023343 0 90.000000 0 180.000000 0 1 2 3 -0.4448 F 1.3023343 0 90.000000 0 60.000000 0 1 2 3 -0.4448 F 1.3023343 0 90.000000 0 -60.000000 0 1 2 3 -0.4448 2 1 4 5 6 1SCF GRADIENTS PRECISE SYMMETRY BF3 HEAT OF FORMATION (MNDO) = -260.976, I.P.=16.22 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) B 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.5270 XX 1.3160242 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 F 1.3160242 0 90.000000 0 180.000000 0 1 2 3 -0.1757 F 1.3160242 0 90.000000 0 60.000000 0 1 2 3 -0.1757 F 1.3160242 0 90.000000 0 -60.000000 0 1 2 3 -0.1757 2 1 4 5 6 AM1 1SCF GRADIENTS PRECISE SYMMETRY BF3 HEAT OF FORMATION (AM1) = -272.147, I.P.=14.94 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) B 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4411 XX 1.3063979 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 F 1.3063979 0 90.000000 0 180.000000 0 1 2 3 -0.1470 F 1.3063979 0 90.000000 0 60.000000 0 1 2 3 -0.1470 F 1.3063979 0 90.000000 0 -60.000000 0 1 2 3 -0.1470 2 1 4 5 6 1SCF MINDO GRADIENTS PRECISE SYMMETRY METHANE HEAT OF FORMATION (MINDO/3) = -6.278, I.P.=13.30 TAKEN FROM "CORRECT" PROGRAM H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0096 C 1.1019593 1 0.000000 0 0.000000 0 1 0 0 0.0386 H 1.1019593 0 109.471221 0 0.000000 0 2 1 0 -0.0096 H 1.1019593 0 109.471221 0 -120.000000 0 2 1 3 -0.0096 H 1.1019593 0 109.471221 0 120.000000 0 2 1 3 -0.0096 2 1 3 4 5 1SCF GRADIENTS PRECISE SYMMETRY METHANE HEAT OF FORMATION (MNDO) = -11.947, I.P.=13.87 (DEWAR, M.J.S., THIEL, W., J.AM.CHEM.SOC. 99, 4907 1977.) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0176 C 1.1042316 1 0.000000 0 0.000000 0 1 0 0 0.0704 H 1.1042316 0 109.471221 0 0.000000 0 2 1 0 -0.0176 H 1.1042316 0 109.471221 0 -120.000000 0 2 1 3 -0.0176 H 1.1042316 0 109.471221 0 120.000000 0 2 1 3 -0.0176 2 1 3 4 5 1SCF GRADIENTS AM1 SYMMETRY METHANE HEAT OF FORMATION (AM1) = -8.777, I.P.= 13.31 (DEWAR, M.J.S., ET.AL. J.AM.CHEM.SOC., 107 3902 1985) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0665 C 1.1116115 1 0.000000 0 0.000000 0 1 0 0 -0.2659 H 1.1116115 0 109.471221 0 0.000000 0 2 1 0 0.0665 H 1.1116115 0 109.471221 0 -120.000000 0 2 1 3 0.0665 H 1.1116115 0 109.471221 0 120.000000 0 2 1 3 0.0665 2 1 3 4 5 PM3 PRECISE SYMMETRY 1SCF GRADIENTS METHANE HEAT OF FORMATION (PM3) = -13.015, I.P.=13.64 (TAKEN FROM "CORRECT" PROGRAM [MOPAC 4.20]) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0276 C 1.0870010 1 0.000000 0 0.000000 0 1 0 0 -0.1104 H 1.0870010 0 109.471221 0 0.000000 0 2 1 0 0.0276 H 1.0870010 0 109.471221 0 -120.000000 0 2 1 3 0.0276 H 1.0870010 0 109.471221 0 120.000000 0 2 1 3 0.0276 2 1 3 4 5 1SCF GRADIENTS SYMMETRY PRECISE MINDO/3 AMMONIA HEAT OF FORMATION (MINDO/3) = -9.135, I.P.=10.07 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) N 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1669 XX 1.0312340 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 1.0312340 0 114.343228 1 180.000000 0 1 2 3 0.0556 H 1.0312340 0 114.343228 0 60.000000 0 1 2 3 0.0556 H 1.0312340 0 114.343228 0 -60.000000 0 1 2 3 0.0556 2 1 4 5 6 4 2 5 6 1SCF GRADIENTS SYMMETRY PRECISE AMMONIA HEAT OF FORMATION (MNDO) = -6.371, I.P.=11.19 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) N 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.2268 XX 1.0073111 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 1.0073111 0 113.414743 1 180.000000 0 1 2 3 0.0756 H 1.0073111 0 113.414743 0 60.000000 0 1 2 3 0.0756 H 1.0073111 0 113.414743 0 -60.000000 0 1 2 3 0.0756 2 1 4 5 6 4 2 5 6 1SCF GRADIENTS AM1 SYMMETRY PRECISE AMMONIA HEAT OF FORMATION (AM1) = -7.283, I.P.=10.42 (DEWAR, M.J.S., ET.AL. J.AM.CHEM.SOC., 107 3902 1985) N 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.3957 XX 0.9978448 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 0.9978448 0 109.855124 1 180.000000 0 1 2 3 0.1319 H 0.9978448 0 109.855124 0 60.000000 0 1 2 3 0.1319 H 0.9978448 0 109.855124 0 -60.000000 0 1 2 3 0.1319 2 1 4 5 6 4 2 5 6 1SCF GRADIENTS PM3 SYMMETRY PRECISE AMMONIA HEAT OF FORMATION (PM3) = -3.066, I.P.=9.6956 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 4.20]) N 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0065 XX 0.9994640 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 0.9994640 0 110.865210 1 180.000000 0 1 2 3 -0.0022 H 0.9994640 0 110.865210 0 60.000000 0 1 2 3 -0.0022 H 0.9994640 0 110.865210 0 -60.000000 0 1 2 3 -0.0022 2 1 4 5 6 4 2 5 6 GRADIENTS SYMMETRY PRECISE 1SCF MINDO3 CO2 HEAT OF FORMATION (MINDO/3) = -95.733, I.P.=12.74 TAKEN FROM "CORRECT" PROGRAM O 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.4758 C 1.1798152 1 0.000000 0 0.000000 0 1 0 0 0.9517 O 1.1798152 0 180.000000 0 180.000000 0 2 1 0 -0.4758 2 1 3 1SCF GRADIENTS SYMMETRY PRECISE CARBON DIOXIDE HEAT OF FORMATION (MNDO)= -75.079, I.P.=12.79 (DEWAR, M.J.S., THIEL, W., J.AM.CHEM.SOC. 99, 4907 1977.) O 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.2240 C 1.1862049 1 0.000000 0 0.000000 0 1 0 0 0.4480 O 1.1862049 0 180.000000 0 0.000000 0 2 1 0 -0.2240 2 1 3 1SCF GRADIENTS AM1 SYMMETRY PRECISE CARBON DIOXIDE HEAT OF FORMATION (AM1) = -79.829, I.P.=13.21 (DEWAR, M.J.S., ET.AL. J.AM.CHEM.SOC., 107 3902 1985) O 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.2057 C 1.1893594 1 0.000000 0 0.000000 0 1 0 0 0.4114 O 1.1893594 0 180.000000 0 0.000000 0 2 1 0 -0.2057 2 1 3 1SCF GRADIENTS PM3 SYMMETRY PRECISE CARBON DIOXIDE HEAT OF FORMATION (PM3) = -85.039, I.P.=12.735 TAKEN FROM 'CORRECT' PROGRAM [MOPAC 4.20]) O 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.2588 C 1.1806109 1 0.000000 0 0.000000 0 1 0 0 0.5177 O 1.1806109 0 180.000000 0 180.000000 0 2 1 0 -0.2588 2 1 3 GRADIENTS SYMMETRY MINDO/3 1SCF CF4 HEAT OF FORMATION (MINDO/3) = -223.856, I.P.=13.49 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) F 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.4330 C 1.3032006 1 0.000000 0 0.000000 0 1 0 0 1.7320 F 1.3032006 0 109.471000 0 0.000000 0 2 1 0 -0.4330 F 1.3032006 0 109.471000 0 -120.000000 0 2 1 3 -0.4330 F 1.3032006 0 109.471000 0 120.000000 0 2 1 3 -0.4330 2 1 3 4 5 1SCF GRADIENTS SYMMETRY CF4 HEAT OF FORMATION (MNDO) = -214.177, I.P.=16.81 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) F 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.2039 C 1.3469465 1 0.000000 0 0.000000 0 1 0 0 0.8157 F 1.3469465 0 109.471000 0 0.000000 0 2 1 0 -0.2039 F 1.3469465 0 109.471000 0 -120.000000 0 2 1 3 -0.2039 F 1.3469465 0 109.471000 0 120.000000 0 2 1 3 -0.2039 2 1 3 4 5 1SCF GRADIENTS SYMMETRY AM1 CF4 HEAT OF FORMATION (AM1) = -225.709, I.P. = 15.32 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) F 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1442 C 1.3575716 1 0.000000 0 0.000000 0 1 0 0 0.5767 F 1.3575716 0 109.471000 0 0.000000 0 2 1 0 -0.1442 F 1.3575716 0 109.471000 0 -120.000000 0 2 1 3 -0.1442 F 1.3575716 0 109.471000 0 120.000000 0 2 1 3 -0.1442 2 1 3 4 5 1SCF GRADIENTS PM3 SYMMETRY CF4 HEAT OF FORMATION (PM3) = -225.091, I.P.=16.79 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) F 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.1148 C 1.3367553 1 0.000000 0 0.000000 0 1 0 0 0.4592 F 1.3367553 0 109.471000 0 0.000000 0 2 1 0 -0.1148 F 1.3367553 0 109.471000 0 -120.000000 0 2 1 3 -0.1148 F 1.3367553 0 109.471000 0 120.000000 0 2 1 3 -0.1148 2 1 3 4 5 1SCF GRADIENTS PM3 SYMMETRY MgF2 HEAT OF FORMATION (PM3) = -160.680 I.P.=13.889 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.0]) F 0.0000000 0 23.000000 0 0.000000 0 0 0 0 -0.3525 Mg 1.7623532 1 0.000000 0 0.000000 0 1 0 0 0.7051 F 1.7623532 0 110.177698 1 180.000000 0 2 1 0 -0.3525 2 1 3 1SCF GRADIENTS PRECISE ALUMINUM FLUORIDE HEAT OF FORM'N (MNDO)= -83.560, I.P.=8.62 (DAVIS, ET.AL. J. COMP. CHEM. 4 443, 1981.) Al 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4020 F 1.5602339 1 0.000000 0 0.000000 0 1 0 0 -0.4020 1SCF GRADIENTS PRECISE AM1 ALUMINUM FLUORIDE HEAT OF FORM'N (AM1) = -77.868 I.P.=8.90 DEWAR AND HOLDER, ORGANOMETALLICS, 9, 508-511 (1990) Al 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.3295 F 1.5580834 1 0.000000 0 0.000000 0 1 0 0 -0.3295 1SCF GRADIENTS PM3 PRECISE ALUMINUM FLUORIDE HEAT OF FORM'N (PM3) = -50.129 I.P.=9.29 (TAKEN FROM MOPAC 4.20) Al 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.2164 F 1.6521053 1 0.000000 0 0.000000 0 1 0 0 -0.2164 GRADIENTS PRECISE MINDO/3 1SCF SIH HEAT OF FORMATION (MINDO/3)= 82.879, I.P.=7.44 FROM "CORRECT" PROGRAM Si 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.1421 H 1.5053410 1 0.000000 0 0.000000 0 1 0 0 -0.1421 1SCF GRADIENTS PRECISE SIH HEAT OF FORMATION (MNDO)= 90.219, I.P.=5.97 ORGANOMETALLICS 5 375 (1986) Si 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4169 H 1.3743513 1 0.000000 0 0.000000 0 1 0 0 -0.4169 AM1 PRECISE 1SCF GRADIENTS SiH HEAT OF FORMATION SHOULD BE 89.818 KCAL (TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.2794 Si 1.4536433 1 0.000000 0 0.000000 0 1 0 0 -0.7206 1SCF GRADIENTS PM3 PRECISE SIH HEAT OF FORMATION (PM3) = 94.571, I.P.=7.07 (TAKEN FROM "CORRECT" PROGRAM [MOPAC 4.20]) Si 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.2514 H 1.5050665 1 0.000000 0 0.000000 0 1 0 0 -0.2514 GRADIENTS PRECISE SYMMETRY MINDO/3 1SCF PF3 HEAT OF FORMATION (MINDO/3) = 2.522, I.P.=9.843 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) P 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0964 XX 1.4175870 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 1.4175870 0 62.357890 1 180.000000 0 1 2 3 0.0321 H 1.4175870 0 62.357890 0 60.000000 0 1 2 3 0.0321 H 1.4175870 0 62.357890 0 -60.000000 0 1 2 3 0.0321 2 1 4 5 6 4 2 5 6 GRADIENTS PRECISE SYMMETRY 1SCF PH3 HEAT OF FORMATION (MNDO) = +3.936 I.P.=11.34 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) P 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.2680 XX 1.3397630 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 1.3397630 0 59.171866 1 180.000000 0 1 2 3 -0.0893 H 1.3397630 0 59.171866 0 60.000000 0 1 2 3 -0.0893 H 1.3397630 0 59.171866 0 -60.000000 0 1 2 3 -0.0893 2 1 4 5 6 4 2 5 6 AM1 GRADIENTS PRECISE SYMMETRY 1SCF AM1 HEAT OF FORMATION (AM1) = +10.196 I.P.=10.42 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) P 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0396 XX 1.3632745 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 1.3632745 0 59.450121 1 180.000000 0 1 2 3 0.0132 H 1.3632745 0 59.450121 0 60.000000 0 1 2 3 0.0132 H 1.3632745 0 59.450121 0 -60.000000 0 1 2 3 0.0132 2 1 4 5 6 4 2 5 6 GRADIENTS PM3 PRECISE SYMMETRY 1SCF PH3 HEAT OF FORMATION (PM3) = +0.223 I.P.=8.674 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 4.20]) P 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4898 XX 1.3238810 1 0.000000 0 0.000000 0 1 0 0 XX 1.0000000 0 120.000000 0 0.000000 0 2 1 0 H 1.3238810 0 59.922627 1 180.000000 0 1 2 3 -0.1633 H 1.3238810 0 59.922627 0 60.000000 0 1 2 3 -0.1633 H 1.3238810 0 59.922627 0 -60.000000 0 1 2 3 -0.1633 2 1 4 5 6 4 2 5 6 GRADIENTS 1SCF MINDO SYMMETRY H2S HEAT OF FORMATION (MINDO/3) = -2.584 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.1383 S 1.3369590 1 0.000000 0 0.000000 0 1 0 0 -0.2767 H 1.3369590 0 99.619050 1 0.000000 0 2 1 0 0.1383 2 1 3 GRADIENTS SYMMETRY 1SCF H2S HEAT OF FORMATION (MNDO) = 3.831 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0338 S 1.2992680 1 0.000000 0 0.000000 0 1 0 0 0.0676 H 1.2992680 0 98.034913 1 0.000000 0 2 1 0 -0.0338 2 1 3 1SCF GRADIENTS SYMMETRY AM1 H2S HEAT OF FORMATION (AM1) = 1.206 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0483 S 1.3225899 1 0.000000 0 0.000000 0 1 0 0 -0.0967 H 1.3225899 0 95.503378 1 0.000000 0 2 1 0 0.0483 2 1 3 1SCF GRADIENTS PM3 SYMMETRY H2S HEAT OF FORMATION (PM3) = -0.913 I.P.=9.628 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 4.20]) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 -0.0161 S 1.2903390 1 0.000000 0 0.000000 0 1 0 0 0.0323 H 1.2903390 0 93.513427 1 0.000000 0 2 1 0 -0.0161 2 1 3 1SCF MINDO/3 GRADIENTS PRECISE HCl HEAT OF FORMATION (MINDO/3)=-21.057, I.P.=12.11 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.2248 Cl 1.2298671 1 0.000000 0 0.000000 0 1 0 0 -0.2248 1SCF GRADIENTS PRECISE HCl HEAT OF FORMATION (MNDO)=-15.259, I.P.=13.00 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.1829 Cl 1.3481939 1 0.000000 0 0.000000 0 1 0 0 -0.1829 1SCF GRADIENTS AM1 PRECISE HCl HEAT OF FORMATION (AM1)= -24.608, I.P.= 12.33 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.1681 Cl 1.2835617 1 0.000000 0 0.000000 0 1 0 0 -0.1681 1SCF GRADIENTS PM3 PRECISE HCl HEAT OF FORMATION (PM3) = -20.465, I.P.=11.06 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 4.20]) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0970 Cl 1.2675466 1 0.000000 0 0.000000 0 1 0 0 -0.0970 1SCF MNDO GRADIENTS PRECISE Dimethylzinc HEAT OF FORMATION (MNDO) = 19.876, I.P.=10.542 Zn 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.3698 C 1.8839020 1 0.000000 0 0.000000 0 1 0 0 -0.1531 C 1.8839020 1 180.000000 1 0.000000 0 1 2 0 -0.1531 H 1.1105540 1 111.319038 1 0.000000 1 2 1 3 -0.0106 H 1.1105540 1 111.319038 1 120.000000 1 3 1 4 -0.0106 H 1.1105540 1 111.319038 1 120.000000 1 2 1 4 -0.0106 H 1.1105540 1 111.319038 1 -120.000000 1 2 1 4 -0.0106 H 1.1105540 1 111.319038 1 -120.000000 1 3 1 4 -0.0106 H 1.1105540 1 111.319038 1 0.000000 1 3 1 4 -0.0106 SYMMETRY 1SCF AM1 GRADIENTS PRECISE Dimethylzinc HEAT OF FORMATION (AM1) = 19.842, I.P.=9.738 Zn 0.0000000 0 12.000000 0 0.000000 0 0 0 0 0.5041 C 1.8991284 1 0.000000 0 0.000000 0 1 0 0 -0.5090 C 1.8991284 0 180.000000 0 0.000000 0 1 2 0 -0.5090 H 1.1144983 1 109.222291 1 0.000000 0 2 1 3 0.0857 H 1.1144983 0 109.222291 0 120.000000 0 3 1 4 0.0857 H 1.1144983 0 109.222291 0 120.000000 0 2 1 4 0.0857 H 1.1144983 0 109.222291 0 -120.000000 0 2 1 4 0.0857 H 1.1144983 0 109.222291 0 -120.000000 0 3 1 4 0.0857 H 1.1144983 0 109.222291 0 120.000000 0 3 1 8 0.0857 2 1 3 4 1 5 6 7 8 9 4 2 5 6 7 8 9 PM3 1SCF GRADIENTS SYMMETRY Zn(Me)2 HEAT OF FORMATION (PM3) = 8.208 I.P.=10.282 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.0]) Zn 0.0000000 0 12.000000 0 0.000000 0 0 0 0 0.2462 C 1.9374110 1 0.000000 0 0.000000 0 1 0 0 -0.3101 C 1.9374110 0 180.000000 0 180.000000 0 1 2 0 -0.3101 H 1.0952406 1 109.381903 1 -169.819541 1 2 1 3 0.0623 H 1.0952371 1 109.382653 1 -69.910708 1 3 1 4 0.0623 H 1.0952339 1 109.382574 1 120.001583 1 2 1 4 0.0623 H 1.0952386 1 109.378431 1 -119.997715 1 2 1 4 0.0623 H 1.0952380 1 109.379670 1 170.090429 1 3 1 4 0.0623 H 1.0952414 1 109.380883 1 -119.997445 1 3 1 8 0.0623 2 1 3 1SCF GRADIENTS PM3 SYMMETRY GaCl3 HEAT OF FORMATION (PM3) = -79.665 I.P.=11.918 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.0]) Cl 0.0000000 0 27.000000 0 0.000000 0 0 0 0 -0.3498 Ga 1.8938618 1 0.000000 0 0.000000 0 1 0 0 1.0494 Cl 1.8938618 0 119.999625 1 0.000000 0 2 1 0 -0.3498 Cl 1.8938618 0 119.999625 0 -179.999724 1 2 1 3 -0.3498 2 1 3 4 3 2 4 1SCF GRADIENTS PRECISE GERMANIUM FLUORIDE HEAT OF FORM'N (MNDO)=-16.389, I.P.=6.00 Ge 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.5274 F 1.7038791 1 0.000000 0 0.000000 0 1 0 0 -0.5274 1SCF AM1 GRADIENTS PRECISE GERMANIUM FLUORIDE HEAT OF FORM'N (AM1)= -19.735, I.P.=7.196 Ge 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4169 F 1.6567951 1 0.000000 0 0.000000 0 1 0 0 -0.4169 1SCF PM3 GRADIENTS PRECISE GERMANIUM FLUORIDE HEAT OF FORM'N (PM3)= -3.332, I.P.=10.856 Ge 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.2057 F 1.7110624 1 0.000000 0 0.000000 0 1 0 0 -0.2057 1SCF GRADIENTS PM3 SYMMETRY AsH3 HEAT OF FORMATION (PM3) = 12.682 I.P.=9.909 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) H 0.0000000 0 12.000000 0 0.000000 0 0 0 0 -0.1230 As 1.5202769 1 0.000000 0 0.000000 0 1 0 0 0.3691 H 1.5202769 0 94.228408 1 0.000000 0 2 1 0 -0.1230 H 1.5202769 0 94.228408 0 94.565278 1 2 1 3 -0.1230 2 1 3 4 3 2 4 1SCF GRADIENTS PM3 SYMMETRY SeCl2 HEAT OF FORMATION (PM3) = -38.011 I.P.=9.548 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) Cl 0.0000000 0 12.000000 0 0.000000 0 0 0 0 -0.0491 Se 2.1637888 1 0.000000 0 0.000000 0 1 0 0 0.0982 Cl 2.1637888 0 99.674382 1 0.000000 0 2 1 0 -0.0491 2 1 3 1SCF GRADIENTS PRECISE HBr HEAT OF FORMATION (MNDO)=3.642, I.P. = 12.10 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.1082 Br 1.4396202 1 0.000000 0 0.000000 0 1 0 0 -0.1082 1SCF GRADIENTS AM1 PRECISE HBr HEAT OF FORMATION (AM1)= -10.502, I.P.=11.46 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0871 Br 1.4210939 1 0.000000 0 0.000000 0 1 0 0 -0.0871 1SCF GRADIENTS PM3 PRECISE HBr HEAT OF FORMATION (PM3) = 5.312 I.P.=12.13 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 4.20]) H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.1235 Br 1.4707126 1 0.000000 0 0.000000 0 1 0 0 -0.1235 1SCF GRADIENTS PM3 SYMMETRY CdCl2 HEAT OF FORMATION (PM3) =-48.586 I.P.=11.297 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) Cl 0.0000000 0 12.000000 0 0.000000 0 0 0 0 -0.6788 Cd 2.2252540 1 0.000000 0 0.000000 0 1 0 0 1.3576 Cl 2.2252540 0 179.999507 1 0.000000 0 2 1 0 -0.6788 2 1 3 1SCF GRADIENTS PM3 SYMMETRY InCl3 HEAT OF FORMATION (PM3) = -72.782 I.P.=10.836 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) Cl 0.0000000 0 27.000000 0 0.000000 0 0 0 0 -0.0100 In 2.2812226 1 0.000000 0 0.000000 0 1 0 0 0.0301 Cl 2.2812226 0 120.000568 1 0.000000 0 2 1 0 -0.0100 Cl 2.2812226 0 120.000568 0 179.999620 1 2 1 3 -0.0100 2 1 3 4 3 2 4 1SCF GRADIENTS PRECISE SNF HEAT OF FORMATION (MNDO)= -20.423, I.P.= 7.06 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) Sn 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4676 F 1.8630613 1 0.000000 0 0.000000 0 1 0 0 -0.4676 1SCF PM3 GRADIENTS PRECISE SNF HEAT OF FORMATION (PM3)= -17.474, I.P.= 7.28 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) Sn 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.3758 F 1.9277109 1 0.000000 0 0.000000 0 1 0 0 -0.3758 1SCF GRADIENTS PM3 SYMMETRY SbCl3 HEAT OF FORMATION (PM3) = -72.438 I.P.=11.006 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) Cl 0.0000000 0 27.000000 0 0.000000 0 0 0 0 -0.2999 Sb 2.3202383 1 0.000000 0 0.000000 0 1 0 0 0.8998 Cl 2.3202383 0 97.025723 1 0.000000 0 2 1 0 -0.2999 Cl 2.3202383 0 97.025723 0 -98.004356 1 2 1 3 -0.2999 2 1 3 4 3 2 4 1SCF GRADIENTS PM3 SYMMETRY TeH2 HEAT OF FORMATION (PM3) = 23.766 I.P.=8.804 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) H 0.0000000 0 15.000000 0 0.000000 0 0 0 0 -0.0634 Te 1.6752840 1 0.000000 0 0.000000 0 1 0 0 0.1268 H 1.6752840 0 88.308549 1 180.000000 0 2 1 0 -0.0634 2 1 3 1SCF GRADIENTS PRECISE ICL HEAT OF FORMATION (MNDO)= -6.700, I.P.=11.58 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) I 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.2147 Cl 2.2623801 1 0.000000 0 0.000000 0 1 0 0 -0.2147 AM1 PRECISE GRADIENTS 1SCF ICL HEAT OF FORMATION (AM1) = -4.600, I.P.=11.08 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) I 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.1738 Cl 2.2184513 1 0.000000 0 0.000000 0 1 0 0 -0.1738 PM3 PRECISE 1SCF GRADIENTS ICL HEAT OF FORMATION (PM3) = 10.779, I.P.=9.74 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 5.00]) I 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0116 Cl 2.1916378 1 0.000000 0 0.000000 0 1 0 0 -0.0116 1SCF GRADIENTS HgCl2 HEAT OF FORMATION (MND0)= -36.932 I.P.=12.599 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) Cl 0.0000000 0 12.000000 0 0.000000 0 0 0 0 -0.3154 Hg 2.2674477 1 0.000000 0 0.000000 0 1 0 0 0.6307 Cl 2.2674477 1 179.998898 1 180.000000 0 2 1 0 -0.3154 1SCF GRADIENTS AM1 HgCl2 HEAT OF FORMATION (AM1)= -44.833 I.P.=11.929 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) Cl 0.0000000 0 12.000000 0 0.000000 0 0 0 0 -0.3226 Hg 2.2388527 1 0.000000 0 0.000000 0 1 0 0 0.6452 Cl 2.2388527 1 179.997918 1 180.000000 0 2 1 0 -0.3226 1SCF GRADIENTS PM3 HgCl2 HEAT OF FORMATION (PM3) = -32.655 I.P.=10.775 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) Cl 0.0000000 0 12.000000 0 0.000000 0 0 0 0 -0.3439 Hg 2.2446750 1 0.000000 0 0.000000 0 1 0 0 0.6878 Cl 2.2446761 1 179.990824 1 0.000000 0 2 1 0 -0.3439 PRECISE 1SCF GRADIENTS PBF HEAT OF FORMATION (MNDO)= -22.575, I.P.= 7.45 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) Pb 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.4818 F 1.9952996 1 0.000000 0 0.000000 0 1 0 0 -0.4818 PRECISE PM3 1SCF GRADIENTS PBF HEAT OF FORMATION (PM3)= -20.958, I.P.= 7.36 (H.O.F. TAKEN FROM "CORRECT" PROGRAM) Pb 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.3959 F 2.0276037 1 0.000000 0 0.000000 0 1 0 0 -0.3959 1SCF GRADIENTS PM3 SYMMETRY BiCl3 HEAT OF FORMATION (PM3) =-42.615 I.P.=10.551 (H.O.F. TAKEN FROM "CORRECT" PROGRAM [MOPAC 6.00]) Cl 0.0000000 0 12.000000 0 0.000000 0 0 0 0 -0.3177 Bi 2.4194239 1 0.000000 0 0.000000 0 1 0 0 0.9530 Cl 2.4194239 0 99.935484 1 0.000000 0 2 1 0 -0.3177 Cl 2.4194239 0 99.935484 0 -102.035208 1 2 1 3 -0.3177 2 1 3 4 3 2 4 mopac7-1.15/tests/test_ef_.dat0000644000175000017500000000043411053302063013165 00000000000000 Geo-ok xyz NOINTER ef Test of optimizing all cartesian coordinates Heat should be -56.993 H 0.0 1 0.0 1 0.0 1 C 1.1 1 0.0 1 0.0 1 F 1.6 1 1.2 1 0.0 1 Cl 1.6 1 -0.8 1 -1.4 1 Br 1.6 1 -1.0 1 1.5 1 mopac7-1.15/tests/paras.dat0000644000175000017500000000265211053302062012506 00000000000000 USS H -11.396427 ZS H 1.188078 BETAS H -6.173787 ALP H 2.882324 FN11 H 0.122796 FN12 H 0.005090 FN13 H -0.018336 FN21 H 5.000000 FN22 H 5.000000 FN23 H 2.000000 FN31 H 1.2 FN32 H 1.8 FN33 H 2.1 USS C -52.028658 UPP C -39.614239 ZS C 1.808665 ZP C 1.685116 BETAS C -15.715783 BETAP C -7.719283 ALP C 2.648274 FN11 C 0.011355 FN12 C 0.045924 FN13 C -0.020061 FN14 C -0.001260 FN21 C 5. FN22 C 5. FN23 C 5. FN24 C 5. FN31 C 1.6 FN32 C 1.85 FN33 C 2.05 FN34 C 2.65 USS O -97.83 UPP O -78.262380 ZS O 3.108032 ZP O 2.524039 BETAS O -29.272773 BETAP O -29.272773 ALP O 4.455371 FN11 O 0.280962 FN12 O 0.081430 FN21 O 5. FN22 O 7. FN31 O 0.847918 FN32 O 1.445071 GSS H 12.848 GSS C 12.230 GSP C 11.470 GPP C 11.080 GP2 C 9.840 HSP C 2.430 GSS O 15.420 GSP O 14.480 GPP O 14.520 GP2 O 12.980 HSP O 3.940 mopac7-1.15/tests/nch34+.dat0000644000175000017500000000267511053302062012377 00000000000000 AM1 PRECISE CHARGE=+1 DEBUG VERBOSE GRAD COMPFG EPS=78.4 N(CH3)4+, Heat of formation should be 101.1 according to JCS, Perkin Trans. II, 1993 pp. 799-805 N 0.000000 0 0.000000 0 0.000000 0 0 0 0 C 1.540000 1 0.000000 0 0.000000 0 1 0 0 H 1.122530 1 109.471221 1 0.000000 0 2 1 0 H 1.122530 1 109.471221 1 120.000000 1 2 1 3 H 1.122530 1 109.471221 1 -120.000000 1 2 1 3 C 1.493820 1 109.471221 1 -60.000000 1 1 2 3 H 1.122530 1 109.471221 1 180.000000 1 6 1 2 H 1.122530 1 109.471221 1 -60.000000 1 6 1 2 H 1.122530 1 109.471221 1 60.000000 1 6 1 2 C 1.493820 1 109.471221 1 180.000000 1 1 2 3 H 1.122530 1 109.471221 1 180.000000 1 10 1 2 H 1.122530 1 109.471221 1 -60.000000 1 10 1 2 H 1.122530 1 109.471221 1 60.000000 1 10 1 2 C 1.493820 1 109.471221 1 60.000000 1 1 2 3 H 1.122530 1 109.471221 1 60.000000 1 14 1 2 H 1.122530 1 109.471221 1 180.000000 1 14 1 2 H 1.122530 1 109.471221 1 -60.000000 1 14 1 2 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 mopac7-1.15/tests/geometry.dat0000644000175000017500000002554011053302063013235 00000000000000 SYMMETRY geo-ok ef GEOMETRY OPTIMIZATION OF C2H4 USING EIGENVECTOR FOLLOWING FINAL HEAT OF FORMATION SHOULD BE 15.405 KCAL USING 9 SCF'S C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0920 C 0.700000 1 0.000000 0 0.000000 0 1 0 0 -0.0930 H 1.100000 1 120.000000 1 0.000000 0 2 1 0 0.0462 H 1.100000 0 120.000000 0 180.000000 0 2 1 3 0.0462 H 1.100000 0 120.000000 0 0.000000 0 1 2 3 0.0461 H 1.100000 0 120.000000 0 180.000000 0 1 2 3 0.0465 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 3, 1, 5, 3, 1, 6, 3, 2, 4, 3, 2, 5, 3, 2, 6, GEOMETRY OPTIMIZATION OF CH3 USING DFP (NON-VARIATIONALLY OPTIMIZED) HEAT OF FORMATION SHOULD BE 25.796 C 0.000000 0 0.000000 0 0.000000 0 0 0 0 H 1.000000 1 0.000000 0 0.000000 0 0 0 0 H 1.400000 1 110.000000 1 0.000000 0 1 2 0 H 1.200000 1 120.000000 0 180.000000 0 1 2 3 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 NLLSQ SYMMETRY DUMP=6 GRADIENT MINIMIZATION OF C2H4 USING NLLSQ FINAL HEAT OF FORMATION SHOULD BE 15.405 KCAL IN 24 SCF'S C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0920 C 1.300000 1 0.000000 0 0.000000 0 1 0 0 -0.0930 H 1.100000 1 120.000000 1 0.000000 0 2 1 0 0.0462 H 1.100000 0 120.000000 0 180.000000 0 2 1 3 0.0462 H 1.100000 0 120.000000 0 0.000000 0 1 2 3 0.0461 H 1.100000 0 120.000000 0 180.000000 0 1 2 3 0.0465 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 3, 1, 5, 3, 1, 6, 3, 2, 4, 3, 2, 5, 3, 2, 6, PRECISE SYMMETRY REACTION PATH, C=O STRETCH HEAT OF FORMATION SHOULD BE -32.88, -32.87, -32.65, -32.18, -30.56, -28.12 XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 H 1.000000 0 0.000000 0 0.000000 0 1 0 0 -0.0010 C 1.106004 1 180.000000 0 0.000000 0 2 1 0 0.2922 H 1.106004 0 112.940520 1 180.000000 0 3 2 1 -0.0010 O 1.216533 -1 123.529882 1 180.000000 0 3 2 4 -0.2902 XX 0.970000 1 118.281126 1 180.000000 0 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 1.22 1.23 1.24 1.26 1.28 BAR=0.05 SADDLE SADDLE CALCULATION, CH2O - HCOH FINAL HEAT OF FORMATION SHOULD BE MORE THAN 75 KCAL/MOL XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 O 1.008000 1 0.000000 0 0.000000 0 1 0 0 -0.2904 C 1.217034 1 97.664390 1 0.000000 0 2 1 0 0.2921 H 1.105388 1 123.492803 1 0.000000 1 3 2 1 -0.0008 H 1.305403 1 80.509198 1 180.014148 1 3 2 1 -0.0008 XX 0.958000 1 117.593577 1 180.000000 1 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 O 1.008000 1 0.000000 0 0.000000 0 1 0 0 -0.2115 C 1.299808 1 107.868467 1 0.000000 0 2 1 0 0.0071 H 1.109933 1 111.309147 1 0.000000 1 3 2 1 -0.0137 H 1.886033 1 27.738198 1 180.000000 1 3 2 1 0.2181 XX 0.958000 1 117.593577 1 180.000000 1 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 XYZ BAR=0.2 SADDLE SADDLE CALCULATION, CH2O - HCOH Heat of formation should be 75.7 Kcal/mol, gradient: < 10. XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 O 1.008000 1 0.000000 0 0.000000 0 1 0 0 -0.2904 C 1.217034 1 97.664390 1 0.000000 0 2 1 0 0.2921 H 1.105388 1 123.492803 1 0.000000 1 3 2 1 -0.0008 H 1.305403 1 100.509198 1 180.014148 1 3 2 1 -0.0008 XX 0.958000 1 117.593577 1 180.000000 1 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 O 1.008000 1 0.000000 0 0.000000 0 1 0 0 -0.2115 C 1.299808 1 107.868467 1 0.000000 0 2 1 0 0.0071 H 1.109933 1 111.309147 1 0.000000 1 3 2 1 -0.0137 H 1.886033 1 27.738198 1 180.000000 1 3 2 1 0.2181 XX 0.938000 1 116.447661 1 180.000000 1 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 PRECISE SYMMETRY POINT=6 STEP=0.01 REACTION PATH, C=O STRETCH HEAT OF FORMATION SHOULD BE -32.83, -32.87, -32.65, -32.18, -31.48, -30.56 XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 H 1.000000 0 0.000000 0 0.000000 0 1 0 0 -0.0010 C 1.106004 1 180.000000 0 0.000000 0 2 1 0 0.2922 H 1.106004 0 112.940520 1 180.000000 0 3 2 1 -0.0010 O 1.21 -1 123.529882 1 180.000000 0 3 2 4 -0.2902 XX 0.970000 1 118.281126 1 180.000000 0 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, SYMMETRY STEP1=0.02 STEP2=1.0 POINT1=10 POINT2=11 REACTION PATH, C=O STRETCH O C 1.2 1 H 0.9 -1 117 -1 H 0.9 0 130 0 180 0 2 1 3 3 1 4 3 2 4 T=0.7 SYMMETRY GEOMETRY OPTIMIZATION OF C2H4 USING DFP C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0920 C 1.300000 1 0.000000 0 0.000000 0 1 0 0 -0.0930 H 1.100000 1 120.000000 1 0.000000 0 2 1 0 0.0462 H 1.100000 0 120.000000 0 180.000000 0 2 1 3 0.0462 H 1.100000 0 120.000000 0 0.000000 0 1 2 3 0.0461 H 1.100000 0 120.000000 0 180.000000 0 1 2 3 0.0465 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 3, 1, 5, 3, 1, 6, 3, 2, 4, 3, 2, 5, 3, 2, 6, t=1h RESTART SYMMETRY GEOMETRY OPTIMIZATION OF C2H4 USING DFP FINAL HEAT OF FORMATION SHOULD BE 15.405 KCAL IN 8 SCF'S C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0920 C 1.300000 1 0.000000 0 0.000000 0 1 0 0 -0.0930 H 1.100000 1 120.000000 1 0.000000 0 2 1 0 0.0462 H 1.100000 0 120.000000 0 180.000000 0 2 1 3 0.0462 H 1.100000 0 120.000000 0 0.000000 0 1 2 3 0.0461 H 1.100000 0 120.000000 0 180.000000 0 1 2 3 0.0465 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 3, 1, 5, 3, 1, 6, 3, 2, 4, 3, 2, 5, 3, 2, 6, T=3 NLLSQ SYMMETRY GRADIENT MINIMIZATION OF C2H4 USING NLLSQ C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0920 C 1.300000 1 0.000000 0 0.000000 0 1 0 0 -0.0930 H 1.100000 1 120.000000 1 0.000000 0 2 1 0 0.0462 H 1.100000 0 120.000000 0 180.000000 0 2 1 3 0.0462 H 1.100000 0 120.000000 0 0.000000 0 1 2 3 0.0461 H 1.100000 0 120.000000 0 180.000000 0 1 2 3 0.0465 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 3, 1, 5, 3, 1, 6, 3, 2, 4, 3, 2, 5, 3, 2, 6, t=1d RESTART NLLSQ SYMMETRY GRADIENT MINIMIZATION OF C2H4 USING NLLSQ FINAL HEAT OF FORMATION SHOULD BE 15.405 KCAL C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0920 C 1.300000 1 0.000000 0 0.000000 0 1 0 0 -0.0930 H 1.100000 1 120.000000 1 0.000000 0 2 1 0 0.0462 H 1.100000 0 120.000000 0 180.000000 0 2 1 3 0.0462 H 1.100000 0 120.000000 0 0.000000 0 1 2 3 0.0461 H 1.100000 0 120.000000 0 180.000000 0 1 2 3 0.0465 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 3, 1, 5, 3, 1, 6, 3, 2, 4, 3, 2, 5, 3, 2, 6, T=1.5 SIGMA SYMMETRY GRADIENT MINIMIZATION OF C2H4 USING SIGMA, DONE WITH RESTARTS (SHOULD TAKE ABOUT 12 SCF CALCULATIONS) C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0920 C 1.300000 1 0.000000 0 0.000000 0 1 0 0 -0.0930 H 1.100000 1 120.000000 1 0.000000 0 2 1 0 0.0462 H 1.100000 0 120.000000 0 180.000000 0 2 1 3 0.0462 H 1.100000 0 120.000000 0 0.000000 0 1 2 3 0.0461 H 1.100000 0 120.000000 0 180.000000 0 1 2 3 0.0465 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 3, 1, 5, 3, 1, 6, 3, 2, 4, 3, 2, 5, 3, 2, 6, RESTART SIGMA SYMMETRY t=60m GRADIENT MINIMIZATION OF C2H4 USING SIGMA, DONE WITH RESTARTS FINAL HEAT OF FORMATION SHOULD BE 15.405 KCAL 13 SCF CALC'NS C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0920 C 1.300000 1 0.000000 0 0.000000 0 1 0 0 -0.0930 H 1.100000 1 120.000000 1 0.000000 0 2 1 0 0.0462 H 1.100000 0 120.000000 0 180.000000 0 2 1 3 0.0462 H 1.100000 0 120.000000 0 0.000000 0 1 2 3 0.0461 H 1.100000 0 120.000000 0 180.000000 0 1 2 3 0.0465 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 3, 1, 4, 3, 1, 5, 3, 1, 6, 3, 2, 4, 3, 2, 5, 3, 2, 6, IRC=1 DRC=3.0 T=30 KINETIC=10 DRC/IRC STARTING FROM INITIAL GEOMETRY C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0902 H 1.078283 1 0.000000 0 0.000000 0 1 0 0 0.0302 H 1.078224 1 120.066593 1 0.000000 0 1 2 0 0.0301 H 1.078207 1 120.000000 0 180.000000 0 1 2 3 0.0300 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 RESTART DRC=3 T=10 DRC/IRC STARTING FROM INITIAL GEOMETRY C 0.000000 0 0.000000 0 0.000000 0 0 0 0 -0.0902 H 1.078283 1 0.000000 0 0.000000 0 1 0 0 0.0302 H 1.078224 1 120.066593 1 0.000000 0 1 2 0 0.0301 H 1.078207 1 120.000000 0 180.000000 0 1 2 3 0.0300 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 mopac7-1.15/tests/test_cos.dat0000644000175000017500000000107311053302062013217 00000000000000 debug NSPA=60 GRADIENTS 1SCF EPS=78.4 AM1 CHARGE=1 Ammonia (solution phase geometry) Heat of Formation should be 59.766 kcal/mol and the gradient should be small. H 0.00000000 0 0.0000000 0 0.0000000 0 0 0 0 0.2668 N 1.01578458 1 0.0000000 0 0.0000000 0 1 0 0 -0.0683 H 1.01578458 1 109.4712210 1 0.0000000 0 2 1 0 0.2672 H 1.01578458 1 109.4712210 1 -120.0000000 1 2 1 3 0.2676 H 1.01578458 1 109.4712210 1 120.0000000 1 2 1 3 0.2668 mopac7-1.15/tests/oldgeo.dat0000644000175000017500000000244111053302061012644 00000000000000 SYMMETRY gnorm=0 PRECISE Formaldehyde, for Demonstration Purposes O C 1.2 1 H 1.1 1 120 1 H 1.1 0 120 0 180 0 2 1 3 3 1 4 3 2 4 oldgeo force isotope Do a force calculation on previous geometry oldgeo am1 nllsq gnorm=0 DERIV DEBUG DCART Calculate the AM1 geometry, starting with the MNDO optimized geometry oldgeo force AM1 Do a FORCE calculation on the AM1 geometry oldgeo restart force Re-do the FORCE calculation using the MNDO hessian oldgeo pm3 ef gnorm=0 Calculate the PM3 geometry, starting with the AM1 geometry oldgeo force PM3 Do a FORCE calculation on the PM3 geometry charge=1 Formaldehyde, for Demonstration Purposes O C 1.2 1 H 1.1 1 120 1 H 1.2 1 120 1 150 1 2 1 3 oldgeo force CHARGE=1 FORCE calculation on CH2O(+), RHF oldgeo uhf CHARGE=1 Optimize the CH2O(+) geometry, UHF, starting with RHF geometry oldgeo force CHARGE=1 uhf Do a force calculation on UHF geometry. charge=1 T=1M DUMP=1 UHF Formaldehyde, for Demonstration Purposes O C 1.2 1 H 1.1 1 120 1 H 1.2 1 120 1 150 1 2 1 3 oldgeo force CHARGE=1 t=1h dump=23m RHF force calculation oldgeo uhf RESTART CHARGE=1 t=1h Restart geometry optimization in UHF oldgeo force CHARGE=1 uhf mopac7-1.15/tests/keys.dat0000644000175000017500000000532311053302061012350 00000000000000 1SCF C.I.=2 MECI LARGE VECTORS DENSITY & HCORE FOCK ENPART ITRY=40 MULLIK LOCAL PI BONDS 1electron DEBUG GRADIENTS COMPFG denout CALCULATED HEAT OF FORMATION SHOULD BE = -32.995 KCAL XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 H 1.000000 0 0.000000 0 0.000000 0 1 0 0 -0.0009 C 1.106060 1 180.000000 0 180.000000 0 2 1 0 0.2921 H 1.106071 1 112.948031 1 180.000000 0 3 2 1 -0.0010 O 1.216607 1 123.532498 1 180.000000 0 3 2 4 -0.2902 XX 0.978174 1 118.749470 1 180.000000 0 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 1SCF T=23M GRADIENTS MOLDAT PL EIGS ITER TIMES C.I.=3 MECI VECTORS ENPART + setup=mnrsk3.key DEBUG large 1SCF - TEST MNDO CALCULATION OF FORMALDEHYDE +large CALCULATED HEAT OF FORMATION SHOULD BE = -39.819 KCAL H 0.0000000 0 0.000000 0 0.000000 0 0 0 0 0.0033 C 1.1038875 1 0.000000 0 0.000000 0 1 0 0 0.2397 H 1.1038853 1 113.887246 1 0.000000 0 2 1 0 0.0033 O 1.2268927 1 123.055522 1 -179.999565 1 2 1 3 -0.2463 SPIN LOCAL ENPART UHF TRIPLET 1SCF - UHF TRIPLET TEST MNDO CALCULATION OF FORMALDEHYDE CALCULATED HEAT OF FORMATION SHOULD BE = 15.712 XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 H 1.000000 0 0.000000 0 0.000000 0 1 0 0 0.1199 C 1.087803 1 180.000000 0 180.000000 0 2 1 0 -0.1975 H 1.086619 1 121.677600 1 -179.315636 1 3 2 1 0.1190 O 1.298843 1 119.396428 1 177.755070 1 3 2 4 -0.0413 XX 0.960000 1 117.708168 1 179.427042 1 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 0scf aigout symmetry Formaldehyde Verify that Gaussian Z-matrix is correct in the output o c 1.2 1 h 1.1 1 120 1 h 1.1 0 120 0 180 0 2 1 3 3 1 4 3 2 4 POLAR DEBUG ANALYT GNORM=0.02 T=30M LINMIN EXTERNAL=PARAS.DAT PM3 & graph search dep External param's turn PM3 into AM1 HEAT: -31.4977 XX 0.000000 0 0.000000 0 0.000000 0 0 0 0 H 1.000000 0 0.000000 0 0.000000 0 1 0 0 -0.0011 C 1.106118 1 180.000000 0 180.000000 0 2 1 0 0.2923 H 1.106135 1 112.894927 1 180.000000 0 3 2 1 -0.0011 O 1.216395 1 123.560741 1 180.000000 0 3 2 4 -0.2901 XX 2.166435 0 150.770198 0 0.000000 0 3 2 4 0 0.000000 0 0.000000 0 0.000000 0 0 0 0 mopac7-1.15/tests/test_gre.dat0000644000175000017500000000214511053302061013210 00000000000000 1scf PM3 PRECISE GREENF VECT TEST FOR MOPAC 7.0 FOR J.J.P.STEWART dimethoxy-s-tetrazine method OVGF(PM3) C N 1.37642 1 1 N 1.28602 1 118.36407 1 2 1 C 1.37955 1 118.51027 1 0.00317 1 3 2 1 N 1.37625 1 123.12897 1 -0.00211 1 4 3 2 N 1.28617 1 118.35611 1 -0.00012 1 5 4 3 O 1.35392 1 112.34420 1 179.99563 1 1 2 3 O 1.35390 1 124.53025 1 180.00024 1 4 3 2 C 1.41426 1 117.59432 1 179.99799 1 7 1 2 H 1.09535 1 112.24034 1 62.17779 1 9 7 1 H 1.09534 1 112.23293 1 -62.21587 1 9 7 1 H 1.09377 1 101.50305 1 179.98192 1 9 7 1 C 1.41425 1 117.59651 1 -0.00905 1 8 4 3 H 1.09535 1 112.23477 1 62.20685 1 13 8 4 H 1.09535 1 112.23416 1 -62.19005 1 13 8 4 H 1.09378 1 101.50562 1 180.01014 1 13 8 4 0 0 0 20 19 20 27 0.0001 0 0 0 0 1 mopac7-1.15/compile0000755000175000017500000000707211053302063011124 00000000000000#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2003-11-09.00 # Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand `-c -o'. Remove `-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file `INSTALL'. Report bugs to . EOF exit 0 ;; -v | --v*) echo "compile $scriptversion" exit 0 ;; esac prog=$1 shift ofile= cfile= args= while test $# -gt 0; do case "$1" in -o) # configure might choose to run compile as `compile cc -o foo foo.c'. # So we do something ugly here. ofile=$2 shift case "$ofile" in *.o | *.obj) ;; *) args="$args -o $ofile" ofile= ;; esac ;; *.c) cfile=$1 args="$args $1" ;; *) args="$args $1" ;; esac shift done if test -z "$ofile" || test -z "$cfile"; then # If no `-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # `.c' file was seen then we are probably linking. That is also # ok. exec "$prog" $args fi # Name of file we expect compiler to create. cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'` # Create the lock directory. # Note: use `[/.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d while true; do if mkdir $lockdir > /dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir $lockdir; exit 1" 1 2 15 # Run the compile. "$prog" $args status=$? if test -f "$cofile"; then mv "$cofile" "$ofile" fi rmdir $lockdir exit $status # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: mopac7-1.15/config.guess0000755000175000017500000012753410756112266012111 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-01-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: mopac7-1.15/configure0000755000175000017500000251742511274260542011501 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for mopac7 1.15. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell autoconf@gnu.org about your system, echo including any error possibly output before this echo message } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1 && unset CDPATH if test -z "$ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if (echo_test_string=`eval $cmd`) 2>/dev/null && echo_test_string=`eval $cmd` && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='mopac7' PACKAGE_TARNAME='mopac7' PACKAGE_VERSION='1.15' PACKAGE_STRING='mopac7 1.15' PACKAGE_BUGREPORT='ghemical-devel@bioinformatics.org' ac_unique_file="fortran/mopac7lib.f" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datarootdir datadir sysconfdir sharedstatedir localstatedir includedir oldincludedir docdir infodir htmldir dvidir pdfdir psdir libdir localedir mandir DEFS ECHO_C ECHO_N ECHO_T LIBS build_alias host_alias target_alias INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA am__isrc CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE F77 FFLAGS ac_ct_F77 AR SED GREP EGREP LN_S ECHO RANLIB DSYMUTIL NMEDIT CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP LIBTOOL LIBOBJS LTLIBOBJS' ac_subst_files='' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS F77 FFLAGS CPP CXX CXXFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/[-.]/_/g'` eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute directory names. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { echo "$as_me: error: Working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$0" || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures mopac7 1.15 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/mopac7] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of mopac7 1.15:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF mopac7 configure 1.15 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by mopac7 $as_me 1.15, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then set x "$CONFIG_SITE" elif test "x$prefix" != xNONE; then set x "$prefix/share/config.site" "$prefix/etc/config.site" else set x "$ac_default_prefix/share/config.site" \ "$ac_default_prefix/etc/config.site" fi shift for ac_site_file do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.10' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm -f conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi { echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { echo "$as_me:$LINENO: result: $MKDIR_P" >&5 echo "${ECHO_T}$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$AWK" && break done { echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } SET_MAKE= else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='mopac7' VERSION='1.15' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ################################################################## ## also see fortran/Makefile.am when you change the version number!!! ################################################################## # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6; } if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6; } if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Get any build/host and enable/disable flags now. # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # Checks for programs. # ^^^^^^^^^^^^^^^^^^^^ ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # # List of possible output files, starting from the most likely. # The algorithm is not robust to junk in `.', hence go to wildcards (a.*) # only as a last resort. b.out is created by i960 compilers. ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' # # The IRIX 6 linker writes into existing files which may not be # executable, retaining their permissions. Remove them first so a # subsequent execution test works. ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6; } if test -z "$ac_file"; then echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6; } { echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext { echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6; } ;; xno) { echo "$as_me:$LINENO: result: unsupported" >&5 echo "${ECHO_T}unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi { echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then { echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_F77" && break done if test "x$ac_ct_F77" = x; then F77="" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac F77=$ac_ct_F77 fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; } if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= { echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; } if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. { echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done IFS=$as_save_IFS fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ##AC_PROG_RANLIB # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $AR in [\\/]* | ?:[\\/]*) ac_cv_path_AR="$AR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_AR" && ac_cv_path_AR="ar" ;; esac fi AR=$ac_cv_path_AR if test -n "$AR"; then { echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Extract the first word of "sh", so it can be a program name with args. set dummy sh; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_path_SHELL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $SHELL in [\\/]* | ?:[\\/]*) ac_cv_path_SHELL="$SHELL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_SHELL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SHELL" && ac_cv_path_SHELL="/bin/sh" ;; esac fi SHELL=$ac_cv_path_SHELL if test -n "$SHELL"; then { echo "$as_me:$LINENO: result: $SHELL" >&5 echo "${ECHO_T}$SHELL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi { echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; } if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$lt_ac_prog$ac_exec_ext"; }; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done fi SED=$lt_cv_path_SED { echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6; } { echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Extract the first word of "grep ggrep" to use in msg output if test -z "$GREP"; then set dummy grep ggrep; ac_prog_name=$2 if test "${ac_cv_path_GREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS fi GREP="$ac_cv_path_GREP" if test -z "$GREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 echo "${ECHO_T}$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else # Extract the first word of "egrep" to use in msg output if test -z "$EGREP"; then set dummy egrep; ac_prog_name=$2 if test "${ac_cv_path_EGREP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS fi EGREP="$ac_cv_path_EGREP" if test -z "$EGREP"; then { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } else { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi { echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac { echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; } if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi { echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6; } NM="$lt_cv_path_NM" { echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6; } fi { echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 4752 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_try") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } else # Is the header compilable? { echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6; } # Is the header present? { echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------------------------ ## ## Report this to ghemical-devel@bioinformatics.org ## ## ------------------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval echo '${'$as_ac_Header'}'` { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. echo "$as_me:$LINENO: checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; } GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CXXFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu fi # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments { echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; } else { echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6; } fi # Check for command to grab the raw symbol name followed by C symbol from nm. { echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; linux* | k*bsd*-gnu) if test "$host_cpu" = ia64; then symcode='[ABCDGIRSTW]' lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6; } else { echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6; } fi { echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6; } if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e 1s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_DSYMUTIL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 echo "${ECHO_T}$DSYMUTIL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 echo "${ECHO_T}$ac_ct_DSYMUTIL" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_NMEDIT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { echo "$as_me:$LINENO: result: $NMEDIT" >&5 echo "${ECHO_T}$NMEDIT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_NMEDIT="nmedit" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 echo "${ECHO_T}$ac_ct_NMEDIT" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&5 echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools whose name does not start with the host triplet. If you think this configuration is useful to you, please write to autoconf@gnu.org." >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi { echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 echo $ECHO_N "checking for -single_module linker flag... $ECHO_C" >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. echo "int foo(void){return 1;}" > conftest.c $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib ${wl}-single_module conftest.c if test -f libconftest.dylib; then lt_cv_apple_cc_single_mod=yes rm -rf libconftest.dylib* fi rm conftest.c fi fi { echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 echo "${ECHO_T}$lt_cv_apple_cc_single_mod" >&6; } { echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 echo $ECHO_N "checking for -exported_symbols_list linker flag... $ECHO_C" >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_cv_ld_exported_symbols_list=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 echo "${ECHO_T}$lt_cv_ld_exported_symbols_list" >&6; } case $host_os in rhapsody* | darwin1.[0123]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}" fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil="~$DSYMUTIL \$lib || :" else _lt_dsymutil= fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic was given. if test "${with_pic+set}" = set; then withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm -r conftest* lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7549: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7553: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic='-qnocommon' lt_prog_compiler_wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; esac ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7839: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:7843: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $rm -r conftest* LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:7943: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:7947: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6; } if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; *) tmp_sharedflag='-shared' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs=no else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs=no ;; esac fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi { echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`echo $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec" fi sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec" fi sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6; } if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= { echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi ;; *) { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) { echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; } if test "${ac_cv_func_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_shl_load || defined __stub___shl_load choke me #endif int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6; } if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; } if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else { echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; } if test "${ac_cv_func_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_dlopen || defined __stub___dlopen choke me #endif int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6; } if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; } if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; } if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; } if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; } if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which library types will actually be built { echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6; } { echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6; } { echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6; } # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ compiler_lib_search_dirs \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ fix_srcfile_path \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e 1s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The directories searched by this compiler when creating a shared # library compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" # Check whether --with-tags was given. if test "${with_tags+set}" = set; then withval=$with_tags; tagnames="$withval" fi if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi if test -z "$LTCFLAGS"; then eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`" fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= compiler_lib_search_dirs_CXX= # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; } else { echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; } fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6; } else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" if test "$GXX" = yes ; then output_verbose_link_cmd='echo' archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_CXX=no ;; esac fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc*) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd='echo' else ld_shlibs_CXX=no fi ;; osf3*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. # So that behaviour is only enabled if SCOABSPATH is set to a # non-empty value in the environment. Most likely only useful for # creating official distributions of packages. # This is a hack until libtool officially supports absolute path # names for shared libraries. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext compiler_lib_search_dirs_CXX= if test -n "$compiler_lib_search_path_CXX"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= { echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_CXX='-qnocommon' lt_prog_compiler_wl_CXX='-Wl,' ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc* | ecpc*) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:12821: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:12825: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $rm -r conftest* LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:12925: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:12929: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6; } if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' { echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; } ;; esac fi ;; esac { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec" fi sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec" fi sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var_CXX" || \ test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ compiler_lib_search_dirs_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ fix_srcfile_path_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The directories searched by this compiler when creating a shared # library compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` { echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; } { echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6; } { echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6; } { echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6; } GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= { echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_F77='-qnocommon' lt_prog_compiler_wl_F77='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-fpic' lt_prog_compiler_static_F77='-Bstatic' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' lt_prog_compiler_wl_F77='' ;; esac ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; rdos*) lt_prog_compiler_static_F77='-non_shared' ;; solaris*) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_F77='-Qoption ld ';; *) lt_prog_compiler_wl_F77='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; unicos*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_can_build_shared_F77=no ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14523: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:14527: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_F77" >&6; } if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\" { echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_static_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_static_works_F77=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_F77=yes fi else lt_cv_prog_compiler_static_works_F77=yes fi fi $rm -r conftest* LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_static_works_F77" >&6; } if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then : else lt_prog_compiler_static_F77= fi { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:14627: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:14631: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6; } if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_F77=no fi ;; interix[3-9]*) hardcode_direct_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_F77='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; *) tmp_sharedflag='-shared' ;; esac archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs_F77=no else ld_shlibs_F77=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_F77=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = no; then runpath_var= hardcode_libdir_flag_spec_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_f77_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77='$convenience' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi[45]*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_F77='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_F77=no hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='' link_all_deplibs_F77=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_F77="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_F77="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_F77=no ;; esac fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; *) hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs_F77=no fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_F77='${wl}-z,text' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_F77='${wl}-z,text' allow_undefined_flag_F77='${wl}-z,nodefs' archive_cmds_need_lc_F77=no hardcode_shlibpath_var_F77=no hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi { echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6; } test "$ld_shlibs_F77" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 pic_flag=$lt_prog_compiler_pic_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; } ;; esac fi ;; esac { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec" fi sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec" fi sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var_F77" || \ test "X$hardcode_automatic_F77" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi { echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6; } if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ compiler_lib_search_dirs_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ fix_srcfile_path_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The directories searched by this compiler when creating a shared # library compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no old_archive_cmds_GCJ=$old_archive_cmds lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' { echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16847: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16851: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= { echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; darwin*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files case $cc_basename in xlc*) lt_prog_compiler_pic_GCJ='-qnocommon' lt_prog_compiler_wl_GCJ='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-fpic' lt_prog_compiler_static_GCJ='-Bstatic' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' lt_prog_compiler_wl_GCJ='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' lt_prog_compiler_wl_GCJ='' ;; esac ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; rdos*) lt_prog_compiler_static_GCJ='-non_shared' ;; solaris*) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl_GCJ='-Qoption ld ';; *) lt_prog_compiler_wl_GCJ='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; unicos*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_can_build_shared_GCJ=no ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi { echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then { echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17137: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:17141: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_GCJ" >&6; } if test x"$lt_cv_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\" { echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_static_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_static_works_GCJ=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_GCJ=yes fi else lt_cv_prog_compiler_static_works_GCJ=yes fi fi $rm -r conftest* LDFLAGS="$save_LDFLAGS" fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_static_works_GCJ" >&6; } if test x"$lt_cv_prog_compiler_static_works_GCJ" = xyes; then : else lt_prog_compiler_static_GCJ= fi { echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; } if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:17241: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:17245: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . 2>&5 $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi { echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6; } if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; } runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_GCJ=no fi ;; interix[3-9]*) hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_GCJ='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_addflag= case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; *) tmp_sharedflag='-shared' ;; esac archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi link_all_deplibs_GCJ=no else ld_shlibs_GCJ=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs_GCJ=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = no; then runpath_var= hardcode_libdir_flag_spec_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ='$convenience' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi[45]*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) case $host_os in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup' ;; esac fi ;; esac archive_cmds_need_lc_GCJ=no hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='' link_all_deplibs_GCJ=yes if test "$GCC" = yes ; then output_verbose_link_cmd='echo' archive_cmds_GCJ="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_GCJ="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_GCJ="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_GCJ="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else case $cc_basename in xlc*) output_verbose_link_cmd='echo' archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) ld_shlibs_GCJ=no ;; esac fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: case $host_cpu in hppa*64*|ia64*) hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; *) hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs_GCJ=no fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else wlarc='' archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_GCJ='${wl}-z,text' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_GCJ='${wl}-z,text' allow_undefined_flag_GCJ='${wl}-z,nodefs' archive_cmds_need_lc_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi { echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6; } test "$ld_shlibs_GCJ" = no && can_build_shared=no # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; } $rm conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ pic_flag=$lt_prog_compiler_pic_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; } ;; esac fi ;; esac { echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' shlibpath_overrides_runpath=no else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' shlibpath_overrides_runpath=yes case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec" fi sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec" fi sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi { echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; } hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ test "X$hardcode_automatic_GCJ" = "Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi { echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6; } if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ compiler_lib_search_dirs_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ fix_srcfile_path_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The directories searched by this compiler when creating a shared # library compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $rm conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $rm -r conftest* # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ compiler_lib_search_dirs_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ fix_srcfile_path_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # LTCC compiler flags. LTCFLAGS=$lt_LTCFLAGS # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The directories searched by this compiler when creating a shared # library compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion case "$F77" in g77*) FFLAGS="$FFLAGS -fno-automatic" ;; gfortran*) FFLAGS="$FFLAGS -std=legacy -fno-automatic" ;; esac # Checks for libraries. # ^^^^^^^^^^^^^^^^^^^^^ { echo "$as_me:$LINENO: checking for acos in -lm" >&5 echo $ECHO_N "checking for acos in -lm... $ECHO_C" >&6; } if test "${ac_cv_lib_m_acos+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char acos (); int main () { return acos (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && $as_test_x conftest$ac_exeext; then ac_cv_lib_m_acos=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_acos=no fi rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { echo "$as_me:$LINENO: result: $ac_cv_lib_m_acos" >&5 echo "${ECHO_T}$ac_cv_lib_m_acos" >&6; } if test $ac_cv_lib_m_acos = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi # Here is a check whether we have libf2c or libg2c (Jean Brefort). # If libf2c is present, it is used and both the library and the executable is built. # If only libg2c is present, then only the library is built and the executable is not built. ############################################################################################## #saved_flags=$CFLAGS #CFLAGS="-Dmain=MAIN__" #have_f2c="no" #AC_CHECK_LIB([f2c], [main], [have_f2c="yes"; CFLAGS=$saved_flags], # [# If not found, try -lg2c: # CFLAGS=$saved_flags; # AC_CHECK_LIB([g2c], [main], , # # Still not found, drop out: # AC_MSG_ERROR([Cannot find either f2c or g2c library])] # ) #) #AM_CONDITIONAL(HAVE_F2C,test "$have_f2c" = "yes") # If we only have libg2c present, we must make a local copy of f2c.h # header file that includes g2c.h file and contains some definitions. ############################################################################################## #if test "$have_f2c" = "no"; then # echo "#include " > src/f2c.h # echo "#define VOID void" >> src/f2c.h # AC_MSG_WARN(mopac7 program cannot be built without f2c) # AC_MSG_WARN(a local copy of f2c.h header has been created in src/) #else # rm -f src/f2c.h #fi # Checks for header files. # ^^^^^^^^^^^^^^^^^^^^^^^^ # Checks for typedefs, structures, and compiler characteristics. # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ { echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi { echo "$as_me:$LINENO: checking for inline" >&5 echo $ECHO_N "checking for inline... $ECHO_C" >&6; } if test "${ac_cv_c_inline+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_inline=$ac_kw else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 echo "${ECHO_T}$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac # Checks for library functions. # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ac_config_files="$ac_config_files Makefile fortran/Makefile fortran/c_src_bak/Makefile fortran/c_src_f2c/Makefile tests/Makefile libmopac7.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { echo "$as_me:$LINENO: updating cache $cache_file" >&5 echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) as_nl=' ' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir fi echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by mopac7 $as_me 1.15, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ mopac7 config.status 1.15 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2006 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 CONFIG_SHELL=$SHELL export CONFIG_SHELL exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "fortran/Makefile") CONFIG_FILES="$CONFIG_FILES fortran/Makefile" ;; "fortran/c_src_bak/Makefile") CONFIG_FILES="$CONFIG_FILES fortran/c_src_bak/Makefile" ;; "fortran/c_src_f2c/Makefile") CONFIG_FILES="$CONFIG_FILES fortran/c_src_f2c/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "libmopac7.pc") CONFIG_FILES="$CONFIG_FILES libmopac7.pc" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # # Set up the sed scripts for CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "$CONFIG_FILES"; then _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF SHELL!$SHELL$ac_delim PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim PACKAGE_NAME!$PACKAGE_NAME$ac_delim PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim PACKAGE_STRING!$PACKAGE_STRING$ac_delim PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim exec_prefix!$exec_prefix$ac_delim prefix!$prefix$ac_delim program_transform_name!$program_transform_name$ac_delim bindir!$bindir$ac_delim sbindir!$sbindir$ac_delim libexecdir!$libexecdir$ac_delim datarootdir!$datarootdir$ac_delim datadir!$datadir$ac_delim sysconfdir!$sysconfdir$ac_delim sharedstatedir!$sharedstatedir$ac_delim localstatedir!$localstatedir$ac_delim includedir!$includedir$ac_delim oldincludedir!$oldincludedir$ac_delim docdir!$docdir$ac_delim infodir!$infodir$ac_delim htmldir!$htmldir$ac_delim dvidir!$dvidir$ac_delim pdfdir!$pdfdir$ac_delim psdir!$psdir$ac_delim libdir!$libdir$ac_delim localedir!$localedir$ac_delim mandir!$mandir$ac_delim DEFS!$DEFS$ac_delim ECHO_C!$ECHO_C$ac_delim ECHO_N!$ECHO_N$ac_delim ECHO_T!$ECHO_T$ac_delim LIBS!$LIBS$ac_delim build_alias!$build_alias$ac_delim host_alias!$host_alias$ac_delim target_alias!$target_alias$ac_delim INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim INSTALL_DATA!$INSTALL_DATA$ac_delim am__isrc!$am__isrc$ac_delim CYGPATH_W!$CYGPATH_W$ac_delim PACKAGE!$PACKAGE$ac_delim VERSION!$VERSION$ac_delim ACLOCAL!$ACLOCAL$ac_delim AUTOCONF!$AUTOCONF$ac_delim AUTOMAKE!$AUTOMAKE$ac_delim AUTOHEADER!$AUTOHEADER$ac_delim MAKEINFO!$MAKEINFO$ac_delim install_sh!$install_sh$ac_delim STRIP!$STRIP$ac_delim INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim mkdir_p!$mkdir_p$ac_delim AWK!$AWK$ac_delim SET_MAKE!$SET_MAKE$ac_delim am__leading_dot!$am__leading_dot$ac_delim AMTAR!$AMTAR$ac_delim am__tar!$am__tar$ac_delim am__untar!$am__untar$ac_delim build!$build$ac_delim build_cpu!$build_cpu$ac_delim build_vendor!$build_vendor$ac_delim build_os!$build_os$ac_delim host!$host$ac_delim host_cpu!$host_cpu$ac_delim host_vendor!$host_vendor$ac_delim host_os!$host_os$ac_delim CC!$CC$ac_delim CFLAGS!$CFLAGS$ac_delim LDFLAGS!$LDFLAGS$ac_delim CPPFLAGS!$CPPFLAGS$ac_delim ac_ct_CC!$ac_ct_CC$ac_delim EXEEXT!$EXEEXT$ac_delim OBJEXT!$OBJEXT$ac_delim DEPDIR!$DEPDIR$ac_delim am__include!$am__include$ac_delim am__quote!$am__quote$ac_delim AMDEP_TRUE!$AMDEP_TRUE$ac_delim AMDEP_FALSE!$AMDEP_FALSE$ac_delim AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim CCDEPMODE!$CCDEPMODE$ac_delim am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim F77!$F77$ac_delim FFLAGS!$FFLAGS$ac_delim ac_ct_F77!$ac_ct_F77$ac_delim AR!$AR$ac_delim SED!$SED$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim LN_S!$LN_S$ac_delim ECHO!$ECHO$ac_delim RANLIB!$RANLIB$ac_delim DSYMUTIL!$DSYMUTIL$ac_delim NMEDIT!$NMEDIT$ac_delim CPP!$CPP$ac_delim CXX!$CXX$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF CEOF$ac_eof _ACEOF ac_delim='%!_!# ' for ac_last_try in false false false false false :; do cat >conf$$subs.sed <<_ACEOF CXXFLAGS!$CXXFLAGS$ac_delim ac_ct_CXX!$ac_ct_CXX$ac_delim CXXDEPMODE!$CXXDEPMODE$ac_delim am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim CXXCPP!$CXXCPP$ac_delim LIBTOOL!$LIBTOOL$ac_delim LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 9; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` if test -n "$ac_eof"; then ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` ac_eof=`expr $ac_eof + 1` fi cat >>$CONFIG_STATUS <<_ACEOF cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof /@[a-zA-Z_][a-zA-Z_0-9]*@/!b end _ACEOF sed ' s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g s/^/s,@/; s/!/@,|#_!!_#|/ :n t n s/'"$ac_delim"'$/,g/; t s/$/\\/; p N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n ' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF :end s/|#_!!_#|//g CEOF$ac_eof _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF fi # test -n "$CONFIG_FILES" for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 echo "$as_me: error: Invalid tag $ac_tag." >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac ac_file_inputs="$ac_file_inputs $ac_f" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input="Generated from "`IFS=: echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} fi case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin";; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= case `sed -n '/datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' $ac_file_inputs` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s&@configure_input@&$configure_input&;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out"; rm -f "$tmp/out";; *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; esac ;; :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir=$dirpart/$fdir case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi mopac7-1.15/config.sub0000755000175000017500000010115310756112266011541 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-01-16' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: mopac7-1.15/fortran/0000777000175000017500000000000011274262042011306 500000000000000mopac7-1.15/fortran/molval.f0000644000175000017500000000172411053302063012660 00000000000000 SUBROUTINE MOLVAL(C,P,NOCC,RHFUHF) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C(NORBS,NORBS), P(*) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT DIMENSION VAL(MAXORB) DO 40 I=1,NOCC SUM=0.D0 DO 30 JJ=1,NUMAT JL=NFIRST(JJ) JU=NLAST(JJ) DO 30 J=JL,JU DO 30 KK=1,NUMAT IF(KK.EQ.JJ) GOTO 20 KL=NFIRST(KK) KU=NLAST(KK) DO 10 K=KL,KU L1=MAX(J,K) L2=J+K-L1 L=(L1*(L1-1))/2+L2 SUM=SUM+C(J,I)*C(K,I)*P(L) 10 CONTINUE 20 CONTINUE 30 CONTINUE VAL(I)=SUM*RHFUHF 40 CONTINUE WRITE(6,'(10F8.4)')(VAL(I),I=1,NOCC) END mopac7-1.15/fortran/refer.f0000644000175000017500000000367511053302063012500 00000000000000 SUBROUTINE REFER IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON 1 /REFS/ ALLREF(107,4) 2 /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 3 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 4 NCLOSE,NOPEN,NDUMY,FRACT 5 /KEYWRD/ KEYWRD LOGICAL ALLOK, ELEMNS(107), MIXOK, MIX SAVE MIX CHARACTER KEYWRD*241, ALLREF*80 DATA MIX/.FALSE./ MIXOK=(INDEX(KEYWRD,'PARASOK').NE.0) DO 10 I=1,102 10 ELEMNS(I)=.FALSE. IF(INDEX(KEYWRD,'PM3').NE.0)THEN MODE=4 ELSEIF(INDEX(KEYWRD,'AM1').NE.0)THEN MODE=3 ELSEIF(INDEX(KEYWRD,'MINDO').NE.0)THEN MODE=2 ELSE MODE=1 ENDIF ALLREF(99,MODE)=' DUMMY ATOMS ARE USED; THESE DO NOT AFFECT ' 1//'THE CALCULATION' ALLREF(100,MODE)=' ' DO 20 I=1,NUMAT J=NAT(I) 20 ELEMNS(J)=.TRUE. ALLOK=.TRUE. DO 30 I=1,102 IF(ELEMNS(I))THEN IF(I.LT.99.AND..NOT.MIX.AND.MODE.EQ.3) 1MIX=(INDEX(ALLREF(I,3),'MNDO').NE.0) IF(ALLREF(I,MODE)(1:1).NE.' ')THEN WRITE(6,'(A,I3)')' DATA ARE NOT AVAILABLE FOR ELEMENT NO. 1',I ALLOK=.FALSE. ELSE WRITE(6,'(A)')ALLREF(I,MODE) ENDIF ENDIF 30 CONTINUE IF(MIX.AND..NOT.MIXOK)THEN WRITE(6,40) 1 'SOME ELEMENTS HAVE BEEN SPECIFIED FOR WHICH ONLY MNDO', 2 'PARAMETERS ARE AVAILABLE. SUCH MIXTURES OF METHODS ARE', 3 'VERY RISKY AND HAVE NOT BEEN FULLY TESTED. IF YOU FEEL', 4 'THE RISK IS WORTH WHILE - CHECK THE MANUAL FIRST - THEN', 5 'SPECIFY "PARASOK" IN THE KEYWORDS' STOP ENDIF IF(ALLOK)RETURN WRITE(6,40) 1 'SOME ELEMENTS HAVE BEEN SPECIFIED FOR WHICH', 2 'NO PARAMETERS ARE AVAILABLE. CALCULATION STOPPED.' STOP 40 FORMAT(/////10X,A,4(/10X,A)) END mopac7-1.15/fortran/Makefile.am0000644000175000017500000000571011274260007013260 00000000000000SUBDIRS = c_src_bak c_src_f2c lib_LTLIBRARIES= libmopac7.la ## the version-info is current:revision:age ; see the libtool manual for more info!!! ## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ## 1. Start with version information of `0:0:0' for each libtool library. ## 2. Update the version information only immediately before a public release of your software. More frequent updates are unnecessary, and only guarantee that the current interface number gets larger faster. ## 3. If the library source code has changed at all since the last update, then increment revision (`c:r:a' becomes `c:r+1:a'). ## 4. If any interfaces have been added, removed, or changed since the last update, increment current, and set revision to 0. ## 5. If any interfaces have been added since the last public release, then increment age. ## 6. If any interfaces have been removed since the last public release, then set age to 0. libmopac7_la_LDFLAGS = -version-info 1:13:0 ##libmopac7_la_LDFLAGS = -version-info 1:13:0 ; was 1.13 libmopac7_la_SOURCES = \ aababc.f addfck.f addhcr.f addnuc.f analyt.f \ anavib.f axis.f block.f bonds.f brlzon.f \ btoc.f calpar.f capcor.f cdiag.f chrge.f \ cnvg.f compfg.f consts.f cqden.f datin.f \ dcart.f delmol.f delri.f denrot.f densit.f \ depvar.f deri0.f deri1.f deri2.f deri21.f \ deri22.f deri23.f deritr.f deriv.f dernvo.f \ ders.f dfock2.f dfpsav.f dgemm.f dgemv.f \ dger.f dgetf2.f dgetrf.f dgetri.f diag.f \ diat.f diat2.f diegrd.f dielen.f diis.f \ dijkl1.f dijkl2.f dipind.f dipole.f dlaswp.f \ dofs.f dot.f drc.f drcout.f dtrmm.f \ dtrmv.f dtrsm.f dtrti2.f dtrtri.f dvfill.f \ ef.f enpart.f esp.f etime.c exchng.f \ fdate.c ffhpol.f flepo.f fmat.f fock1.f \ fock2.f force.f formxy.f forsav.f frame.f \ freqcy.f geout.f geoutg.f getgeg.f getgeo.f \ getsym.f gettxt.f gmetry.f gover.f greenf.f \ grid.f h1elec.f haddon.f hcore.f helect.f \ hqrii.f ijkl.f ilaenv.f initsv.f interp.f \ iter.f jcarin.f linmin.f local.f locmin.f \ lsame.f makpol.f mamult.f matou1.f matout.f \ matpak.f meci.f mecid.f mecih.f mecip.f \ moldat.f molval.f mullik.f mult.f nllsq.f \ nuchar.f parsav.f partxy.f pathk.f paths.f \ perm.f polar.f powsav.f powsq.f prtdrc.f \ quadr.f react1.f reada.f readmo.f refer.f \ repp.f rotat.f rotate.f rsp.f search.f \ second.f setupg.f solrot.f swap.f sympro.f \ symtry.f symtrz.f thermo.f timer.f timout.f \ update.f upsurf.f vecprt.f writmo.f wrtkey.f \ wrttxt.f xerbla.f xyzint.f s_copy.c \ mopac7lib.f libmopac7.c libmopac7includedir = $(includedir)/mopac7 libmopac7include_HEADERS = libmopac7.h noinst_PROGRAMS = mopac7 mopac7_SOURCES = mopac7app.f ##################################### ## this makes parallel builds fail: ##mopac7_LDFLAGS = -lmopac7 -lm ##################################### mopac7_DEPENDENCIES = libmopac7.la mopac7_LDADD = libmopac7.la mopac7_LDFLAGS = -lm EXTRA_DIST = SIZES mopac7f2c.h \ symtrz.f_ORIG symtrz.f_ALT1 symtrz.f_ALT2 mopac7-1.15/fortran/vecprt.f0000644000175000017500000000570211053302063012671 00000000000000 SUBROUTINE VECPRT (A,NUMM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION A(*) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ELEMTS/ ELEMNT(107) C********************************************************************** C C VECPRT PRINTS A LOWER-HALF TRIANGLE OF A SQUARE MATRIX, THE C LOWER-HALF TRIANGLE BEING STORED IN PACKED FORM IN THE C ARRAY "A" C C ON INPUT: C A = ARRAY TO BE PRINTED C NUMM = SIZE OF ARRAY TO BE PRINTED C(REF) NUMAT = NUMBER OF ATOMS IN THE MOLECULE (THIS IS NEEDED TO C DECIDE IF AN ATOMIC ARRAY OR ATOMIC ORBITAL ARRAY IS C TO BE PRINTED C(REF) NAT = LIST OF ATOMIC NUMBERS C(REF) NFIRST = LIST OF ORBITAL COUNTERS C(REF) NLAST = LIST OF ORBITAL COUNTERS C C NONE OF THE ARGUMENTS ARE ALTERED BY THE CALL OF VECPRT C C********************************************************************* DIMENSION NATOM(MAXORB) CHARACTER * 6 LINE(21) CHARACTER*2 ELEMNT,ATORBS(9), ITEXT(MAXORB), JTEXT(MAXORB) SAVE ATORBS DATA ATORBS/' S','PX','PY','PZ','X2','XZ','Z2','YZ','XY'/ IF(NUMAT.NE.0.AND.NUMAT.EQ.NUMM) THEN C C PRINT OVER ATOM COUNT C DO 10 I=1,NUMAT ITEXT(I)=' ' JTEXT(I)=ELEMNT(NAT(I)) NATOM(I)=I 10 CONTINUE ELSE IF (NUMAT.NE.0.AND.NLAST(NUMAT) .EQ. NUMM) THEN DO 30 I=1,NUMAT JLO=NFIRST(I) JHI=NLAST(I) L=NAT(I) K=0 DO 20 J=JLO,JHI K=K+1 ITEXT(J)=ATORBS(K) JTEXT(J)=ELEMNT(L) NATOM(J)=I 20 CONTINUE 30 CONTINUE ELSE NUMB=ABS(NUMM) DO 40 I=1,NUMB ITEXT(I) = ' ' JTEXT(I) = ' ' 40 NATOM(I)=I ENDIF ENDIF NUMB=ABS(NUMM) DO 50 I=1,21 50 LINE(I)='------' LIMIT=(NUMB*(NUMB+1))/2 KK=8 NA=1 60 LL=0 M=MIN0((NUMB+1-NA),6) MA=2*M+1 M=NA+M-1 WRITE(6,100)(ITEXT(I),JTEXT(I),NATOM(I),I=NA,M) WRITE (6,110) (LINE(K),K=1,MA) DO 80 I=NA,NUMB LL=LL+1 K=(I*(I-1))/2 L=MIN0((K+M),(K+I)) K=K+NA IF ((KK+LL).LE.50) GO TO 70 WRITE (6,120) WRITE (6,100) (ITEXT(N),JTEXT(N),NATOM(N),N=NA,M) WRITE (6,110) (LINE(N),N=1,MA) KK=4 LL=0 70 WRITE (6,130) ITEXT(I),JTEXT(I),NATOM(I),(A(N),N=K,L) 80 CONTINUE IF (L.GE.LIMIT) GO TO 90 KK=KK+LL+4 NA=M+1 IF ((KK+NUMB+1-NA).LE.50) GO TO 60 KK=4 WRITE (6,120) GO TO 60 90 RETURN C 100 FORMAT (1H0/13X,10(1X,A2,1X,A2,I3,2X)) 110 FORMAT (1H ,21A6) 120 FORMAT (1H1) 130 FORMAT (1H ,A2,1X,A2,I5,10F11.6) C END mopac7-1.15/fortran/partxy.f0000644000175000017500000001007111053302063012710 00000000000000 SUBROUTINE PARTXY(C34,PQ34) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C34(*),PQ34(*) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /WMATRX/ WJ(N2ELEC), WK(N2ELEC) 1 /TWOELE/ GSS(107),GSP(107),GPP(107),GP2(107),HSP(107) 2 ,GSD(107),GPD(107),GDD(107) 3 /KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL DIMENSION W(N2ELEC*2) EQUIVALENCE (W,WJ) CHARACTER*241 KEYWRD C------------------------------------------------------------------ C C PARTXY WORKS OUT IN MNDO FORMALISM THE FIRST 2-INDICES TRANSFO. C REQUIRED IN THE COMPUTATION OF 2-ELECTRONS REPULSION OVER M.O C INPUT C C34 : VECTOR OF THE CURRENT CHARGE DISTRIBUTION BETWEEN TWO M.O. C OUTPUT C PQ34(PQ) : WHERE P ,Q ARE A.O. C AND C3,C4 ARE M.O. C P AND Q RUN IN CANONICAL ORDER OVER THE A.O BELONGING C TO AN ATOM 'A' ONLY (BASIC ASSUMPTION OF MNDO SCHEME) C AND 'A' RUNS OVER THE ATOMS OF THE SYSTEM. C D.L. (DEWAR GROUP) 1986 C---------------------------------------------------------------------- DIMENSION LD(9),PTOT(NUMATM), NB(0:8), INDX(NUMATM) DATA LD /0,2,5,9,14,20,27,35,44/ DATA NB /1,0,0,10,0,0,0,0,45/ DATA ICALCN/0/ IF(NUMCAL.NE.ICALCN)THEN ICALCN=NUMCAL INDX(1)=1 DO 10 I=2,NUMAT 10 INDX(I)=INDX(I-1)+NB(NLAST(I-1)-NFIRST(I-1)) ENDIF C IJ : POINTER OF CANONICAL PACKED LOCATION OF COUPLE IJ. C KK : POINTER OF SUPPORTING ATOM, SPARKLES SKIPPED OUT. C IPQRS : CURRENT ENTRY POINT IN THE FILE. KK=0 IPQRS=1 IJ=0 IJOLD=0 C C LOOP OVER OUTER ATOM A, SPARKLES EXCLUDED. C ------------------------------------------ NBAND=1 KR=1 LS=0 DO 30 II=1,NUMAT IA=NFIRST(II) IB=NMIDLE(II) IC=NLAST (II) IF(IC.LT.IA) GO TO 30 KK=KK+1 LS=LS+NBAND NBAND=NB(IC-IA) IJ=IJ+NBAND C C PQ34(IJ) = * C34(KL) , 1-CENTRE CONTRIBUTIONS. IZN=NAT(II) C BLOCK SS PTOT(KK)=C34(LS) PQ34(LS)=C34(LS)*GSS(IZN)*0.25D0 IF(IB.GT.IA) THEN C BLOCK SP AND PP HPP=0.5D0*(GPP(IZN)-GP2(IZN)) LX=LS+LD(2) LY=LS+LD(3) LZ=LS+LD(4) PP=C34(LX)+C34(LY)+C34(LZ) PQ34(LS+1)=HSP(IZN)*C34(LS+1) PQ34(LX )=GPP(IZN)*C34(LX )*0.25D0 PQ34(LS+3)=HSP(IZN)*C34(LS+3) PQ34(LS+4)=HPP *C34(LS+4) PQ34(LY )=GPP(IZN)*C34(LY )*0.25D0 PQ34(LS+6)=HSP(IZN)*C34(LS+6) PQ34(LS+7)=HPP *C34(LS+7) PQ34(LS+8)=HPP *C34(LS+8) PQ34(LZ )=GPP(IZN)*C34(LZ )*0.25D0 GSPSS= GSP(IZN)*C34(LS )*0.25D0 PQ34(LS)=PQ34(LS)+GSP(IZN)*PP*0.25D0 PQ34(LX)=PQ34(LX)+GP2(IZN)*(C34(LY)+C34(LZ))*0.25D0+GSPSS PQ34(LY)=PQ34(LY)+GP2(IZN)*(C34(LZ)+C34(LX))*0.25D0+GSPSS PQ34(LZ)=PQ34(LZ)+GP2(IZN)*(C34(LX)+C34(LY))*0.25D0+GSPSS PTOT(KK)=PTOT(KK)+PP IF(IC.GT.IB) THEN C BLOCK SD, PD AND DD C --- WAITING FOR 'D' PARAMETERS --- C TAKE CARE : DIAGONAL ELEMENTS OF C34 ARE DOUBLED. ENDIF ENDIF IF(KK.GT.1)THEN C C LOOP OVER CHARGE DISTRIBUTION OF INNER ATOMS B < A . C ----------------------------------------------------- C PQ34(IJ)=*C34(KL) 2-CENTRES CONTRIBUTIONS. C JBAND=1 JS=0 DO 20 JJ=1,II-1 JS=JS+JBAND JBAND=NB(NLAST(JJ)-NFIRST(JJ)) C C NBAND AND JBAND ARE EITHER 1 OR 10 C CALL FORMXY 1(W(KR), KR, PQ34(LS), PQ34(JS), C34(LS), NBAND, C34(JS), JBAND) 20 IPQRS=IPQRS+IJOLD ENDIF IJOLD=IJ 30 CONTINUE RETURN END mopac7-1.15/fortran/geoutg.f0000644000175000017500000001220711053302063012656 00000000000000 SUBROUTINE GEOUTG(IPRT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR),IDUMY,DUMY(MAXPAR) COMMON /SIMBOL/ SIMBOL(MAXPAR) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /ATOMTX/ LTXT, TXTATM(NUMATM) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) ************************************************************************ * * GEOUTG WRITES OUT THE GEOMETRY IN GAUSSIAN-8X STYLE * ************************************************************************ DIMENSION IGEO(3,NUMATM) CHARACTER LINE(3,NUMATM)*15, TYPE(3)*1, OPTDAT(MAXPAR)*14 CHARACTER TXTATM*8, BLANK*80, ELEMNT(107)*2, SIMBOL*10, LTXT*1 DATA ELEMNT/' H','He', 1 'Li','Be',' B',' C',' N',' O',' F','Ne', 2 'Na','Mg','Al','Si',' P',' S','Cl','Ar', 3 ' K','Ca','Sc','Ti',' V','Cr','Mn','Fe','Co','Ni','Cu', 4 'Zn','Ga','Ge','As','Se','Br','Kr', 5 'Rb','Sr',' Y','Zr','Nb','Mo','Tc','Ru','Rh','Pd','Ag', 6 'Cd','In','Sn','Sb','Te',' I','Xe', 7 'Cs','Ba','La','Ce','Pr','Nd','Pm','Sm','Eu','Gd','Tb','Dy', 8 'Ho','Er','Tm','Yb','Lu','Hf','Ta',' W','Re','Os','Ir','Pt', 9 'Au','Hg','Tl','Pb','Bi','Po','At','Rn', 1 'Fr','Ra','Ac','Th','Pa',' U','Np','Pu','Am','Cm','Bk','Cf','XX', 2 'Fm','Md','Cb','++',' +','--',' -','Tv'/ DATA TYPE/'r','a','d'/ DO 10 I=1,NATOMS DO 10 J=1,3 10 IGEO(J,I)=-1 DO 20 I=1,NVAR 20 IGEO(LOC(2,I),LOC(1,I))=-2 DO 30 I=1,NDEP IF(IDEPFN(I).EQ.14)THEN IGEO(3,LOCDEP(I))=-LOCPAR(I) ELSE IF(IDEPFN(I).GT.3) GOTO 30 IGEO(IDEPFN(I),LOCDEP(I))=LOCPAR(I) ENDIF 30 CONTINUE OPEN(UNIT=21,STATUS='SCRATCH') DEGREE=90.D0/ASIN(1.D0) MAXTXT=ICHAR(LTXT) NOPT=0 DO 50 I=1,NATOMS DO 40 J=1,3 LINE(J,I)=' ' IF(IGEO(J,I).EQ.-1)THEN REWIND 21 IF(J.NE.1)THEN WRITE(21,'(F12.6)')GEO(J,I)*DEGREE ELSE WRITE(21,'(F12.6)')GEO(J,I) ENDIF REWIND 21 READ(21,'(A)')LINE(J,I) ELSEIF(IGEO(J,I).EQ.-2)THEN NOPT=NOPT+1 IF(SIMBOL(NOPT).NE.'---')THEN IF(SIMBOL(NOPT)(1:1).EQ.'-') THEN LINE(J,I)(4:)=SIMBOL(NOPT)(2:) ELSE LINE(J,I)(4:)=SIMBOL(NOPT) ENDIF ELSE NBI=NB(I) NCI=NC(I) IF(J.NE.3)NCI=0 IF(J.EQ.1)NBI=0 CALL XXX(TYPE(J),I,NA(I),NBI,NCI,LINE(J,I)(4:)) ENDIF OPTDAT(NOPT)=LINE(J,I) ELSEIF(IGEO(J,I).LT.0)THEN LINE(3,I)=LINE(3,-IGEO(J,I)) LINE(3,I)(3:3)='-' ELSE LINE(J,I)=LINE(J,IGEO(J,I)) ENDIF 40 CONTINUE BLANK=ELEMNT(LABELS(I))//TXTATM(I)//' ' IF(LABELS(I).EQ.99)BLANK(1:1)=' ' J=MAX(4,MAXTXT+2) IF(I.EQ.1)THEN WRITE(IPRT,'(1X,A,I4,A,I4,A,I4,A,I4)')BLANK(:J) ELSEIF(I.EQ.2)THEN WRITE(IPRT,'(1X,A,I4,A,I4,A,I4,A,I4)')BLANK(:J),NA(I),LINE(1 1,I) ELSEIF(I.EQ.3)THEN WRITE(IPRT,'(1X,A,I4,A,I4,A,I4,A,I4)')BLANK(:J), 1NA(I),LINE(1,I),NB(I), LINE(2,I) ELSE L=0 WRITE(IPRT,'(1X,A,I4,A,I4,A,I4,A,I4)')BLANK(:J), 1NA(I),LINE(1,I),NB(I), LINE(2,I), NC(I), LINE(3,I), L ENDIF 50 CONTINUE WRITE(IPRT,*) DO 70 L=1,3 DO 60 I=1,NOPT IF(LOC(2,I).EQ.L)THEN IF(LOC(2,I).NE.1)THEN WRITE(IPRT,'(A,F12.6)')OPTDAT(I),GEO(LOC(2,I),LOC(1,I) 1)*DEGREE ELSE WRITE(IPRT,'(A,F12.6)')OPTDAT(I),GEO(LOC(2,I),LOC(1,I) 1) ENDIF ENDIF 60 CONTINUE 70 CONTINUE END SUBROUTINE XXX(TYPE,I,J,K,L,R) CHARACTER TYPE*1, R*(*) ************************************************************************ * * XXX WILL FORM A UNIQUE STRING LABEL 'R' FOR GAUSSIAN-TYPE INPUT * THE LABEL WILL BE LETTER (EITHER R, P, OR F, NORMALLY), FOLLOWED * BY THE CONNECTIVITY, IN THE ORDER I, J, K, L. * 'R' IS 13 CHARACTERS LONG IN ORDER TO ACCOMMODATE 3 DIGITS PER * LABEL, WHEN NECESSARY * ************************************************************************ DIMENSION IJK(4) R=TYPE IJK(1)=I IJK(2)=J IJK(3)=K IJK(4)=L M=1 DO 10 LOOP=1,4 II=IJK(LOOP) IF(II.EQ.0) GOTO 10 C C IF LABELS GREATER THAN 99 ARE USED, UNCOMMENT THE FOLLOWING CODE C C# I2=II/100 C# IF(I2.NE.0) THEN C# M=M+1 C# R(M:M)=CHAR(ICHAR('0')+I2) C# II=II-I2*100 C# ENDIF I2=II/10 IF(I2.NE.0) THEN M=M+1 R(M:M)=CHAR(ICHAR('0')+I2) II=II-I2*10 ENDIF M=M+1 R(M:M)=CHAR(ICHAR('0')+II) 10 CONTINUE RETURN END mopac7-1.15/fortran/wrtkey.f0000644000175000017500000006510311053302063012714 00000000000000 SUBROUTINE WRTKEY(KEYWRD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' CHARACTER*241 KEYWRD, ALLKEY *********************************************************************** * * WRTKEY CHECKS ALL KEY-WORDS AND PRINTS THOSE IT RECOGNIZES. IF IT * FINDS A WORD IT DOES NOT RECOGNIZE THE PROGRAM WILL BE STOPPED. * *********************************************************************** COMMON /NUMCAL/ NUMCAL COMMON /TIMDMP/ TLEFT, TDUMP LOGICAL UHF, TRIP, BIRAD, EXCI, CI, MYWORD LOGICAL AM1, MNDO, MINDO3, PM3 CHARACTER CH*1, CHRONO*7 SAVE AM1, MNDO, MINDO3 DATA AM1, MNDO, MINDO3, PM3 /4*.FALSE./ ALLKEY=KEYWRD C DUMMY IF STATEMENT TO REMOVE AMPERSAND AND PLUS SIGNS, IF PRESENT IF(MYWORD(ALLKEY(160:),' SETUP'))I=1 IF(MYWORD(ALLKEY,'&'))I=2 IF(MYWORD(ALLKEY,' +'))I=3 IF(MYWORD(ALLKEY,'AUTHOR')) THEN WRITE(6,'(10X,'' MOPAC - A GENERAL MOLECULAR ORBITAL PACKAGE'', 1/ ,10X,'' ORIGINAL VERSION WRITTEN IN 1983'')') WRITE(6,'(10X,'' BY JAMES J. P. STEWART AT THE'',/ 1 ,10X,'' UNIVERSITY OF TEXAS AT AUSTIN'',/ 2 ,10X,'' AUSTIN, TEXAS, 78712'')') ENDIF IF (MYWORD(ALLKEY,'VECT') ) WRITE(6,210) IF (MYWORD(ALLKEY,' EXTE') ) THEN I=INDEX(KEYWRD,' EXTE') J=INDEX(KEYWRD(I:),'=')+I I=INDEX(KEYWRD(J:),' ')+J-1 WRITE(6,220)KEYWRD(J:I) ENDIF MAXGEO=0 IF (MYWORD(ALLKEY,' DENS') ) WRITE(6,230) IF (MYWORD(ALLKEY,'SPIN') ) WRITE(6,240) IF (MYWORD(ALLKEY,' DEPVAR') ) 1WRITE(6,250)READA(KEYWRD,INDEX(KEYWRD,'DEPVAR')) IF (MYWORD(ALLKEY,' DEP ') )WRITE(6,260) IF (MYWORD(ALLKEY,'VELO') )WRITE(6,270) IF (MYWORD(ALLKEY,' GREENF') ) WRITE(6,378) 378 FORMAT(' * GREEN - RUN DANOVICH''S GREEN''S FUNCTION CALCN.') IF (MYWORD(ALLKEY,'TIMES') )WRITE(6,280) IF (MYWORD(ALLKEY,'PARASOK') ) WRITE(6,290) IF (MYWORD(ALLKEY,'NODIIS') ) WRITE(6,300) IF (MYWORD(ALLKEY,'BONDS') ) WRITE(6,310) IF (MYWORD(ALLKEY,'GEO-OK') ) WRITE(6,320) IF (MYWORD(ALLKEY,'FOCK') ) WRITE(6,330) IF (MYWORD(ALLKEY,'LARGE') ) WRITE(6,340) IF (MYWORD(ALLKEY,' K=') ) WRITE(6,350) IF (MYWORD(ALLKEY,'NOLOG') ) WRITE(6,360) IF (MYWORD(ALLKEY,'AIGIN') ) WRITE(6,370) IF (MYWORD(ALLKEY,'AIGOUT') ) WRITE(6,380) IF (MYWORD(ALLKEY,'AIDER') ) WRITE(6,390) IF (MYWORD(ALLKEY,' S1978') ) WRITE(6,400) IF (MYWORD(ALLKEY,' SI1978') ) WRITE(6,410) IF (MYWORD(ALLKEY,' GRAP') ) WRITE(6,420) IF (MYWORD(ALLKEY,'NOANCI') ) WRITE(6,440) IF (MYWORD(ALLKEY,'1ELEC') ) WRITE(6,430) IF (MYWORD(ALLKEY(:162),' SETUP') ) WRITE(6,470) IF (MYWORD(ALLKEY,' NOMM') ) WRITE(6,460) IF (MYWORD(ALLKEY,' MMOK') ) WRITE(6,480) IF (MYWORD(ALLKEY,'INTERP') ) WRITE(6,490) IF (MYWORD(ALLKEY,' ESR') ) WRITE(6,450) IF (MYWORD(ALLKEY,'DFP') ) WRITE(6,500) IF (MYWORD(ALLKEY,'ANALYT') ) WRITE(6,510) IF (MYWORD(ALLKEY,' MECI') ) WRITE(6,520) IF (MYWORD(ALLKEY,'LOCAL') ) WRITE(6,560) IF (MYWORD(ALLKEY,'MULLIK') ) WRITE(6,570) IF (MYWORD(ALLKEY,' XYZ') ) WRITE(6,580) IF (MYWORD(ALLKEY,' PI') ) WRITE(6,590) IF (MYWORD(ALLKEY,'ECHO') ) WRITE(6,600) IF (MYWORD(ALLKEY, 'SING') ) WRITE(6,910) IF (MYWORD(ALLKEY, 'DOUB') ) WRITE(6,920) IF (MYWORD(ALLKEY, 'QUAR') ) WRITE(6,940) IF (MYWORD(ALLKEY, 'QUIN') ) WRITE(6,950) IF (MYWORD(ALLKEY, 'SEXT') ) WRITE(6,960) IF (MYWORD(ALLKEY,'H-PRIO') ) WRITE(6,610) IF (MYWORD(ALLKEY,'X-PRIO') ) WRITE(6,620) IF (MYWORD(ALLKEY,'T-PRIO') ) WRITE(6,630) IF (MYWORD(ALLKEY,'COMPFG') ) WRITE(6,650) IF (MYWORD(ALLKEY,'POLAR') ) WRITE(6,640) IF (MYWORD(ALLKEY,'DEBUG ') ) WRITE(6,660) IF (MYWORD(ALLKEY,'RESTART') ) WRITE(6,670) C C KEYWORDS ADDED FOR ESP MOPAC C IF (MYWORD(ALLKEY,'ESP ') ) WRITE(6,680) IF (MYWORD(ALLKEY,'NSURF') ) WRITE(6,690) IF (MYWORD(ALLKEY,'SCALE') ) WRITE(6,700) IF (MYWORD(ALLKEY,'SCINCR') ) WRITE(6,710) IF (MYWORD(ALLKEY,'SLOPE') ) WRITE(6,720) IF (MYWORD(ALLKEY,'DIPOLE') ) WRITE(6,730) IF (MYWORD(ALLKEY,'DIPX') ) WRITE(6,740) IF (MYWORD(ALLKEY,'DIPY') ) WRITE(6,750) IF (MYWORD(ALLKEY,'DIPZ') ) WRITE(6,760) IF (MYWORD(ALLKEY,'CONNOLLY') ) WRITE(6,770) IF (MYWORD(ALLKEY,'ESPRST') ) WRITE(6,780) IF (MYWORD(ALLKEY,' POTWRT') ) WRITE(6,790) IF (MYWORD(ALLKEY,'WILLIAMS') ) WRITE(6,800) IF (MYWORD(ALLKEY,'SYMAVG') ) WRITE(6,810) IF (MYWORD(ALLKEY,'STO3G') ) WRITE(6,820) IF (MYWORD(ALLKEY,'IUPD')) THEN II=NINT(READA(KEYWRD,INDEX(KEYWRD,'IUPD='))) IF (II.EQ.0) WRITE(6,90) IF (II.EQ.1) WRITE(6,100) IF (II.EQ.2) WRITE(6,110) ENDIF IF (MYWORD(ALLKEY,'HESS')) THEN II=NINT(READA(KEYWRD,INDEX(KEYWRD,'HESS='))) IF (II.EQ.0) WRITE(6,120) IF (II.EQ.1) WRITE(6,130) IF (II.EQ.2) WRITE(6,140) IF (II.EQ.3) WRITE(6,150) ENDIF IF (MYWORD(ALLKEY,' MODE')) WRITE(6,160) 1 NINT(READA(KEYWRD,INDEX(KEYWRD,'MODE='))) IF (MYWORD(ALLKEY,' RECALC')) WRITE(6,170) 1 NINT(READA(KEYWRD,INDEX(KEYWRD,'RECALC'))) IF (MYWORD(ALLKEY,' DMAX')) WRITE(6,180) 1 READA(KEYWRD,INDEX(KEYWRD,'DMAX=')) IF (MYWORD(ALLKEY,' MS=')) WRITE(6,190) 1 NINT(READA(KEYWRD,INDEX(KEYWRD,' MS='))) IF (MYWORD(ALLKEY,' PRNT')) WRITE(6,200) IF (MYWORD(ALLKEY,'IRC=') ) THEN MAXGEO=1 WRITE(6,830)NINT(READA(KEYWRD,INDEX(KEYWRD,'IRC='))) ELSEIF (MYWORD(ALLKEY,'IRC') ) THEN MAXGEO=1 WRITE(6,840) ENDIF IF (MYWORD(ALLKEY,'CHARGE') ) 1 WRITE(6,850)NINT(READA(KEYWRD,INDEX(KEYWRD,'CHARGE'))) IF (MYWORD(ALLKEY,'GRAD') ) WRITE(6,860) UHF=(MYWORD(ALLKEY,'UHF') ) IF(UHF)WRITE(6,870) BIRAD=(MYWORD(ALLKEY,'BIRAD') ) IF(BIRAD)WRITE(6,890) EXCI=(MYWORD(ALLKEY,'EXCITED') ) IF(EXCI) WRITE(6,900) TRIP=(MYWORD(ALLKEY,'TRIP') ) IF(TRIP)WRITE(6,930) IF (MYWORD(ALLKEY,'SYM') ) WRITE(6,970) IF (MYWORD(ALLKEY,' GROUP') ) THEN WRITE(6,971) IF (MYWORD(ALLKEY,' RMAT') ) WRITE(6,972) IF (MYWORD(ALLKEY,' IPO') ) WRITE(6,973) IF (MYWORD(ALLKEY,' NODEGEN') ) WRITE(6,974) ENDIF IF (MYWORD(ALLKEY,' RMAT') ) THEN WRITE(6,'(//,10X,''RMAT MUST BE SPECIFIED WITH '', 1 ''GROUP'')') STOP ENDIF IF (MYWORD(ALLKEY,' IPO') ) THEN WRITE(6,'(//,10X,''IPO MUST BE SPECIFIED WITH '', 1 ''GROUP'')') STOP ENDIF IF (MYWORD(ALLKEY,' NODEGEN') ) THEN WRITE(6,'(//,10X,''NODEGEN MUST BE SPECIFIED WITH '', 1 ''GROUP'')') STOP ENDIF IF(MYWORD(ALLKEY,'OPEN('))THEN I=INDEX(KEYWRD,'OPEN(') IELEC=READA(KEYWRD,I) ILEVEL=READA(KEYWRD,I+7) WRITE(6,990)IELEC,ILEVEL ENDIF IF(MYWORD(ALLKEY,'MICROS')) 1WRITE(6,980)INT(READA(KEYWRD,INDEX(KEYWRD,'MICROS'))) IF(MYWORD(ALLKEY,'DRC='))THEN MAXGEO=1 WRITE(6,540)READA(KEYWRD,INDEX(KEYWRD,'DRC=')) ELSEIF (MYWORD(ALLKEY,' DRC') ) THEN MAXGEO=1 WRITE(6,530) ENDIF IF(MYWORD(ALLKEY,'KINE')) 1WRITE(6,550)READA(KEYWRD,INDEX(KEYWRD,'KINE')) CHRONO='SECONDS' TIME=1 IF(MYWORD(ALLKEY,' T=')) THEN I=INDEX(KEYWRD,' T=') TLEFT=READA(KEYWRD,I) DO 10 J=I+3,241 IF( J.EQ.241.OR.KEYWRD(J+1:J+1).EQ.' ') THEN CH=KEYWRD(J:J) IF( CH .EQ. 'M') CHRONO='MINUTES' IF( CH .EQ. 'M') TIME=60 IF( CH .EQ. 'H') CHRONO='HOURS' IF( CH .EQ. 'H') TIME=3600 IF( CH .EQ. 'D') CHRONO='DAYS' IF( CH .EQ. 'D') TIME=86400 GOTO 20 ENDIF 10 CONTINUE 20 CONTINUE IF(TLEFT.LT.99999.9D0)THEN WRITE(6,1000)TLEFT,CHRONO ELSE WRITE(6,1010)TLEFT,CHRONO ENDIF TLEFT=TLEFT*TIME ELSEIF(NUMCAL.EQ.1)THEN TLEFT=MAXTIM WRITE(6,1000)TLEFT,'SECONDS' ELSE WRITE(6,1000)TLEFT,'SECONDS' ENDIF TIME=1 CHRONO='SECONDS' IF(MYWORD(ALLKEY,' DUMP')) THEN I=INDEX(KEYWRD,' DUMP') TDUMP=READA(KEYWRD,I) DO 30 J=I+6,241 IF( J.EQ.241.OR.KEYWRD(J+1:J+1).EQ.' ') THEN CH=KEYWRD(J:J) IF( CH .EQ. 'M') CHRONO='MINUTES' IF( CH .EQ. 'M') TIME=60.D0 IF( CH .EQ. 'H') CHRONO='HOURS' IF( CH .EQ. 'H') TIME=3600.D0 IF( CH .EQ. 'D') CHRONO='DAYS' IF( CH .EQ. 'D') TIME=86400.D0 GOTO 40 ENDIF 30 CONTINUE 40 CONTINUE IF(TDUMP.LT.99999.9D0)THEN WRITE(6,1020)TDUMP,CHRONO ELSE WRITE(6,1030)TDUMP,CHRONO ENDIF TDUMP=TDUMP*TIME ELSEIF(NUMCAL.EQ.1)THEN TDUMP=MAXDMP WRITE(6,1020)TDUMP,'SECONDS' ELSE WRITE(6,1020)TDUMP,'SECONDS' ENDIF IF (MYWORD(ALLKEY,'1SCF') ) THEN WRITE(6,1040) IF(INDEX(KEYWRD,'RESTART').EQ.0)MAXGEO=MAXGEO+1 ENDIF CI=MYWORD(ALLKEY,'C.I.') IF (CI) THEN J=INDEX(KEYWRD,'C.I.=(') IF(J.NE.0)THEN WRITE(6,1060)INT(READA(KEYWRD,INDEX(KEYWRD,'C.I.=(')+7)), 1 INT(READA(KEYWRD,INDEX(KEYWRD,'C.I.=(')+5)) ELSE WRITE(6,1050)INT(READA(KEYWRD,INDEX(KEYWRD,'C.I.')+5)) ENDIF ENDIF IF (MYWORD(ALLKEY,' FORCE') ) THEN WRITE(6,1070) MAXGEO=MAXGEO+1 ENDIF IF (MYWORD(ALLKEY,' EF')) THEN WRITE(6,70) MAXGEO=MAXGEO+1 ENDIF IF (MYWORD(ALLKEY,' TS')) THEN WRITE(6,80) MAXGEO=MAXGEO+1 ENDIF METHOD=0 IF (MYWORD(ALLKEY,'MINDO') ) THEN WRITE(6,1080) MINDO3=.TRUE. METHOD=1 ENDIF IF (MYWORD(ALLKEY,'AM1') ) THEN WRITE(6,1090) AM1=.TRUE. METHOD=METHOD+1 ENDIF IF (MYWORD(ALLKEY,'PM3') ) THEN WRITE(6,1100) PM3=.TRUE. METHOD=METHOD+1 ENDIF IF (MYWORD(ALLKEY,'MNDO') ) THEN MNDO=.TRUE. METHOD=METHOD+1 ENDIF IF (MYWORD(ALLKEY,'OLDGEO') ) WRITE(6,1120) IF (MYWORD(ALLKEY,'PREC') ) WRITE(6,1110) IF (MYWORD(ALLKEY,'NOINTER') ) WRITE(6,1130) IF (MYWORD(ALLKEY,'ISOTOPE') ) WRITE(6,1140) IF (MYWORD(ALLKEY,'DENOUT') ) WRITE(6,1150) IF (MYWORD(ALLKEY,'SHIFT') ) WRITE(6,1160) 1 READA(KEYWRD,INDEX(KEYWRD,'SHIFT')) IF (MYWORD(ALLKEY,'OLDENS') ) WRITE(6,1170) IF (MYWORD(ALLKEY,'SCFCRT') ) WRITE(6,1180) 1 READA(KEYWRD,INDEX(KEYWRD,'SCFCRT')) IF (MYWORD(ALLKEY,'ENPART') ) WRITE(6,1190) IF (MYWORD(ALLKEY,'NOXYZ') ) WRITE(6,1200) IF (MYWORD(ALLKEY,'SIGMA') ) THEN WRITE(6,1210) MAXGEO=MAXGEO+1 ENDIF IF (MYWORD(ALLKEY,'NLLSQ') ) THEN WRITE(6,1220) MAXGEO=MAXGEO+1 ENDIF IF (MYWORD(ALLKEY,'ROOT') ) WRITE(6,1230) 1 NINT(READA(KEYWRD,INDEX(KEYWRD,'ROOT'))) IF (MYWORD(ALLKEY,'TRANS=') ) THEN WRITE(6,1250)NINT(READA(KEYWRD,INDEX(KEYWRD,'TRANS='))) ELSEIF (MYWORD(ALLKEY,'TRANS') ) THEN WRITE(6,1240) ENDIF IF (MYWORD(ALLKEY,'SADDLE') ) THEN WRITE(6,1260) MAXGEO=MAXGEO+1 ENDIF IF (MYWORD(ALLKEY,' LET') ) WRITE(6,1270) IF (MYWORD(ALLKEY,'COMPFG') ) WRITE(6,1280) IF (MYWORD(ALLKEY,'GNORM') ) WRITE(6,1290) 1 READA(KEYWRD,INDEX(KEYWRD,'GNORM')) IF (MYWORD(ALLKEY,'PULAY') ) WRITE(6,1300) IF (MYWORD(ALLKEY,' STEP1') )WRITE(6,1310) 1 READA(KEYWRD,INDEX(KEYWRD,'STEP1')+6) IF (MYWORD(ALLKEY,' STEP2') )WRITE(6,1320) 1 READA(KEYWRD,INDEX(KEYWRD,'STEP2')+6) IF (MYWORD(ALLKEY,' STEP') )WRITE(6,1500) 1 READA(KEYWRD,INDEX(KEYWRD,'STEP')+5) IF (MYWORD(ALLKEY,' POINT1') )THEN IP1=READA(KEYWRD,INDEX(KEYWRD,'POINT1')+7) WRITE(6,1330) IP1 ENDIF IF (MYWORD(ALLKEY,' POINT2') )THEN IP2=READA(KEYWRD,INDEX(KEYWRD,'POINT2')+7) WRITE(6,1340) IP2 ENDIF IF (MYWORD(ALLKEY,' MAX') ) WRITE(6,1350) IF (MYWORD(ALLKEY,' POINT') )THEN IP=READA(KEYWRD,INDEX(KEYWRD,'POINT')+6) WRITE(6,1510) IP ENDIF IF (MYWORD(ALLKEY,'BAR') ) WRITE(6,1360) 1 READA(KEYWRD,INDEX(KEYWRD,'BAR')) IF (MYWORD(ALLKEY,'CAMP') ) WRITE(6,1370) IF (MYWORD(ALLKEY,'KING') ) WRITE(6,1370) IF (MYWORD(ALLKEY,'EIGS') ) WRITE(6,1380) IF (MYWORD(ALLKEY,'EIGINV') ) WRITE(6,1390) IF (MYWORD(ALLKEY,'NONR') ) WRITE(6,1400) IF (MYWORD(ALLKEY,'ORIDE') ) WRITE(6,1410) IF (MYWORD(ALLKEY,'HYPERF') ) WRITE(6,1420) IF (MYWORD(ALLKEY,' PL') ) WRITE(6,1430) IF (MYWORD(ALLKEY,'FILL') ) WRITE(6,1440) 1 NINT(READA(KEYWRD,INDEX(KEYWRD,'FILL'))) IF (MYWORD(ALLKEY,'ITRY') ) WRITE(6,1470) 1 NINT(READA(KEYWRD,INDEX(KEYWRD,'ITRY'))) IF (MYWORD(ALLKEY,'0SCF') ) WRITE(6,1490) IF(UHF)THEN IF(BIRAD.OR.EXCI.OR.CI)THEN WRITE(6,'(//10X, 1'' UHF USED WITH EITHER BIRAD, EXCITED OR C.I. '')') WRITE(6,1480) GOTO 60 ENDIF ELSE IF(EXCI.AND. TRIP) THEN WRITE(6,'(//10X,'' EXCITED USED WITH TRIPLET'')') WRITE(6,1480) GOTO 60 ENDIF ENDIF IF (INDEX(KEYWRD,'T-PRIO').NE.0.AND. 1INDEX(KEYWRD,'DRC').EQ.0) THEN WRITE (6,'(//10X,''T-PRIO AND NO DRC'')') WRITE (6,1480) GOTO 60 ENDIF IF ( METHOD .GT. 1) THEN WRITE(6,'(//10X, 1'' ONLY ONE OF MINDO, MNDO, AM1 AND PM3 ALLOWED'')') WRITE (6,1480) GOTO 60 ENDIF IF (MYWORD(ALLKEY,' FIELD') )THEN WRITE(6,1445) ENDIF IF (MYWORD(ALLKEY,'THERMO') )THEN WRITE(6,1450) IF(MYWORD(ALLKEY,' ROT')) THEN WRITE(6,1460)NINT(READA(KEYWRD,INDEX(KEYWRD,' ROT'))) ELSE WRITE(6,' 1 (//10X,'' YOU MUST SUPPLY THE SYMMETRY NUMBER "ROT"'')') STOP ENDIF ENDIF IF(MAXGEO.GT.1)THEN WRITE(6,'(//10X,''MORE THAN ONE GEOMETRY OPTION HAS BEEN '', 1''SPECIFIED'',/10X, 2''CONFLICT MUST BE RESOLVED BEFORE JOB WILL RUN'')') STOP ENDIF IF(INDEX(KEYWRD,'MULLIK').NE.0.AND.UHF)THEN WRITE(6,'(A)')' MULLIKEN POPULATION NOT AVAILABLE WITH UHF' STOP ENDIF IF(ALLKEY.NE.' ')THEN J=0 DO 50 I=1,240 IF(ALLKEY(I:I).NE.' '.OR.ALLKEY(I:I+1).NE.' ')THEN J=J+1 CH=ALLKEY(I:I) ALLKEY(J:J)=CH ENDIF 50 CONTINUE IF(ALLKEY(241:241).NE.' ')THEN J=J+1 CH=ALLKEY(241:241) ALLKEY(J:J)=CH ENDIF J=MAX(1,J) L=INDEX(KEYWRD,'DEBUG') IF(L.NE.0)THEN WRITE(6,'('' * DEBUG KEYWORDS USED: '',A)')ALLKEY(:J) ELSE WRITE(6,'(///10X,''UNRECOGNIZED KEY-WORDS: ('',A,'')'')') 1ALLKEY(:J) WRITE(6,'(///10X,''CALCULATION STOPPED TO AVOID WASTING TIME 1.'')') WRITE(6,'(///10X,''IF THESE ARE DEBUG KEYWORDS, ADD THE KEYW 1ORD "DEBUG"'')') STOP ENDIF ENDIF RETURN 60 WRITE(6,'(//10X,'' CALCULATION ABANDONED, SORRY!'')') STOP C *********************************************************** C *********************************************************** 70 FORMAT(' * EF - USE EF ROUTINE FOR MINIMUM SEARCH') 80 FORMAT(' * TS - USE EF ROUTINE FOR TS SEARCH') 90 FORMAT(' * IUPD= - HESSIAN WILL NOT BE UPDATED') 100 FORMAT(' * IUPD= - HESSIAN WILL BE UPDATED USING POWELL') 110 FORMAT(' * IUPD= - HESSIAN WILL BE UPDATED USING BFGS') 120 FORMAT(' * HESS= - DIAGONAL HESSIAN USED AS INITIAL GUESS') 130 FORMAT(' * HESS= - INITIAL HESSIAN WILL BE CALCULATED') 140 FORMAT(' * HESS= - INITIAL HESSIAN READ FROM DISK') 150 FORMAT(' * HESS= - INITIAL HESSIAN READ FROM INPUT') 160 FORMAT(' * MODE= - FOLLOW HESSIAN MODE',I3,' TOWARD TS') 170 FORMAT(' * RECALC= - DO',I4,' CYCLES BETWEEN HESSIAN RECALC') 180 FORMAT(' * DMAX= - TAKE MAXIMUM STEPSIZE OF',F5.3,' ANG/RAD') 190 FORMAT(' * MS= - IN MECI, MAGNETIC COMPONENT OF SPIN =',I3) 200 FORMAT(' * PRNT - EXTRA PRINTING IN EF ROUTINE') C *********************************************************** 210 FORMAT(' * VECTORS - FINAL EIGENVECTORS TO BE PRINTED') 220 FORMAT(' * EXTERNAL - USE ATOMIC PARAMETERS FROM THE FOLLOWING ' 1,'FILE',/15X,A) 230 FORMAT(' * DENSITY - FINAL DENSITY MATRIX TO BE PRINTED') 240 FORMAT(' * SPIN - FINAL UHF SPIN MATRIX TO BE PRINTED') 250 FORMAT(' * DEPVAR=N - SPECIFIED DISTANCE IS',F7.4, 1' TIMES BOND LENGTH') 260 FORMAT(' * DEP - OUTPUT FORTRAN CODE FOR BLOCK-DATA') 270 FORMAT(' * VELOCITY - INPUT STARTING VELOCITIES FOR DRC') 280 FORMAT(' * TIMES - TIMES OF VARIOUS STAGES TO BE PRINTED') 290 FORMAT(' * PARASOK - USE SOME MNDO PARAMETERS IN AN AM1 CALCULA' 1,'TION') 300 FORMAT(' * NODIIS - DO NOT USE GDIIS GEOMETRY OPTIMIZER') 310 FORMAT(' * BONDS - FINAL BOND-ORDER MATRIX TO BE PRINTED') 320 FORMAT(' * GEO-OK - OVERRIDE INTERATOMIC DISTANCE CHECK') 330 FORMAT(' * FOCK - LAST FOCK MATRIX TO BE PRINTED') 340 FORMAT(' * LARGE - EXPANDED OUTPUT TO BE PRINTED') 350 FORMAT(' * K= - BRILLOUIN ZONE STRUCTURE TO BE CALCULATED') 360 FORMAT(' * NOLOG - SUPPRESS LOG FILE TRAIL, WHERE POSSIBLE') 370 FORMAT(' * AIGIN - GEOMETRY MUST BE IN GAUSSIAN FORMAT') 380 FORMAT(' * AIGOUT - IN ARC FILE, INCLUDE AB-INITIO GEOMETRY') 390 FORMAT(' * AIDER - READ IN AB INITIO DERIVATIVES') 400 FORMAT(' * S1978 - 1978 SULFUR PARAMETERS TO BE USED') 410 FORMAT(' * SI1978 - 1978 SILICON PARAMETERS TO BE USED') 420 FORMAT(' * GRAPH - GENERATE FILE FOR GRAPHICS') 430 FORMAT(' * 1ELECTRON- FINAL ONE-ELECTRON MATRIX TO BE PRINTED') 440 FORMAT(' * NOANCI - DO NOT USE ANALYTICAL C.I. DERIVATIVES') 450 FORMAT(' * ESR - RHF SPIN DENSITY CALCULATION REQUESTED') 460 FORMAT(' * NOMM - DO NOT MAKE MM CORRECTION TO CONH BARRIER') 470 FORMAT(' * SETUP - EXTRA KEYWORDS TO BE READ FROM FILE SETUP') 480 FORMAT(' * MMOK - APPLY MM CORRECTION TO CONH BARRIER') 490 FORMAT(' * INTERP - PRINT DETAILS OF CAMP-KING CONVERGER') 500 FORMAT(' * DFP - USE DAVIDON FLETCHER POWELL OPTIMIZER') 510 FORMAT(' * ANALYT - USE ANALYTIC DERIVATIVES ') 520 FORMAT(' * MECI - M.E.C.I. WORKING TO BE PRINTED') 530 FORMAT(' * DRC - DYNAMIC REACTION COORDINATE CALCULATION') 540 FORMAT(' * DRC= - HALF-LIFE FOR KINETIC ENERGY LOSS =',F9.2, 1' * 10**(-15) SECONDS') 550 FORMAT(' * KINETIC= - ',F9.3,' KCAL KINETIC ENERGY ADDED TO DRC') 560 FORMAT(' * LOCALIZE - LOCALIZED ORBITALS TO BE PRINTED') 570 FORMAT(' * MULLIK - THE MULLIKEN ANALYSIS TO BE PERFORMED') 580 FORMAT(' * XYZ - CARTESIAN COORDINATE SYSTEM TO BE USED') 590 FORMAT(' * PI - BONDS MATRIX, SPLIT INTO SIGMA-PI-DELL', 1' COMPONENTS, TO BE PRINTED') 600 FORMAT(' * ECHO - ALL INPUT DATA TO BE ECHOED BEFORE RUN') 610 FORMAT(' * H-PRIOR - HEAT OF FORMATION TAKES PRIORITY IN DRC') 620 FORMAT(' * X-PRIOR - GEOMETRY CHANGES TAKE PRIORITY IN DRC') 630 FORMAT(' * T-PRIOR - TIME TAKES PRIORITY IN DRC') 640 FORMAT(' * POLAR - CALCULATE FIRST, SECOND AND THIRD-ORDER' 1,' POLARIZABILITIES') 650 FORMAT(' * COMPFG - PRINT HEAT OF FORMATION CALC''D IN COMPFG') 660 FORMAT(' * DEBUG - DEBUG OPTION TURNED ON') 670 FORMAT(' * RESTART - CALCULATION RESTARTED') C C KEYWORDS ADDED FOR ESP MOPAC C 680 FORMAT(' * ESP - ELECTROSTATIC POTENTIAL CALCULATION') 690 FORMAT(' * NSURF - NUMBER OF LAYERS') 700 FORMAT(' * SCALE - SCALING FACTOR FOR VAN DER WAALS DISTANCE') 710 FORMAT(' * SCINCR - INCREMENT BETWEEN LAYERS') 720 FORMAT(' * SLOPE - SLOPE - USED TO SCALE MNDO ESP CHARGES') 730 FORMAT(' * DIPOLE - FIT THE ESP TO THE CALCULATED DIPOLE') 740 FORMAT(' * DIPX - X COMPONENT OF DIPOLE TO BE FIT') 750 FORMAT(' * DIPY - Y COMPONENT OF DIPOLE TO BE FIT') 760 FORMAT(' * DIPZ - Z COMPONENT OF DIPOLE TO BE FIT') 770 FORMAT(' * CONNOLLY - USE CONNOLLY SURFACE') 780 FORMAT(' * ESPRST - RESTART OF ELECTRIC POTENTIAL CALCULATION') 790 FORMAT(' * POTWRT - WRITE OUT ELECTRIC POT. DATA TO FILE 21') 800 FORMAT(' * WILLIAMS - USE WILLIAMS SURFACE') 810 FORMAT(' * SYMAVG - AVERAGE SYMMETRY EQUIVALENT ESP CHARGES') 820 FORMAT(' * STO3G - DEORTHOGONALIZE ORBITALS IN STO-3G BASIS') 830 FORMAT(' * IRC=N - INTRINSIC REACTION COORDINATE',I3, 1' DEFINED') 840 FORMAT(' * IRC - INTRINSIC REACTION COORDINATE CALCULATION') 850 FORMAT(3(' *',/),' *',15X,' CHARGE ON SYSTEM =',I3,3(/,' *')) 860 FORMAT(' * GRADIENTS- ALL GRADIENTS TO BE PRINTED') 870 FORMAT(' * UHF - UNRESTRICTED HARTREE-FOCK CALCULATION') 880 FORMAT(' * SINGLET - STATE REQUIRED MUST BE A SINGLET') 890 FORMAT(' * BIRADICAL- SYSTEM HAS TWO UNPAIRED ELECTRONS') 900 FORMAT(' * EXCITED - FIRST EXCITED STATE IS TO BE OPTIMIZED') 910 FORMAT(' * SINGLET - SPIN STATE DEFINED AS A SINGLET') 920 FORMAT(' * DOUBLET - SPIN STATE DEFINED AS A DOUBLET') 930 FORMAT(' * TRIPLET - SPIN STATE DEFINED AS A TRIPLET') 940 FORMAT(' * QUARTET - SPIN STATE DEFINED AS A QUARTET') 950 FORMAT(' * QUINTET - SPIN STATE DEFINED AS A QUINTET') 960 FORMAT(' * SEXTET - SPIN STATE DEFINED AS A SEXTET') 970 FORMAT(' * SYMMETRY - SYMMETRY CONDITIONS TO BE IMPOSED') 971 FORMAT(' * GROUP - FREQUENCIES TO BE SYMMETRIZED') 972 FORMAT(' * RMAT - PRINT R MATRICES') 973 FORMAT(' * IPO - PRINT PERMUTATION OPERATOR') 974 FORMAT(' * NODEGEN - DO NOT COLLAPSE DEGENERATE FREQUENCIES') 980 FORMAT(' * MICROS=N -',I4,' MICROSTATES TO BE SUPPLIED FOR C.I.') 990 FORMAT(' * OPEN(N,N)- THERE ARE',I2,' ELECTRONS IN',I2,' LEVELS') 1000 FORMAT(' * T= - A TIME OF',F8.1,' ',A7,' REQUESTED') 1010 FORMAT(' * T= - A TIME OF',G11.3,' ',A7,' REQUESTED') 1020 FORMAT(' * DUMP=N - RESTART FILE WRITTEN EVERY',F8.1, 1' ',A7) 1030 FORMAT(' * DUMP=N - RESTART FILE WRITTEN EVERY',G11.3, 1' ',A7) 1040 FORMAT(' * 1SCF - DO 1 SCF AND THEN STOP ') 1050 FORMAT(' * C.I.=N -',I2,' M.O.S TO BE USED IN C.I.') 1060 FORMAT(' * C.I.=(N,M)-',I2,' DOUBLY FILLED LEVELS USED IN A ',/ 1, ' * C.I. INVOLVING ',I2,' M.O.''S') 1070 FORMAT(' * FORCE - FORCE CALCULATION SPECIFIED') 1080 FORMAT(' * MINDO/3 - THE MINDO/3 HAMILTONIAN TO BE USED') 1090 FORMAT(' * AM1 - THE AM1 HAMILTONIAN TO BE USED') 1100 FORMAT(' * PM3 - THE PM3 HAMILTONIAN TO BE USED') 1110 FORMAT(' * PRECISE - CRITERIA TO BE INCREASED BY 100 TIMES') 1120 FORMAT(' * OLDGEO - PREVIOUS GEOMETRY TO BE USED') 1130 FORMAT(' * NOINTER - INTERATOMIC DISTANCES NOT TO BE PRINTED') 1140 FORMAT(' * ISOTOPE - FORCE MATRIX WRITTEN TO DISK (CHAN. 9 )') 1150 FORMAT(' * DENOUT - DENSITY MATRIX OUTPUT ON CHANNEL 10') 1160 FORMAT(' * SHIFT - A DAMPING FACTOR OF',F8.2,' DEFINED') 1170 FORMAT(' * OLDENS - INITIAL DENSITY MATRIX READ OF DISK') 1180 FORMAT(' * SCFCRT - DEFAULT SCF CRITERION REPLACED BY',G12.3) 1190 FORMAT(' * ENPART - ENERGY TO BE PARTITIONED INTO COMPONENTS') 1200 FORMAT(' * NOXYZ - CARTESIAN COORDINATES NOT TO BE PRINTED') 1210 FORMAT(' * SIGMA - GEOMETRY TO BE OPTIMIZED USING SIGMA.') 1220 FORMAT(' * NLLSQ - GRADIENTS TO BE MINIMIZED USING NLLSQ.') 1230 FORMAT(' * ROOT - IN A C.I. CALCULATION, ROOT',I2, 1 ' TO BE OPTIMIZED.') 1240 FORMAT(' * TRANS - THE REACTION VIBRATION TO BE DELETED FROM', 1' THE THERMO CALCULATION') 1250 FORMAT(' * TRANS= - ',I4,' VIBRATIONS ARE TO BE DELETED FROM', 1' THE THERMO CALCULATION') 1260 FORMAT(' * SADDLE - TRANSITION STATE TO BE OPTIMIZED') 1270 FORMAT(' * LET - OVERRIDE SOME SAFETY CHECKS') 1280 FORMAT(' * COMPFG - PRINT HEAT OF FORMATION CALC''D IN COMPFG') 1290 FORMAT(' * GNORM= - EXIT WHEN GRADIENT NORM DROPS BELOW ',G8.3) 1300 FORMAT(' * PULAY - PULAY''S METHOD TO BE USED IN SCF') 1310 FORMAT(' * STEP1 - FIRST STEP-SIZE IN GRID =',F7.2) 1320 FORMAT(' * STEP2 - SECOND STEP-SIZE IN GRID =',F7.2) 1330 FORMAT(' * POINT1 - NUMBER OF ROWS IN GRID =',I3) 1340 FORMAT(' * POINT2 - NUMBER OF COLUMNS IN GRID =',I3) 1350 FORMAT(' * MAX - GRID SIZE 23*23 ') 1360 FORMAT(' * BAR= - REDUCE BAR LENGTH BY A MAX. OF',F7.2) 1370 FORMAT(' * CAMP,KING- THE CAMP-KING CONVERGER TO BE USED') 1380 FORMAT(' * EIGS - PRINT ALL EIGENVALUES IN ITER') 1390 FORMAT(' * EIGINV - USE HESSIAN EIGENVALUE REVERSION IN EF') 1400 FORMAT(' * NONR - DO NOT USE NEWTON-RAPHSON STEP IN EF') 1410 FORMAT(' * ORIDE - UNCONDITIONALLY, USE CALCULATED LAMDAS IN' 1//' EF') 1420 FORMAT(' * HYPERFINE- HYPERFINE COUPLING CONSTANTS TO BE' 1,' PRINTED') 1430 FORMAT(' * PL - MONITOR CONVERGANCE IN DENSITY MATRIX') 1440 FORMAT(' * FILL= - IN RHF CLOSED SHELL, FORCE M.O.',I3,' TO BE 1 FILLED') 1445 FORMAT(' * FIELD - APPLY A STATIC ELECTRIC FIELD') 1450 FORMAT(' * THERMO - THERMODYNAMIC QUANTITIES TO BE CALCULATED') 1460 FORMAT(' * ROT - SYMMETRY NUMBER OF',I3,' SPECIFIED') 1470 FORMAT(' * ITRY= - DO A MAXIMUM OF',I6,' ITERATIONS FOR SCF') 1480 FORMAT( //10X,' IMPOSSIBLE OPTION REQUESTED,') 1490 FORMAT(' * 0SCF - AFTER READING AND PRINTING DATA, STOP') 1500 FORMAT(' * STEP - STEP-SIZE IN PATH=',F7.3) 1510 FORMAT(' * POINT - NUMBER OF POINTS IN PATH=',I3) END LOGICAL FUNCTION MYWORD(KEYWRD,TESTWD) CHARACTER KEYWRD*(*), TESTWD*(*) MYWORD=.FALSE. 10 J=INDEX(KEYWRD,TESTWD) IF(J.NE.0)THEN 20 IF(KEYWRD(J:J).NE.' ')GOTO 30 J=J+1 GOTO 20 30 MYWORD=.TRUE. DO 60 K=J,241 IF(KEYWRD(K:K).EQ.'='.OR.KEYWRD(K:K).EQ.' ') THEN C C CHECK FOR ATTACHED '=' SIGN C J=K IF(KEYWRD(J:J).EQ.'=')GOTO 50 C C CHECK FOR SEPARATED '=' SIGN C DO 40 J=K+1,241 IF(KEYWRD(J:J).EQ.'=') GOTO 50 40 IF(KEYWRD(J:J).NE.' ')GOTO 10 C C THERE IS NO '=' SIGN ASSOCIATED WITH THIS KEYWORD C GOTO 10 50 KEYWRD(J:J)=' ' C C THERE MUST BE A NUMBER AFTER THE '=' SIGN, SOMEWHERE C GOTO 20 ENDIF 60 KEYWRD(K:K)=' ' ENDIF RETURN END mopac7-1.15/fortran/dger.f0000644000175000017500000001041611053302063012305 00000000000000 SUBROUTINE DGER ( M, N, ALPHA, X, INCX, Y, INCY, A, LDA ) * .. SCALAR ARGUMENTS .. DOUBLE PRECISION ALPHA INTEGER INCX, INCY, LDA, M, N * .. ARRAY ARGUMENTS .. DOUBLE PRECISION A( LDA, * ), X( * ), Y( * ) * .. * * PURPOSE * ======= * * DGER PERFORMS THE RANK 1 OPERATION * * A := ALPHA*X*Y' + A, * * WHERE ALPHA IS A SCALAR, X IS AN M ELEMENT VECTOR, Y IS AN N ELEMENT * VECTOR AND A IS AN M BY N MATRIX. * * PARAMETERS * ========== * * M - INTEGER. * ON ENTRY, M SPECIFIES THE NUMBER OF ROWS OF THE MATRIX A. * M MUST BE AT LEAST ZERO. * UNCHANGED ON EXIT. * * N - INTEGER. * ON ENTRY, N SPECIFIES THE NUMBER OF COLUMNS OF THE MATRIX A. * N MUST BE AT LEAST ZERO. * UNCHANGED ON EXIT. * * ALPHA - DOUBLE PRECISION. * ON ENTRY, ALPHA SPECIFIES THE SCALAR ALPHA. * UNCHANGED ON EXIT. * * X - DOUBLE PRECISION ARRAY OF DIMENSION AT LEAST * ( 1 + ( M - 1 )*ABS( INCX ) ). * BEFORE ENTRY, THE INCREMENTED ARRAY X MUST CONTAIN THE M * ELEMENT VECTOR X. * UNCHANGED ON EXIT. * * INCX - INTEGER. * ON ENTRY, INCX SPECIFIES THE INCREMENT FOR THE ELEMENTS OF * X. INCX MUST NOT BE ZERO. * UNCHANGED ON EXIT. * * Y - DOUBLE PRECISION ARRAY OF DIMENSION AT LEAST * ( 1 + ( N - 1 )*ABS( INCY ) ). * BEFORE ENTRY, THE INCREMENTED ARRAY Y MUST CONTAIN THE N * ELEMENT VECTOR Y. * UNCHANGED ON EXIT. * * INCY - INTEGER. * ON ENTRY, INCY SPECIFIES THE INCREMENT FOR THE ELEMENTS OF * Y. INCY MUST NOT BE ZERO. * UNCHANGED ON EXIT. * * A - DOUBLE PRECISION ARRAY OF DIMENSION ( LDA, N ). * BEFORE ENTRY, THE LEADING M BY N PART OF THE ARRAY A MUST * CONTAIN THE MATRIX OF COEFFICIENTS. ON EXIT, A IS * OVERWRITTEN BY THE UPDATED MATRIX. * * LDA - INTEGER. * ON ENTRY, LDA SPECIFIES THE FIRST DIMENSION OF A AS DECLARED * IN THE CALLING (SUB) PROGRAM. LDA MUST BE AT LEAST * MAX( 1, M ). * UNCHANGED ON EXIT. * * * LEVEL 2 BLAS ROUTINE. * * -- WRITTEN ON 22-OCTOBER-1986. * JACK DONGARRA, ARGONNE NATIONAL LAB. * JEREMY DU CROZ, NAG CENTRAL OFFICE. * SVEN HAMMARLING, NAG CENTRAL OFFICE. * RICHARD HANSON, SANDIA NATIONAL LABS. * * * .. PARAMETERS .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. LOCAL SCALARS .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JY, KX * .. EXTERNAL SUBROUTINES .. EXTERNAL XERBLA * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * INFO = 0 IF ( M.LT.0 )THEN INFO = 1 ELSE IF( N.LT.0 )THEN INFO = 2 ELSE IF( INCX.EQ.0 )THEN INFO = 5 ELSE IF( INCY.EQ.0 )THEN INFO = 7 ELSE IF( LDA.LT.MAX( 1, M ) )THEN INFO = 9 END IF IF( INFO.NE.0 )THEN CALL XERBLA( 'DGER ', INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR.( ALPHA.EQ.ZERO ) ) $ RETURN * * START THE OPERATIONS. IN THIS VERSION THE ELEMENTS OF A ARE * ACCESSED SEQUENTIALLY WITH ONE PASS THROUGH A. * IF( INCY.GT.0 )THEN JY = 1 ELSE JY = 1 - ( N - 1 )*INCY END IF IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( Y( JY ).NE.ZERO )THEN TEMP = ALPHA*Y( JY ) DO 10, I = 1, M A( I, J ) = A( I, J ) + X( I )*TEMP 10 CONTINUE END IF JY = JY + INCY 20 CONTINUE ELSE IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( M - 1 )*INCX END IF DO 40, J = 1, N IF( Y( JY ).NE.ZERO )THEN TEMP = ALPHA*Y( JY ) IX = KX DO 30, I = 1, M A( I, J ) = A( I, J ) + X( IX )*TEMP IX = IX + INCX 30 CONTINUE END IF JY = JY + INCY 40 CONTINUE END IF * RETURN * * END OF DGER . * END mopac7-1.15/fortran/dot.f0000644000175000017500000000105711053302064012154 00000000000000 DOUBLE PRECISION FUNCTION DOT(X,Y,N) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION X(*), Y(*) ************************************************************************ * * DOT FORMS THE SCALAR PRODUCT OF TWO VECTORS. * * ON INPUT X = FIRST VECTOR, OF LENGTH N. * Y = SECOND VECTOR, OF LENGTH N. * * ON RETURN DOT = DOT PRODUCT OF X AND Y. * ************************************************************************ DOT = 0.0D0 DO 10 I=1,N 10 DOT = DOT + X(I)*Y(I) RETURN END mopac7-1.15/fortran/jcarin.f0000644000175000017500000000771111053302064012637 00000000000000 SUBROUTINE JCARIN (COORD,XPARAM,STEP,PRECI,B,NCOL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C JACOBIAN dCARTESIAN/dINTERNAL, WORKED OUT BY FINITE DIFFERENCE. C INPUT C XPARAM(*) : INTERNAL COORDINATES C STEP : STEP SIZE FOR FINITE DIFFERENCE METHOD C PRECI : .TRUE. IF 2-POINTS FINITE DIFFERENCES TO BE USED, C .FALSE. OTHERWISE. C OUTPUT C B(NVAR,NCOL) : JACOBIAN, STEP TIME TOO LARGE. C COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT 3 /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, YPARAM(MAXPAR) 4 /EULER / TVEC(3,3),ID 5 /UCELL / L1L,L2L,L3L,L1U,L2U,L3U 6 /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) DIMENSION COORD(3,*),XPARAM(*),B(NVAR,*), COOLD(3,NUMATM*27) LOGICAL PRECI C NCOL=3*NUMAT IF(ID.NE.0) 1 NCOL=NCOL*(L1U-L1L+1)*(L2U-L2L+1)*(L3U-L3L+1) C C INTERNAL OF CENTRAL POINT DO 10 IVAR=1,NVAR 10 GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR) C IF (ID.EQ.0) THEN C C MOLECULAR SYSTEM C ---------------- DO 30 IVAR=1,NVAR C STEP FORWARD GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR)+STEP IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY (GEO,COORD) DO 20 J=1,NCOL 20 B(IVAR,J)=COORD(J,1) 30 GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR) IF (PRECI) THEN DO 50 IVAR=1,NVAR C STEP BACKWARD GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR)-STEP IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY (GEO,COORD) DO 40 J=1,NCOL 40 B(IVAR,J)=B(IVAR,J)-COORD(J,1) 50 GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR) ELSE C CENTRAL POINT IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY (GEO,COORD) DO 60 IVAR=1,NVAR DO 60 J=1,NCOL 60 B(IVAR,J)=B(IVAR,J)-COORD(J,1) ENDIF ELSE C C SOLID STATE C ----------- DO 80 IVAR=1,NVAR C STEP FORWARD GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR)+STEP IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY (GEO,COORD) IJ=0 DO 70 II=1,NUMAT DO 70 IL=L1L,L1U DO 70 JL=L2L,L2U DO 70 KL=L3L,L3U DO 70 LL=1,3 IJ=IJ+1 70 B(IVAR,IJ)=COORD(LL,II) 1 +TVEC(LL,1)*IL+TVEC(LL,2)*JL+TVEC(LL,3)*KL 80 GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR) IF (PRECI) THEN DO 100 IVAR=1,NVAR C STEP BACKWARD GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR)-STEP IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY (GEO,COORD) IJ=0 DO 90 II=1,NUMAT DO 90 IL=L1L,L1U DO 90 JL=L2L,L2U DO 90 KL=L3L,L3U DO 90 LL=1,3 IJ=IJ+1 90 B(IVAR,IJ)=B(IVAR,IJ)-COORD(LL,II) 1 -TVEC(LL,1)*IL-TVEC(LL,2)*JL-TVEC(LL,3)*KL 100 GEO(LOC(2,IVAR),LOC(1,IVAR))=XPARAM(IVAR) ELSE C CENTRAL POINT IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY (GEO,COORD) IJ=0 DO 110 II=1,NUMAT DO 110 IL=L1L,L1U DO 110 JL=L2L,L2U DO 110 KL=L3L,L3U IJ=IJ+1 DO 110 LL=1,3 110 COOLD(LL,IJ)=COORD(LL,II) 1 +TVEC(LL,1)*IL+TVEC(LL,2)*JL+TVEC(LL,3)*KL DO 120 IVAR=1,NVAR DO 120 IJ=1,NCOL 120 B(IVAR,IJ)=B(IVAR,IJ)-COOLD(IJ,1) ENDIF ENDIF RETURN END mopac7-1.15/fortran/mopac7app.f0000644000175000017500000001533411053302063013257 00000000000000 PROGRAM MOPAC C C Notice of Public Domain nature of MOPAC C C 'This computer program is a work of the United States C Government and as such is not subject to protection by C copyright (17 U.S.C. # 105.) Any person who fraudulently C places a copyright notice or does any other act contrary C to the provisions of 17 U.S. Code 506(c) shall be subject C to the penalties provided therein. This notice shall not C be altered or removed from this software and is to be on C all reproductions.' C C IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /SCFTYP/ EMIN, LIMSCF COMMON /KEYWRD/ KEYWRD COMMON /OKMANY/ ISOK COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /MESAGE/ IFLEPO,ISCF COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ATHEAT/ ATHEAT COMMON /LAST / LAST COMMON /ATOMIC/ EISOL(107),EHEAT(107) COMMON /NUMCAL/ NUMCAL C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /PATH / LATOM,LPARAM,REACT(200) C COSMO change LOGICAL ISEPS, USEPS , UPDA COMMON /ISEPS/ ISEPS, USEPS, UPDA C end of COSMO change CHARACTER*241 KEYWRD, GETNAM*80 LOGICAL ISOK, LIMSCF CALL GETDAT C C CLOSE UNIT 6 IN CASE IT WAS ALREADY PRE-ASSIGNED C C *** don't open unit 6; the output is done to STDOUT instead of file... C CLOSE (6) C OPEN(UNIT=6,FILE=GETNAM('FOR006'),STATUS='NEW') C REWIND 6 C# CALL TIMER('FIRST LINE') NUMCAL=0 ISOK=.TRUE. 10 NUMCAL=NUMCAL+1 C TIME0=SECOND() C C READ AND CHECK INPUT FILE, EXIT IF NECESSARY. C WRITE INPUT FILE TO UNIT 6 AS FEEDBACK TO USER C 20 CALL READMO EMIN=0.D0 C# CALL TIMER('AFTER READ') IF(NATOMS.EQ.0) GOTO 50 IF(INDEX(KEYWRD,'AUTHOR') .NE. 0) THEN WRITE(6,'(10X,'' MOPAC - A GENERAL MOLECULAR ORBITAL PACKAGE'', 1/ ,10X,'' ORIGINAL VERSION WRITTEN IN 1983'')') WRITE(6,'(10X,'' BY JAMES J. P. STEWART AT THE'',/ 1 ,10X,'' UNIVERSITY OF TEXAS AT AUSTIN'',/ 2 ,10X,'' AUSTIN, TEXAS, 78712'')') WRITE(6,'(10X,'' MODIFIED TO DO ESP CALCULATIONS BY'' 1 ,10X,'' BRENT H. BESLER AND K. M. MERZ JR. 1989'')') ENDIF C C INITIALIZE CALCULATION AND WRITE CALCULATION INDEPENDENT INFO C IF(INDEX(KEYWRD,'0SCF') .NE. 0) THEN WRITE(6,'(A)')' GEOMETRY IN MOPAC Z-MATRIX FORMAT' CALL GEOUT(6) IF(INDEX(KEYWRD,' AIGOUT').NE.0)THEN WRITE(6,'(//,A)')' GEOMETRY IN GAUSSIAN Z-MATRIX FORMAT' CALL WRTTXT(6) CALL GEOUTG(6) ENDIF GOTO 50 ENDIF CALL MOLDAT(0) C COSMO change C INITIALIZE SOLVATION ISEPS = .FALSE. USEPS = .FALSE. UPDA = .FALSE. INDEPS=INDEX(KEYWRD,'EPS=') IF (INDEPS .NE. 0) THEN ISEPS = .TRUE. USEPS = .TRUE. UPDA =.TRUE. * CALL INITSV (INDEPS) END IF C A.KLAMT 18.7.91 C end of COSMO change IF(INDEX(KEYWRD,'EXTERNAL') .NE. 0) THEN CALL DATIN C C RECALCULATE THE ATOMIC ENERGY C ATHEAT=0.D0 EAT=0.D0 DO 30 II=1,NUMAT NI=NAT(II) ATHEAT=ATHEAT+EHEAT(NI) 30 EAT =EAT +EISOL(NI) ATHEAT=ATHEAT-EAT*23.061D0 ENDIF IF (INDEX(KEYWRD,'RESTART').EQ.0)THEN IF (INDEX(KEYWRD,'1SCF').NE.0) THEN IF(LATOM.NE.0)THEN WRITE(6,'(//,10X,A)')'1SCF SPECIFIED WITH PATH. THIS PAI 1R OF' WRITE(6,'( 10X,A)')'OPTIONS IS NOT ALLOWED' GOTO 50 ENDIF IFLEPO=1 ISCF=1 LAST=1 I=INDEX(KEYWRD,'GRAD') DO 39 J=1,NVAR 39 GRAD(J)=0.D0 CALL COMPFG(XPARAM,.TRUE.,ESCF,.TRUE.,GRAD,I.NE.0) GOTO 40 ENDIF ENDIF C C CALCULATE DYNAMIC REACTION COORDINATE. C C IF(INDEX(KEYWRD,'SADDLE') .NE. 0) THEN CALL REACT1(ESCF) GOTO 50 ENDIF IF(INDEX(KEYWRD,'STEP1') .NE. 0) THEN CALL GRID GOTO 50 ENDIF IF (LATOM .NE. 0) THEN C C DO PATH C IF (INDEX(KEYWRD,'STEP').EQ.0.OR. 1INDEX(KEYWRD,'POINT').EQ.0) THEN CALL PATHS GOTO 50 ENDIF CALL PATHK GOTO 50 ENDIF IF ( INDEX(KEYWRD,'FORCE') .NE. 0 1 .OR. INDEX(KEYWRD,'IRC=' ) .NE. 0 2 .OR. INDEX(KEYWRD,'THERM') .NE. 0 ) THEN C C FORCE CALCULATION IF DESIRED C CALL FORCE GOTO 50 ENDIF IF(INDEX(KEYWRD,' DRC') + INDEX(KEYWRD,' IRC') .NE. 0) THEN C C IN THIS CONTEXT, "REACT" HOLDS INITIAL VELOCITY VECTOR COMPONENTS. C CALL DRC(REACT,REACT) GOTO 50 ENDIF C IF(INDEX(KEYWRD,'NLLSQ') .NE. 0) THEN CALL NLLSQ(XPARAM, NVAR ) CALL COMPFG(XPARAM,.TRUE.,ESCF,.TRUE.,GRAD,.TRUE.) GOTO 40 ENDIF C IF(INDEX(KEYWRD,'SIGMA') .NE. 0) THEN CALL POWSQ(XPARAM, NVAR, ESCF) GOTO 40 ENDIF C C EF OPTIMISATION C IF(INDEX(KEYWRD,' EF').NE.0 .OR. INDEX(KEYWRD,' TS').NE.0) THEN IF(INDEX(KEYWRD,'GEO-OK').EQ.0.AND.NVAR.GT.3*NATOMS-6)THEN WRITE(6,'(A)')' EIGENVECTOR FOLLOWING IS NOT RECOMMENDED WHE 1N' WRITE(6,'(A)')' MORE THAN 3N-6 COORDINATES ARE TO BE OPTIMIZ 1ED' WRITE(6,'(A)')' TO CONTINUE, SPECIFY ''GEO-OK''' STOP ENDIF CALL EF (XPARAM,NVAR,ESCF) GOTO 40 ENDIF C C ORDINARY GEOMETRY OPTIMISATION C C C ORDINARY GEOMETRY OPTIMISATION C C# CALL TIMER('BEFORE FLEPO') C COSMO change 1/9/92 SJC UPDA = .FALSE. C end of COSMO change CALL FLEPO(XPARAM, NVAR, ESCF) 40 LAST=1 IF(IFLEPO.GE.0)CALL WRITMO(TIME0, ESCF) IF(INDEX(KEYWRD,'POLAR') .NE. 0) THEN CALL POLAR ENDIF IF(INDEX(KEYWRD,' ESP') .NE. 0)THEN C IF YOU WANT TO USE THE ESP PROGRAM, UNCOMMENT THE LINE C "C# CALL ESP", ADD "ESP, " TO MOPAC.OPT, THEN COMPILE ESP AND C MNDO, AND RELINK. CALL ESP ENDIF 50 TIM=SECOND()-TIME0 LIMSCF=.FALSE. WRITE(6,'(///,'' TOTAL CPU TIME: '',F16.2,'' SECONDS'')') TIM WRITE(6,'(/,'' == MOPAC DONE =='')') IF(ISOK) GOTO 10 END mopac7-1.15/fortran/search.f0000644000175000017500000001074011053302064012632 00000000000000 SUBROUTINE SEARCH(XPARAM,ALPHA,SIG,NVAR,GMIN,OKF, FUNCT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XPARAM(*), SIG(*) ************************************************************************ * * SEARCH PERFORMS A LINE SEARCH FOR POWSQ. IT MINIMIZES THE NORM OF * THE GRADIENT VECTOR IN THE DIRECTION SIG. * * ON INPUT XPARAM = CURRENT POINT IN NVAR DIMENSIONAL SPACE. * ALPHA = STEP SIZE (IN FACT ALPHA IS CALCULATED IN SEARCH). * SIG = SEARCH DIRECTION VECTOR. * NVAR = NUMBER OF PARAMETERS IN SIG (& XPARAM) * * ON OUTPUT XPARAM = PARAMETERS OF MINIMUM. * ALPHA = DISTANCE TO MINIMUM. * GMIN = GRADIENT NORM AT MINIMUM. * OKF = FUNCTION WAS IMPROVED. ************************************************************************ COMMON /SIGMA1/ GNEXT, AMIN, ANEXT COMMON /SIGMA2/ GNEXT1(MAXPAR), GMIN1(MAXPAR) COMMON/KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL DIMENSION GRAD(MAXPAR),XREF(MAXPAR), GREF(MAXPAR), XMIN1(MAXPAR) SAVE DEBUG, G, TINY, LOOKS, TOLERG CHARACTER*241 KEYWRD LOGICAL DEBUG, OKF, NOPR DATA ICALCN/0/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL C C TOLG = CRITERION FOR EXIT BY RELATIVE CHANGE IN GRADIENT. C DEBUG=(INDEX(KEYWRD,'LINMIN') .NE. 0) NOPR=( .NOT. DEBUG) LOOKS=0 OKF=.TRUE. TINY=0.1D0 TOLERG=0.02D0 G=100.D0 ALPHA=0.1D0 ENDIF DO 10 I=1,NVAR GREF(I) =GMIN1(I) GNEXT1(I)=GMIN1(I) XMIN1(I) =XPARAM(I) 10 XREF(I) =XPARAM(I) IF(ABS(ALPHA) .GT. 0.2)ALPHA=SIGN(0.2D0,ALPHA) IF(DEBUG) THEN WRITE(6,'('' SEARCH DIRECTION VECTOR'')') WRITE(6,'(6F12.6)')(SIG(I),I=1,NVAR) WRITE(6,'('' INITIAL GRADIENT VECTOR'')') WRITE(6,'(6F12.6)')(GMIN1(I),I=1,NVAR) ENDIF GB=DOT(GMIN1,GREF,NVAR) IF(DEBUG) WRITE(6,'('' GRADIENT AT START OF SEARCH:'',F16.6)') 1SQRT(GB) GSTORE=GB AMIN=0.D0 GMINN=1.D9 C C TA=0.D0 GA=GB GB=1.D9 ITRYS=0 GOTO 30 20 SUM=GA/(GA-GB) ITRYS=ITRYS+1 IF(ABS(SUM) .GT. 3.D0) SUM=SIGN(3.D0,SUM) ALPHA=(TB-TA)*SUM+TA C C XPARAM IS THE GEOMETRY OF THE PREDICTED MINIMUM ALONG THE LINE C 30 CONTINUE DO 40 I=1,NVAR 40 XPARAM(I)=XREF(I)+ALPHA*SIG(I) C C CALCULATE GRADIENT NORM AND GRADIENTS AT THE PREDICTED MINIMUM C IF(ITRYS.EQ.1)THEN DO 50 I=1,NVAR 50 GRAD(I)=0.D0 ENDIF CALL COMPFG (XPARAM, .TRUE., FUNCT, .TRUE., GRAD, .TRUE.) LOOKS=LOOKS+1 C C G IS THE PROJECTION OF THE GRADIENT ALONG SIG. C G=DOT(GREF,GRAD,NVAR) GTOT=SQRT(DOT(GRAD,GRAD,NVAR)) IF( .NOT. NOPR) 1WRITE(6,'('' LOOKS'',I3,'' ALPHA ='',F12.6,'' GRADIENT'',F12.3, 2'' G ='',F16.6)') 3LOOKS,ALPHA,SQRT(DOT(GRAD,GRAD,NVAR)),G IF(GTOT .LT. GMINN) THEN GMINN=GTOT IF(ABS(AMIN-ALPHA) .GT.1.D-2) THEN * * WE CAN MOVE ANEXT TO A POINT NEAR, BUT NOT TOO NEAR, AMIN, SO THAT THE * SECOND DERIVATIVESWILLBEREALISTIC(D2E/DX2=(GNEXT1-GMIN1)/(ANEXT-AMIN)) * ANEXT=AMIN DO 60 I=1,NVAR 60 GNEXT1(I)=GMIN1(I) ENDIF AMIN=ALPHA DO 70 I=1,NVAR IF(GMINN.LT.GMIN) XMIN1(I)=XPARAM(I) 70 GMIN1(I)=GRAD(I) IF(GMIN.GT.GMINN)GMIN=GMINN ENDIF IF(ITRYS .GT. 8) GOTO 80 IF (ABS(G/GSTORE).LT.TINY .OR. ABS(G) .LT. TOLERG) GO TO 80 IF(ABS(G) .LT. MAX(ABS(GA),ABS(GB)) .OR. 1 GA*GB .GT. 0.D0 .AND. G*GA .LT. 0.D0) THEN C C G IS AN IMPROVEMENT ON GA OR GB. C IF(ABS(GB) .LT. ABS(GA))THEN TA=ALPHA GA=G GO TO 20 ELSE TB=ALPHA GB=G GO TO 20 ENDIF ELSE C# WRITE(6,'(//10X,'' FAILED IN SEARCH, SEARCH CONTINUING'')') GOTO 80 ENDIF 80 CONTINUE GMINN=SQRT(DOT(GMIN1,GMIN1,NVAR)) DO 90 I=1,NVAR 90 XPARAM(I)=XMIN1(I) IF(DEBUG) THEN WRITE(6,'('' AT EXIT FROM SEARCH'')') WRITE(6,'('' XPARAM'',6F12.6)')(XPARAM(I),I=1,NVAR) WRITE(6,'('' GNEXT1'',6F12.6)')(GNEXT1(I),I=1,NVAR) WRITE(6,'('' GMIN1 '',6F12.6)')(GMIN1(I),I=1,NVAR) WRITE(6,'('' AMIN, ANEXT,GMIN'',4F12.6)') 1 AMIN,ANEXT,GMIN ENDIF IF(GMINN.GT.GMIN)THEN DO 100 I=1,NVAR 100 XPARAM(I)=XREF(I) ENDIF RETURN C END mopac7-1.15/fortran/rsp.f0000644000175000017500000004234011053302063012171 00000000000000 SUBROUTINE RSP(A,N,MATZ,W,Z) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION A(*), W(N), Z(N,N) ******************************************************************* * * EISPACK DIAGONALIZATION ROUTINES: TO FIND THE EIGENVALUES AND * EIGENVECTORS (IF DESIRED) OF A REAL SYMMETRIC PACKED MATRIX. * ON INPUT- N IS THE ORDER OF THE MATRIX A, * A CONTAINS THE LOWER TRIANGLE OF THE REAL SYMMETRIC * PACKED MATRIX STORED ROW-WISE, * MATZ IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF ONLY * EIGENVALUES ARE DESIRED, OTHERWISE IT IS SET TO * ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND * EIGENVECTORS. * ON OUTPUT- W CONTAINS THE EIGENVALUES IN ASCENDING ORDER, * Z CONTAINS THE EIGENVECTORS IF MATZ IS NOT ZERO, * ******************************************************************* * THIS SUBROUTINE WAS CHOSEN AS BEING THE MOST RELIABLE. (JJPS) C QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW, C APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY C C ------------------------------------------------------------------ C DIMENSION FV1(MAXHEV*4+MAXLIT*3),FV2(MAXHEV*4+MAXLIT*3) SAVE FIRST, EPS, ETA, NV LOGICAL FIRST DATA FIRST /.TRUE./ IF (FIRST) THEN FIRST=.FALSE. CALL EPSETA(EPS,ETA) ENDIF NV=(N*(N+1))/2 NM=N CALL TRED3(N,NV,A,W,FV1,FV2,EPS,EPS) IF (MATZ .NE. 0) GO TO 10 C ********** FIND EIGENVALUES ONLY ********** CALL TQLRAT(N,W,FV2,IERR,EPS) GO TO 40 C ********** FIND BOTH EIGENVALUES AND EIGENVECTORS ********** 10 DO 30 I = 1, N C DO 20 J = 1, N Z(J,I)=0.0D0 20 CONTINUE C Z(I,I)=1.0D0 30 CONTINUE C CALL TQL2(NM,N,W,FV1,Z,IERR,EPS) IF (IERR .NE. 0) GO TO 40 CALL TRBAK3(NM,N,NV,A,N,Z) C ********** LAST CARD OF RSP ********** 40 RETURN END SUBROUTINE EPSETA(EPS,ETA) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C COMPUTE AND RETURN ETA, THE SMALLEST REPRESENTABLE NUMBER, C AND EPS IS THE SMALLEST NUMBER FOR WHICH 1+EPS.NE.1. C C ETA = 1.D0 10 IF((ETA/2.D0).EQ.0.D0) GOTO 20 IF(ETA.LT.1.D-38) GOTO 20 ETA = ETA / 2.D0 GOTO 10 20 EPS = 1.D0 30 IF((1.D0+(EPS/2.D0)).EQ.1.D0) GOTO 40 IF(EPS.LT.1.D-17) GOTO 40 EPS = EPS / 2.D0 GOTO 30 40 RETURN END SUBROUTINE TQL2(NM,N,D,E,Z,IERR,EPS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C ===== PROCESSED BY AUGMENT, VERSION 4N ===== C APPROVED FOR VAX 11/780 ON MAY 6,1980. J.D.NEECE C ----- LOCAL VARIABLES ----- C ----- GLOBAL VARIABLES ----- DIMENSION D(N), E(N), Z(NM,N) C ----- SUPPORTING PACKAGE FUNCTIONS ----- C ===== TRANSLATED PROGRAM ===== C C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TQL2, C NUM. MATH. 11, 293-306(1968) BY BOWDLER, MARTIN, REINSCH, AND C WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 227-240(1971). C C THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS C OF A SYMMETRIC TRIDIAGONAL MATRIX BY THE QL METHOD. C THE EIGENVECTORS OF A FULL SYMMETRIC MATRIX CAN ALSO C BE FOUND IF TRED2 HAS BEEN USED TO REDUCE THIS C FULL MATRIX TO TRIDIAGONAL FORM. C C ON INPUT- C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT, C C N IS THE ORDER OF THE MATRIX, C C D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX, C C E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE INPUT MATRIX C IN ITS LAST N-1 POSITIONS. E(1) IS ARBITRARY, C C Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN THE C REDUCTION BY TRED2, IF PERFORMED. IF THE EIGENVECTORS C OF THE TRIDIAGONAL MATRIX ARE DESIRED, Z MUST CONTAIN C THE IDENTITY MATRIX. C C ON OUTPUT- C C D CONTAINS THE EIGENVALUES IN ASCENDING ORDER. IF AN C ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT BUT C UNORDERED FOR INDICES 1,2,...,IERR-1, C C E HAS BEEN DESTROYED, C C Z CONTAINS ORTHONORMAL EIGENVECTORS OF THE SYMMETRIC C TRIDIAGONAL (OR FULL) MATRIX. IF AN ERROR EXIT IS MADE, C Z CONTAINS THE EIGENVECTORS ASSOCIATED WITH THE STORED C EIGENVALUES, C C IERR IS SET TO C ZERO FOR NORMAL RETURN, C J IF THE J-TH EIGENVALUE HAS NOT BEEN C DETERMINED AFTER 30 ITERATIONS. C C QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW, C APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY C C ------------------------------------------------------------------ C C IERR = 0 IF (N .EQ. 1) GO TO 160 C DO 10 I = 2, N 10 E(I-1) = E(I) C F=0.0D0 B=0.0D0 E(N)=0.0D0 C DO 110 L = 1, N J = 0 H=EPS*(ABS (D(L))+ABS (E(L))) IF (B .LT. H) B=H C ********** LOOK FOR SMALL SUB-DIAGONAL ELEMENT ********** DO 20 M = L, N IF (ABS (E(M)).LE.B) GO TO 30 C ********** E(N) IS ALWAYS ZERO, SO THERE IS NO EXIT C THROUGH THE BOTTOM OF THE LOOP ********** 20 CONTINUE C 30 IF (M .EQ. L) GO TO 100 40 IF (J .EQ. 30) GO TO 150 J = J + 1 C ********** FORM SHIFT ********** L1 = L + 1 G = D(L) P=(D(L1)-G)/(2.0D0*E(L)) R=SQRT (P*P+1.0D0) D(L)=E(L)/(P+SIGN (R,P)) H = G - D(L) C DO 50 I = L1, N 50 D(I) = D(I) - H C F = F + H C ********** QL TRANSFORMATION ********** P = D(M) C=1.0D0 S=0.0D0 MML = M - L C ********** FOR I=M-1 STEP -1 UNTIL L DO -- ********** DO 90 II = 1, MML I = M - II G = C * E(I) H = C * P IF (ABS (P).LT.ABS (E(I))) GO TO 60 C = E(I) / P R=SQRT (C*C+1.0D0) E(I+1) = S * P * R S = C / R C=1.0D0/R GO TO 70 60 C = P / E(I) R=SQRT (C*C+1.0D0) E(I+1) = S * E(I) * R S=1.0D0/R C = C * S 70 P = C * D(I) - S * G D(I+1) = H + S * (C * G + S * D(I)) C ********** FORM VECTOR ********** DO 80 K = 1, N H = Z(K,I+1) Z(K,I+1) = S * Z(K,I) + C * H Z(K,I) = C * Z(K,I) - S * H 80 CONTINUE C 90 CONTINUE C E(L) = S * P D(L) = C * P IF (ABS (E(L)).GT.B) GO TO 40 100 D(L) = D(L) + F 110 CONTINUE C ********** ORDER EIGENVALUES AND EIGENVECTORS ********** DO 140 II = 2, N I = II - 1 K = I P = D(I) C DO 120 J = II, N IF (D(J) .GE. P) GO TO 120 K = J P = D(J) 120 CONTINUE C IF (K .EQ. I) GO TO 140 D(K) = D(I) D(I) = P C DO 130 J = 1, N P = Z(J,I) Z(J,I) = Z(J,K) Z(J,K) = P 130 CONTINUE C 140 CONTINUE C GO TO 160 C ********** SET ERROR -- NO CONVERGENCE TO AN C EIGENVALUE AFTER 30 ITERATIONS ********** 150 IERR = L 160 RETURN C ********** LAST CARD OF TQL2 ********** END SUBROUTINE TQLRAT(N,D,E2,IERR,EPS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C ===== PROCESSED BY AUGMENT, VERSION 4N ===== C APPROVED FOR VAX 11/780 ON MAY 6,1980. J.D.NEECE C ----- LOCAL VARIABLES ----- C ----- GLOBAL VARIABLES ----- DIMENSION D(N), E2(N) C ----- SUPPORTING PACKAGE FUNCTIONS ----- C ===== TRANSLATED PROGRAM ===== C C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TQLRAT, C ALGORITHM 464, COMM. ACM 16, 689(1973) BY REINSCH. C C THIS SUBROUTINE FINDS THE EIGENVALUES OF A SYMMETRIC C TRIDIAGONAL MATRIX BY THE RATIONAL QL METHOD. C C ON INPUT- C C N IS THE ORDER OF THE MATRIX, C C D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX, C C E2 CONTAINS THE SQUARES OF THE SUBDIAGONAL ELEMENTS OF THE C INPUT MATRIX IN ITS LAST N-1 POSITIONS. E2(1) IS ARBITRARY. C C ON OUTPUT- C C D CONTAINS THE EIGENVALUES IN ASCENDING ORDER. IF AN C ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT AND C ORDERED FOR INDICES 1,2,...IERR-1, BUT MAY NOT BE C THE SMALLEST EIGENVALUES, C C E2 HAS BEEN DESTROYED, C C IERR IS SET TO C ZERO FOR NORMAL RETURN, C J IF THE J-TH EIGENVALUE HAS NOT BEEN C DETERMINED AFTER 30 ITERATIONS. C C QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW, C APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY C C ------------------------------------------------------------------ C C IERR = 0 IF (N .EQ. 1) GO TO 140 C DO 10 I = 2, N 10 E2(I-1) = E2(I) C F=0.0D0 B=0.0D0 E2(N)=0.0D0 C DO 120 L = 1, N J = 0 H=EPS*(ABS (D(L))+SQRT (E2(L))) IF (B .GT. H) GO TO 20 B = H C = B * B C ********** LOOK FOR SMALL SQUARED SUB-DIAGONAL ELEMENT ********** 20 DO 30 M = L, N IF (E2(M) .LE. C) GO TO 40 C ********** E2(N) IS ALWAYS ZERO, SO THERE IS NO EXIT C THROUGH THE BOTTOM OF THE LOOP ********** 30 CONTINUE C 40 IF (M .EQ. L) GO TO 80 50 IF (J .EQ. 30) GO TO 130 J = J + 1 C ********** FORM SHIFT ********** L1 = L + 1 S=SQRT (E2(L)) G = D(L) P=(D(L1)-G)/(2.0D0*S) R=SQRT (P*P+1.0D0) D(L)=S/(P+SIGN (R,P)) H = G - D(L) C DO 60 I = L1, N 60 D(I) = D(I) - H C F = F + H C ********** RATIONAL QL TRANSFORMATION ********** G = D(M) IF (G.EQ.0.0D0) G=B H = G S=0.0D0 MML = M - L C ********** FOR I=M-1 STEP -1 UNTIL L DO -- ********** DO 70 II = 1, MML I = M - II P = G * H R = P + E2(I) E2(I+1) = S * R S = E2(I) / R D(I+1) = H + S * (H + D(I)) G = D(I) - E2(I) / G IF (G.EQ.0.0D0) G=B H = G * P / R 70 CONTINUE C E2(L) = S * G D(L) = H C ********** GUARD AGAINST UNDERFLOW IN CONVERGENCE TEST ********** IF (H.EQ.0.0D0) GO TO 80 IF (ABS (E2(L)).LE.ABS (C/H)) GO TO 80 E2(L) = H * E2(L) IF (E2(L).NE.0.0D0) GO TO 50 80 P = D(L) + F C ********** ORDER EIGENVALUES ********** IF (L .EQ. 1) GO TO 100 C ********** FOR I=L STEP -1 UNTIL 2 DO -- ********** DO 90 II = 2, L I = L + 2 - II IF (P .GE. D(I-1)) GO TO 110 D(I) = D(I-1) 90 CONTINUE C 100 I = 1 110 D(I) = P 120 CONTINUE C GO TO 140 C ********** SET ERROR -- NO CONVERGENCE TO AN C EIGENVALUE AFTER 30 ITERATIONS ********** 130 IERR = L 140 RETURN C ********** LAST CARD OF TQLRAT ********** END SUBROUTINE TRBAK3(NM,N,NV,A,M,Z) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C ===== PROCESSED BY AUGMENT, VERSION 4N ===== C APPROVED FOR VAX 11/780 ON MAY 6,1980. J.D.NEECE C ----- LOCAL VARIABLES ----- C ----- GLOBAL VARIABLES ----- DIMENSION A(NV), Z(NM,M) C ===== TRANSLATED PROGRAM ===== C C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TRBAK3, C NUM. MATH. 11, 181-195(1968) BY MARTIN, REINSCH, AND WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971). C C THIS SUBROUTINE FORMS THE EIGENVECTORS OF A REAL SYMMETRIC C MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING C SYMMETRIC TRIDIAGONAL MATRIX DETERMINED BY TRED3. C C ON INPUT- C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT, C C N IS THE ORDER OF THE MATRIX, C C NV MUST BE SET TO THE DIMENSION OF THE ARRAY PARAMETER A C AS DECLARED IN THE CALLING PROGRAM DIMENSION STATEMENT, C C A CONTAINS INFORMATION ABOUT THE ORTHOGONAL TRANSFORMATIONS C USED IN THE REDUCTION BY TRED3 IN ITS FIRST C N*(N+1)/2 POSITIONS, C C M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED, C C Z CONTAINS THE EIGENVECTORS TO BE BACK TRANSFORMED C IN ITS FIRST M COLUMNS. C C ON OUTPUT- C C Z CONTAINS THE TRANSFORMED EIGENVECTORS C IN ITS FIRST M COLUMNS. C C NOTE THAT TRBAK3 PRESERVES VECTOR EUCLIDEAN NORMS. C C QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW, C APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY C C ------------------------------------------------------------------ C IF (M .EQ. 0) GO TO 50 IF (N .EQ. 1) GO TO 50 C DO 40 I = 2, N L = I - 1 IZ = (I * L) / 2 IK = IZ + I H = A(IK) IF (H.EQ.0.0D0) GO TO 40 C DO 30 J = 1, M S=0.0D0 IK = IZ C DO 10 K = 1, L IK = IK + 1 S = S + A(IK) * Z(K,J) 10 CONTINUE C ********** DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ********** S = (S / H) / H IK = IZ C DO 20 K = 1, L IK = IK + 1 Z(K,J) = Z(K,J) - S * A(IK) 20 CONTINUE C 30 CONTINUE C 40 CONTINUE C 50 RETURN C ********** LAST CARD OF TRBAK3 ********** END SUBROUTINE TRED3(N,NV,A,D,E,E2,EPS,ETA) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C ===== PROCESSED BY AUGMENT, VERSION 4N ===== C APPROVED FOR VAX 11/780 ON MAY 6,1980. J.D.NEECE C ----- LOCAL VARIABLES ----- C ----- GLOBAL VARIABLES ----- DIMENSION A(NV), D(N), E(N), E2(N) C ----- SUPPORTING PACKAGE FUNCTIONS ----- C ===== TRANSLATED PROGRAM ===== C C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE TRED3, C NUM. MATH. 11, 181-195(1968) BY MARTIN, REINSCH, AND WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 212-226(1971). C C THIS SUBROUTINE REDUCES A REAL SYMMETRIC MATRIX, STORED AS C A ONE-DIMENSIONAL ARRAY, TO A SYMMETRIC TRIDIAGONAL MATRIX C USING ORTHOGONAL SIMILARITY TRANSFORMATIONS. C C ON INPUT- C C N IS THE ORDER OF THE MATRIX, C C NV MUST BE SET TO THE DIMENSION OF THE ARRAY PARAMETER A C AS DECLARED IN THE CALLING PROGRAM DIMENSION STATEMENT, C C A CONTAINS THE LOWER TRIANGLE OF THE REAL SYMMETRIC C INPUT MATRIX, STORED ROW-WISE AS A ONE-DIMENSIONAL C ARRAY, IN ITS FIRST N*(N+1)/2 POSITIONS. C C ON OUTPUT- C C A CONTAINS INFORMATION ABOUT THE ORTHOGONAL C TRANSFORMATIONS USED IN THE REDUCTION, C C D CONTAINS THE DIAGONAL ELEMENTS OF THE TRIDIAGONAL MATRIX, C C E CONTAINS THE SUBDIAGONAL ELEMENTS OF THE TRIDIAGONAL C MATRIX IN ITS LAST N-1 POSITIONS. E(1) IS SET TO ZERO, C C E2 CONTAINS THE SQUARES OF THE CORRESPONDING ELEMENTS OF E. C E2 MAY COINCIDE WITH E IF THE SQUARES ARE NOT NEEDED. C C QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW, C APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY C C ------------------------------------------------------------------ C C ********** FOR I=N STEP -1 UNTIL 1 DO -- ********** DO 100 II = 1, N I = N + 1 - II L = I - 1 IZ = ( I * L ) / 2 H=0.0D0 SCALE=0.0D0 DO 10 K = 1, L IZ = IZ + 1 D(K) = A(IZ) SCALE=SCALE+ABS( D(K) ) 10 CONTINUE C IF ( SCALE.NE.0.D0 ) GO TO 20 E(I)=0.0D0 E2(I)=0.0D0 GO TO 90 C 20 DO 30 K = 1, L D(K) = D(K) / SCALE H = H + D(K) * D(K) 30 CONTINUE C E2(I) = SCALE * SCALE * H F = D(L) G=-SIGN (SQRT (H),F) E(I) = SCALE * G H = H - F * G D(L) = F - G A(IZ) = SCALE * D(L) IF (L .EQ. 1) GO TO 90 F=0.0D0 C DO 70 J = 1, L G=0.0D0 JK = (J * (J-1)) / 2 C ********** FORM ELEMENT OF A*U ********** K = 0 40 K = K + 1 JK = JK + 1 G = G + A(JK) * D(K) IF ( K .LT. J ) GO TO 40 IF ( K .EQ. L ) GO TO 60 50 JK = JK + K K = K + 1 G = G + A(JK) * D(K) IF ( K .LT. L ) GO TO 50 C ********** FORM ELEMENT OF P ********** 60 CONTINUE E(J) = G / H F = F + E(J) * D(J) 70 CONTINUE C HH = F / (H + H) JK = 0 C ********** FORM REDUCED A ********** DO 80 J = 1, L F = D(J) G = E(J) - HH * F E(J) = G C DO 80 K = 1, J JK = JK + 1 A(JK) = A(JK) - F * E(K) - G * D(K) 80 CONTINUE C 90 D(I) = A(IZ+1) A(IZ+1)=SCALE*SQRT (H) 100 CONTINUE C RETURN C ********** LAST CARD OF TRED3 ********** END mopac7-1.15/fortran/diegrd.f0000644000175000017500000001011511053302064012617 00000000000000 SUBROUTINE DIEGRD (COORD,DXYZ) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 QS(LENABC) 4 /SOLVI/ IATSP(LENABC+1),NAR(LENABC), NNX(2,NUMATM) COMMON /DIRVEC/ DIRVEC(3,NPPA), NN(3,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT 3 /MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107) DIMENSION DXYZ(3,*),DB(0:3,10),XK(3),XL(3),XX(3),COORD(3,NUMATM) DO 10 I=1,NPS J=IATSP(I) RI=SRAD(J)-RDS DO 10 IX=1,3 10 COSURF(IX,I)=COSURF(IX,I)*RI+COORD(IX,J) DO 20 I=1,10 DO 20 IX=1,3 20 DB(IX,I)=0.D0 DB(0,1)=1.D0 CALL CQDEN() FACT=-2*13.6058D0*.5292D0*FEPSI*23.061D0 DO 30 I=1,NPS 30 QS(I)=0.D0 I0=NPS2-NDEN DO 70 I=1,NPS I2=(I*(I-1))/2 I1=I0+I*NDEN POSI=0.D0 DO 40 J=1,NDEN 40 POSI=POSI+QDEN(J)*ABCMAT(J+I1) DO 50 K=1,I 50 QS(K)=QS(K)+POSI*ABCMAT(K+I2) DO 60 K=I+1,NPS 60 QS(K)=QS(K)+POSI*ABCMAT(I+(K*(K-1))/2) 70 CONTINUE DO 120 K=1,NPS IAK=IATSP(K) DO 80 IX=1,3 80 XK(IX)=COSURF(IX,K) QSK=QS(K) DO 110 L=1,K-1 IAL=IATSP(L) IF(IAL .EQ. IAK) GO TO 110 DIST2=0.D0 DO 90 IX=1,3 XXX=COSURF(IX,L)-XK(IX) XL(IX)=XXX DIST2=DIST2+XXX*XXX 90 CONTINUE C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C FF=QSK*QS(L)*FACT*DIST2**-1.5D0 FF=QSK*QS(L)*FACT*DIST2**(-1.5D0) C ***************************** at 1994-05-25 ***** DO 100 IX=1,3 DXYZ(IX,IAK)=DXYZ(IX,IAK)-XL(IX)*FF DXYZ(IX,IAL)=DXYZ(IX,IAL)+XL(IX)*FF 100 CONTINUE 110 CONTINUE 120 CONTINUE DO 190 K=1,NPS IAK=IATSP(K) DO 130 IX=1,3 130 XK(IX)=COSURF(IX,K) QSK=QS(K) IDEN=0 DO 180 I=1,NUMAT IDEL=NLAST(I)-NFIRST(I) IF(I .EQ. IAK) GO TO 180 NATI=NAT(I) DIST2=0.D0 DO 140 IX=1,3 XXX=XK(IX)-COORD(IX,I) XX(IX)=XXX DIST2=DIST2+XXX*XXX 140 CONTINUE DDI=DD(NATI)*2*.529177D0 QQI2=(.529177D0*QQ(NATI))**2 C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C FF0=-QSK*FACT*DIST2**-1.5D0 FF0=-QSK*FACT*DIST2**(-1.5D0) C ***************************** at 1994-05-25 ***** IF(IDEL .EQ. 0) GO TO 150 RM2=1.D0/DIST2 RM4=RM2**2 DB(0,2)=DDI*3*XX(1)*RM2 DB(0,4)=DDI*3*XX(2)*RM2 DB(0,7)=DDI*3*XX(3)*RM2 DB(0,3)=1.D0+QQI2*(15*XX(1)**2*RM2-3.D0)*RM2 DB(0,6)=1.D0+QQI2*(15*XX(2)**2*RM2-3.D0)*RM2 DB(0,10)=1.D0+QQI2*(15*XX(3)**2*RM2-3.D0)*RM2 DB(0,5)=QQI2*30*XX(1)*XX(2)*RM4 DB(0,8)=QQI2*30*XX(1)*XX(3)*RM4 DB(0,9)=QQI2*30*XX(3)*XX(2)*RM4 DB(1,2)=DDI DB(2,4)=DB(1,2) DB(3,7)=DB(1,2) DB(1,3)=6*QQI2*XX(1)*RM2 DB(2,6)=6*QQI2*XX(2)*RM2 DB(3,10)=6*QQI2*XX(3)*RM2 DB(1,5)=DB(2,6) DB(2,5)=DB(1,3) DB(1,8)=DB(3,10) DB(3,8)=DB(1,3) DB(2,9)=DB(3,10) DB(3,9)=DB(2,6) 150 DO 170 J=1,1+IDEL*IDEL FF=FF0*QDEN(IDEN+J) DO 160 IX=1,3 DX=(XX(IX)*DB(0,J)-DB(IX,J))*FF DXYZ(IX,IAK)=DXYZ(IX,IAK)+DX DXYZ(IX,I)=DXYZ(IX,I)-DX 160 CONTINUE 170 CONTINUE 180 IDEN=IDEN+1+IDEL**2 190 CONTINUE DO 200 I=1,NPS J=IATSP(I) RM=SRAD(J)-RDS DO 200 IX=1,3 200 COSURF(IX,I)=(COSURF(IX,I)-COORD(IX,J))/RM RETURN END mopac7-1.15/fortran/dlaswp.f0000644000175000017500000000543211053302064012661 00000000000000 SUBROUTINE DLASWP( N, A, LDA, K1, K2, IPIV, INCX ) * * -- LAPACK AUXILIARY ROUTINE (VERSION 1.0B) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * OCTOBER 31, 1992 * * .. SCALAR ARGUMENTS .. INTEGER INCX, K1, K2, LDA, N * .. * .. ARRAY ARGUMENTS .. INTEGER IPIV( * ) DOUBLE PRECISION A( LDA, * ) * .. * * PURPOSE * ======= * * DLASWP PERFORMS A SERIES OF ROW INTERCHANGES ON THE MATRIX A. * ONE ROW INTERCHANGE IS INITIATED FOR EACH OF ROWS K1 THROUGH K2 OF A. * * ARGUMENTS * ========= * * N (INPUT) INTEGER * THE NUMBER OF COLUMNS OF THE MATRIX A. * * A (INPUT/OUTPUT) DOUBLE PRECISION ARRAY, DIMENSION (LDA,N) * ON ENTRY, THE MATRIX OF COLUMN DIMENSION N TO WHICH THE ROW * INTERCHANGES WILL BE APPLIED. * ON EXIT, THE PERMUTED MATRIX. * * LDA (INPUT) INTEGER * THE LEADING DIMENSION OF THE ARRAY A. * * K1 (INPUT) INTEGER * THE FIRST ELEMENT OF IPIV FOR WHICH A ROW INTERCHANGE WILL * BE DONE. * * K2 (INPUT) INTEGER * THE LAST ELEMENT OF IPIV FOR WHICH A ROW INTERCHANGE WILL * BE DONE. * * IPIV (INPUT) INTEGER ARRAY, DIMENSION (M*ABS(INCX)) * THE VECTOR OF PIVOT INDICES. ONLY THE ELEMENTS IN POSITIONS * K1 THROUGH K2 OF IPIV ARE ACCESSED. * IPIV(K) = L IMPLIES ROWS K AND L ARE TO BE INTERCHANGED. * * INCX (INPUT) INTEGER * THE INCREMENT BETWEEN SUCCESSIVE VALUES OF IPIV. IF IPIV * IS NEGATIVE, THE PIVOTS ARE APPLIED IN REVERSE ORDER. * * ===================================================================== * * .. LOCAL SCALARS .. INTEGER I, IP, IX * .. * .. EXTERNAL SUBROUTINES .. EXTERNAL DSWAP * .. * .. EXECUTABLE STATEMENTS .. * * INTERCHANGE ROW I WITH ROW IPIV(I) FOR EACH OF ROWS K1 THROUGH K2. * IF( INCX.EQ.0 ) $ RETURN IF( INCX.GT.0 ) THEN IX = K1 ELSE IX = 1 + ( 1-K2 )*INCX END IF IF( INCX.EQ.1 ) THEN DO 10 I = K1, K2 IP = IPIV( I ) IF( IP.NE.I ) $ CALL DSWAP( N, A( I, 1 ), LDA, A( IP, 1 ), LDA ) 10 CONTINUE ELSE IF( INCX.GT.1 ) THEN DO 20 I = K1, K2 IP = IPIV( IX ) IF( IP.NE.I ) $ CALL DSWAP( N, A( I, 1 ), LDA, A( IP, 1 ), LDA ) IX = IX + INCX 20 CONTINUE ELSE IF( INCX.LT.0 ) THEN DO 30 I = K2, K1, -1 IP = IPIV( IX ) IF( IP.NE.I ) $ CALL DSWAP( N, A( I, 1 ), LDA, A( IP, 1 ), LDA ) IX = IX + INCX 30 CONTINUE END IF * RETURN * * END OF DLASWP * END mopac7-1.15/fortran/dipind.f0000644000175000017500000001116311053302063012633 00000000000000 SUBROUTINE DIPIND (DIPVEC) C............................................................... C MODIFICATION OF DIPOLE SUBROUTINE FOR USE IN THE CALCULATION C OF THE INDUCED DIPOLES FOR POLARIZABILITIES. C............................................................... IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /CORE / CORE(107) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /MOLMEC/ HTYPE(4),NHCO(4,20),NNHCO,ITYPE COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /NUMCAL/ NUMCAL COMMON /KEYWRD/ KEYWRD COMMON /ISTOPE/ AMS(107) COMMON /MULTIP/ DD(107), QQ(107), AM(107), AD(107), AQ(107) DIMENSION Q(MAXORB),Q2(MAXORB),DIPVEC(3),CENTER(3), 1 COORD(3,NUMATM) CHARACTER*241 KEYWRD C C*********************************************************************** C DIPOLE CALCULATES DIPOLE MOMENTS C C ON INPUT P = DENSITY MATRIX C Q = TOTAL ATOMIC CHARGES, (NUCLEAR + ELECTRONIC) C NUMAT = NUMBER OF ATOMS IN MOLECULE C NAT = ATOMIC NUMBERS OF ATOMS C NFIRST= START OF ATOM ORBITAL COUNTERS C COORD = COORDINATES OF ATOMS C C OUTPUT DIPOLE = DIPOLE MOMENT C*********************************************************************** C C IN THE ZDO APPROXIMATION, ONLY TWO TERMS ARE RETAINED IN THE C CALCULATION OF DIPOLE MOMENTS. C 1. THE POINT CHARGE TERM (INDEPENDENT OF PARAMETERIZATION). C 2. THE ONE-CENTER HYBRIDIZATION TERM, WHICH ARISES FROM MATRIX C ELEMENTS OF THE FORM . THIS TERM IS A FUNCTION OF C THE SLATER EXPONENTS (ZS,ZP) AND IS THUS DEPENDENT ON PARAMETER- C IZATION. THE HYBRIDIZATION FACTORS (HYF(I)) USED IN THIS SUB- C ROUTINE ARE CALCULATED FROM THE FOLLOWING FORMULAE. C FOR SECOND ROW ELEMENTS <2S/R/2P> C HYF(I)= 469.56193322*(SQRT(((ZS(I)**5)*(ZP(I)**5)))/ C ((ZS(I) + ZP(I))**6)) C FOR THIRD ROW ELEMENTS <3S/R/3P> C HYF(I)=2629.107682607*(SQRT(((ZS(I)**7)*(ZP(I)**7)))/ C ((ZS(I) + ZP(I))**8)) C FOR FOURTH ROW ELEMENTS AND UP : C HYF(I)=2*(2.10716)*DD(I) C WHERE DD(I) IS THE CHARGE SEPARATION IN ATOMIC UNITS C C C REFERENCES: C J.A.POPLE & D.L.BEVERIDGE: APPROXIMATE M.O. THEORY C S.P.MCGLYNN, ET AL: APPLIED QUANTUM CHEMISTRY C DIMENSION DIP(4,3) DIMENSION HYF(107,2) SAVE ICALCN, HYF, WTMOL, CHARGD LOGICAL CHARGD DATA HYF(1,1) / 0.0D00 / DATA HYF(1,2) /0.0D0 / DATA HYF(5,2) /6.520587D0/ DATA HYF(6,2) /4.253676D0/ DATA HYF(7,2) /2.947501D0/ DATA HYF(8,2) /2.139793D0/ DATA HYF(9,2) /2.2210719D0/ DATA HYF(14,2)/6.663059D0/ DATA HYF(15,2)/5.657623D0/ DATA HYF(16,2)/6.345552D0/ DATA HYF(17,2)/2.522964D0/ DATA ICALCN/0/ C C SETUP FOR DIPOLE CALCULATION C CALL CHRGE (P,Q2) DO 10 I = 1,NUMAT Q(I) = CORE(NAT(I)) - Q2(I) 10 CONTINUE CALL GMETRY (GEO,COORD) C IF (ICALCN.NE.NUMCAL) THEN DO 20 I=2,107 20 HYF(I,1)= 5.0832D0*DD(I) WTMOL=0.D0 SUM=0.D0 DO 30 I=1,NUMAT WTMOL=WTMOL+AMS(NAT(I)) 30 SUM=SUM+Q(I) CHARGD=(ABS(SUM).GT.0.5D0) ICALCN=NUMCAL KTYPE=1 IF(ITYPE.EQ.4)KTYPE=2 ENDIF IF(CHARGD)THEN C C NEED TO RESET ION'S POSITION SO THAT THE CENTER OF MASS IS AT THE C ORIGIN. C C$DOIT ASIS DO 40 I=1,3 40 CENTER(I)=0.D0 DO 50 I=1,3 C$DOIT VBEST DO 50 J=1,NUMAT 50 CENTER(I)=CENTER(I)+AMS(NAT(J))*COORD(I,J) C$DOIT ASIS DO 60 I=1,3 60 CENTER(I)=CENTER(I)/WTMOL DO 70 I=1,3 C$DOIT VBEST DO 70 J=1,NUMAT 70 COORD(I,J)=COORD(I,J)-CENTER(I) ENDIF C$DOIT ASIS DO 80 I=1,4 C$DOIT ASIS DO 80 J=1,3 80 DIP(I,J)=0.0D00 C$DOIT ASIS DO 100 I=1,NUMAT NI=NAT(I) IA=NFIRST(I) L=NLAST(I)-IA C$DOIT ASIS DO 90 J=1,L K=((IA+J)*(IA+J-1))/2+IA 90 DIP(J,2)=DIP(J,2)-HYF(NI,KTYPE)*P(K) C$DOIT ASIS DO 100 J=1,3 100 DIP(J,1)=DIP(J,1)+4.803D00*Q(I)*COORD(J,I) C$DOIT ASIS DO 110 J=1,3 110 DIP(J,3)=DIP(J,2)+DIP(J,1) C$DOIT ASIS DO 120 J=1,3 120 DIP(4,J)=SQRT(DIP(1,J)**2+DIP(2,J)**2+DIP(3,J)**2) DIPVEC(1)= -DIP(1,3) DIPVEC(2)= -DIP(2,3) DIPVEC(3)= -DIP(3,3) C WRITE (6,60) ((DIP(I,J),I=1,4),J=1,3) C 60 FORMAT (3(4F10.3)) RETURN C END mopac7-1.15/fortran/dtrtri.f0000644000175000017500000001251711053302063012700 00000000000000 SUBROUTINE DTRTRI( UPLO, DIAG, N, A, LDA, INFO ) * * -- LAPACK ROUTINE (VERSION 1.0B) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * FEBRUARY 29, 1992 * * .. SCALAR ARGUMENTS .. CHARACTER DIAG, UPLO INTEGER INFO, LDA, N * .. * .. ARRAY ARGUMENTS .. DOUBLE PRECISION A( LDA, * ) * .. * * PURPOSE * ======= * * DTRTRI COMPUTES THE INVERSE OF A REAL UPPER OR LOWER TRIANGULAR * MATRIX A. * * THIS IS THE LEVEL 3 BLAS VERSION OF THE ALGORITHM. * * ARGUMENTS * ========= * * UPLO (INPUT) CHARACTER*1 * SPECIFIES WHETHER THE MATRIX A IS UPPER OR LOWER TRIANGULAR. * = 'U': UPPER TRIANGULAR * = 'L': LOWER TRIANGULAR * * DIAG (INPUT) CHARACTER*1 * SPECIFIES WHETHER OR NOT THE MATRIX A IS UNIT TRIANGULAR. * = 'N': NON-UNIT TRIANGULAR * = 'U': UNIT TRIANGULAR * * N (INPUT) INTEGER * THE ORDER OF THE MATRIX A. N >= 0. * * A (INPUT/OUTPUT) DOUBLE PRECISION ARRAY, DIMENSION (LDA,N) * * ON ENTRY, THE TRIANGULAR MATRIX A. IF UPLO = 'U', THE * LEADING N BY N UPPER TRIANGULAR PART OF THE ARRAY A CONTAINS * THE UPPER TRIANGULAR MATRIX, AND THE STRICTLY LOWER * TRIANGULAR PART OF A IS NOT REFERENCED. IF UPLO = 'L', THE * LEADING N BY N LOWER TRIANGULAR PART OF THE ARRAY A CONTAINS * THE LOWER TRIANGULAR MATRIX, AND THE STRICTLY UPPER * TRIANGULAR PART OF A IS NOT REFERENCED. IF DIAG = 'U', THE * DIAGONAL ELEMENTS OF A ARE ALSO NOT REFERENCED AND ARE * ASSUMED TO BE 1. * * ON EXIT, THE (TRIANGULAR) INVERSE OF THE ORIGINAL MATRIX, IN * THE SAME STORAGE FORMAT. * * LDA (INPUT) INTEGER * THE LEADING DIMENSION OF THE ARRAY A. LDA >= MAX(1,N). * * INFO (OUTPUT) INTEGER * = 0: SUCCESSFUL EXIT * > 0: IF INFO = K, A(K,K) IS EXACTLY ZERO. THE TRIANGULAR * MATRIX IS SINGULAR AND ITS INVERSE CAN NOT BE COMPUTED. * < 0: IF INFO = -K, THE K-TH ARGUMENT HAD AN ILLEGAL VALUE * * ===================================================================== * * .. PARAMETERS .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. LOCAL SCALARS .. LOGICAL NOUNIT, UPPER INTEGER J, JB, NB, NN * .. * .. EXTERNAL FUNCTIONS .. LOGICAL LSAME INTEGER ILAENV EXTERNAL LSAME, ILAENV * .. * .. EXTERNAL SUBROUTINES .. EXTERNAL DTRMM, DTRSM, DTRTI2, XERBLA * .. * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX, MIN * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * INFO = 0 UPPER = LSAME( UPLO, 'U' ) NOUNIT = LSAME( DIAG, 'N' ) IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN INFO = -1 ELSE IF( .NOT.NOUNIT .AND. .NOT.LSAME( DIAG, 'U' ) ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DTRTRI', -INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE * IF( N.EQ.0 ) $ RETURN * * CHECK FOR SINGULARITY IF NON-UNIT. * IF( NOUNIT ) THEN DO 10 INFO = 1, N IF( A( INFO, INFO ).EQ.ZERO ) $ RETURN 10 CONTINUE INFO = 0 END IF * * DETERMINE THE BLOCK SIZE FOR THIS ENVIRONMENT. * NB = ILAENV( 1, 'DTRTRI', UPLO // DIAG, N, -1, -1, -1 ) IF( NB.LE.1 .OR. NB.GE.N ) THEN * * USE UNBLOCKED CODE * CALL DTRTI2( UPLO, DIAG, N, A, LDA, INFO ) ELSE * * USE BLOCKED CODE * IF( UPPER ) THEN * * COMPUTE INVERSE OF UPPER TRIANGULAR MATRIX * DO 20 J = 1, N, NB JB = MIN( NB, N-J+1 ) * * COMPUTE ROWS 1:J-1 OF CURRENT BLOCK COLUMN * CALL DTRMM( 'LEFT', 'UPPER', 'NO TRANSPOSE', DIAG, J-1, $ JB, ONE, A, LDA, A( 1, J ), LDA ) CALL DTRSM( 'RIGHT', 'UPPER', 'NO TRANSPOSE', DIAG, J-1, $ JB, -ONE, A( J, J ), LDA, A( 1, J ), LDA ) * * COMPUTE INVERSE OF CURRENT DIAGONAL BLOCK * CALL DTRTI2( 'UPPER', DIAG, JB, A( J, J ), LDA, INFO ) 20 CONTINUE ELSE * * COMPUTE INVERSE OF LOWER TRIANGULAR MATRIX * NN = ( ( N-1 ) / NB )*NB + 1 DO 30 J = NN, 1, -NB JB = MIN( NB, N-J+1 ) IF( J+JB.LE.N ) THEN * * COMPUTE ROWS J+JB:N OF CURRENT BLOCK COLUMN * CALL DTRMM( 'LEFT', 'LOWER', 'NO TRANSPOSE', DIAG, $ N-J-JB+1, JB, ONE, A( J+JB, J+JB ), LDA, $ A( J+JB, J ), LDA ) CALL DTRSM( 'RIGHT', 'LOWER', 'NO TRANSPOSE', DIAG, $ N-J-JB+1, JB, -ONE, A( J, J ), LDA, $ A( J+JB, J ), LDA ) END IF * * COMPUTE INVERSE OF CURRENT DIAGONAL BLOCK * CALL DTRTI2( 'LOWER', DIAG, JB, A( J, J ), LDA, INFO ) 30 CONTINUE END IF END IF * RETURN * * END OF DTRTRI * END mopac7-1.15/fortran/block.f0000644000175000017500000030674611053302064012475 00000000000000 BLOCK DATA IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /NATORB/ NATORB(107) *********************************************************************** * * COMMON BLOCKS FOR AM1 * *********************************************************************** COMMON /ELEMTS/ ELEMNT(107) 1 /CORE / CORE(107) 2 /MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107) 3 /EXPONT/ ZS(107),ZP(107),ZD(107) 4 /ONELEC/ USS(107),UPP(107),UDD(107) 5 /BETAS / BETAS(107),BETAP(107),BETAD(107) 6 /TWOELE/ GSS(107),GSP(107),GPP(107),GP2(107),HSP(107), 7 GSD(107),GPD(107),GDD(107) 8 /ATOMIC/ EISOL(107),EHEAT(107) 9 /VSIPS / VS(107),VP(107),VD(107) 1 /ISTOPE/ AMS(107) 2 /IDEAA / GUESA1(107,10),GUESA2(107,10),GUESA3(107,10) 3 /IDEAP / GUESP1(107,10),GUESP2(107,10),GUESP3(107,10) 4 /GAUSS / FN1(107),FN2(107) *********************************************************************** * * COMMON BLOCKS FOR MNDO * *********************************************************************** COMMON /MNDO/ USSM(107), UPPM(107), UDDM(107), ZSM(107), 1ZPM(107), ZDM(107), BETASM(107), BETAPM(107), BETADM(107), 2ALPM(107), EISOLM(107), DDM(107), QQM(107), AMM(107), ADM(107), 3AQM(107) ,GSSM(107), GSPM(107), GPPM(107), GP2M(107), HSPM(107), 4POLVOM(107) *********************************************************************** * * COMMON BLOCKS FOR PM3 * *********************************************************************** COMMON /PM3 / USSPM3(107), UPPPM3(107), UDDPM3(107), ZSPM3(107), 1ZPPM3(107), ZDPM3(107), BETASP(107), BETAPP(107), BETADP(107), 2ALPPM3(107), EISOLP(107), DDPM3(107), QQPM3(107), AMPM3(107), 3ADPM3(107), AQPM3(107) ,GSSPM3(107), GSPPM3(107), GPPPM3(107), 4GP2PM3(107), HSPPM3(107),POLVOP(107) *********************************************************************** * * COMMON BLOCKS FOR AM1 * *********************************************************************** COMMON /AM1BLO/USSAM1(107), UPPAM1(107), UDDAM1(107), ZSAM1(107), 1ZPAM1(107), ZDAM1(107), BETASA(107), BETAPA(107), BETADA(107), 2ALPAM1(107), EISOLA(107), DDAM1(107), QQAM1(107), AMAM1(107), 3ADAM1(107), AQAM1(107) ,GSSAM1(107), GSPAM1(107), GPPAM1(107), 4GP2AM1(107), HSPAM1(107),POLVOA(107) 5 /REFS/ REFMN(107), REFM3(107), REFAM(107), REFPM3(107) *********************************************************************** * * COMMON BLOCKS FOR MINDO/3 * *********************************************************************** COMMON /ONELE3 / USS3(18),UPP3(18) 1 /TWOEL3 / F03(107) 2 /ATOMI3 / EISOL3(18),EHEAT3(18) 3 /BETA3 / BETA3(153) 4 /ALPHA3 / ALP3(153) 5 /EXPON3 / ZS3(18),ZP3(18) * * END OF MINDO/3 COMMON BLOCKS * C C ELECTRIC FIELD OPTIONS FOR POLARIZABILITY C COMMON /FIELD/ EFIELD(3) CHARACTER ELEMNT*2, REFMN*80, REFM3*80, REFAM*80, REFPM3*80 DATA EFIELD/0.0D00,0.0D00,0.0D00/ DATA ELEMNT/' H','He', 1 'Li','Be',' B',' C',' N',' O',' F','Ne', 2 'Na','Mg','Al','Si',' P',' S','Cl','Ar', 3 ' K','Ca','Sc','Ti',' V','Cr','Mn','Fe','Co','Ni','Cu', 4 'Zn','Ga','Ge','As','Se','Br','Kr', 5 'Rb','Sr',' Y','Zr','Nb','Mo','Tc','Ru','Rh','Pd','Ag', 6 'Cd','In','Sn','Sb','Te',' I','Xe', 7 'Cs','Ba','La','Ce','Pr','Nd','Pm','Sm','Eu','Gd','Tb','Dy', 8 'Ho','Er','Tm','Yb','Lu','Hf','Ta',' W','Re','Os','Ir','Pt', 9 'Au','Hg','Tl','Pb','Bi','Po','At','Rn', 1 'Fr','Ra','Ac','Th','Pa',' U','Np','Pu','Am','Cm','Bk','Cf','XX', 2 'Fm','Md','Cb','++',' +','--',' -','Tv'/ C C NATORB IS THE NUMBER OF ATOMIC ORBITALS PER ATOM. C DATA NATORB/2*1, 4, 7*4, 0, 7*4, 0, 4, 9*9, 7*4, 12*4, 9*9, 7*4, 2*2, 14*8, 9*9, 7*4, 15*0,1,5*0/ *********************************************************************** * VALENCE SHELLS ARE DEFINED AS * * PQN VALENCE SHELLS * * P-GROUP F-GROUP TRANSITION METALS * * 1 1S * * 2 2S 2P * * 3 3S 3P OR 3S 3P 3D * * 4 4S 4P 4S 4P 3D * * 5 5S 5P 5S 5P 4D * * 6 6S 6P 6S 4F 6S 6P 5D * * 7 NOT ASSIGNED YET ****DO NOT USE**** * *********************************************************************** DATA POLVOM(1) /0.2287D0/ DATA POLVOM(6) /0.2647D0/ DATA POLVOM(7) /0.3584D0/ DATA POLVOM(8) /0.2324D0/ DATA POLVOM(9) /0.1982D0/ DATA POLVOM(17)/1.3236D0/ DATA POLVOM(35)/2.2583D0/ DATA POLVOM(53)/4.0930D0/ C C STANDARD ATOMIC MASSES C DATA AMS / 1.00790D0, 4.00260D0, 6.94000D0, 9.01218D0, 110.81000D0, 12.01100D0, 14.00670D0, 15.99940D0, 18.99840D0, 220.17900D0, 22.98977D0, 24.30500D0, 26.98154D0, 28.08550D0, 330.97376D0, 32.06000D0, 35.45300D0, 39.94800D0, 39.09830D0, 440.08000D0, 44.95590D0, 47.90000D0, 50.94150D0, 51.99600D0, 554.93800D0, 55.84700D0, 58.93320D0, 58.71000D0, 63.54600D0, 665.38000D0, 69.73500D0, 72.59000D0, 74.92160D0, 78.96000D0, 779.90400D0, 83.80000D0, 85.46780D0, 87.62000D0, 88.90590D0, 891.22000D0, 92.90640D0, 95.94000D0, 98.90620D0, 101.0700D0, 9102.9055D0, 106.4000D0, 107.8680D0, 112.4100D0, 114.8200D0, 1118.6900D0, 121.7500D0, 127.6000D0, 126.9045D0, 131.3000D0, 2132.9054D0, 137.3300D0, 15*0.000D0, 178.4900D0, 180.9479D0, 3183.8500D0, 186.2070D0, 190.2000D0, 192.2200D0, 195.0900D0, 4196.9665D0, 200.5900D0, 204.3700D0, 207.2000D0, 208.9804D0, 518*0.000D0, 1.0079D0, 5*0.000D0/ C C CORE IS THE CHARGE ON THE ATOM AS SEEN BY THE ELECTRONS C DATA CORE/1.D0,0.D0, 1 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0,0.D0, 2 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0,0.D0, 3 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0,8.D0,9.D0,10.D0,11.D0,2.D0, 4 3.D0,4.D0,5.D0,6.D0,7.D0,0.D0, 5 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0,8.D0,9.D0,10.D0,11.D0,2.D0, 6 3.D0,4.D0,5.D0,6.D0,7.D0,0.D0, 7 1.D0,2.D0,3.D0,4.D0,5.D0,6.D0,7.D0,8.D0,9.D0,10.D0, 8 11.D0,12.D0,13.D0,14.D0,15.D0,16.D0, 9 3.D0,4.D0,5.D0,6.D0,7.D0,8.D0,9.D0,10.D0,11.D0,2.D0, 1 3.D0,4.D0,5.D0,6.D0,7.D0,0.D0, 2 15*0.D0,1.D0,2.D0,1.D0,-2.D0,-1.D0,0.D0/ C C ENTHALPIES OF FORMATION OF GASEOUS ATOMS ARE TAKEN FROM \ANNUAL C REPORTS,1974,71B,P 117\ THERE ARE SOME SIGNIFICANT DIFFERENCES C BETWEEN THE VALUES REPORTED THERE AND THE VALUES PREVIOUSLY IN C THE BLOCK DATA OF THIS PROGRAM. ONLY THE THIRD ROW ELEMENTS C HAVE BEEN UPDATED. C * ALL THE OTHER ELEMENTS ARE TAKEN FROM CRC HANDBOOK 1981-1982 DATA EHEAT(1) / 52.102D0/ DATA EHEAT(2) / 0.000D0/ C DATA EHEAT(3) / 38.410D0/ DATA EHEAT(4) / 76.960D0/ DATA EHEAT(5) /135.700D0/ DATA EHEAT(6) /170.890D0/ DATA EHEAT(7) /113.000D0/ DATA EHEAT(8) / 59.559D0/ DATA EHEAT(9) / 18.890D0/ DATA EHEAT(10) / 0.000D0/ C DATA EHEAT(11) / 25.850D0/ DATA EHEAT(12) / 35.000D0/ DATA EHEAT(13) / 79.490D0/ DATA EHEAT(14) /108.390D0/ DATA EHEAT(15) / 75.570D0/ DATA EHEAT(16) / 66.400D0/ DATA EHEAT(17) / 28.990D0/ DATA EHEAT(18) / 0.000D0/ C DATA EHEAT(19) / 21.420D0/ DATA EHEAT(20) / 42.600D0/ DATA EHEAT(21) / 90.300D0/ DATA EHEAT(22) /112.300D0/ DATA EHEAT(23) /122.900D0/ DATA EHEAT(24) / 95.000D0/ DATA EHEAT(25) / 67.700D0/ DATA EHEAT(26) / 99.300D0/ DATA EHEAT(27) /102.400D0/ DATA EHEAT(28) /102.800D0/ DATA EHEAT(29) / 80.700D0/ DATA EHEAT(30) / 31.170D0/ DATA EHEAT(31) / 65.400D0/ DATA EHEAT(32) / 89.500D0/ DATA EHEAT(33) / 72.300D0/ DATA EHEAT(34) / 54.300D0/ DATA EHEAT(35) / 26.740D0/ DATA EHEAT(36) / 0.000D0/ C DATA EHEAT(37) / 19.600D0/ DATA EHEAT(38) / 39.100D0/ DATA EHEAT(39) /101.500D0/ DATA EHEAT(40) /145.500D0/ DATA EHEAT(41) /172.400D0/ DATA EHEAT(42) /157.300D0/ DATA EHEAT(44) /155.500D0/ DATA EHEAT(45) /133.000D0/ DATA EHEAT(46) / 90.000D0/ DATA EHEAT(47) / 68.100D0/ DATA EHEAT(48) / 26.720D0/ DATA EHEAT(49) / 58.000D0/ DATA EHEAT(50) / 72.200D0/ DATA EHEAT(51) / 63.200D0/ DATA EHEAT(52) / 47.000D0/ DATA EHEAT(53) / 25.517D0/ DATA EHEAT(54) / 0.000D0/ C DATA EHEAT(55) / 18.700D0/ DATA EHEAT(56) / 42.500D0/ DATA EHEAT(58) /101.300D0/ DATA EHEAT(62) / 49.400D0/ DATA EHEAT(68) / 75.800D0/ DATA EHEAT(70) / 36.350D0/ DATA EHEAT(72) /148.000D0/ DATA EHEAT(73) /186.900D0/ DATA EHEAT(74) /203.100D0/ DATA EHEAT(75) /185.000D0/ DATA EHEAT(76) /188.000D0/ DATA EHEAT(77) /160.000D0/ DATA EHEAT(78) /135.200D0/ DATA EHEAT(79) / 88.000D0/ DATA EHEAT(80) / 14.690D0/ DATA EHEAT(81) / 43.550D0/ DATA EHEAT(82) / 46.620D0/ DATA EHEAT(83) / 50.100D0/ DATA EHEAT(86) / 0.000D0/ DATA EHEAT(102) / 207.0D0/ C DATA VS(1) / -13.605 / DATA VS(5)/-15.16D00/ DATA VS(6)/-21.34D00/ DATA VS(7)/-27.51D00/ DATA VS(8)/-35.30D00/ DATA VS(9)/-43.70D00/ DATA VS(14)/-17.82D00/ DATA VS(15)/-21.10D00/ DATA VS(16)/-23.84D00/ DATA VS(17)/-25.26D00/ DATA VP(1) / 0.0D00 / DATA VP(5)/-8.52D00/ DATA VP(6)/-11.54D00/ DATA VP(7)/-14.34D00/ DATA VP(8)/-17.91D00/ DATA VP(9)/-20.89D00/ DATA VP(14)/-8.51D00/ DATA VP(15)/-10.29D00/ DATA VP(16)/-12.41D00/ DATA VP(17)/-15.09D00/ C DATA NPQ/1,1, 2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4, C +4,4,4,4,4,4,4,4,4,4, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5/ C C *** ONE CENTER REPULSION INTEGRALS C GSS ::= (SS,SS) C GPP ::= (PP,PP) C GSP ::= (SS,PP) C GP2 ::= (PP,P*P*) C HSP ::= (SP,SP) ************************************************************************ DATA GSSM(1) / 12.848D00 / DATA GSSM(4)/9.00D00/ DATA GSSM(5)/10.59D00/ DATA GSSM(6) / 12.23D00 / DATA GSSM(7)/13.59D00/ DATA GSSM(8)/15.42D00/ DATA GSSM(9)/16.92D00/ DATA GSSM(13)/8.09D00/ DATA GSSM(14)/9.82D00/ DATA GSSM(15)/11.56D00/ DATA GSSM(16)/12.88D00/ DATA GSSM(17)/15.03D00/ DATA GSSM(35)/15.03643948D0/ DATA GSSM(53)/15.04044855D0/ DATA GPPM(4)/6.97D00/ DATA GPPM(5)/8.86D00/ DATA GPPM(6) / 11.08D00 / DATA GPPM(7)/12.98D00/ DATA GPPM(8)/14.52D00/ DATA GPPM(9)/16.71D00/ DATA GPPM(13)/5.98D00/ DATA GPPM(14)/7.31D00/ DATA GPPM(15)/8.64D00/ DATA GPPM(16)/9.90D00/ DATA GPPM(17)/11.30D00/ DATA GPPM(35)/11.27632539D0/ DATA GPPM(53)/11.14778369D0/ DATA GSPM(4)/7.43D00/ DATA GSPM(5)/9.56D00/ DATA GSPM(6) / 11.47D00 / DATA GSPM(7)/12.66D00/ DATA GSPM(8)/14.48D00/ DATA GSPM(9)/17.25D00/ DATA GSPM(13)/6.63D00/ DATA GSPM(14)/8.36D00/ DATA GSPM(15)/10.08D00/ DATA GSPM(16)/11.26D00/ DATA GSPM(17)/13.16D00/ DATA GSPM(35)/13.03468242D0/ DATA GSPM(53)/13.05655798D0/ DATA GP2M(4)/6.22D00/ DATA GP2M(5)/7.86D00/ DATA GP2M(6) / 9.84D00 / DATA GP2M(7)/11.59D00/ DATA GP2M(8)/12.98D00/ DATA GP2M(9)/14.91D00/ DATA GP2M(13)/5.40D00/ DATA GP2M(14)/6.54D00/ DATA GP2M(15)/7.68D00/ DATA GP2M(16)/8.83D00/ DATA GP2M(17)/9.97D00/ DATA GP2M(35)/9.85442552D0/ DATA GP2M(53)/9.91409071D0/ DATA HSPM(4)/1.28D00/ DATA HSPM(5)/1.81D00/ DATA HSPM(6) / 2.43D00 / DATA HSPM(7)/3.14D00/ DATA HSPM(8)/3.94D00/ DATA HSPM(9)/4.83D00/ DATA HSPM(13)/0.70D00/ DATA HSPM(14)/1.32D00/ DATA HSPM(15)/1.92D00/ DATA HSPM(16)/2.26D00/ DATA HSPM(17)/2.42D00/ DATA HSPM(35)/2.45586832D0/ DATA HSPM(53)/2.45638202D0/ C C THE MONOCENTRIC INTEGRALS HSP AND GSP FOR ALUMINIUM ARE ONLY C ESTIMATES. A VALUE OF G1 FOR AL IS NEEDED TO RESOLVE OLEARIS C INTEGRALS. C C OPTIMIZED MNDO PARAMETERS FOR H, BE, B, C, N, O, F C CL C ESTIMATED MNDO PARAMETERS FOR AL,SI, P, S C C ELEMENTS H, C, N, O WERE PARAMETERIZED BY WALTER THIEL C ELEMENTS B,SI,P,S WERE .. MICHAEL MCKEE C ELEMENTS BE,F,AL,CL WERE .. HENRY RZEPA C *********************************************************************** * * START OF MINDO/3 PARAMETERS * *********************************************************************** C *** F03 IS THE ONE CENTER AVERAGED REPULSION INTEGRAL FOR USE IN THE C TWO CENTER ELECTRONIC REPULSION INTEGRAL EVALUATION. DATA REFM3 ( 1)/' H: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 ( 5)/' B: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 ( 6)/' C: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 ( 7)/' N: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 ( 8)/' O: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 ( 9)/' F: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 (14)/' Si: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 (15)/' P: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 (16)/' S: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA REFM3 (17)/' Cl: (MINDO/3): R.C.BINGHAM ET.AL., J.AM.CHEM.SO 1C. 97,1285,1294,1302,1307 (1975)'/ DATA F03 / 12.848D0, 10.0D0, 10.0D0, 0.0D0, 1 8.958D0, 10.833D0, 12.377D0, 13.985D0, 16.250D0, 2 10.000D0, 10.000D0, 0.000D0, 0.000D0,7.57D0 , 9.00D0 , 3 10.20D0 , 11.73,10.0D0,35*0.D0,10.D0,53*10.D0/ C *** USS AND UPP ARE THE ONE-CENTER CORE ELECTRON ATTRACTION AND KINETI C ENERGY INTEGRALS FOR S AND P ELECTRONS RESPECTIVELY IN E.V. DATA USS3 / -12.505D0, 0.000D0, 0.000D0, 0.000D0, 1 -33.61D0, -51.79D0, -66.06D0, -91.73D0 , 2 -129.86D0, 3 0.0000D0 , 0.000 D0 ,0.000D0 , 0.000D0 , 4 -39.82D0 , -56.23D0 , -73.39D0 , -98.99D0 ,.0D0/ DATA UPP3 / 0.0D0, 0.0D0, 0.0D0, 0.0D0, 1 -25.11D0 , -39.18D0 , -56.40D0 , -78.80D0 , -105.93D0 , 2 0.000D0 , 0.000D0 , 0.000D0 , 0.000D0 , 3 -29.15D0 , -42.31D0 , -57.25D0 , -76.43D0 ,.0D0/ C *** EISOL3 AND EHEAT3 ARE THE GS ELECTRONIC ENERGY OF THE NEUTRAL ATOM C (IN E.V.) AND THE HEAT OF FORMATION IF THE FREE ATOM (IN KCAL/MOL) DATA EISOL3 /-12.505D0 , 0.0D0 , 0.0D0 ,0.0D0 , 1 -61.70D0 ,-119.47D0 , -187.51D0 , -307.07D0 , -475.00D0 , 2 0.0D0 , 0.0D0 , 0.0D0 , 0.0D0 , 3 -90.98D0 , -150.81D0 , -229.15D0 , -345.93D0 , 0.0D0/ DATA EHEAT3 / 52.102D0 , 0.0D0 , 0.0D0 , 0.0D0 , 1 135.7 D0 , 170.89D0 , 113.0 D0 , 59.559D0 , 18.86D0 , 2 0.0D0 , 0.0D0 , 0.0D0 , 0.0D0 , 3 106.0D0 , 79.8D0 , 65.65D0 , 28.95D0 , 0.0D0 / C *** BETA3 AND ALP3 ARE THE BOND PARAMETERS USED IN THE C RESONANCE INTEGRAL AND THE CORE CORE REPULSION INTEGRAL RESPECTIVE C THAT IS ACCORDING TO THE FOLLOWING CONVENTION C C HERE IS THE C BOND TYPE DESIGNATION C C C H B C N O F SI P S CL C ----------------------------------------- C H 1 11 16 22 29 37 92 106 121 137 C B 15 20 26 33 41 C C 21 27 34 42 97 111 126 142 C N 28 35 43 127 143 C O 36 44 113 128 C F 45 114 C SI 105 C P 120 151 C S 136 152 C CL 153 DATA BETA3(1),ALP3(1) / 0.244770D0 , 1.489450D0 / DATA BETA3(11),ALP3(11) / 0.185347D0 , 2.090352D0 / DATA BETA3(15),ALP3(15) / 0.151324D0 , 2.280544D0 / DATA BETA3(16),ALP3(16) / 0.315011D0 , 1.475836D0 / DATA BETA3(20),ALP3(20) / 0.250031D0 , 2.138291D0 / DATA BETA3(21),ALP3(21) / 0.419907D0 , 1.371208D0 / DATA BETA3(22),ALP3(22) / 0.360776D0 , 0.589380D0 / DATA BETA3(26),ALP3(26) / 0.310959D0 , 1.909763D0 / DATA BETA3(27),ALP3(27) / 0.410886D0 , 1.635259D0 / DATA BETA3(28),ALP3(28) / 0.377342D0 , 2.029618D0 / DATA BETA3(29),ALP3(29) / 0.417759D0 , 0.478901D0 / DATA BETA3(33),ALP3(33) / 0.349745D0 , 2.484827D0 / DATA BETA3(34),ALP3(34) / 0.464514D0 , 1.820975D0 / DATA BETA3(35),ALP3(35) / 0.458110D0 , 1.873859D0 / DATA BETA3(36),ALP3(36) / 0.659407D0 , 1.537190D0 / DATA BETA3(37),ALP3(37) / 0.195242D0 , 3.771362D0 / DATA BETA3(41),ALP3(41) / 0.219591D0 , 2.862183D0 / DATA BETA3(42),ALP3(42) / 0.247494D0 , 2.725913D0 / DATA BETA3(43),ALP3(43) / 0.205347D0 , 2.861667D0 / DATA BETA3(44),ALP3(44) / 0.334044D0 , 2.266949D0 / DATA BETA3(45),ALP3(45) / 0.197464D0 , 3.864997D0 / DATA BETA3(92),ALP3(92) / 0.289647D0 , 0.940789D0 / DATA BETA3(97),ALP3(97) / 0.411377D0 , 1.101382D0 / DATA BETA3(105),ALP3(105) / 0.291703D0 , 0.918432D0 / DATA BETA3(106),ALP3(106) / 0.320118D0 , 0.923170D0 / DATA BETA3(111),ALP3(111) / 0.457816D0 , 1.029693D0 / DATA BETA3(113),ALP3(113) / 0.470000D0 , 1.662500D0 / DATA BETA3(114),ALP3(114) / 0.300000D0 , 1.750000D0 / DATA BETA3(120),ALP3(120) / 0.311790D0 , 1.186652D0 / DATA BETA3(121),ALP3(121) / 0.220654D0 , 1.700698D0 / DATA BETA3(126),ALP3(126) / 0.284620D0 , 1.761370D0 / DATA BETA3(127),ALP3(127) / 0.313170D0 , 1.878176D0/ DATA BETA3(128),ALP3(128) / 0.422890D0 , 2.077240D0 / DATA BETA3(136),ALP3(136) / 0.202489D0 , 1.751617D0 / DATA BETA3(137),ALP3(137) / 0.231653D0 , 2.089404D0 / DATA BETA3(142),ALP3(142) / 0.315480D0 , 1.676222D0 / DATA BETA3(143),ALP3(143) / 0.302298D0 , 1.817064D0 / DATA BETA3(151),ALP3(151) / 0.277322D0 , 1.543720D0 / DATA BETA3(152),ALP3(152) / 0.221764D0 , 1.950318D0 / DATA BETA3(153),ALP3(153) / 0.258969D0 , 1.792125D0 / C *** HERE COMES THE OPTIMIZED SLATER_S EXPONENTS FOR THE EVALUATION C OF THE OVERLAP INTEGRALS AND MOLECULAR DIPOLE MOMENTS. DATA ZS3(1),ZP3(1) / 1.3D0 , 0.0D0 / DATA ZS3(5),ZP3(5) / 1.211156D0 , 0.972826D0 / DATA ZS3(6),ZP3(6) / 1.739391D0 , 1.709645D0 / DATA ZS3(7),ZP3(7) / 2.704546D0 , 1.870839D0 / DATA ZS3(8),ZP3(8) / 3.640575D0 , 2.168448D0 / DATA ZS3(9),ZP3(9) / 3.111270D0 , 1.41986D0 / DATA ZS3(14),ZP3(14) / 1.629173D0 , 1.381721D0 / DATA ZS3(15),ZP3(15) / 1.926108D0 , 1.590665D0 / DATA ZS3(16),ZP3(16) / 1.719480D0 , 1.403205D0 / DATA ZS3(17),ZP3(17) / 3.430887D0 , 1.627017D0 / ************************************************************* * * * DATA FOR THE SPARKLES * * * ************************************************************* * DATA FOR THE " ++ " SPARKLE DATA EHEAT(103) / 0.0D0/ DATA VS(103) /10.0D0/ C C START OF MNDO C DATA ALPM(103) / 1.5D0/ DATA EISOLM(103) / 0.0D0/ DATA AMM(103) / 0.5D0/ C C START OF AM1 C DATA ALPAM1(103) / 1.5D0/ DATA EISOLA(103) / 0.0D0/ DATA AMAM1(103) / 0.5D0/ C C START OF PM3 C DATA ALPPM3(103) / 1.5D0/ DATA EISOLP(103) / 0.0D0/ DATA AMPM3(103) / 0.5D0/ * DATA FOR THE " + " SPARKLE DATA EHEAT(104) / 0.0D0/ DATA VS(104) /10.0D0/ DATA ALPAM1(104) / 1.5D0/ DATA EISOLA(104) / 0.0D0/ DATA AMAM1(104) / 0.5D0/ DATA ALPM(104) / 1.5D0/ DATA EISOLM(104) / 0.0D0/ DATA AMM(104) / 0.5D0/ DATA ALPPM3(104) / 1.5D0/ DATA EISOLP(104) / 0.0D0/ DATA AMPM3(104) / 0.5D0/ * DATA FOR THE " -- " SPARKLE DATA EHEAT(105) / 0.0D0/ DATA VS(105) /10.0D0/ DATA ALPAM1(105) / 1.5D0/ DATA EISOLA(105) / 0.0D0/ DATA AMAM1(105) / 0.5D0/ DATA ALPM(105) / 1.5D0/ DATA EISOLM(105) / 0.0D0/ DATA AMM(105) / 0.5D0/ DATA ALPPM3(105) / 1.5D0/ DATA EISOLP(105) / 0.0D0/ DATA AMPM3(105) / 0.5D0/ * DATA FOR THE " - " SPARKLE DATA EHEAT(106) / 0.0D0/ DATA VS(106) /10.0D0/ DATA ALPAM1(106) / 1.5D0/ DATA EISOLA(106) / 0.0D0/ DATA AMAM1(106) / 0.5D0/ DATA ALPM(106) / 1.5D0/ DATA EISOLM(106) / 0.0D0/ DATA AMM(106) / 0.5D0/ DATA ALPPM3(106) / 1.5D0/ DATA EISOLP(106) / 0.0D0/ DATA AMPM3(106) / 0.5D0/ *********************************************************************** * * START OF MNDO PARAMETERS * *********************************************************************** C DATA FOR ELEMENT 1 HYDROGEN DATA REFMN ( 1)/' H: (MNDO): M.J.S. DEWAR, W. THIEL, J. AM. CHE 1M. SOC., 99, 4899, (1977) '/ DATA USSM ( 1)/ -11.9062760D0/ DATA BETASM ( 1)/ -6.9890640D0/ DATA ZSM ( 1)/ 1.3319670D0/ DATA ALPM ( 1)/ 2.5441341D0/ DATA EISOLM ( 1)/ -11.9062760D0/ DATA AMM ( 1)/ 0.4721793D0/ DATA ADM ( 1)/ 0.4721793D0/ DATA AQM ( 1)/ 0.4721793D0/ C DATA FOR ELEMENT 3 LITHIUM DATA REFMN ( 3)/' Li: (MNDO): TAKEN FROM MNDOC BY W.THIEL, 1QCPE NO.438, V. 2, P.63, (1982).'/ DATA USSM ( 3)/ -5.1280000D0/ DATA UPPM ( 3)/ -2.7212000D0/ DATA BETASM ( 3)/ -1.3500400D0/ DATA BETAPM ( 3)/ -1.3500400D0/ DATA ZSM ( 3)/ 0.7023800D0/ DATA ZPM ( 3)/ 0.7023800D0/ DATA ALPM ( 3)/ 1.2501400D0/ DATA EISOLM ( 3)/ -5.1280000D0/ DATA GSSM ( 3)/ 7.3000000D0/ DATA GSPM ( 3)/ 5.4200000D0/ DATA GPPM ( 3)/ 5.0000000D0/ DATA GP2M ( 3)/ 4.5200000D0/ DATA HSPM ( 3)/ 0.8300000D0/ DATA DDM ( 3)/ 2.0549783D0/ DATA QQM ( 3)/ 1.7437069D0/ DATA AMM ( 3)/ 0.2682837D0/ DATA ADM ( 3)/ 0.2269793D0/ DATA AQM ( 3)/ 0.2614581D0/ C DATA FOR ELEMENT 4 BERYLLIUM DATA REFMN ( 4)/' Be: (MNDO): M.J.S. DEWAR, H.S. RZEPA, J. AM. C 1HEM. SOC., 100, 777, (1978) '/ DATA USSM ( 4)/ -16.6023780D0/ DATA UPPM ( 4)/ -10.7037710D0/ DATA BETASM ( 4)/ -4.0170960D0/ DATA BETAPM ( 4)/ -4.0170960D0/ DATA ZSM ( 4)/ 1.0042100D0/ DATA ZPM ( 4)/ 1.0042100D0/ DATA ALPM ( 4)/ 1.6694340D0/ DATA EISOLM ( 4)/ -24.2047560D0/ DATA DDM ( 4)/ 1.4373245D0/ DATA QQM ( 4)/ 1.2196103D0/ DATA AMM ( 4)/ 0.3307607D0/ DATA ADM ( 4)/ 0.3356142D0/ DATA AQM ( 4)/ 0.3846373D0/ C DATA FOR ELEMENT 5 BORON DATA REFMN ( 5)/' B: (MNDO): M.J.S. DEWAR, M.L. MCKEE, J. AM. C 1HEM. SOC., 99, 5231, (1977) '/ DATA USSM ( 5)/ -34.5471300D0/ DATA UPPM ( 5)/ -23.1216900D0/ DATA BETASM ( 5)/ -8.2520540D0/ DATA BETAPM ( 5)/ -8.2520540D0/ DATA ZSM ( 5)/ 1.5068010D0/ DATA ZPM ( 5)/ 1.5068010D0/ DATA ALPM ( 5)/ 2.1349930D0/ DATA EISOLM ( 5)/ -64.3159500D0/ DATA DDM ( 5)/ 0.9579073D0/ DATA QQM ( 5)/ 0.8128113D0/ DATA AMM ( 5)/ 0.3891951D0/ DATA ADM ( 5)/ 0.4904730D0/ DATA AQM ( 5)/ 0.5556979D0/ C DATA FOR ELEMENT 6 CARBON DATA REFMN ( 6)/' C: (MNDO): M.J.S. DEWAR, W. THIEL, J. AM. CHE 1M. SOC., 99, 4899, (1977) '/ DATA USSM ( 6)/ -52.2797450D0/ DATA UPPM ( 6)/ -39.2055580D0/ DATA BETASM ( 6)/ -18.9850440D0/ DATA BETAPM ( 6)/ -7.9341220D0/ DATA ZSM ( 6)/ 1.7875370D0/ DATA ZPM ( 6)/ 1.7875370D0/ DATA ALPM ( 6)/ 2.5463800D0/ DATA EISOLM ( 6)/ -120.5006060D0/ DATA DDM ( 6)/ 0.8074662D0/ DATA QQM ( 6)/ 0.6851578D0/ DATA AMM ( 6)/ 0.4494671D0/ DATA ADM ( 6)/ 0.6149474D0/ DATA AQM ( 6)/ 0.6685897D0/ C DATA FOR ELEMENT 7 NITROGEN DATA REFMN ( 7)/' N: (MNDO): M.J.S. DEWAR, W. THIEL, J. AM. CHE 1M. SOC., 99, 4899, (1977) '/ DATA USSM ( 7)/ -71.9321220D0/ DATA UPPM ( 7)/ -57.1723190D0/ DATA BETASM ( 7)/ -20.4957580D0/ DATA BETAPM ( 7)/ -20.4957580D0/ DATA ZSM ( 7)/ 2.2556140D0/ DATA ZPM ( 7)/ 2.2556140D0/ DATA ALPM ( 7)/ 2.8613420D0/ DATA EISOLM ( 7)/ -202.5662010D0/ DATA DDM ( 7)/ 0.6399037D0/ DATA QQM ( 7)/ 0.5429763D0/ DATA AMM ( 7)/ 0.4994487D0/ DATA ADM ( 7)/ 0.7843643D0/ DATA AQM ( 7)/ 0.81264450D0/ C DATA FOR ELEMENT 8 OXYGEN DATA REFMN ( 8)/' O: (MNDO): M.J.S. DEWAR, W. THIEL, J. AM. CHE 1M. SOC., 99, 4899, (1977) '/ DATA USSM ( 8)/ -99.6443090D0/ DATA UPPM ( 8)/ -77.7974720D0/ DATA BETASM ( 8)/ -32.6880820D0/ DATA BETAPM ( 8)/ -32.6880820D0/ DATA ZSM ( 8)/ 2.6999050D0/ DATA ZPM ( 8)/ 2.6999050D0/ DATA ALPM ( 8)/ 3.1606040D0/ DATA EISOLM ( 8)/ -317.8685060D0/ DATA DDM ( 8)/ 0.5346024D0/ DATA QQM ( 8)/ 0.4536252D0/ DATA AMM ( 8)/ 0.5667034D0/ DATA ADM ( 8)/ 0.9592562D0/ DATA AQM ( 8)/ 0.9495934D0/ C DATA FOR ELEMENT 9 FLUORINE DATA REFMN ( 9)/' F: (MNDO): M.J.S. DEWAR, H.S. RZEPA, J. AM. C 1HEM. SOC., 100, 777, (1978) '/ DATA USSM ( 9)/ -131.0715480D0/ DATA UPPM ( 9)/ -105.7821370D0/ DATA BETASM ( 9)/ -48.2904660D0/ DATA BETAPM ( 9)/ -36.5085400D0/ DATA ZSM ( 9)/ 2.8484870D0/ DATA ZPM ( 9)/ 2.8484870D0/ DATA ALPM ( 9)/ 3.4196606D0/ DATA EISOLM ( 9)/ -476.6837810D0/ DATA DDM ( 9)/ 0.5067166D0/ DATA QQM ( 9)/ 0.4299633D0/ DATA AMM ( 9)/ 0.6218302D0/ DATA ADM ( 9)/ 1.0850301D0/ DATA AQM ( 9)/ 1.0343643D0/ * DATA FOR THE SODIUM-LIKE SPARKLE DATA REFMN (11)/' Na: (MNDO): SODIUM-LIKE SPARKLE. USE WITH CA 1RE. '/ DATA REFAM (11)/' Na: (AM1): SODIUM-LIKE SPARKLE. USE WITH CA 1RE. '/ DATA REFPM3 (11)/' Na: (PM3): SODIUM-LIKE SPARKLE. USE WITH CA 1RE. '/ DATA VS(11) /10.0D0/ DATA ALPAM1(11) / 1.668D0/ DATA ALPM(11) / 1.660D0/ DATA ALPPM3(11) / 1.681D0/ C DATA EISOLA(11) / 0.0D0/ DATA EISOLM(11) / 0.0D0/ DATA EISOLP(11) / 0.0D0/ C DATA AMAM1(11) / 0.5D0/ DATA AMM(11) / 0.5D0/ DATA AMPM3(11) / 0.5D0/ C DATA FOR ELEMENT 13 ALUMINUM DATA REFMN (13)/' Al: (MNDO): L.P. DAVIS, ET.AL. J. COMP. CHEM. 1, 2, 433, (1981) SEE MANUAL. '/ DATA USSM (13)/ -23.8070970D0/ DATA UPPM (13)/ -17.5198780D0/ DATA BETASM (13)/ -2.6702840D0/ DATA BETAPM (13)/ -2.6702840D0/ DATA ZSM (13)/ 1.4441610D0/ DATA ZPM (13)/ 1.4441610D0/ DATA ZDM (13)/ 1.0000000D0/ DATA ALPM (13)/ 1.8688394D0/ DATA EISOLM (13)/ -44.4840720D0/ DATA DDM (13)/ 1.3992387D0/ DATA QQM (13)/ 1.1586797D0/ DATA AMM (13)/ 0.2973172D0/ DATA ADM (13)/ 0.2635574D0/ DATA AQM (13)/ 0.3673560D0/ C DATA FOR ELEMENT 14 SILICON DATA REFMN (14)/' Si: (MNDO): M.J.S.DEWAR, ET. AL. ORGANOMETALLIC 1S 5, 375 (1986) '/ DATA USSM (14)/ -37.0375330D0/ DATA UPPM (14)/ -27.7696780D0/ DATA BETASM (14)/ -9.0868040D0/ DATA BETAPM (14)/ -1.0758270D0/ DATA ZSM (14)/ 1.3159860D0/ DATA ZPM (14)/ 1.7099430D0/ DATA ZDM (14)/ 1.0000000D0/ DATA ALPM (14)/ 2.2053160D0/ DATA EISOLM (14)/ -82.8394220D0/ DATA DDM (14)/ 1.2580349D0/ DATA QQM (14)/ 0.9785824D0/ DATA AMM (14)/ 0.3608967D0/ DATA ADM (14)/ 0.3664244D0/ DATA AQM (14)/ 0.4506740D0/ C DATA FOR ELEMENT 15 PHOSPHORUS DATA REFMN (15)/' P: (MNDO): M.J.S.DEWAR, M.L.MCKEE, H.S.RZEPA, 1J. AM. CHEM. SOC., 100 3607 1978'/ DATA USSM (15)/ -56.1433600D0/ DATA UPPM (15)/ -42.8510800D0/ DATA BETASM (15)/ -6.7916000D0/ DATA BETAPM (15)/ -6.7916000D0/ DATA ZSM (15)/ 2.1087200D0/ DATA ZPM (15)/ 1.7858100D0/ DATA ZDM (15)/ 1.0000000D0/ DATA ALPM (15)/ 2.4152800D0/ DATA EISOLM (15)/ -152.9599600D0/ DATA DDM (15)/ 1.0129699D0/ DATA QQM (15)/ 0.9370090D0/ DATA AMM (15)/ 0.4248438D0/ DATA ADM (15)/ 0.4882420D0/ DATA AQM (15)/ 0.4979406D0/ C DATA FOR ELEMENT 16 SULFUR C DATA REFMN (16)/' S: (MNDO): M.J.S.DEWAR, C.H. REYNOLDS, J. COM 1P. CHEM. 7, 140-143 (1986) '/ DATA USSM (16)/ -72.2422810D0/ DATA UPPM (16)/ -56.9732070D0/ DATA BETASM (16)/ -10.7616700D0/ DATA BETAPM (16)/ -10.1084330D0/ DATA ZSM (16)/ 2.3129620D0/ DATA ZPM (16)/ 2.0091460D0/ DATA ZDM (16)/ 1.0000000D0/ DATA ALPM (16)/ 2.4780260D0/ DATA EISOLM (16)/ -226.0123900D0/ DATA DDM (16)/ 0.9189935D0/ DATA QQM (16)/ 0.8328514D0/ DATA AMM (16)/ 0.4733554D0/ DATA ADM (16)/ 0.5544502D0/ DATA AQM (16)/ 0.5585244D0/ C DATA FOR ELEMENT 17 CHLORINE DATA REFMN (17)/' Cl: (MNDO): M.J.S.DEWAR, H.S.RZEPA, J. COMP. CH 1EM., 4, 158, (1983) '/ DATA USSM (17)/ -100.2271660D0/ DATA UPPM (17)/ -77.3786670D0/ DATA BETASM (17)/ -14.2623200D0/ DATA BETAPM (17)/ -14.2623200D0/ DATA ZSM (17)/ 3.7846450D0/ DATA ZPM (17)/ 2.0362630D0/ DATA ZDM (17)/ 1.0000000D0/ DATA ALPM (17)/ 2.5422010D0/ DATA EISOLM (17)/ -353.1176670D0/ DATA DDM (17)/ 0.4986870D0/ DATA QQM (17)/ 0.8217603D0/ DATA AMM (17)/ 0.5523705D0/ DATA ADM (17)/ 0.8061220D0/ DATA AQM (17)/ 0.6053435D0/ * DATA FOR THE POTASSIUM-LIKE SPARKLE DATA REFAM (19)/' K: (AM1): POTASSIUM-LIKE SPARKLE. USE WITH 1 CARE. '/ DATA REFMN (19)/' K: (MNDO): POTASSIUM-LIKE SPARKLE. USE WITH 1 CARE. '/ DATA REFPM3 (19)/' K: (PM3): POTASSIUM-LIKE SPARKLE. USE WITH 1 CARE. '/ DATA VS(19) /10.0D0/ DATA ALPAM1(19) / 1.405D0/ DATA ALPM(19) / 1.396D0/ DATA ALPPM3(19) / 1.400D0/ C DATA EISOLA(19) / 0.0D0/ DATA EISOLM(19) / 0.0D0/ DATA EISOLP(19) / 0.0D0/ C DATA AMAM1(19) / 0.5D0/ DATA AMM(19) / 0.5D0/ DATA AMPM3(19) / 0.5D0/ C DATA FOR ELEMENT 24 CHROMIUM DATA REFMN (24)/' Cr: (MNDO): M.J.S. DEWAR, E.F. HEALY, J.J.P. 1STEWART (IN PREPARATION) '/ DATA USSM (24)/ -17.5170270D0/ DATA UPPM (24)/ -12.5337290D0/ DATA UDDM (24)/ -44.1249280D0/ DATA BETASM (24)/ -0.1000000D0/ DATA BETAPM (24)/ -0.1000000D0/ DATA BETADM (24)/ -8.7766360D0/ DATA ZSM (24)/ 1.5000000D0/ DATA ZPM (24)/ 1.5000000D0/ DATA ZDM (24)/ 2.8845490D0/ DATA ALPM (24)/ 3.0683070D0/ DATA EISOLM (24)/ -134.8187920D0/ DATA GSSM (24)/ 6.0000000D0/ DATA GSPM (24)/ 4.1500000D0/ DATA GPPM (24)/ 5.0000000D0/ DATA GP2M (24)/ 3.5000000D0/ DATA HSPM (24)/ 1.0000000D0/ DATA GSD (24)/ 2.8746410D0/ DATA GPD (24)/ 3.0000000D0/ DATA GDD (24)/ 8.8949670D0/ DATA DDM (24)/ 1.7320508D0/ DATA QQM (24)/ 1.4142136D0/ DATA AMM (24)/ 0.2205072D0/ DATA ADM (24)/ 0.2711332D0/ DATA AQM (24)/ 0.4464656D0/ C DATA FOR ELEMENT 30 ZINC DATA REFMN (30)/' Zn: (MNDO): M.J.S. DEWAR, K.M. MERZ, ORGANOMET 1ALLICS, 5, 1494-1496 (1986) '/ C DATA FOR ELEMENT 30 DATA USSM ( 30)/ -20.8397160D0/ DATA UPPM ( 30)/ -19.6252240D0/ DATA BETASM( 30)/ -1.0000000D0/ DATA BETAPM( 30)/ -2.0000000D0/ DATA ZSM ( 30)/ 2.0473590D0/ DATA ZPM ( 30)/ 1.4609460D0/ DATA ZDM ( 30)/ 1.0000000D0/ DATA ALPM ( 30)/ 1.5064570D0/ DATA EISOLM( 30)/ -29.8794320D0/ DATA GSSM ( 30)/ 11.8000000D0/ DATA GSPM ( 30)/ 11.1820180D0/ DATA GPPM ( 30)/ 13.3000000D0/ DATA GP2M ( 30)/ 12.9305200D0/ DATA HSPM ( 30)/ 0.4846060D0/ DATA DDM ( 30)/ 1.3037826D0/ DATA QQM ( 30)/ 1.4520183D0/ DATA AMM ( 30)/ 0.4336641D0/ DATA ADM ( 30)/ 0.2375912D0/ DATA AQM ( 30)/ 0.2738858D0/ C DATA FOR ELEMENT 32 GERMANIUM DATA REFMN (32)/' Ge: (MNDO): M.J.S.DEWAR, G.L.GRADY, E.F.HEALY,O 1RGANOMETALLICS 6 186-189, (1987)'/ DATA USSM ( 32)/ -33.9493670D0/ DATA UPPM ( 32)/ -27.4251050D0/ DATA BETASM( 32)/ -4.5164790D0/ DATA BETAPM( 32)/ -1.7555170D0/ DATA ZSM ( 32)/ 1.2931800D0/ DATA ZPM ( 32)/ 2.0205640D0/ DATA ALPM ( 32)/ 1.9784980D0/ DATA EISOLM( 32)/ -76.2489440D0/ DATA GSSM ( 32)/ 9.8000000D0/ DATA GSPM ( 32)/ 8.3000000D0/ DATA GPPM ( 32)/ 7.3000000D0/ DATA GP2M ( 32)/ 6.5000000D0/ DATA HSPM ( 32)/ 1.3000000D0/ DATA DDM ( 32)/ 1.2556091D0/ DATA QQM ( 32)/ 1.0498655D0/ DATA AMM ( 32)/ 0.3601617D0/ DATA ADM ( 32)/ 0.3643722D0/ DATA AQM ( 32)/ 0.4347337D0/ C DATA FOR ELEMENT 35 BROMINE DATA REFMN (35)/' Br: (MNDO): M.J.S.DEWAR, E.F. HEALY, J. COMP. C 1HEM., 4, 542, (1983) '/ DATA USSM (35)/ -99.9864405D0/ DATA UPPM (35)/ -75.6713075D0/ DATA BETASM (35)/ -8.9171070D0/ DATA BETAPM (35)/ -9.9437400D0/ DATA ZSM (35)/ 3.8543019D0/ DATA ZPM (35)/ 2.1992091D0/ DATA ZDM (35)/ 1.0000000D0/ DATA ALPM (35)/ 2.4457051D0/ DATA EISOLM (35)/ -346.6812500D0/ DATA DDM (35)/ 0.6051074D0/ DATA QQM (35)/ 0.9645873D0/ DATA AMM (35)/ 0.5526068D0/ DATA ADM (35)/ 0.7258330D0/ DATA AQM (35)/ 0.5574589D0/ C DATA FOR ELEMENT 50 TIN DATA REFMN (50)/' Sn: (MNDO): M.J.S.DEWAR,G.L.GRADY,J.J.P.STEWART 1, J.AM.CHEM.SOC.,106 6771 (1984)'/ DATA USSM (50)/ -40.8518020D0/ DATA UPPM (50)/ -28.5602490D0/ DATA BETASM (50)/ -3.2351470D0/ DATA BETAPM (50)/ -4.2904160D0/ DATA ZSM (50)/ 2.0803800D0/ DATA ZPM (50)/ 1.9371060D0/ DATA ALPM (50)/ 1.8008140D0/ DATA EISOLM (50)/ -92.3241020D0/ DATA GSSM (50)/ 9.8000000D0/ DATA GSPM (50)/ 8.3000000D0/ DATA GPPM (50)/ 7.3000000D0/ DATA GP2M (50)/ 6.5000000D0/ DATA HSPM (50)/ 1.3000000D0/ DATA DDM (50)/ 1.5697766D0/ DATA QQM (50)/ 1.3262292D0/ DATA AMM (50)/ 0.3601617D0/ DATA ADM (50)/ 0.3219998D0/ DATA AQM (50)/ 0.3713827D0/ C DATA FOR ELEMENT 53 IODINE DATA REFMN (53)/' I: (MNDO): M.J.S.DEWAR, E.F. HEALY, J.J.P. STE 1WART, J.COMP.CHEM., 5,358,(1984)'/ DATA USSM (53)/ -100.0030538D0/ DATA UPPM (53)/ -74.6114692D0/ DATA BETASM (53)/ -7.4144510D0/ DATA BETAPM (53)/ -6.1967810D0/ DATA ZSM (53)/ 2.2729610D0/ DATA ZPM (53)/ 2.1694980D0/ DATA ZDM (53)/ 1.0000000D0/ DATA ALPM (53)/ 2.2073200D0/ DATA EISOLM (53)/ -340.5983600D0/ DATA DDM (53)/ 1.4253233D0/ DATA QQM (53)/ 1.1841707D0/ DATA AMM (53)/ 0.5527541D0/ DATA ADM (53)/ 0.4593451D0/ DATA AQM (53)/ 0.4585376D0/ C DATA FOR ELEMENT 80 MERCURY DATA REFMN (80)/' Hg: (MNDO): M.J.S.DEWAR, ET. AL. ORGANOMETALLI 1CS 4, 1964, (1985) SEE MANUAL '/ DATA USSM ( 80)/ -19.8095740D0/ DATA UPPM ( 80)/ -13.1025300D0/ DATA BETASM ( 80)/ -0.4045250D0/ DATA BETAPM ( 80)/ -6.2066830D0/ DATA ZSM ( 80)/ 2.2181840D0/ DATA ZPM ( 80)/ 2.0650380D0/ DATA ALPM ( 80)/ 1.3356410D0/ DATA EISOLM ( 80)/ -28.8191480D0/ DATA GSSM ( 80)/ 10.8000000D0/ DATA GSPM ( 80)/ 9.3000000D0/ DATA GPPM ( 80)/ 14.3000000D0/ DATA GP2M ( 80)/ 13.5000000D0/ DATA HSPM ( 80)/ 1.3000000D0/ DATA DDM ( 80)/ 1.7378048D0/ DATA QQM ( 80)/ 1.4608064D0/ DATA AMM ( 80)/ 0.3969129D0/ DATA ADM ( 80)/ 0.3047694D0/ DATA AQM ( 80)/ 0.3483102D0/ C DATA FOR ELEMENT 82 LEAD DATA REFMN (82)/' Pb: (MNDO): M.J.S.DEWAR, ET.AL ORGANOMETALLICS 14 1973-1980 (1985) '/ DATA USSM ( 82)/ -47.3196920D0/ DATA UPPM ( 82)/ -28.8475600D0/ DATA BETASM ( 82)/ -8.0423870D0/ DATA BETAPM ( 82)/ -3.0000000D0/ DATA ZSM ( 82)/ 2.4982860D0/ DATA ZPM ( 82)/ 2.0820710D0/ DATA ALPM ( 82)/ 1.7283330D0/ DATA EISOLM ( 82)/ -105.8345040D0/ DATA GSSM ( 82)/ 9.8000000D0/ DATA GSPM ( 82)/ 8.3000000D0/ DATA GPPM ( 82)/ 7.3000000D0/ DATA GP2M ( 82)/ 6.5000000D0/ DATA HSPM ( 82)/ 1.3000000D0/ DATA DDM ( 82)/ 1.5526624D0/ DATA QQM ( 82)/ 1.4488558D0/ DATA AMM ( 82)/ 0.3601617D0/ DATA ADM ( 82)/ 0.3239309D0/ DATA AQM ( 82)/ 0.3502057D0/ C C START OF "OLD" ELEMENTS: THESE ARE OLD PARAMETERS WHICH C CAN BE USED, IF DESIRED, BY SPECIFYING "YEAR" C AS IN SI1978 OR S1983. C C DATA FOR ELEMENT 90 SILICON DATA REFMN (90)/' Si: (MNDO): M.J.S.DEWAR, M.L.MCKEE, H.S.RZEPA, 1J. AM. CHEM. SOC., 100 3607 1978'/ DATA USSM (90)/ -40.5682920D0/ DATA UPPM (90)/ -28.0891870D0/ DATA BETASM (90)/ -4.2562180D0/ DATA BETAPM (90)/ -4.2562180D0/ DATA ZSM (90)/ 1.4353060D0/ DATA ZPM (90)/ 1.4353060D0/ DATA ZDM (90)/ 1.0000000D0/ DATA ALPM (90)/ 2.1961078D0/ DATA EISOLM (90)/ -90.5399580D0/ DATA DDM (90)/ 1.4078712D0/ DATA QQM (90)/ 1.1658281D0/ DATA AMM (90)/ 0.3608967D0/ DATA ADM (90)/ 0.3441817D0/ DATA AQM (90)/ 0.3999442D0/ DATA HSPM(90)/1.32D00/ DATA GP2M(90)/6.54D00/ DATA GPPM(90)/7.31D00/ DATA GSPM(90)/8.36D00/ DATA GSSM(90)/9.82D00/ DATA REFMN (91)/' S: (MNDO): M.J.S.DEWAR, H.S. RZEPA, M.L.MCKEE, 1 J.AM.CHEM.SOC.100, 3607 (1978).'/ DATA USSM (91)/ -75.2391520D0/ DATA UPPM (91)/ -57.8320130D0/ DATA BETASM (91)/ -11.1422310D0/ DATA BETAPM (91)/ -11.1422310D0/ DATA ZSM (91)/ 2.6135910D0/ DATA ZPM (91)/ 2.0343930D0/ DATA ZDM (91)/ 1.0000000D0/ DATA ALPM (91)/ 2.4916445D0/ DATA EISOLM (91)/ -235.4413560D0/ DATA DDM (91)/ 0.8231596D0/ DATA QQM (91)/ 0.8225156D0/ DATA AMM (91)/ 0.4733554D0/ DATA ADM (91)/ 0.5889395D0/ DATA AQM (91)/ 0.5632724D0/ DATA REFMN (102)/' Cb: (MNDO): Capped Bond (Hydrogen-like, takes 1 on a zero charge.) '/ DATA USSM (102)/ -11.9062760D0/ DATA BETASM(102)/-9999999.0000000D0/ DATA ZSM (102)/ 4.0000000D0/ DATA ZPM (102)/ 0.3000000D0/ DATA ZDM (102)/ 0.3000000D0/ DATA ALPM (102)/ 2.5441341D0/ DATA EISOLM(102)/ 4.0000000D0/ DATA GSSM (102)/ 12.8480000D0/ DATA HSPM (102)/ 0.1000000D0/ DATA DDM (102)/ 0.0684105D0/ DATA QQM (102)/ 1.0540926D0/ DATA AMM (102)/ 0.4721793D0/ DATA ADM (102)/ 0.9262742D0/ DATA AQM (102)/ 0.2909059D0/ *********************************************************************** * * START OF AM1 PARAMETERS * *********************************************************************** C DATA FOR ELEMENT 1 AM1: HYDROGEN DATA REFAM ( 1)/' H: (AM1): M.J.S. DEWAR ET AL, J. AM. CHEM. SOC 1. 107 3902-3909 (1985) '/ DATA USSAM1( 1)/ -11.3964270D0/ DATA BETASA( 1)/ -6.1737870D0/ DATA ZS AM1( 1)/ 1.1880780D0/ DATA ALPAM1( 1)/ 2.8823240D0/ DATA EISOLA( 1)/ -11.3964270D0/ DATA GSSAM1( 1)/ 12.8480000D0/ DATA AM AM1( 1)/ 0.4721793D0/ DATA AD AM1( 1)/ 0.4721793D0/ DATA AQ AM1( 1)/ 0.4721793D0/ DATA GUESA1( 1,1)/ 0.1227960D0/ DATA GUESA2( 1,1)/ 5.0000000D0/ DATA GUESA3( 1,1)/ 1.2000000D0/ DATA GUESA1( 1,2)/ 0.0050900D0/ DATA GUESA2( 1,2)/ 5.0000000D0/ DATA GUESA3( 1,2)/ 1.8000000D0/ DATA GUESA1( 1,3)/ -0.0183360D0/ DATA GUESA2( 1,3)/ 2.0000000D0/ DATA GUESA3( 1,3)/ 2.1000000D0/ C DATA FOR ELEMENT 3 AM1: LITHIUM * DATA REFAM ( 3)/' Li: (MNDO): TAKEN FROM MNDOC BY W.THIEL, 1QCPE NO.438, V. 2, P.63, (1982).'/ DATA USSAM1( 3)/ -5.1280000D0/ DATA UPPAM1( 3)/ -2.7212000D0/ DATA BETASA( 3)/ -1.3500400D0/ DATA BETAPA( 3)/ -1.3500400D0/ DATA ZS AM1( 3)/ 0.7023800D0/ DATA ZP AM1( 3)/ 0.7023800D0/ DATA ALPAM1( 3)/ 1.2501400D0/ DATA EISOLA( 3)/ -5.1280000D0/ DATA GSSAM1( 3)/ 7.3000000D0/ DATA GSPAM1( 3)/ 5.4200000D0/ DATA GPPAM1( 3)/ 5.0000000D0/ DATA GP2AM1( 3)/ 4.5200000D0/ DATA HSPAM1( 3)/ 0.8300000D0/ DATA DD AM1( 3)/ 2.0549783D0/ DATA QQ AM1( 3)/ 1.7437069D0/ DATA AM AM1( 3)/ 0.2682837D0/ DATA AD AM1( 3)/ 0.2269793D0/ DATA AQ AM1( 3)/ 0.2614581D0/ C DATA FOR ELEMENT 4 AM1: BERYLLIUM * DATA REFAM ( 4)/' Be: (MNDO): M.J.S. DEWAR, H.S. RZEPA, J. AM. C 1HEM. SOC., 100, 777, (1978) '/ DATA USSAM1( 4)/ -16.6023780D0/ DATA UPPAM1( 4)/ -10.7037710D0/ DATA BETASA( 4)/ -4.0170960D0/ DATA BETAPA( 4)/ -4.0170960D0/ DATA ZS AM1( 4)/ 1.0042100D0/ DATA ZP AM1( 4)/ 1.0042100D0/ DATA ALPAM1( 4)/ 1.6694340D0/ DATA EISOLA( 4)/ -24.2047560D0/ DATA GSSAM1( 4)/ 9.0000000D0/ DATA GSPAM1( 4)/ 7.4300000D0/ DATA GPPAM1( 4)/ 6.9700000D0/ DATA GP2AM1( 4)/ 6.2200000D0/ DATA HSPAM1( 4)/ 1.2800000D0/ DATA DD AM1( 4)/ 1.4373245D0/ DATA QQ AM1( 4)/ 1.2196103D0/ DATA AM AM1( 4)/ 0.3307607D0/ DATA AD AM1( 4)/ 0.3356142D0/ DATA AQ AM1( 4)/ 0.3846373D0/ C DATA FOR ELEMENT 5 AM1: BORON * DATA REFAM ( 5)/' B: (AM1): M.J.S. DEWAR, C. JIE, E. G. ZOEBISC 1H ORGANOMETALLICS 7, 513 (1988) '/ C DATA FOR ELEMENT 5 DATA USSAM1( 5)/ -34.4928700D0/ DATA UPPAM1( 5)/ -22.6315250D0/ DATA BETASA( 5)/ -9.5991140D0/ DATA BETAPA( 5)/ -6.2737570D0/ DATA ZS AM1( 5)/ 1.6117090D0/ DATA ZP AM1( 5)/ 1.5553850D0/ DATA ALPAM1( 5)/ 2.4469090D0/ DATA EISOLA( 5)/ -63.7172650D0/ DATA GSSAM1( 5)/ 10.5900000D0/ DATA GSPAM1( 5)/ 9.5600000D0/ DATA GPPAM1( 5)/ 8.8600000D0/ DATA GP2AM1( 5)/ 7.8600000D0/ DATA HSPAM1( 5)/ 1.8100000D0/ DATA DD AM1( 5)/ 0.9107622D0/ DATA QQ AM1( 5)/ 0.7874223D0/ DATA AM AM1( 5)/ 0.3891951D0/ DATA AD AM1( 5)/ 0.5045152D0/ DATA AQ AM1( 5)/ 0.5678856D0/ C DATA FOR ELEMENT 6 AM1: CARBON DATA REFAM ( 6)/' C: (AM1): M.J.S. DEWAR ET AL, J. AM. CHEM. SOC 1. 107 3902-3909 (1985) '/ DATA USSAM1( 6)/ -52.0286580D0/ DATA UPPAM1( 6)/ -39.6142390D0/ DATA BETASA( 6)/ -15.7157830D0/ DATA BETAPA( 6)/ -7.7192830D0/ DATA ZS AM1( 6)/ 1.8086650D0/ DATA ZP AM1( 6)/ 1.6851160D0/ DATA ALPAM1( 6)/ 2.6482740D0/ DATA EISOLA( 6)/ -120.8157940D0/ DATA GSSAM1( 6)/ 12.2300000D0/ DATA GSPAM1( 6)/ 11.4700000D0/ DATA GPPAM1( 6)/ 11.0800000D0/ DATA GP2AM1( 6)/ 9.8400000D0/ DATA HSPAM1( 6)/ 2.4300000D0/ DATA DD AM1( 6)/ 0.8236736D0/ DATA QQ AM1( 6)/ 0.7268015D0/ DATA AM AM1( 6)/ 0.4494671D0/ DATA AD AM1( 6)/ 0.6082946D0/ DATA AQ AM1( 6)/ 0.6423492D0/ DATA GUESA1( 6,1)/ 0.0113550D0/ DATA GUESA2( 6,1)/ 5.0000000D0/ DATA GUESA3( 6,1)/ 1.6000000D0/ DATA GUESA1( 6,2)/ 0.0459240D0/ DATA GUESA2( 6,2)/ 5.0000000D0/ DATA GUESA3( 6,2)/ 1.8500000D0/ DATA GUESA1( 6,3)/ -0.0200610D0/ DATA GUESA2( 6,3)/ 5.0000000D0/ DATA GUESA3( 6,3)/ 2.0500000D0/ DATA GUESA1( 6,4)/ -0.0012600D0/ DATA GUESA2( 6,4)/ 5.0000000D0/ DATA GUESA3( 6,4)/ 2.6500000D0/ C DATA FOR ELEMENT 7 AM1: NITROGEN DATA REFAM ( 7)/' N: (AM1): M.J.S. DEWAR ET AL, J. AM. CHEM. SOC 1. 107 3902-3909 (1985) '/ DATA USSAM1( 7)/ -71.8600000D0/ DATA UPPAM1( 7)/ -57.1675810D0/ DATA BETASA( 7)/ -20.2991100D0/ DATA BETAPA( 7)/ -18.2386660D0/ DATA ZS AM1( 7)/ 2.3154100D0/ DATA ZP AM1( 7)/ 2.1579400D0/ DATA ALPAM1( 7)/ 2.9472860D0/ DATA EISOLA( 7)/ -202.4077430D0/ DATA GSSAM1( 7)/ 13.5900000D0/ DATA GSPAM1( 7)/ 12.6600000D0/ DATA GPPAM1( 7)/ 12.9800000D0/ DATA GP2AM1( 7)/ 11.5900000D0/ DATA HSPAM1( 7)/ 3.1400000D0/ DATA DD AM1( 7)/ 0.6433247D0/ DATA QQ AM1( 7)/ 0.5675528D0/ DATA AM AM1( 7)/ 0.4994487D0/ DATA AD AM1( 7)/ 0.7820840D0/ DATA AQ AM1( 7)/ 0.7883498D0/ DATA GUESA1( 7,1)/ 0.0252510D0/ DATA GUESA2( 7,1)/ 5.0000000D0/ DATA GUESA3( 7,1)/ 1.5000000D0/ DATA GUESA1( 7,2)/ 0.0289530D0/ DATA GUESA2( 7,2)/ 5.0000000D0/ DATA GUESA3( 7,2)/ 2.1000000D0/ DATA GUESA1( 7,3)/ -0.0058060D0/ DATA GUESA2( 7,3)/ 2.0000000D0/ DATA GUESA3( 7,3)/ 2.4000000D0/ C DATA FOR ELEMENT 8 AM1: OXYGEN DATA REFAM ( 8)/' O: (AM1): M.J.S. DEWAR ET AL, J. AM. CHEM. SOC 1. 107 3902-3909 (1985) '/ DATA USSAM1( 8)/ -97.8300000D0/ DATA UPPAM1( 8)/ -78.2623800D0/ DATA BETASA( 8)/ -29.2727730D0/ DATA BETAPA( 8)/ -29.2727730D0/ DATA ZS AM1( 8)/ 3.1080320D0/ DATA ZP AM1( 8)/ 2.5240390D0/ DATA ALPAM1( 8)/ 4.4553710D0/ DATA EISOLA( 8)/ -316.0995200D0/ DATA GSSAM1( 8)/ 15.4200000D0/ DATA GSPAM1( 8)/ 14.4800000D0/ DATA GPPAM1( 8)/ 14.5200000D0/ DATA GP2AM1( 8)/ 12.9800000D0/ DATA HSPAM1( 8)/ 3.9400000D0/ DATA DD AM1( 8)/ 0.4988896D0/ DATA QQ AM1( 8)/ 0.4852322D0/ DATA AM AM1( 8)/ 0.5667034D0/ DATA AD AM1( 8)/ 0.9961066D0/ DATA AQ AM1( 8)/ 0.9065223D0/ DATA GUESA1( 8,1)/ 0.2809620D0/ DATA GUESA2( 8,1)/ 5.0000000D0/ DATA GUESA3( 8,1)/ 0.8479180D0/ DATA GUESA1( 8,2)/ 0.0814300D0/ DATA GUESA2( 8,2)/ 7.0000000D0/ DATA GUESA3( 8,2)/ 1.4450710D0/ C DATA FOR ELEMENT 9 AM1: FLUORINE * DATA REFAM ( 9)/' F: (AM1): M.J.S. DEWAR AND E. G. ZOEBISCH, THE 1OCHEM, 180, 1 (1988). '/ DATA USSAM1( 9)/ -136.1055790D0/ DATA UPPAM1( 9)/ -104.8898850D0/ DATA BETASA( 9)/ -69.5902770D0/ DATA BETAPA( 9)/ -27.9223600D0/ DATA ZS AM1( 9)/ 3.7700820D0/ DATA ZP AM1( 9)/ 2.4946700D0/ DATA ALPAM1( 9)/ 5.5178000D0/ DATA EISOLA( 9)/ -482.2905830D0/ DATA GSSAM1( 9)/ 16.9200000D0/ DATA GSPAM1( 9)/ 17.2500000D0/ DATA GPPAM1( 9)/ 16.7100000D0/ DATA GP2AM1( 9)/ 14.9100000D0/ DATA HSPAM1( 9)/ 4.8300000D0/ DATA DD AM1( 9)/ 0.4145203D0/ DATA QQ AM1( 9)/ 0.4909446D0/ DATA AM AM1( 9)/ 0.6218302D0/ DATA AD AM1( 9)/ 1.2088792D0/ DATA AQ AM1( 9)/ 0.9449355D0/ DATA GUESA1( 9,1)/ 0.2420790D0/ DATA GUESA2( 9,1)/ 4.8000000D0/ DATA GUESA3( 9,1)/ 0.9300000D0/ DATA GUESA1( 9,2)/ 0.0036070D0/ DATA GUESA2( 9,2)/ 4.6000000D0/ DATA GUESA3( 9,2)/ 1.6600000D0/ C DATA FOR ELEMENT 13 AM1: ALUMINUM * DATA REFAM (13)/' Al: (AM1): M. J. S. Dewar, A. J. Holder, Organ 1ometallics, 9, 508-511 (1990). '/ DATA USSAM1( 13)/ -24.3535850D0/ DATA UPPAM1( 13)/ -18.3636450D0/ DATA BETASA( 13)/ -3.8668220D0/ DATA BETAPA( 13)/ -2.3171460D0/ DATA ZSAM1 ( 13)/ 1.5165930D0/ DATA ZPAM1 ( 13)/ 1.3063470D0/ DATA ZDAM1 ( 13)/ 1.0000000D0/ DATA ALPAM1( 13)/ 1.9765860D0/ DATA EISOLA( 13)/ -46.4208150D0/ DATA GSSAM1( 13)/ 8.0900000D0/ DATA GSPAM1( 13)/ 6.6300000D0/ DATA GPPAM1( 13)/ 5.9800000D0/ DATA GP2AM1( 13)/ 5.4000000D0/ DATA HSPAM1( 13)/ 0.7000000D0/ DATA DDAM1 ( 13)/ 1.4040443D0/ DATA QQAM1 ( 13)/ 1.2809154D0/ DATA AMAM1 ( 13)/ 0.2973172D0/ DATA ADAM1 ( 13)/ 0.2630229D0/ DATA AQAM1 ( 13)/ 0.3427832D0/ DATA GUESA1( 13,1)/ 0.0900000D0/ DATA GUESA2( 13,1)/ 12.3924430D0/ DATA GUESA3( 13,1)/ 2.0503940D0/ C DATA FOR ELEMENT 14 AM1: SILICON * DATA REFAM (14)/' Si: (AM1): M.J.S.DEWAR, C. JIE, ORGANOMETALLICS 1, 6, 1486-1490 (1987). '/ DATA USSAM1(14)/ -33.9536220D0/ DATA UPPAM1(14)/ -28.9347490D0/ DATA BETASA(14)/ -3.784852D0/ DATA BETAPA(14)/ -1.968123D0/ DATA ZS AM1(14)/ 1.830697D0/ DATA ZP AM1(14)/ 1.2849530D0/ DATA ZD AM1(14)/ 1.0000000D0/ DATA ALPAM1(14)/ 2.257816D0/ DATA EISOLA(14)/ -79.0017420D0/ DATA GSSAM1(14)/ 9.8200000D0/ DATA GSPAM1(14)/ 8.3600000D0/ DATA GPPAM1(14)/ 7.3100000D0/ DATA GP2AM1(14)/ 6.5400000D0/ DATA HSPAM1(14)/ 1.3200000D0/ DATA DD AM1(14)/ 1.1631107D0/ DATA QQ AM1(14)/ 1.3022422D0/ DATA AM AM1(14)/ 0.3608967D0/ DATA AD AM1(14)/ 0.3829813D0/ DATA AQ AM1(14)/ 0.3712106D0/ DATA GUESA1(14,1)/ 0.25D0/ DATA GUESA2(14,1)/ 9.000D0/ DATA GUESA3(14,1)/ 0.911453D0/ DATA GUESA1(14,2)/ 0.061513D0/ DATA GUESA2(14,2)/ 5.00D0/ DATA GUESA3(14,2)/ 1.995569D0/ DATA GUESA1(14,3)/ 0.0207890D0/ DATA GUESA2(14,3)/ 5.00D0/ DATA GUESA3(14,3)/ 2.990610D0/ C DATA FOR ELEMENT 15 PHOSPHORUS DATA REFAM (15)/' P: (AM1): M.J.S.DEWAR, JIE, C, THEOCHEM, 187, 11 (1989) '/ DATA USSAM1( 15)/ -42.0298630D0/ DATA UPPAM1( 15)/ -34.0307090D0/ DATA BETASA( 15)/ -6.3537640D0/ DATA BETAPA( 15)/ -6.5907090D0/ DATA ZS AM1( 15)/ 1.9812800D0/ DATA ZP AM1( 15)/ 1.8751500D0/ DATA ZD AM1( 15)/ 1.0000000D0/ DATA ALPAM1( 15)/ 2.4553220D0/ DATA EISOLA( 15)/ -124.4368355D0/ DATA GSSAM1( 15)/ 11.5600050D0/ DATA GSPAM1( 15)/ 5.2374490D0/ DATA GPPAM1( 15)/ 7.8775890D0/ DATA GP2AM1( 15)/ 7.3076480D0/ DATA HSPAM1( 15)/ 0.7792380D0/ DATA DD AM1( 15)/ 1.0452022D0/ DATA QQ AM1( 15)/ 0.8923660D0/ DATA AM AM1( 15)/ 0.4248440D0/ DATA AD AM1( 15)/ 0.3275319D0/ DATA AQ AM1( 15)/ 0.4386854D0/ DATA GUESA1( 15,1)/ -0.0318270D0/ DATA GUESA2( 15,1)/ 6.0000000D0/ DATA GUESA3( 15,1)/ 1.4743230D0/ DATA GUESA1( 15,2)/ 0.0184700D0/ DATA GUESA2( 15,2)/ 7.0000000D0/ DATA GUESA3( 15,2)/ 1.7793540D0/ DATA GUESA1( 15,3)/ 0.0332900D0/ DATA GUESA2( 15,3)/ 9.0000000D0/ DATA GUESA3( 15,3)/ 3.0065760D0/ C DATA FOR ELEMENT 16 AM1: SULFUR * C DATA REFAM (16)/' S: (AM1): M.J.S.DEWAR, Y-C YUAN, THEOCHEM, IN 1 PRESS '/ DATA USSAM1(16)/ -56.6940560D0/ DATA UPPAM1(16)/ -48.7170490D0/ DATA BETASA(16)/ -3.9205660D0/ DATA BETAPA(16)/ -7.9052780D0/ DATA ZS AM1(16)/ 2.3665150D0/ DATA ZP AM1(16)/ 1.6672630D0/ DATA ZD AM1(16)/ 1.0000000D0/ DATA ALPAM1(16)/ 2.4616480D0/ DATA EISOLA(16)/ -191.7321930D0/ DATA GSSAM1(16)/ 11.7863290D0/ DATA GSPAM1(16)/ 8.6631270D0/ DATA GPPAM1(16)/ 10.0393080D0/ DATA GP2AM1(16)/ 7.7816880D0/ DATA HSPAM1(16)/ 2.5321370D0/ DATA DD AM1(16)/ 0.9004265D0/ DATA QQ AM1(16)/ 1.0036329D0/ DATA AM AM1(16)/ 0.4331617D0/ DATA AD AM1(16)/ 0.5907115D0/ DATA AQ AM1(16)/ 0.6454943D0/ DATA GUESA1(16,1)/ -0.5091950D0/ DATA GUESA2(16,1)/ 4.5936910D0/ DATA GUESA3(16,1)/ 0.7706650D0/ DATA GUESA1(16,2)/ -0.0118630D0/ DATA GUESA2(16,2)/ 5.8657310D0/ DATA GUESA3(16,2)/ 1.5033130D0/ DATA GUESA1(16,3)/ 0.0123340D0/ DATA GUESA2(16,3)/ 13.5573360D0/ DATA GUESA3(16,3)/ 2.0091730D0/ C DATA FOR ELEMENT 17 AM1: CHLORINE * DATA REFAM (17)/' Cl: (AM1): M.J.S. DEWAR AND E. G. ZOEBISCH, THE 1OCHEM, 180, 1 (1988). '/ DATA USSAM1(17)/ -111.6139480D0/ DATA UPPAM1(17)/ -76.6401070D0/ DATA BETASA(17)/ -24.5946700D0/ DATA BETAPA(17)/ -14.6372160D0/ DATA ZS AM1(17)/ 3.6313760D0/ DATA ZP AM1(17)/ 2.0767990D0/ DATA ZD AM1(17)/ 1.0000000D0/ DATA ALPAM1(17)/ 2.9193680D0/ DATA EISOLA(17)/ -372.1984310D0/ DATA GSSAM1(17)/ 15.0300000D0/ DATA GSPAM1(17)/ 13.1600000D0/ DATA GPPAM1(17)/ 11.3000000D0/ DATA GP2AM1(17)/ 9.9700000D0/ DATA HSPAM1(17)/ 2.4200000D0/ DATA DD AM1(17)/ 0.5406286D0/ DATA QQ AM1(17)/ 0.8057208D0/ DATA AM AM1(17)/ 0.5523705D0/ DATA AD AM1(17)/ 0.7693200D0/ DATA AQ AM1(17)/ 0.6133369D0/ DATA GUESA1(17,1)/ 0.0942430D0/ DATA GUESA2(17,1)/ 4.0000000D0/ DATA GUESA3(17,1)/ 1.3000000D0/ DATA GUESA1(17,2)/ 0.0271680D0/ DATA GUESA2(17,2)/ 4.0000000D0/ DATA GUESA3(17,2)/ 2.1000000D0/ C DATA FOR ELEMENT 30 ZINC DATA REFAM (30)/' Zn: (AM1): M.J.S. DEWAR, K.M. MERZ, ORGANOMET 1ALLICS, 7, 522-524 (1988) '/ DATA USSAM1( 30)/ -21.0400080D0/ DATA UPPAM1( 30)/ -17.6555740D0/ DATA BETASA( 30)/ -1.9974290D0/ DATA BETAPA( 30)/ -4.7581190D0/ DATA ZS AM1( 30)/ 1.9542990D0/ DATA ZP AM1( 30)/ 1.3723650D0/ DATA ZD AM1( 30)/ 1.0000000D0/ DATA ALPAM1( 30)/ 1.4845630D0/ DATA EISOLA( 30)/ -30.2800160D0/ DATA GSSAM1( 30)/ 11.8000000D0/ DATA GSPAM1( 30)/ 11.1820180D0/ DATA GPPAM1( 30)/ 13.3000000D0/ DATA GP2AM1( 30)/ 12.9305200D0/ DATA HSPAM1( 30)/ 0.4846060D0/ DATA DD AM1( 30)/ 1.3581113D0/ DATA QQ AM1( 30)/ 1.5457406D0/ DATA AM AM1( 30)/ 0.4336641D0/ DATA AD AM1( 30)/ 0.2317423D0/ DATA AQ AM1( 30)/ 0.2621165D0/ C DATA FOR ELEMENT 32 GERMANIUM DATA REFAM (32)/' Ge: (AM1): M.J.S.Dewar and C.Jie, Organometalli 1cs, 8, 1544, (1989) '/ DATA USSAM1( 32)/ -34.1838890D0/ DATA UPPAM1( 32)/ -28.6408110D0/ DATA BETASA( 32)/ -4.3566070D0/ DATA BETAPA( 32)/ -0.9910910D0/ DATA ZS AM1( 32)/ 1.2196310D0/ DATA ZP AM1( 32)/ 1.9827940D0/ DATA ALPAM1( 32)/ 2.1364050D0/ DATA EISOLA( 32)/ -78.7084810D0/ DATA GSSAM1( 32)/ 10.1686050D0/ DATA GSPAM1( 32)/ 8.1444730D0/ DATA GPPAM1( 32)/ 6.6719020D0/ DATA GP2AM1( 32)/ 6.2697060D0/ DATA HSPAM1( 32)/ 0.9370930D0/ DATA DD AM1( 32)/ 1.2472095D0/ DATA QQ AM1( 32)/ 1.0698642D0/ DATA AM AM1( 32)/ 0.3737084D0/ DATA AD AM1( 32)/ 0.3180309D0/ DATA AQ AM1( 32)/ 0.3485612D0/ C DATA FOR ELEMENT 35 AM1: BROMINE * DATA REFAM (35)/' Br: (AM1): M.J.S. DEWAR AND E. G. ZOEBISCH, THE 1OCHEM, 180, 1 (1988). '/ DATA USSAM1(35)/ -104.6560630D0/ DATA UPPAM1(35)/ -74.9300520D0/ DATA BETASA(35)/ -19.3998800D0/ DATA BETAPA(35)/ -8.9571950D0/ DATA ZS AM1(35)/ 3.0641330D0/ DATA ZP AM1(35)/ 2.0383330D0/ DATA ZD AM1(35)/ 1.0000000D0/ DATA ALPAM1(35)/ 2.5765460D0/ DATA EISOLA(35)/ -352.3142087D0/ DATA GSSAM1(35)/ 15.0364395D0/ DATA GSPAM1(35)/ 13.0346824D0/ DATA GPPAM1(35)/ 11.2763254D0/ DATA GP2AM1(35)/ 9.8544255D0/ DATA HSPAM1(35)/ 2.4558683D0/ DATA DD AM1(35)/ 0.8458104D0/ DATA QQ AM1(35)/ 1.0407133D0/ DATA AM AM1(35)/ 0.5526071D0/ DATA AD AM1(35)/ 0.6024598D0/ DATA AQ AM1(35)/ 0.5307555D0/ DATA GUESA1(35,1)/ 0.0666850D0/ DATA GUESA2(35,1)/ 4.0000000D0/ DATA GUESA3(35,1)/ 1.5000000D0/ DATA GUESA1(35,2)/ 0.0255680D0/ DATA GUESA2(35,2)/ 4.0000000D0/ DATA GUESA3(35,2)/ 2.3000000D0/ C DATA FOR ELEMENT 53 AM1: IODINE * DATA REFAM (53)/' I: (AM1): M.J.S. DEWAR AND E. G. ZOEBISCH, THE 1OCHEM, 180, 1 (1988). '/ DATA USSAM1(53)/ -103.5896630D0/ DATA UPPAM1(53)/ -74.4299970D0/ DATA BETASA(53)/ -8.4433270D0/ DATA BETAPA(53)/ -6.3234050D0/ DATA ZS AM1(53)/ 2.1028580D0/ DATA ZP AM1(53)/ 2.1611530D0/ DATA ZD AM1(53)/ 1.0000000D0/ DATA ALPAM1(53)/ 2.2994240D0/ DATA EISOLA(53)/ -346.8642857D0/ DATA GSSAM1(53)/ 15.0404486D0/ DATA GSPAM1(53)/ 13.0565580D0/ DATA GPPAM1(53)/ 11.1477837D0/ DATA GP2AM1(53)/ 9.9140907D0/ DATA HSPAM1(53)/ 2.4563820D0/ DATA DD AM1(53)/ 1.4878778D0/ DATA QQ AM1(53)/ 1.1887388D0/ DATA AM AM1(53)/ 0.5527544D0/ DATA AD AM1(53)/ 0.4497523D0/ DATA AQ AM1(53)/ 0.4631775D0/ DATA GUESA1(53,1)/ 0.0043610D0/ DATA GUESA2(53,1)/ 2.3000000D0/ DATA GUESA3(53,1)/ 1.8000000D0/ DATA GUESA1(53,2)/ 0.0157060D0/ DATA GUESA2(53,2)/ 3.0000000D0/ DATA GUESA3(53,2)/ 2.2400000D0/ C DATA FOR ELEMENT 80 MERCURY DATA REFAM (80)/' Hg: (AM1): M.J.S.Dewar and C.Jie, Organometalli 1cs 8, 1547, (1989) '/ DATA USSAM1( 80)/ -19.9415780D0/ DATA UPPAM1( 80)/ -11.1108700D0/ DATA BETASA( 80)/ -0.9086570D0/ DATA BETAPA( 80)/ -4.9093840D0/ DATA ZS AM1( 80)/ 2.0364130D0/ DATA ZP AM1( 80)/ 1.9557660D0/ DATA ALPAM1( 80)/ 1.4847340D0/ DATA EISOLA( 80)/ -29.0831560D0/ DATA GSSAM1( 80)/ 10.8000000D0/ DATA GSPAM1( 80)/ 9.3000000D0/ DATA GPPAM1( 80)/ 14.3000000D0/ DATA GP2AM1( 80)/ 13.5000000D0/ DATA HSPAM1( 80)/ 1.3000000D0/ DATA DD AM1( 80)/ 1.8750829D0/ DATA QQ AM1( 80)/ 1.5424241D0/ DATA AM AM1( 80)/ 0.3969129D0/ DATA AD AM1( 80)/ 0.2926605D0/ DATA AQ AM1( 80)/ 0.3360599D0/ C C START OF "OLD" ELEMENTS: THESE ARE OLD PARAMETERS WHICH C CAN BE USED, IF DESIRED, BY SPECIFYING "YEAR" C AS IN SI1978 OR S1983. C C DATA FOR ELEMENT 90 SILICON DATA REFAM (90)/' Si: (MNDO): M.J.S.DEWAR, M.L.MCKEE, H.S.RZEPA, 1J. AM. CHEM. SOC., 100 3607 1978'/ DATA USSAM1 (90)/ -40.5682920D0/ DATA UPPAM1 (90)/ -28.0891870D0/ DATA BETASA (90)/ -4.2562180D0/ DATA BETAPA (90)/ -4.2562180D0/ DATA ZSAM1 (90)/ 1.4353060D0/ DATA ZPAM1 (90)/ 1.4353060D0/ DATA ZDAM1 (90)/ 1.0000000D0/ DATA ALPAM1 (90)/ 2.1961078D0/ DATA EISOLA (90)/ -90.5399580D0/ DATA DDAM1 (90)/ 1.4078712D0/ DATA QQAM1 (90)/ 1.1658281D0/ DATA AMAM1 (90)/ 0.3608967D0/ DATA ADAM1 (90)/ 0.3441817D0/ DATA AQAM1 (90)/ 0.3999442D0/ DATA HSPAM1 (90)/1.32D00/ DATA GP2AM1 (90)/6.54D00/ DATA GPPAM1 (90)/7.31D00/ DATA GSPAM1 (90)/8.36D00/ DATA GSSAM1 (90)/9.82D00/ DATA REFAM (91)/' S: (MNDO): M.J.S.DEWAR, H.S. RZEPA, M.L.MCKEE, 1 J.AM.CHEM.SOC.100, 3607 (1978).'/ DATA USSAM1 (91)/ -75.2391520D0/ DATA UPPAM1 (91)/ -57.8320130D0/ DATA BETASA (91)/ -11.1422310D0/ DATA BETAPA (91)/ -11.1422310D0/ DATA ZSAM1 (91)/ 2.6135910D0/ DATA ZPAM1 (91)/ 2.0343930D0/ DATA ZDAM1 (91)/ 1.0000000D0/ DATA ALPAM1 (91)/ 2.4916445D0/ DATA EISOLA (91)/ -235.4413560D0/ DATA GSSAM1 (91)/ 12.8800000D0/ DATA GSPAM1 (91)/ 11.2600000D0/ DATA GPPAM1 (91)/ 9.9000000D0/ DATA GP2AM1 (91)/ 8.8300000D0/ DATA HSPAM1 (91)/ 2.2600000D0/ DATA DDAM1 (91)/ 0.8231596D0/ DATA QQAM1 (91)/ 0.8225156D0/ DATA AMAM1 (91)/ 0.4733554D0/ DATA ADAM1 (91)/ 0.5889395D0/ DATA AQAM1 (91)/ 0.5632724D0/ DATA REFAM (102)/' Cb: (AM1): Capped Bond (Hydrogen-like, takes 1 on zero charge.) '/ C DATA FOR ELEMENT102 DATA USSAM1 (102)/ -11.9062760D0/ DATA BETASA (102)/-9999999.0000000D0/ DATA ZSAM1 (102)/ 4.0000000D0/ DATA ZPAM1 (102)/ 0.3000000D0/ DATA ZDAM1 (102)/ 0.3000000D0/ DATA ALPAM1 (102)/ 2.5441341D0/ DATA EISOLA (102)/ 4.0000000D0/ DATA GSSAM1 (102)/ 12.8480000D0/ DATA HSPAM1 (102)/ 0.1000000D0/ DATA DDAM1 (102)/ 0.0684105D0/ DATA QQAM1 (102)/ 1.0540926D0/ DATA AMAM1 (102)/ 0.4721793D0/ DATA ADAM1 (102)/ 0.9262742D0/ DATA AQAM1 (102)/ 0.2909059D0/ C C START OF MNDO-PM3 PARAMETER SET C C DATA FOR ELEMENT 1 HYDROGEN DATA REFPM3 ( 1)/' H: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 1)/ -13.0733210D0/ DATA BETASP( 1)/ -5.6265120D0/ DATA ZSPM3 ( 1)/ 0.9678070D0/ DATA ALPPM3( 1)/ 3.3563860D0/ DATA EISOLP( 1)/ -13.0733210D0/ DATA GSSPM3( 1)/ 14.7942080D0/ DATA AMPM3 ( 1)/ 0.5437048D0/ DATA ADPM3 ( 1)/ 0.5437048D0/ DATA AQPM3 ( 1)/ 0.5437048D0/ DATA GUESP1( 1,1)/ 1.1287500D0/ DATA GUESP2( 1,1)/ 5.0962820D0/ DATA GUESP3( 1,1)/ 1.5374650D0/ DATA GUESP1( 1,2)/ -1.0603290D0/ DATA GUESP2( 1,2)/ 6.0037880D0/ DATA GUESP3( 1,2)/ 1.5701890D0/ C DATA FOR ELEMENT 4 BERYLLIUM DATA REFPM3( 4)/ ' Be: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 4)/ -17.2647520D0/ DATA UPPPM3( 4)/ -11.3042430D0/ DATA BETASP( 4)/ -3.9620530D0/ DATA BETAPP( 4)/ -2.7806840D0/ DATA ZSPM3 ( 4)/ 0.8774390D0/ DATA ZPPM3 ( 4)/ 1.5087550D0/ DATA ALPPM3( 4)/ 1.5935360D0/ DATA EISOLP( 4)/ -25.5166530D0/ DATA GSSPM3( 4)/ 9.0128510D0/ DATA GSPPM3( 4)/ 6.5761990D0/ DATA GPPPM3( 4)/ 6.0571820D0/ DATA GP2PM3( 4)/ 9.0052190D0/ DATA HSPPM3( 4)/ 0.5446790D0/ DATA DDPM3 ( 4)/ 1.0090531D0/ DATA QQPM3 ( 4)/ 0.8117586D0/ DATA AMPM3 ( 4)/ 0.3312330D0/ DATA ADPM3 ( 4)/ 0.2908996D0/ DATA AQPM3 ( 4)/ 0.3530008D0/ DATA GUESP1( 4,1)/ 1.6315720D0/ DATA GUESP2( 4,1)/ 2.6729620D0/ DATA GUESP3( 4,1)/ 1.7916860D0/ DATA GUESP1( 4,2)/ -2.1109590D0/ DATA GUESP2( 4,2)/ 1.9685940D0/ DATA GUESP3( 4,2)/ 1.7558710D0/ C DATA FOR ELEMENT 6 CARBON DATA REFPM3 ( 6)/' C: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 6)/ -47.2703200D0/ DATA UPPPM3( 6)/ -36.2669180D0/ DATA BETASP( 6)/ -11.9100150D0/ DATA BETAPP( 6)/ -9.8027550D0/ DATA ZSPM3 ( 6)/ 1.5650850D0/ DATA ZPPM3 ( 6)/ 1.8423450D0/ DATA ALPPM3( 6)/ 2.7078070D0/ DATA EISOLP( 6)/ -111.2299170D0/ DATA GSSPM3( 6)/ 11.2007080D0/ DATA GSPPM3( 6)/ 10.2650270D0/ DATA GPPPM3( 6)/ 10.7962920D0/ DATA GP2PM3( 6)/ 9.0425660D0/ DATA HSPPM3( 6)/ 2.2909800D0/ DATA DDPM3 ( 6)/ 0.8332396D0/ DATA QQPM3 ( 6)/ 0.6647750D0/ DATA AMPM3 ( 6)/ 0.4116394D0/ DATA ADPM3 ( 6)/ 0.5885862D0/ DATA AQPM3 ( 6)/ 0.7647667D0/ DATA GUESP1( 6,1)/ 0.0501070D0/ DATA GUESP2( 6,1)/ 6.0031650D0/ DATA GUESP3( 6,1)/ 1.6422140D0/ DATA GUESP1( 6,2)/ 0.0507330D0/ DATA GUESP2( 6,2)/ 6.0029790D0/ DATA GUESP3( 6,2)/ 0.8924880D0/ C DATA FOR ELEMENT 7 NITROGEN DATA REFPM3 ( 7)/' N: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 7)/ -49.3356720D0/ DATA UPPPM3( 7)/ -47.5097360D0/ DATA BETASP( 7)/ -14.0625210D0/ DATA BETAPP( 7)/ -20.0438480D0/ DATA ZSPM3 ( 7)/ 2.0280940D0/ DATA ZPPM3 ( 7)/ 2.3137280D0/ DATA ALPPM3( 7)/ 2.8305450D0/ DATA EISOLP( 7)/ -157.6137755D0/ DATA GSSPM3( 7)/ 11.9047870D0/ DATA GSPPM3( 7)/ 7.3485650D0/ DATA GPPPM3( 7)/ 11.7546720D0/ DATA GP2PM3( 7)/ 10.8072770D0/ DATA HSPPM3( 7)/ 1.1367130D0/ DATA DDPM3 ( 7)/ 0.6577006D0/ DATA QQPM3 ( 7)/ 0.5293383D0/ DATA AMPM3 ( 7)/ 0.4375151D0/ DATA ADPM3 ( 7)/ 0.5030995D0/ DATA AQPM3 ( 7)/ 0.7364933D0/ DATA GUESP1( 7,1)/ 1.5016740D0/ DATA GUESP2( 7,1)/ 5.9011480D0/ DATA GUESP3( 7,1)/ 1.7107400D0/ DATA GUESP1( 7,2)/ -1.5057720D0/ DATA GUESP2( 7,2)/ 6.0046580D0/ DATA GUESP3( 7,2)/ 1.7161490D0/ C DATA FOR ELEMENT 8 OXYGEN DATA REFPM3 ( 8)/' O: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 8)/ -86.9930020D0/ DATA UPPPM3( 8)/ -71.8795800D0/ DATA BETASP( 8)/ -45.2026510D0/ DATA BETAPP( 8)/ -24.7525150D0/ DATA ZSPM3 ( 8)/ 3.7965440D0/ DATA ZPPM3 ( 8)/ 2.3894020D0/ DATA ALPPM3( 8)/ 3.2171020D0/ DATA EISOLP( 8)/ -289.3422065D0/ DATA GSSPM3( 8)/ 15.7557600D0/ DATA GSPPM3( 8)/ 10.6211600D0/ DATA GPPPM3( 8)/ 13.6540160D0/ DATA GP2PM3( 8)/ 12.4060950D0/ DATA HSPPM3( 8)/ 0.5938830D0/ DATA DDPM3 ( 8)/ 0.4086173D0/ DATA QQPM3 ( 8)/ 0.5125738D0/ DATA AMPM3 ( 8)/ 0.5790430D0/ DATA ADPM3 ( 8)/ 0.5299630D0/ DATA AQPM3 ( 8)/ 0.8179630D0/ DATA GUESP1( 8,1)/ -1.1311280D0/ DATA GUESP2( 8,1)/ 6.0024770D0/ DATA GUESP3( 8,1)/ 1.6073110D0/ DATA GUESP1( 8,2)/ 1.1378910D0/ DATA GUESP2( 8,2)/ 5.9505120D0/ DATA GUESP3( 8,2)/ 1.5983950D0/ C DATA FOR ELEMENT 9 FLUORINE DATA REFPM3 ( 9)/' F: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 9)/ -110.4353030D0/ DATA UPPPM3( 9)/ -105.6850470D0/ DATA BETASP( 9)/ -48.4059390D0/ DATA BETAPP( 9)/ -27.7446600D0/ DATA ZSPM3 ( 9)/ 4.7085550D0/ DATA ZPPM3 ( 9)/ 2.4911780D0/ DATA ALPPM3( 9)/ 3.3589210D0/ DATA EISOLP( 9)/ -437.5171690D0/ DATA GSSPM3( 9)/ 10.4966670D0/ DATA GSPPM3( 9)/ 16.0736890D0/ DATA GPPPM3( 9)/ 14.8172560D0/ DATA GP2PM3( 9)/ 14.4183930D0/ DATA HSPPM3( 9)/ 0.7277630D0/ DATA DDPM3 ( 9)/ 0.3125302D0/ DATA QQPM3 ( 9)/ 0.4916328D0/ DATA AMPM3 ( 9)/ 0.3857650D0/ DATA ADPM3 ( 9)/ 0.6768503D0/ DATA AQPM3 ( 9)/ 0.6120047D0/ DATA GUESP1( 9,1)/ -0.0121660D0/ DATA GUESP2( 9,1)/ 6.0235740D0/ DATA GUESP3( 9,1)/ 1.8568590D0/ DATA GUESP1( 9,2)/ -0.0028520D0/ DATA GUESP2( 9,2)/ 6.0037170D0/ DATA GUESP3( 9,2)/ 2.6361580D0/ C DATA FOR ELEMENT 12 MAGNESIUM DATA REFPM3(12)/ ' Mg: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 12)/ -14.6236880D0/ DATA UPPPM3( 12)/ -14.1734600D0/ DATA BETASP( 12)/ -2.0716910D0/ DATA BETAPP( 12)/ -0.5695810D0/ DATA ZSPM3 ( 12)/ 0.6985520D0/ DATA ZPPM3 ( 12)/ 1.4834530D0/ DATA ALPPM3( 12)/ 1.3291470D0/ DATA EISOLP( 12)/ -22.5530760D0/ DATA GSSPM3( 12)/ 6.6943000D0/ DATA GSPPM3( 12)/ 6.7939950D0/ DATA GPPPM3( 12)/ 6.9104460D0/ DATA GP2PM3( 12)/ 7.0908230D0/ DATA HSPPM3( 12)/ 0.5433000D0/ DATA DDPM3 ( 12)/ 1.1403950D0/ DATA QQPM3 ( 12)/ 1.1279899D0/ DATA AMPM3 ( 12)/ 0.2460235D0/ DATA ADPM3 ( 12)/ 0.2695751D0/ DATA AQPM3 ( 12)/ 0.2767522D0/ DATA GUESP1( 12,1)/ 2.1170500D0/ DATA GUESP2( 12,1)/ 6.0094770D0/ DATA GUESP3( 12,1)/ 2.0844060D0/ DATA GUESP1( 12,2)/ -2.5477670D0/ DATA GUESP2( 12,2)/ 4.3953700D0/ DATA GUESP3( 12,2)/ 2.0636740D0/ C DATA FOR ELEMENT 13 ALUMINUM DATA REFPM3 (13)/' Al: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 13)/ -24.8454040D0/ DATA UPPPM3( 13)/ -22.2641590D0/ DATA BETASP( 13)/ -0.5943010D0/ DATA BETAPP( 13)/ -0.9565500D0/ DATA ZSPM3 ( 13)/ 1.7028880D0/ DATA ZPPM3 ( 13)/ 1.0736290D0/ DATA ZDPM3 ( 13)/ 1.0000000D0/ DATA ALPPM3( 13)/ 1.5217030D0/ DATA EISOLP( 13)/ -46.8647630D0/ DATA GSSPM3( 13)/ 5.7767370D0/ DATA GSPPM3( 13)/ 11.6598560D0/ DATA GPPPM3( 13)/ 6.3477900D0/ DATA GP2PM3( 13)/ 6.1210770D0/ DATA HSPPM3( 13)/ 4.0062450D0/ DATA DDPM3 ( 13)/ 1.2102799D0/ DATA QQPM3 ( 13)/ 1.5585645D0/ DATA AMPM3 ( 13)/ 0.2123020D0/ DATA ADPM3 ( 13)/ 0.6418584D0/ DATA AQPM3 ( 13)/ 0.2262838D0/ DATA GUESP1( 13,1)/ -0.4730900D0/ DATA GUESP2( 13,1)/ 1.9158250D0/ DATA GUESP3( 13,1)/ 1.4517280D0/ DATA GUESP1( 13,2)/ -0.1540510D0/ DATA GUESP2( 13,2)/ 6.0050860D0/ DATA GUESP3( 13,2)/ 2.5199970D0/ C DATA FOR ELEMENT 14 SILICON DATA REFPM3 (14)/' Si: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 14)/ -26.7634830D0/ DATA UPPPM3( 14)/ -22.8136350D0/ DATA BETASP( 14)/ -2.8621450D0/ DATA BETAPP( 14)/ -3.9331480D0/ DATA ZSPM3 ( 14)/ 1.6350750D0/ DATA ZPPM3 ( 14)/ 1.3130880D0/ DATA ZDPM3 ( 14)/ 1.0000000D0/ DATA ALPPM3( 14)/ 2.1358090D0/ DATA EISOLP( 14)/ -67.7882140D0/ DATA GSSPM3( 14)/ 5.0471960D0/ DATA GSPPM3( 14)/ 5.9490570D0/ DATA GPPPM3( 14)/ 6.7593670D0/ DATA GP2PM3( 14)/ 5.1612970D0/ DATA HSPPM3( 14)/ 0.9198320D0/ DATA DDPM3 ( 14)/ 1.3144550D0/ DATA QQPM3 ( 14)/ 1.2743396D0/ DATA AMPM3 ( 14)/ 0.1854905D0/ DATA ADPM3 ( 14)/ 0.3060715D0/ DATA AQPM3 ( 14)/ 0.4877432D0/ DATA GUESP1( 14,1)/ -0.3906000D0/ DATA GUESP2( 14,1)/ 6.0000540D0/ DATA GUESP3( 14,1)/ 0.6322620D0/ DATA GUESP1( 14,2)/ 0.0572590D0/ DATA GUESP2( 14,2)/ 6.0071830D0/ DATA GUESP3( 14,2)/ 2.0199870D0/ C DATA FOR ELEMENT 15 PHOSPHORUS DATA REFPM3 (15)/' P: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 15)/ -40.4130960D0/ DATA UPPPM3( 15)/ -29.5930520D0/ DATA BETASP( 15)/ -12.6158790D0/ DATA BETAPP( 15)/ -4.1600400D0/ DATA ZSPM3 ( 15)/ 2.0175630D0/ DATA ZPPM3 ( 15)/ 1.5047320D0/ DATA ZDPM3 ( 15)/ 1.0000000D0/ DATA ALPPM3( 15)/ 1.9405340D0/ DATA EISOLP( 15)/ -117.9591740D0/ DATA GSSPM3( 15)/ 7.8016150D0/ DATA GSPPM3( 15)/ 5.1869490D0/ DATA GPPPM3( 15)/ 6.6184780D0/ DATA GP2PM3( 15)/ 6.0620020D0/ DATA HSPPM3( 15)/ 1.5428090D0/ DATA DDPM3 ( 15)/ 1.0644947D0/ DATA QQPM3 ( 15)/ 1.1120386D0/ DATA AMPM3 ( 15)/ 0.2867187D0/ DATA ADPM3 ( 15)/ 0.4309446D0/ DATA AQPM3 ( 15)/ 0.3732517D0/ DATA GUESP1( 15,1)/ -0.6114210D0/ DATA GUESP2( 15,1)/ 1.9972720D0/ DATA GUESP3( 15,1)/ 0.7946240D0/ DATA GUESP1( 15,2)/ -0.0939350D0/ DATA GUESP2( 15,2)/ 1.9983600D0/ DATA GUESP3( 15,2)/ 1.9106770D0/ C DATA FOR ELEMENT 16 SULFUR DATA REFPM3 (16)/' S: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 16)/ -49.8953710D0/ DATA UPPPM3( 16)/ -44.3925830D0/ DATA BETASP( 16)/ -8.8274650D0/ DATA BETAPP( 16)/ -8.0914150D0/ DATA ZSPM3 ( 16)/ 1.8911850D0/ DATA ZPPM3 ( 16)/ 1.6589720D0/ DATA ZDPM3 ( 16)/ 1.0000000D0/ DATA ALPPM3( 16)/ 2.2697060D0/ DATA EISOLP( 16)/ -183.4537395D0/ DATA GSSPM3( 16)/ 8.9646670D0/ DATA GSPPM3( 16)/ 6.7859360D0/ DATA GPPPM3( 16)/ 9.9681640D0/ DATA GP2PM3( 16)/ 7.9702470D0/ DATA HSPPM3( 16)/ 4.0418360D0/ DATA DDPM3 ( 16)/ 1.1214313D0/ DATA QQPM3 ( 16)/ 1.0086488D0/ DATA AMPM3 ( 16)/ 0.3294622D0/ DATA ADPM3 ( 16)/ 0.6679118D0/ DATA AQPM3 ( 16)/ 0.6137472D0/ DATA GUESP1( 16,1)/ -0.3991910D0/ DATA GUESP2( 16,1)/ 6.0006690D0/ DATA GUESP3( 16,1)/ 0.9621230D0/ DATA GUESP1( 16,2)/ -0.0548990D0/ DATA GUESP2( 16,2)/ 6.0018450D0/ DATA GUESP3( 16,2)/ 1.5799440D0/ C DATA FOR ELEMENT 17 CHLORINE DATA REFPM3 (17)/' Cl: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 17)/ -100.6267470D0/ DATA UPPPM3( 17)/ -53.6143960D0/ DATA BETASP( 17)/ -27.5285600D0/ DATA BETAPP( 17)/ -11.5939220D0/ DATA ZSPM3 ( 17)/ 2.2462100D0/ DATA ZPPM3 ( 17)/ 2.1510100D0/ DATA ZDPM3 ( 17)/ 1.0000000D0/ DATA ALPPM3( 17)/ 2.5172960D0/ DATA EISOLP( 17)/ -315.1949480D0/ DATA GSSPM3( 17)/ 16.0136010D0/ DATA GSPPM3( 17)/ 8.0481150D0/ DATA GPPPM3( 17)/ 7.5222150D0/ DATA GP2PM3( 17)/ 7.5041540D0/ DATA HSPPM3( 17)/ 3.4811530D0/ DATA DDPM3 ( 17)/ 0.9175856D0/ DATA QQPM3 ( 17)/ 0.7779230D0/ DATA AMPM3 ( 17)/ 0.5885190D0/ DATA ADPM3 ( 17)/ 0.6814522D0/ DATA AQPM3 ( 17)/ 0.3643694D0/ DATA GUESP1( 17,1)/ -0.1715910D0/ DATA GUESP2( 17,1)/ 6.0008020D0/ DATA GUESP3( 17,1)/ 1.0875020D0/ DATA GUESP1( 17,2)/ -0.0134580D0/ DATA GUESP2( 17,2)/ 1.9666180D0/ DATA GUESP3( 17,2)/ 2.2928910D0/ C DATA FOR ELEMENT 30 ZINC DATA REFPM3(30)/ ' Zn: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 30)/ -18.5321980D0/ DATA UPPPM3( 30)/ -11.0474090D0/ DATA BETASP( 30)/ -0.7155780D0/ DATA BETAPP( 30)/ -6.3518640D0/ DATA ZSPM3 ( 30)/ 1.8199890D0/ DATA ZPPM3 ( 30)/ 1.5069220D0/ DATA ZDPM3 ( 30)/ 1.0000000D0/ DATA ALPPM3( 30)/ 1.3501260D0/ DATA EISOLP( 30)/ -27.3872000D0/ DATA GSSPM3( 30)/ 9.6771960D0/ DATA GSPPM3( 30)/ 7.7362040D0/ DATA GPPPM3( 30)/ 4.9801740D0/ DATA GP2PM3( 30)/ 4.6696560D0/ DATA HSPPM3( 30)/ 0.6004130D0/ DATA DDPM3 ( 30)/ 1.5005758D0/ DATA QQPM3 ( 30)/ 1.4077174D0/ DATA AMPM3 ( 30)/ 0.3556485D0/ DATA ADPM3 ( 30)/ 0.2375689D0/ DATA AQPM3 ( 30)/ 0.2661069D0/ DATA GUESP1( 30,1)/ -0.1112340D0/ DATA GUESP2( 30,1)/ 6.0014780D0/ DATA GUESP3( 30,1)/ 1.5160320D0/ DATA GUESP1( 30,2)/ -0.1323700D0/ DATA GUESP2( 30,2)/ 1.9958390D0/ DATA GUESP3( 30,2)/ 2.5196420D0/ C DATA FOR ELEMENT 31 GALLIUM DATA REFPM3(31)/ ' Ga: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 31)/ -29.8555930D0/ DATA UPPPM3( 31)/ -21.8753710D0/ DATA BETASP( 31)/ -4.9456180D0/ DATA BETAPP( 31)/ -0.4070530D0/ DATA ZSPM3 ( 31)/ 1.8470400D0/ DATA ZPPM3 ( 31)/ 0.8394110D0/ DATA ALPPM3( 31)/ 1.6051150D0/ DATA EISOLP( 31)/ -57.3280250D0/ DATA GSSPM3( 31)/ 8.4585540D0/ DATA GSPPM3( 31)/ 8.9256190D0/ DATA GPPPM3( 31)/ 5.0868550D0/ DATA GP2PM3( 31)/ 4.9830450D0/ DATA HSPPM3( 31)/ 2.0512600D0/ DATA DDPM3 ( 31)/ 0.9776692D0/ DATA QQPM3 ( 31)/ 2.5271534D0/ DATA AMPM3 ( 31)/ 0.3108620D0/ DATA ADPM3 ( 31)/ 0.5129360D0/ DATA AQPM3 ( 31)/ 0.1546208D0/ DATA GUESP1( 31,1)/ -0.5601790D0/ DATA GUESP2( 31,1)/ 5.6232730D0/ DATA GUESP3( 31,1)/ 1.5317800D0/ DATA GUESP1( 31,2)/ -0.2727310D0/ DATA GUESP2( 31,2)/ 1.9918430D0/ DATA GUESP3( 31,2)/ 2.1838640D0/ C DATA FOR ELEMENT 32 GERMANIUM DATA REFPM3(32)/ ' Ge: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 32)/ -35.4671955D0/ DATA UPPPM3( 32)/ -31.5863583D0/ DATA BETASP( 32)/ -5.3250024D0/ DATA BETAPP( 32)/ -2.2501567D0/ DATA ZSPM3 ( 32)/ 2.2373526D0/ DATA ZPPM3 ( 32)/ 1.5924319D0/ DATA ALPPM3( 32)/ 1.9723370D0/ DATA EISOLP( 32)/ -84.0156006D0/ DATA GSSPM3( 32)/ 5.3769635D0/ DATA GSPPM3( 32)/ 10.2095293D0/ DATA GPPPM3( 32)/ 7.6718647D0/ DATA GP2PM3( 32)/ 6.9242663D0/ DATA HSPPM3( 32)/ 1.3370204D0/ DATA DDPM3 ( 32)/ 1.1920304D0/ DATA QQPM3 ( 32)/ 1.3321263D0/ DATA AMPM3 ( 32)/ 0.1976098D0/ DATA ADPM3 ( 32)/ 0.3798182D0/ DATA AQPM3 ( 32)/ 0.3620669D0/ DATA GUESP1( 32,1)/ 0.9631726D0/ DATA GUESP2( 32,1)/ 6.0120134D0/ DATA GUESP3( 32,1)/ 2.1633655D0/ DATA GUESP1( 32,2)/ -0.9593891D0/ DATA GUESP2( 32,2)/ 5.7491802D0/ DATA GUESP3( 32,2)/ 2.1693724D0/ C DATA FOR ELEMENT 33 ARSENIC DATA REFPM3(33)/ ' As: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 33)/ -38.5074240D0/ DATA UPPPM3( 33)/ -35.1524150D0/ DATA BETASP( 33)/ -8.2321650D0/ DATA BETAPP( 33)/ -5.0173860D0/ DATA ZSPM3 ( 33)/ 2.6361770D0/ DATA ZPPM3 ( 33)/ 1.7038890D0/ DATA ALPPM3( 33)/ 1.7944770D0/ DATA EISOLP( 33)/ -122.6326140D0/ DATA GSSPM3( 33)/ 8.7890010D0/ DATA GSPPM3( 33)/ 5.3979830D0/ DATA GPPPM3( 33)/ 8.2872500D0/ DATA GP2PM3( 33)/ 8.2103460D0/ DATA HSPPM3( 33)/ 1.9510340D0/ DATA DDPM3 ( 33)/ 0.9679655D0/ DATA QQPM3 ( 33)/ 1.2449874D0/ DATA AMPM3 ( 33)/ 0.3230063D0/ DATA ADPM3 ( 33)/ 0.5042239D0/ DATA AQPM3 ( 33)/ 0.2574219D0/ DATA GUESP1( 33,1)/ -0.4600950D0/ DATA GUESP2( 33,1)/ 1.9831150D0/ DATA GUESP3( 33,1)/ 1.0867930D0/ DATA GUESP1( 33,2)/ -0.0889960D0/ DATA GUESP2( 33,2)/ 1.9929440D0/ DATA GUESP3( 33,2)/ 2.1400580D0/ C DATA FOR ELEMENT 34 SELENIUM DATA REFPM3(34)/ ' Se: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 34)/ -55.3781350D0/ DATA UPPPM3( 34)/ -49.8230760D0/ DATA BETASP( 34)/ -6.1578220D0/ DATA BETAPP( 34)/ -5.4930390D0/ DATA ZSPM3 ( 34)/ 2.8280510D0/ DATA ZPPM3 ( 34)/ 1.7325360D0/ DATA ALPPM3( 34)/ 3.0439570D0/ DATA EISOLP( 34)/ -192.7748115D0/ DATA GSSPM3( 34)/ 7.4325910D0/ DATA GSPPM3( 34)/ 10.0604610D0/ DATA GPPPM3( 34)/ 9.5683260D0/ DATA GP2PM3( 34)/ 7.7242890D0/ DATA HSPPM3( 34)/ 4.0165580D0/ DATA DDPM3 ( 34)/ 0.8719813D0/ DATA QQPM3 ( 34)/ 1.2244019D0/ DATA AMPM3 ( 34)/ 0.2731566D0/ DATA ADPM3 ( 34)/ 0.7509697D0/ DATA AQPM3 ( 34)/ 0.5283737D0/ DATA GUESP1( 34,1)/ 0.0478730D0/ DATA GUESP2( 34,1)/ 6.0074000D0/ DATA GUESP3( 34,1)/ 2.0817170D0/ DATA GUESP1( 34,2)/ 0.1147200D0/ DATA GUESP2( 34,2)/ 6.0086720D0/ DATA GUESP3( 34,2)/ 1.5164230D0/ C DATA FOR ELEMENT 35 BROMINE DATA REFPM3 (35)/' Br: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 35)/ -116.6193110D0/ DATA UPPPM3( 35)/ -74.2271290D0/ DATA BETASP( 35)/ -31.1713420D0/ DATA BETAPP( 35)/ -6.8140130D0/ DATA ZSPM3 ( 35)/ 5.3484570D0/ DATA ZPPM3 ( 35)/ 2.1275900D0/ DATA ZDPM3 ( 35)/ 1.0000000D0/ DATA ALPPM3( 35)/ 2.5118420D0/ DATA EISOLP( 35)/ -352.5398970D0/ DATA GSSPM3( 35)/ 15.9434250D0/ DATA GSPPM3( 35)/ 16.0616800D0/ DATA GPPPM3( 35)/ 8.2827630D0/ DATA GP2PM3( 35)/ 7.8168490D0/ DATA HSPPM3( 35)/ 0.5788690D0/ DATA DDPM3 ( 35)/ 0.2759025D0/ DATA QQPM3 ( 35)/ 0.9970532D0/ DATA AMPM3 ( 35)/ 0.5859399D0/ DATA ADPM3 ( 35)/ 0.6755383D0/ DATA AQPM3 ( 35)/ 0.3823719D0/ DATA GUESP1( 35,1)/ 0.9604580D0/ DATA GUESP2( 35,1)/ 5.9765080D0/ DATA GUESP3( 35,1)/ 2.3216540D0/ DATA GUESP1( 35,2)/ -0.9549160D0/ DATA GUESP2( 35,2)/ 5.9447030D0/ DATA GUESP3( 35,2)/ 2.3281420D0/ C DATA FOR ELEMENT 48 CADMIUM DATA REFPM3(48)/ ' Cd: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 48)/ -15.8285840D0/ DATA UPPPM3( 48)/ 8.7497950D0/ DATA BETASP( 48)/ -8.5819440D0/ DATA BETAPP( 48)/ -0.6010340D0/ DATA ZSPM3 ( 48)/ 1.6793510D0/ DATA ZPPM3 ( 48)/ 2.0664120D0/ DATA ALPPM3( 48)/ 1.5253820D0/ DATA EISOLP( 48)/ -22.4502080D0/ DATA GSSPM3( 48)/ 9.2069600D0/ DATA GSPPM3( 48)/ 8.2315390D0/ DATA GPPPM3( 48)/ 4.9481040D0/ DATA GP2PM3( 48)/ 4.6696560D0/ DATA HSPPM3( 48)/ 1.6562340D0/ DATA DDPM3 ( 48)/ 1.5982681D0/ DATA QQPM3 ( 48)/ 1.2432402D0/ DATA AMPM3 ( 48)/ 0.3383668D0/ DATA ADPM3 ( 48)/ 0.3570290D0/ DATA AQPM3 ( 48)/ 0.2820582D0/ C DATA FOR ELEMENT 49 INDIUM DATA REFPM3(49)/ ' In: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 49)/ -26.1762050D0/ DATA UPPPM3( 49)/ -20.0058220D0/ DATA BETASP( 49)/ -2.9933190D0/ DATA BETAPP( 49)/ -1.8289080D0/ DATA ZSPM3 ( 49)/ 2.0161160D0/ DATA ZPPM3 ( 49)/ 1.4453500D0/ DATA ALPPM3( 49)/ 1.4183850D0/ DATA EISOLP( 49)/ -51.9750470D0/ DATA GSSPM3( 49)/ 6.5549000D0/ DATA GSPPM3( 49)/ 8.2298730D0/ DATA GPPPM3( 49)/ 6.2992690D0/ DATA GP2PM3( 49)/ 4.9842110D0/ DATA HSPPM3( 49)/ 2.6314610D0/ DATA DDPM3 ( 49)/ 1.5766241D0/ DATA QQPM3 ( 49)/ 1.7774563D0/ DATA AMPM3 ( 49)/ 0.2409004D0/ DATA ADPM3 ( 49)/ 0.4532655D0/ DATA AQPM3 ( 49)/ 0.3689812D0/ DATA GUESP1( 49,1)/ -0.3431380D0/ DATA GUESP2( 49,1)/ 1.9940340D0/ DATA GUESP3( 49,1)/ 1.6255160D0/ DATA GUESP1( 49,2)/ -0.1095320D0/ DATA GUESP2( 49,2)/ 5.6832170D0/ DATA GUESP3( 49,2)/ 2.8670090D0/ C DATA FOR ELEMENT 50 TIN DATA REFPM3(50)/ ' Sn: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 50)/ -34.5501920D0/ DATA UPPPM3( 50)/ -25.8944190D0/ DATA BETASP( 50)/ -2.7858020D0/ DATA BETAPP( 50)/ -2.0059990D0/ DATA ZSPM3 ( 50)/ 2.3733280D0/ DATA ZPPM3 ( 50)/ 1.6382330D0/ DATA ALPPM3( 50)/ 1.6996500D0/ DATA EISOLP( 50)/ -78.8877790D0/ DATA GSSPM3( 50)/ 10.1900330D0/ DATA GSPPM3( 50)/ 7.2353270D0/ DATA GPPPM3( 50)/ 5.6738100D0/ DATA GP2PM3( 50)/ 5.1822140D0/ DATA HSPPM3( 50)/ 1.0331570D0/ DATA DDPM3 ( 50)/ 1.3120038D0/ DATA QQPM3 ( 50)/ 1.5681814D0/ DATA AMPM3 ( 50)/ 0.3744959D0/ DATA ADPM3 ( 50)/ 0.3218163D0/ DATA AQPM3 ( 50)/ 0.2832529D0/ DATA GUESP1( 50,1)/ -0.1503530D0/ DATA GUESP2( 50,1)/ 6.0056940D0/ DATA GUESP3( 50,1)/ 1.7046420D0/ DATA GUESP1( 50,2)/ -0.0444170D0/ DATA GUESP2( 50,2)/ 2.2573810D0/ DATA GUESP3( 50,2)/ 2.4698690D0/ C DATA FOR ELEMENT 51 ANTIMONY DATA REFPM3(51)/ ' Sb: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 51)/ -56.4321960D0/ DATA UPPPM3( 51)/ -29.4349540D0/ DATA BETASP( 51)/ -14.7942170D0/ DATA BETAPP( 51)/ -2.8179480D0/ DATA ZSPM3 ( 51)/ 2.3430390D0/ DATA ZPPM3 ( 51)/ 1.8999920D0/ DATA ALPPM3( 51)/ 2.0343010D0/ DATA EISOLP( 51)/ -148.9382890D0/ DATA GSSPM3( 51)/ 9.2382770D0/ DATA GSPPM3( 51)/ 5.2776800D0/ DATA GPPPM3( 51)/ 6.3500000D0/ DATA GP2PM3( 51)/ 6.2500000D0/ DATA HSPPM3( 51)/ 2.4244640D0/ DATA DDPM3 ( 51)/ 1.4091903D0/ DATA QQPM3 ( 51)/ 1.3521354D0/ DATA AMPM3 ( 51)/ 0.3395177D0/ DATA ADPM3 ( 51)/ 0.4589010D0/ DATA AQPM3 ( 51)/ 0.2423472D0/ DATA GUESP1( 51,1)/ 3.0020280D0/ DATA GUESP2( 51,1)/ 6.0053420D0/ DATA GUESP3( 51,1)/ 0.8530600D0/ DATA GUESP1( 51,2)/ -0.0188920D0/ DATA GUESP2( 51,2)/ 6.0114780D0/ DATA GUESP3( 51,2)/ 2.7933110D0/ C DATA FOR ELEMENT 52 TELLURIUM DATA REFPM3(52)/ ' Te: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 52)/ -44.9380360D0/ DATA UPPPM3( 52)/ -46.3140990D0/ DATA BETASP( 52)/ -2.6651460D0/ DATA BETAPP( 52)/ -3.8954300D0/ DATA ZSPM3 ( 52)/ 4.1654920D0/ DATA ZPPM3 ( 52)/ 1.6475550D0/ DATA ALPPM3( 52)/ 2.4850190D0/ DATA EISOLP( 52)/ -168.0945925D0/ DATA GSSPM3( 52)/ 10.2550730D0/ DATA GSPPM3( 52)/ 8.1691450D0/ DATA GPPPM3( 52)/ 7.7775920D0/ DATA GP2PM3( 52)/ 7.7551210D0/ DATA HSPPM3( 52)/ 3.7724620D0/ DATA DDPM3 ( 52)/ 0.3484177D0/ DATA QQPM3 ( 52)/ 1.5593085D0/ DATA AMPM3 ( 52)/ 0.3768862D0/ DATA ADPM3 ( 52)/ 1.1960743D0/ DATA AQPM3 ( 52)/ 0.2184786D0/ DATA GUESP1( 52,1)/ 0.0333910D0/ DATA GUESP2( 52,1)/ 5.9563790D0/ DATA GUESP3( 52,1)/ 2.2775750D0/ DATA GUESP1( 52,2)/ -1.9218670D0/ DATA GUESP2( 52,2)/ 4.9732190D0/ DATA GUESP3( 52,2)/ 0.5242430D0/ C DATA FOR ELEMENT 53 IODINE DATA REFPM3 (53)/' I: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1 10, 209 (1989). '/ DATA USSPM3( 53)/ -96.4540370D0/ DATA UPPPM3( 53)/ -61.0915820D0/ DATA BETASP( 53)/ -14.4942340D0/ DATA BETAPP( 53)/ -5.8947030D0/ DATA ZSPM3 ( 53)/ 7.0010130D0/ DATA ZPPM3 ( 53)/ 2.4543540D0/ DATA ZDPM3 ( 53)/ 1.0000000D0/ DATA ALPPM3( 53)/ 1.9901850D0/ DATA EISOLP( 53)/ -288.3160860D0/ DATA GSSPM3( 53)/ 13.6319430D0/ DATA GSPPM3( 53)/ 14.9904060D0/ DATA GPPPM3( 53)/ 7.2883300D0/ DATA GP2PM3( 53)/ 5.9664070D0/ DATA HSPPM3( 53)/ 2.6300350D0/ DATA DDPM3 ( 53)/ 0.1581469D0/ DATA QQPM3 ( 53)/ 1.0467302D0/ DATA AMPM3 ( 53)/ 0.5009902D0/ DATA ADPM3 ( 53)/ 1.6699104D0/ DATA AQPM3 ( 53)/ 0.5153082D0/ DATA GUESP1( 53,1)/ -0.1314810D0/ DATA GUESP2( 53,1)/ 5.2064170D0/ DATA GUESP3( 53,1)/ 1.7488240D0/ DATA GUESP1( 53,2)/ -0.0368970D0/ DATA GUESP2( 53,2)/ 6.0101170D0/ DATA GUESP3( 53,2)/ 2.7103730D0/ C DATA FOR ELEMENT 80 MERCURY DATA REFPM3(80)/ ' Hg: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 80)/ -17.7622290D0/ DATA UPPPM3( 80)/ -18.3307510D0/ DATA BETASP( 80)/ -3.1013650D0/ DATA BETAPP( 80)/ -3.4640310D0/ DATA ZSPM3 ( 80)/ 1.4768850D0/ DATA ZPPM3 ( 80)/ 2.4799510D0/ DATA ALPPM3( 80)/ 1.5293770D0/ DATA EISOLP( 80)/ -28.8997380D0/ DATA GSSPM3( 80)/ 6.6247200D0/ DATA GSPPM3( 80)/ 10.6392970D0/ DATA GPPPM3( 80)/ 14.7092830D0/ DATA GP2PM3( 80)/ 16.0007400D0/ DATA HSPPM3( 80)/ 2.0363110D0/ DATA DDPM3 ( 80)/ 1.2317811D0/ DATA QQPM3 ( 80)/ 1.2164033D0/ DATA AMPM3 ( 80)/ 0.2434664D0/ DATA ADPM3 ( 80)/ 0.4515472D0/ DATA AQPM3 ( 80)/ 0.2618394D0/ DATA GUESP1( 80,1)/ 1.0827200D0/ DATA GUESP2( 80,1)/ 6.4965980D0/ DATA GUESP3( 80,1)/ 1.1951460D0/ DATA GUESP1( 80,2)/ -0.0965530D0/ DATA GUESP2( 80,2)/ 3.9262810D0/ DATA GUESP3( 80,2)/ 2.6271600D0/ C DATA FOR ELEMENT 81 THALLIUM DATA REFPM3(81)/ ' Tl: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 81)/ -30.0531700D0/ DATA UPPPM3( 81)/ -26.9206370D0/ DATA BETASP( 81)/ -1.0844950D0/ DATA BETAPP( 81)/ -7.9467990D0/ DATA ZSPM3 ( 81)/ 6.8679210D0/ DATA ZPPM3 ( 81)/ 1.9694450D0/ DATA ALPPM3( 81)/ 1.3409510D0/ DATA EISOLP( 81)/ -56.6492050D0/ DATA GSSPM3( 81)/ 10.4604120D0/ DATA GSPPM3( 81)/ 11.2238830D0/ DATA GPPPM3( 81)/ 4.9927850D0/ DATA GP2PM3( 81)/ 8.9627270D0/ DATA HSPPM3( 81)/ 2.5304060D0/ DATA DDPM3 ( 81)/ 0.0781362D0/ DATA QQPM3 ( 81)/ 1.5317110D0/ DATA AMPM3 ( 81)/ 0.3844326D0/ DATA ADPM3 ( 81)/ 2.5741815D0/ DATA AQPM3 ( 81)/ 0.2213264D0/ DATA GUESP1( 81,1)/ -1.3613990D0/ DATA GUESP2( 81,1)/ 3.5572260D0/ DATA GUESP3( 81,1)/ 1.0928020D0/ DATA GUESP1( 81,2)/ -0.0454010D0/ DATA GUESP2( 81,2)/ 2.3069950D0/ DATA GUESP3( 81,2)/ 2.9650290D0/ C DATA FOR ELEMENT 82 LEAD DATA REFPM3(82)/ ' Pb: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 82)/ -30.3227560D0/ DATA UPPPM3( 82)/ -24.4258340D0/ DATA BETASP( 82)/ -6.1260240D0/ DATA BETAPP( 82)/ -1.3954300D0/ DATA ZSPM3 ( 82)/ 3.1412890D0/ DATA ZPPM3 ( 82)/ 1.8924180D0/ DATA ALPPM3( 82)/ 1.6200450D0/ DATA EISOLP( 82)/ -73.4660775D0/ DATA GSSPM3( 82)/ 7.0119920D0/ DATA GSPPM3( 82)/ 6.7937820D0/ DATA GPPPM3( 82)/ 5.1837800D0/ DATA GP2PM3( 82)/ 5.0456510D0/ DATA HSPPM3( 82)/ 1.5663020D0/ DATA DDPM3 ( 82)/ 0.9866290D0/ DATA QQPM3 ( 82)/ 1.5940562D0/ DATA AMPM3 ( 82)/ 0.2576991D0/ DATA ADPM3 ( 82)/ 0.4527678D0/ DATA AQPM3 ( 82)/ 0.2150175D0/ DATA GUESP1( 82,1)/ -0.1225760D0/ DATA GUESP2( 82,1)/ 6.0030620D0/ DATA GUESP3( 82,1)/ 1.9015970D0/ DATA GUESP1( 82,2)/ -0.0566480D0/ DATA GUESP2( 82,2)/ 4.7437050D0/ DATA GUESP3( 82,2)/ 2.8618790D0/ C DATA FOR ELEMENT 83 BISMUTH DATA REFPM3(83)/ ' Bi: (PM3): J. J. P. STEWART, J. COMP. CHEM. 1(ACCEPTED) '/ DATA USSPM3( 83)/ -33.4959380D0/ DATA UPPPM3( 83)/ -35.5210260D0/ DATA BETASP( 83)/ -5.6072830D0/ DATA BETAPP( 83)/ -5.8001520D0/ DATA ZSPM3 ( 83)/ 4.9164510D0/ DATA ZPPM3 ( 83)/ 1.9349350D0/ DATA ALPPM3( 83)/ 1.8574310D0/ DATA EISOLP( 83)/ -109.2774910D0/ DATA GSSPM3( 83)/ 4.9894800D0/ DATA GSPPM3( 83)/ 6.1033080D0/ DATA GPPPM3( 83)/ 8.6960070D0/ DATA GP2PM3( 83)/ 8.3354470D0/ DATA HSPPM3( 83)/ 0.5991220D0/ DATA DDPM3 ( 83)/ 0.2798609D0/ DATA QQPM3 ( 83)/ 1.5590294D0/ DATA AMPM3 ( 83)/ 0.1833693D0/ DATA ADPM3 ( 83)/ 0.6776013D0/ DATA AQPM3 ( 83)/ 0.2586520D0/ DATA GUESP1( 83,1)/ 2.5816930D0/ DATA GUESP2( 83,1)/ 5.0940220D0/ DATA GUESP3( 83,1)/ 0.4997870D0/ DATA GUESP1( 83,2)/ 0.0603200D0/ DATA GUESP2( 83,2)/ 6.0015380D0/ DATA GUESP3( 83,2)/ 2.4279700D0/ C DATA FOR ELEMENT 103 CAPPED BOND DATA REFPM3(102)/' Cb: (PM3): Capped Bond (Hydrogen-like, takes 1on a zero charge.) '/ DATA USSPM3(102)/ -11.9062760D0/ DATA BETASP(102)/-9999999.0000000D0/ DATA ZSPM3 (102)/ 4.0000000D0/ DATA ZPPM3 (102)/ 0.3000000D0/ DATA ZDPM3 (102)/ 0.3000000D0/ DATA ALPPM3(102)/ 2.5441341D0/ DATA EISOLP(102)/ 4.0000000D0/ DATA GSSPM3(102)/ 12.8480000D0/ DATA HSPPM3(102)/ 0.1000000D0/ DATA DDPM3 (102)/ 0.0684105D0/ DATA QQPM3 (102)/ 1.0540926D0/ DATA AMPM3 (102)/ 0.4721793D0/ DATA ADPM3 (102)/ 0.9262742D0/ DATA AQPM3 (102)/ 0.2909059D0/ END mopac7-1.15/fortran/initsv.f0000644000175000017500000000730611053302063012704 00000000000000 SUBROUTINE INITSV (INDEPS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPSX,NPS2X,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 BH(LENABC) 4 /SOLVI/ IATSP(LENABC+1),NAR(LENABC), NNX(2,NUMATM) x /SOLVPS/ NPS, NPS2 COMMON /DIRVEC/ DIRVEC(3,NPPA), NN(3,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT DIMENSION RVDW(53), USEVDW(53), DIRSM(3,NPPA), DIRSMH(3,NPPA/3) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) EQUIVALENCE (ABCMAT(1),DIRSM) EQUIVALENCE(DIRSMH, ABCMAT(3*NPPA+1)) CHARACTER KEYWRD*241, ELEMNT(53)*2 COMMON /KEYWRD/ KEYWRD DATA RVDW /1.08D0, 1.D0, 1.80D0, 999.D0, 999.D0, 1.53D0, 1.48D0, 1 1.36D0, 1.30D0, 999.D0, 2.30D0, 999.D0, 2.05D0, 2.10D0, 2 1.75D0, 1.70D0, 1.65D0, 999.D0, 2.80D0, 2.75D0, 999.D0, 3 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 4 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 1.80D0, 5 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 6 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 999.D0, 7 999.D0, 999.D0, 999.D0, 2.05D0 / DATA ELEMNT/'H ','HE', 1 'LI','BE','B ','C ','N ','O ','F ','NE', 2 'NA','MG','AL','SI','P ','S ','CL','AR', 3 'K ','CA','SC','TI','V ','CR','MN','FE','CO','NI','CU', 4 'ZN','GA','GE','AS','SE','BR','KR', 5 'RB','SR','Y ','ZR','NB','MO','TC','RU','RH','PD','AG', 6 'CD','IN','SN','SB','TE','I '/ DO 10 I=1,53 10 USEVDW(I)=RVDW(I) EPSI=READA(KEYWRD,INDEPS) FEPSI=(EPSI-1.D0)/(EPSI+0.5D0) NPS=0 IW=6 NDEN=3*NORBS-2*NUMAT MAXNPS=SQRT(2*LENAB2+0.251)-NDEN-0.5 MAXNPS=MIN(MAXNPS,LENABC) * WRITE(IW,*) 'MAXIMUM NUMBER OF SEGMENTS ALLOWED:',MAXNPS IF ((NDEN*(NDEN+1))/2 .GT. LENAB2) THEN WRITE(IW,*) 'PARAMETER LENABC IS TOO SMALL FOR THIS SYSTEM' STOP 'PARAMETER LENABC IS TOO SMALL FOR THIS SYSTEM' ENDIF RSOLV=1.D0 INRSOL=INDEX(KEYWRD,'RSOLV=') IF (INRSOL .NE. 0) THEN RSOLV=READA(KEYWRD,INRSOL) END IF IF (RSOLV .LT. 0.) STOP ' RSOLV MUST NOT BE NEGATIVE' DELSC=RSOLV INDELS=INDEX(KEYWRD,'DELSC=') IF (INDELS .NE. 0) THEN DELSC=READA(KEYWRD,INDELS) END IF IF (DELSC .LT. 0.1D0) WRITE(IW,*) ' DELSC TOO SMALL: SET TO 0.1' IF (DELSC .GT. RSOLV+0.5D0) STOP ' DELSC UNREASONABLY LARGE' RDS=MAX(DELSC,0.1D0) DISEX=2.D0 INDISE=INDEX(KEYWRD,'DISEX=') IF (INDISE .NE. 0) THEN DISEX=READA(KEYWRD,INDISE) END IF DO 20 I=1,NUMAT IAT=NAT(I) IF (IAT .GT. 53) THEN STOP 'MISSING VAN DER WAALS RADIUS' ELSE AVDW=USEVDW(IAT) IF (AVDW .GT. 10.D0) STOP 'MISSING VAN DER WAALS RADIUS' END IF SRAD(I)=AVDW+RSOLV 20 CONTINUE NSPA=60 IF(INDEX(KEYWRD,'NSPA=').NE.0) 1 NSPA=NINT(READA(KEYWRD,INDEX(KEYWRD,'NSPA'))) X0=LOG(NSPA*0.1D0-0.199999D0) Z3=LOG(3.D0) Z4=LOG(4.D0) I4=INT(X0/Z4) NPS2=0 DO 7 I=0,I4 X=X0-I*Z4 N=3**INT(X/Z3)*4**I 7 IF(N.GT.NPS2)NPS2=N NPS=NPS2/3 IF(MOD(NPS2,3).NE.0)NPS=NPS2/4 NPS2=10*NPS2+2 NPS=MAX(12,NPS*10+2) CALL DVFILL(NPS2,DIRSM) CALL DVFILL(NPS,DIRSMH) NPS=-NPS DISEX2=(4*(1.5D0+RSOLV-RDS)*DISEX)**2/NSPA CALL DVFILL(NPPA,DIRVEC) RETURN END mopac7-1.15/fortran/sympro.f0000644000175000017500000010122611053302063012715 00000000000000 SUBROUTINE SYMPOP(H,I,ISKIP,DELDIP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION H(*), DELDIP(3,*) COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT COMMON /SYMOPC/ ISYMT(6) CHARACTER*10 ISYMT COMMON /ATOMS/ COORD, NATOMS, NVAR DO 10 J = 1, NSYM IF (IPO(I,J).LT.I) THEN CALL SYMH(H, DELDIP, I, J) ISKIP=3 C atom ipo(i,j) is suitable for transition dipole calc'n C K=I*3-2 C C INSERT DELDIP ROTATION HERE C GOTO 20 ENDIF 10 CONTINUE ISKIP=0 20 CONTINUE RETURN END SUBROUTINE SYMR IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT COMMON /SYMOPC/ ISYMT(6) CHARACTER*10 ISYMT ***************************************************************** * * ON INPUT NONE * * ON OUTPUT R = SYMMETRY OPERATIONS * IPO = PERMUTATION OPERATOR FOR SYMMETRY OPERATIONS * NSYM = NUMBER OF SYMMETRY OPERATIONS * NENT = NUMBER OF SYMMETRY OPERATIONS ENTERED * ***************************************************************** C C A SUBROUTINE THAT WILL READ IN THE PRIMATIVE SYMMETRY OPERATIONS C AND DETERMINE IF THEY ARE VALID FOR THIS MOLECULE. THIS C INFORMATION IS THEN EXPANDED TO THE COMPLETE SET AND USED FOR C SYMMATRIZING THE HESSIAN. C C THE CORRECT FORMAT FOR DESCRIBING A SYMMETRY FUNCTION IS: C LABEL IFNCN AXIS C C WHERE: C LABEL - MUST BE INCLUDED AND IS THE LABEL THAT WILL C BE USED TO IDENTIFY THAT FUNCTION C IFNCN - THE NUMBER OF THE SYMMETRY FUNCTION TO BE USED: C 0 - INVERSION OPERATOR C 1 - REFLECTION PLANE PERPENDICULAR TO THE AXIS C 2-X - A C(N) AXIS C -3-X - A S(N) AXIS C AXIS - THE AXIS FOR THE OPERATION. MAY BE SPECIFIED AS: C X, Y, Z COORDINATES -> MUST USE 3 VALUES. AT LEAST ONE C MUST BE NON-INTEGER OR TWO MUST BE IDENTICAL C AN ATOM LIST -> THE COORDINATES OF THE ATOMS LISTED WILL C BE SUMMED TO GENERATE THE AXIS. C A -B -> THE VECTOR FROM ATOM B TO ATOM A WILL BE USED AS C THE AXIS. C C A MAXIMUM OF 6 SYMMETRY OPERATIONS CAN BE INPUTTED. THESE SHOULD BE THE C UNIQUE GENERATING FUNCTIONS FROM WHICH ALL THE OPERATIONS OF THE GROUP C CAN BE CONSTRUCTED. E.G. ONLY C5 NEEDS TO BE SPECIFIED SINCE C5(2) C THROUGH C5(4) CAN BE GENERATED FROM THIS SINGLE FUNCTION. C C A MAXIMUM OF 8 UNIQUE ATOMS CAN BE USED TO SPECIFY AN AXIS. C C THE E FUNCTION IS BY DEFAULT THE FIRST SYMMETRY FUNCTION. THIS FUNCTION C NEVER NEEDS TO BE EXPLICTLY INCLUDED IN YOUR LIST. IT CANNOT BE C ENTERED. C C IF YOU ENTER A GIVEN SYMMETRY FUNCTION MORE THAN ONCE, ONLY THE FIRST C OCCURANCE WILL BE USED. ALL DUPLICATES WILL BE DELETED. C DIMENSION TEMP(9), TEMP2(9), ISTART(7) INTEGER ITEMP(9) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /COORD / COORD(3,NUMATM) COMMON /KEYWRD/ KEYWRD CHARACTER KEYWRD*241 CHARACTER*80 LINE LOGICAL LEADSP, PROB, ALLINT C THE NEXT PARAMETERS ARE THE MAX NUMBER OF SYMM FUNCTIONS, THE C MAX NUMBER OF SYMM FUNCTIONS TO READ IN, AND THE C TOLERENCE USED TO DETERMINE IF TWO FUNCTIONS ARE IDENTICAL PARAMETER (MAXFUN=120) PARAMETER (MAXENT=6) PARAMETER (TOL =1D-3) C C C Variables used: (n represents the number of atomic centers) C TEMP(9), TEMP2(9): Temporary matricies used to hold small parts C larger matricies for specific matrix operations. C C For the next two items, the last index represents the symmetry C operation number. C R(9,*): The 9 elements of each record are a packed 3 by 3 C array of a given symmetry operations. C IPO(n,*): A vector that contains the symmetry mapping of atomic ce C PROB = .FALSE. C Get the symmetry functions: (NOTE: THE FIRST IS ALWAY E) R(1,1) = 1.D0 R(2,1) = 0.D0 R(3,1) = 0.D0 R(4,1) = 0.D0 R(5,1) = 1.D0 R(6,1) = 0.D0 R(7,1) = 0.D0 R(8,1) = 0.D0 R(9,1) = 1.D0 C X = 0.D0 Y = 0.D0 Z = 0.D0 DO 10 I=1,NUMAT X = X + COORD(1,I) Y = Y + COORD(2,I) Z = Z + COORD(3,I) IPO(I,1) = I 10 CONTINUE XA = X/FLOAT(NUMAT) YA = Y/FLOAT(NUMAT) ZA = Z/FLOAT(NUMAT) DO 20 I=1,NUMAT COORD(1,I) = -XA + COORD(1,I) COORD(2,I) = -YA + COORD(2,I) COORD(3,I) = -ZA + COORD(3,I) 20 CONTINUE WRITE(6,'(/'' SYMMETRY OPERATIONS USED FOR SYMMETRIZING'', 1'' THE HESSIAN'')') WRITE(6,'(/,'' OPERATOR TYPE AXIS DEFINITION '')') C NENT = 1 NSYM = 0 ISYMT(1)='E' 30 NSYM = NSYM + 1 READ(5,'(A)',END=120,ERR=120)LINE LEADSP=.TRUE. NVALUE=0 ALLINT=.TRUE. DO 40 I=1,80 IF (LEADSP.AND.LINE(I:I).NE.' ') THEN NVALUE=NVALUE+1 ISTART(NVALUE)=I ENDIF LEADSP=(LINE(I:I).EQ.' ') 40 CONTINUE IF (NVALUE.EQ.0) GOTO 120 IF (NVALUE.EQ.1) THEN WRITE(6,200) 200 FORMAT(' NOT A VALID LINE. ONLY HAS ONE ENTRY') PROB = .TRUE. GOTO 120 ENDIF ISYMT(1+NENT)=LINE(ISTART(1):ISTART(2)-1) DO 50 I=2,NVALUE TEMP(I-1)=READA(LINE,ISTART(I)) ITEMP(I-1)=NINT(TEMP(I-1)) IF((ABS(ITEMP(I-1)-TEMP(I-1)).GT.TOL).AND.(I.NE.2)) + ALLINT=.FALSE. 50 CONTINUE IF (ALLINT) THEN WRITE(6,210)ISYMT(1+NENT),(ITEMP(I),I=1,NVALUE-1) 210 FORMAT(X,A10,I7,8I7) ELSE WRITE(6,220)ISYMT(1+NENT),ITEMP(1),(TEMP(I),I=2,NVALUE-1) 220 FORMAT(X,A10,I7,8F7.3) ENDIF SIGMA = 1 IF (ITEMP(1) .LE. -3) SIGMA = -1 TEMP(1) = ABS( TEMP(1)) ITEMP(1)= ABS(ITEMP(1)) IF (ABS(ITEMP(1)-TEMP(1)) .GE. TOL) THEN WRITE(6,230) 230 FORMAT(' THE SYMMETRY FUNCTION MUST BE INTEGER') PROB = .TRUE. GOTO 120 ENDIF IF (ITEMP(1) .EQ. 0) THEN C WITH INVERSION, THE AXIS IS UNIMPORTANT R(1,1+NENT) = -1.D0 R(2,1+NENT) = 0.D0 R(3,1+NENT) = 0.D0 R(4,1+NENT) = 0.D0 R(5,1+NENT) = -1.D0 R(6,1+NENT) = 0.D0 R(7,1+NENT) = 0.D0 R(8,1+NENT) = 0.D0 R(9,1+NENT) = -1.D0 GOTO 70 ENDIF C WITH ANYTHING ELSE, THE AXIS MUST BE DETERMINED. IF NO AXIS IS DEFINED C FLAG IT AS A PROBLEM IF (NVALUE .EQ. 2) THEN PROB = .TRUE. WRITE(6,240) NSYM 240 FORMAT(' NO AXIS INFORMATION WAS ENTERED FOR FUNCTION',I2) GOTO 120 ENDIF IF ((NVALUE .EQ. 5).AND.((TEMP(2).EQ.TEMP(3)) + .OR.(TEMP(2).EQ.TEMP(4)).OR. + (TEMP(3).EQ.TEMP(4)).OR.(.NOT. ALLINT).OR. + (ABS(ITEMP(2)).LT. 1).OR.(ABS(ITEMP(2)).GT.NUMAT) .OR. + (ABS(ITEMP(3)).LT. 1).OR.(ABS(ITEMP(3)).GT.NUMAT) .OR. + (ABS(ITEMP(4)).LT. 1).OR.(ABS(ITEMP(4)).GT.NUMAT))) THEN C IT APPEARS TO BE XYZ INPUT X = TEMP(2) Y = TEMP(3) Z = TEMP(4) ELSE C APPEARS TO BE ATOM NUMBER INPUT IF (.NOT. ALLINT) THEN PROB = .TRUE. WRITE(6,250) 250 FORMAT(' YOU MUST HAVE ALL INTEGER INPUT WHEN NOT', + ' USING XYZ INPUT') GOTO 120 ENDIF X = 0.D0 Y = 0.D0 Z = 0.D0 DO 60 I = 2, NVALUE-1 IF ((ABS(ITEMP(I)).LT.1).OR.(ABS(ITEMP(I)).GT.NUMAT)) THEN WRITE(6,260)ITEMP(I) 260 FORMAT(' ATOM NUMBER',I3,' IS OUT OF RANGE') PROB=.TRUE. ENDIF X = X + ITEMP(I)/ABS(ITEMP(I))*COORD(1,ABS(ITEMP(I))) Y = Y + ITEMP(I)/ABS(ITEMP(I))*COORD(2,ABS(ITEMP(I))) Z = Z + ITEMP(I)/ABS(ITEMP(I))*COORD(3,ABS(ITEMP(I))) 60 CONTINUE ENDIF C C TIME TO DECIPHER THE SYMMETRY FUNCTION C IF (ITEMP(1) .GT. 10) THEN WRITE(6,270) 270 FORMAT(' A C-10 AXIS IS THE HIGHEST THAT CAN BE SPECIFIED') PROB = .TRUE. GOTO 120 ENDIF ROT=4.D0*ASIN(1.D0)/ITEMP(1) IF(ITEMP(1).EQ. 1) SIGMA = -1 C C First, construct the matrix defining the rotation axis XY=X**2+Y**2 RA=SQRT(XY+Z**2) IF (RA.LT. TOL) THEN PROB = .TRUE. WRITE(6,280) 280 FORMAT(' YOUR VECTOR AXIS MUST HAVE A NON-ZERO LENGTH ') GOTO 120 ENDIF XY=SQRT(XY) IF (XY.GT.1.D-10) THEN CA=Y/XY CB=Z/RA SA=X/XY SB=XY/RA ELSEIF (Z.GT. 0.D0) THEN CA=1.D0 CB=1.D0 SA=0.D0 SB=0.D0 ELSE CA=-1.D0 CB=-1.D0 SA=0.D0 SB=0.D0 ENDIF C GENERATE THE MATRIX ELEMENTS BY DOING THE EULER TRANSFORM TEMP( 1)=CA TEMP( 2)=-SA TEMP( 3)=0.D0 TEMP( 4)=SA*CB TEMP( 5)=CA*CB TEMP( 6)=-SB TEMP( 7)=SA*SB TEMP( 8)=CA*SB TEMP( 9)=CB C C CA = DCOS(ROT) SA = DSIN(ROT) C C The construct the actual R matrix to be used C C TEMP2(1) = CA TEMP2(2) = SA TEMP2(3) = 0.D0 TEMP2(4) = -SA TEMP2(5) = CA TEMP2(6) = 0.D0 TEMP2(7) = 0.D0 TEMP2(8) = 0.D0 TEMP2(9) = SIGMA CALL MAT33(TEMP, TEMP2, R(1,1+NENT)) C C Now, verify that this is a unique and valid function 70 CONTINUE C RES = 10.D0 DO 90 I = 2, NENT RESO = 0.D0 DO 80 J = 1, 9 80 RESO= ABS( R(J,I) - R(J,1+NENT)) + RESO RES = MIN(RES, RESO) 90 CONTINUE IF (RES .LT. TOL) THEN C THIS IS NOT VALID FUNCTION WRITE(6,290) 290 FORMAT(' THIS FUNCTION IS IDENTICAL TO AN EARLIER ONE') GOTO 120 ENDIF C NOW, TO CALCULATE THE IPO OF THIS FUNCTION NENT = 1+NENT N = NENT C Now, to initialize IPO(n) and C Perform R on each atomic center and determine where it maps to. DO 110 I = 1, NUMAT X=COORD(1,I)*R(1,N) + COORD(2,I)*R(2,N) + COORD(3,I)*R(3,N) Y=COORD(1,I)*R(4,N) + COORD(2,I)*R(5,N) + COORD(3,I)*R(6,N) Z=COORD(1,I)*R(7,N) + COORD(2,I)*R(8,N) + COORD(3,I)*R(9,N) IPO(I,N) = 0 DO 100 J = 1, NUMAT DIST=ABS(X-COORD(1,J))+ABS(Y-COORD(2,J))+ABS(Z-COORD(3,J)) IF (DIST .LT. 5.D-2) THEN IF (IPO(I,N) .EQ. 0) THEN IPO(I,N) = J ELSE WRITE(6,300) PROB = .TRUE. GOTO 120 300 FORMAT(' ONE ATOM MAPS ONTO TWO DIFFERENT ATOMIC C', 1'ENTERS') ENDIF ENDIF 100 CONTINUE IF (IPO(I,N) .EQ. 0) THEN WRITE(6,310) 310 FORMAT(' ONE ATOM MAPS ONTO NO OTHER ATOM ') PROB = .TRUE. GOTO 120 ENDIF 110 CONTINUE C C IF THIS POINT IS REACHED, THE FUNCTION IS VALID C CHECK IF THE R MATRIX SHOULD BE PRINTED C IF (INDEX(KEYWRD,' RMAT') .NE. 0) THEN WRITE(6,320)(R(I,N),I=1,3) WRITE(6,330)N,(R(I,N),I=4,6) WRITE(6,340)(R(I,N),I=7,9) 320 FORMAT(/,10X,'| ',3F10.6,' |') 330 FORMAT(I5,' = | ',3F10.6,' |') 340 FORMAT(10X,'| ',3F10.6,' |',/) ENDIF C 120 IF((NVALUE.NE.0).AND.(NSYM.LT.MAXENT)) GOTO 30 C C If a problem exists. Stop the program. C IF (PROB) THEN CLOSE (6) STOP 'PROBLEM IN SYMR' ENDIF C C NOW, ALL USER FUNCTIONS ARE IN WITH NO ERRORS (JUST ELIMINATION OF DUPS) C IF(NVALUE.NE.0) READ(5,'(A)',END=130)LINE 130 CONTINUE NSYM = NENT C C NEXT, EXPAND THE EXISTING OPERATORS TO THE FULL SET C CALL SYMP C RETURN END SUBROUTINE SYMH(H, DIP, I, N) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION H(*), DIP(3,*) COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT COMMON /SYMOPC/ ISYMT(6) CHARACTER*10 ISYMT ***************************************************************** * C INPUT: H() A packed lower triangular hessian C DIP(,) A MATRIX OF DIPOLE TENSORS TO BE SYMM C R(,) A matrix of symmetry operations C IPO(,) A matrix of atomic mapping according to R C I The atom (row and column) to add to H() C N The symmetry operation to use to generate I C C OUTPUT: H() A packed lower triangular Hessian with information C about atom I added C DIP(,) A MATRIX OF DIPOLE TENSORS THAT HAVE BEEN SYMM C ***************************************************************** C C C This subroutine will add all necessary information to the Hessian con C atom I. Since the Hessian is a packed lower half triangle, the exi C information for atom pair (K,L) where K,L < I is fully known, (K > C L < I) or (vice versa) is half known, K,L > I is completely unknown C Therefore, start in unknown region and make it half known. Double C known values, and move in the diagonal element at full strength. C C DIMENSION TEMP(9), TEMP2(9) COMMON /FOKMAT/ HA(MPACK*2) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /COORD / COORD(3,NUMATM) C C C C Variables used: (n represents the number of atomic centers) C H(3n,3n): Input/output matrix. It is a packed lower half triangu C matrix. Commonly, the Hessian. C TEMP(9), TEMP2(9): Temporary matricies used to hold small parts C larger matricies for specific matrix operations. C C For the next two items, the last indicy represents the symmetry C operation number. C R(14,*): The first 9 elements of each record are a packed 3 by 3 C array of a given symmetry operations. Elements 10 - 14 are t C users input describing the symmetry operation. C IPO(n,*): A vector that contains the symmetry mapping of atomic c C C K = IPO(I,N) C C Now, to climb up the matrix DO 10 J = NUMAT, I+1, -1 L = IPO(J,N) C C Now, to actually perform R H R C C Do this multiplication in a 3 by 3 block at a time. Store H(i,j) in C H( IPO(I,N), IPO(J,N)) C IF (K .GT. L) THEN IEL33 = (3*K*(3*K-1))/2 + 3*L TEMP(9) = 0.5D0 * H(IEL33) TEMP(8) = 0.5D0 * H(IEL33-1) TEMP(7) = 0.5D0 * H(IEL33-2) TEMP(6) = 0.5D0 * H(IEL33-K*3+1) TEMP(5) = 0.5D0 * H(IEL33-K*3) TEMP(4) = 0.5D0 * H(IEL33-K*3-1) TEMP(3) = 0.5D0 * H(IEL33-6*K+3) TEMP(2) = 0.5D0 * H(IEL33-6*K+2) TEMP(1) = 0.5D0 * H(IEL33-6*K+1) ELSE IEL33 = (3*L*(3*L-1))/2 + 3*K FACT = 1.0D0 IF (L .LT. I) FACT = 0.5D0 TEMP(9) = FACT * H(IEL33) TEMP(6) = FACT * H(IEL33-1) TEMP(3) = FACT * H(IEL33-2) TEMP(8) = FACT * H(IEL33-L*3+1) TEMP(5) = FACT * H(IEL33-L*3) TEMP(2) = FACT * H(IEL33-L*3-1) TEMP(7) = FACT * H(IEL33-6*L+3) TEMP(4) = FACT * H(IEL33-6*L+2) TEMP(1) = FACT * H(IEL33-6*L+1) ENDIF C CALL MAT33(R(1,N), TEMP, TEMP2) C IEL33 = J*3*(J*3-1)/2 + I*3 H(IEL33) = TEMP2(9) H(IEL33-3*J+1) = TEMP2(8) H(IEL33-6*J+3) = TEMP2(7) H(IEL33-1) = TEMP2(6) H(IEL33-3*J) = TEMP2(5) H(IEL33-6*J+2) = TEMP2(4) H(IEL33-2) = TEMP2(3) H(IEL33-3*J-1) = TEMP2(2) H(IEL33-6*J+1) = TEMP2(1) 10 CONTINUE C C Now, to do the diagonal term C IEL33 = (3*K*(3*K+1))/2 TEMP(9) = 0.5D0 * H(IEL33) TEMP(8) = 0.5D0 * H(IEL33-1) TEMP(7) = 0.5D0 * H(IEL33-2) TEMP(6) = TEMP(8) TEMP(5) = 0.5D0 * H(IEL33-K*3) TEMP(4) = 0.5D0 * H(IEL33-K*3-1) TEMP(3) = TEMP(7) TEMP(2) = TEMP(4) TEMP(1) = 0.5D0 * H(IEL33-6*K+1) C CALL MAT33(R(1,N), TEMP, TEMP2) C IEL33 = I*3*(I*3+1)/2 H(IEL33) = TEMP2(9) H(IEL33-1) = TEMP2(8) H(IEL33-2) = TEMP2(7) H(IEL33-I*3) = TEMP2(5) H(IEL33-I*3-1) = TEMP2(4) H(IEL33-6*I+1) = TEMP2(1) C C NOW, TO ROTATE THE DIPOLE TENSOR TERM C TEMP(9) = DIP(3,K*3 ) TEMP(8) = DIP(2,K*3 ) TEMP(7) = DIP(1,K*3 ) TEMP(6) = DIP(3,K*3-1) TEMP(5) = DIP(2,K*3-1) TEMP(4) = DIP(1,K*3-1) TEMP(3) = DIP(3,K*3-2) TEMP(2) = DIP(2,K*3-2) TEMP(1) = DIP(1,K*3-2) C CALL MAT33(R(1,N), TEMP, TEMP2) C DIP(3,I*3 ) = TEMP2(9) DIP(2,I*3 ) = TEMP2(8) DIP(1,I*3 ) = TEMP2(7) DIP(3,I*3-1) = TEMP2(6) DIP(2,I*3-1) = TEMP2(5) DIP(1,I*3-1) = TEMP2(4) DIP(3,I*3-2) = TEMP2(3) DIP(2,I*3-2) = TEMP2(2) DIP(1,I*3-2) = TEMP2(1) C C C Now, to double all existing values going across ISTART = (I-1)*3*((I-1)*3+1)/2+1 DO 20 J = ISTART, IEL33 H(J) = H(J) + H(J) 20 CONTINUE C Everything is now done for this symmetry element. C RETURN END SUBROUTINE SYMA(E, V) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION E(NUMAT*3), V(NUMAT*NUMAT*9) COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT COMMON /SYMOPC/ ISYMT(6) CHARACTER*10 ISYMT ********************************************************************* * * ON INPUT E = FREQUENCIES IN CM(-1) * V = EIGENVECTORS OF NORMAL MODES, NORMALIZED * R = SYMMETRY OPERATIONS * IPO = MAP OF ATOMS BEING MOVED * NSYM = NUMBER OF SYMMETRY OPERATION * ********************************************************************* C C THIS SUBROUTINE DETERMINES THE SYMMETRY FUNCTION VALUE OF EACH C VIBRATIONAL MODE. IT DOES IT BY DOING C COMMON /COORD / COORD(3,NUMATM) COMMON /KEYWRD/ KEYWRD DIMENSION T1(MAXPAR), T2(MAXPAR,7) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT CHARACTER KEYWRD*241 C TOL=1.D-3 C NVAR=NUMAT*3 C C T1(NVAR) AND T2(NVAR,NSYM) ARE THE ONLY ADDITIONAL ARRAYS NEEDED. TH C ARE TEMPORARY ARRAYS. DO 30 K = 0, NVAR-1 DO 20 N = 1, NENT DO 10 I = 1, NUMAT C J=IPO(I,N) T1(I*3-2)=V(J*3-2+K*NVAR)*R(1,N)+ 1 V(J*3-1+K*NVAR)*R(4,N)+ 2 V(J*3 +K*NVAR)*R(7,N) T1(I*3-1)=V(J*3-2+K*NVAR)*R(2,N)+ 1 V(J*3-1+K*NVAR)*R(5,N)+ 2 V(J*3 +K*NVAR)*R(8,N) T1(I*3 )=V(J*3-2+K*NVAR)*R(3,N)+ 1 V(J*3-1+K*NVAR)*R(6,N)+ 2 V(J*3 +K*NVAR)*R(9,N) 10 CONTINUE T2(K+1,N) = 0.0D0 DO 20 I = 1, NVAR T2(K+1,N) = T2(K+1,N) + T1(I)*V(I+K*NVAR) 20 CONTINUE 30 CONTINUE WRITE(6,100) WRITE(6,'('' '',7A9)')(ISYMT(I),I=1,NENT) 100 FORMAT(' FREQ.',/,' NO. FREQ. CHARACTER TABLE ') I=1 J=I+1 IF (INDEX(KEYWRD,' NODEGEN') .NE. 0) TOL = -1.D0 EREF = E(1) 110 IF(ABS((E(J)-EREF)) .LE. TOL) THEN DO 120 K = 1, NENT 120 T2(I,K) = T2(I,K) + T2(J,K) E(I) = (E(I) + E(J)) J = J+1 ELSE E(I)=E(I)/FLOAT(J-I) WRITE(6,130)I,E(I),(T2(I,K),K=1,NENT) I=J J=J+1 EREF=E(I) ENDIF IF (J .LE. NVAR) GOTO 110 E(I)=E(I)/FLOAT(J-I) WRITE(6,130)I,E(I),(T2(I,K),K=1,NENT) 130 FORMAT(I4,F9.3,3X,7F9.4) END SUBROUTINE SYMT(H, DELDIP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION H(*), DELDIP(3,*) COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT COMMON /SYMOPC/ ISYMT(6) CHARACTER*10 ISYMT ***************************************************************** * * ON INPUT H = HESSIAN MATRIX, PACKED LOWER HALF TRIANGLE * R = SYMMETRY OPERATIONS * IPO = MAP OF ATOMS MOVED * NSYM = NUMBER OF SYMMETRY OPERATIONS * * ON OUTPUT H = SYMMETRIZED HESSIAN MATRIX * ***************************************************************** C A subroutine that will symmatrize the Hamiltonian, or other matrix C by successive application of group operations. The method used C is R H R added to HA then divided by the total number of symmetry C operations used. This in effects averages all the values in a C symmetry correct fashion. C DIMENSION TEMP(9), TEMP2(9), DELTMP(3,MAXPAR) COMMON /FOKMAT/ HA(MPACK*2) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /COORD / COORD(3,NUMATM) C C C Variables used: (n represents the number of atomic centers) C H(3n,3n): Input/output matrix. It is a packed lower half triangu C matrix. Commonly, the Hessian. C HA(3n,3n): An internal matrix used to sum the symatrized Hessian C NSYM: Input, the value of this symmetry operation. C TEMP(9), TEMP2(9): Temporary matricies used to hold small parts C larger matricies for specific matrix operations. C C For the next two items, the last indicy represents the symmetry C operation number. C IPO(n,*): A vector that contains the symmetry mapping of atomic c C C Skip this subroutine if NSYMM <= 0. This implies that only E is pre IF (NSYM .LT. 2) RETURN C DO 10 I=1,(3*NUMAT*(NUMAT*3+1))/2 10 HA(I)=0.D0 C DO 15 I = 1, NUMAT*3 DELTMP(1,I) = 0.D0 DELTMP(2,I) = 0.D0 15 DELTMP(3,I) = 0.D0 C DO 40 N = 1, NSYM C C Now, to actually perform R H R DO 30 I = 1, NUMAT DO 20 J = 1, I-1 C C Do this multiplication in a 3 by 3 block at a time. Store H(i,j) in C HA( IPO(I,N), IPO(J,N)) or HS( IPO(I,N), IPO(J,N)) C K = IPO(I,N) L = IPO(J,N) IF (K .GT. L) THEN IEL33 = (3*K*(3*K-1))/2 + 3*L TEMP(9) = H(IEL33) TEMP(8) = H(IEL33-1) TEMP(7) = H(IEL33-2) TEMP(6) = H(IEL33-K*3+1) TEMP(5) = H(IEL33-K*3) TEMP(4) = H(IEL33-K*3-1) TEMP(3) = H(IEL33-6*K+3) TEMP(2) = H(IEL33-6*K+2) TEMP(1) = H(IEL33-6*K+1) ELSE IEL33 = (3*L*(3*L-1))/2 + 3*K TEMP(9) = H(IEL33) TEMP(6) = H(IEL33-1) TEMP(3) = H(IEL33-2) TEMP(8) = H(IEL33-L*3+1) TEMP(5) = H(IEL33-L*3) TEMP(2) = H(IEL33-L*3-1) TEMP(7) = H(IEL33-6*L+3) TEMP(4) = H(IEL33-6*L+2) TEMP(1) = H(IEL33-6*L+1) ENDIF C CALL MAT33(R(1,N), TEMP, TEMP2) C IEL33 = I*3*(I*3-1)/2 + J*3 HA(IEL33) = TEMP2(9) + HA(IEL33) HA(IEL33-1) = TEMP2(8) + HA(IEL33-1) HA(IEL33-2) = TEMP2(7) + HA(IEL33-2) HA(IEL33-I*3+1) = TEMP2(6) + HA(IEL33-I*3+1) HA(IEL33-I*3) = TEMP2(5) + HA(IEL33-I*3) HA(IEL33-I*3-1) = TEMP2(4) + HA(IEL33-I*3-1) HA(IEL33-6*I+3) = TEMP2(3) + HA(IEL33-6*I+3) HA(IEL33-6*I+2) = TEMP2(2) + HA(IEL33-6*I+2) HA(IEL33-6*I+1) = TEMP2(1) + HA(IEL33-6*I+1) 20 CONTINUE K = IPO(I,N) IEL33 = (3*K*(3*K+1))/2 TEMP(9) = H(IEL33) TEMP(8) = H(IEL33-1) TEMP(7) = H(IEL33-2) TEMP(6) = TEMP(8) TEMP(5) = H(IEL33-K*3) TEMP(4) = H(IEL33-K*3-1) TEMP(3) = TEMP(7) TEMP(2) = TEMP(4) TEMP(1) = H(IEL33-6*K+1) C CALL MAT33(R(1,N), TEMP, TEMP2) C IEL33 = I*3*(I*3+1)/2 HA(IEL33) = TEMP2(9) + HA(IEL33) HA(IEL33-1) = TEMP2(8) + HA(IEL33-1) HA(IEL33-2) = TEMP2(7) + HA(IEL33-2) HA(IEL33-I*3) = TEMP2(5) + HA(IEL33-I*3) HA(IEL33-I*3-1) = TEMP2(4) + HA(IEL33-I*3-1) HA(IEL33-6*I+1) = TEMP2(1) + HA(IEL33-6*I+1) C C APPLY SYMMETRY TO DIPOLE TERM AS WELL C TEMP(9) = DELDIP(3,K*3 ) TEMP(8) = DELDIP(2,K*3 ) TEMP(7) = DELDIP(1,K*3 ) TEMP(6) = DELDIP(3,K*3-1) TEMP(5) = DELDIP(2,K*3-1) TEMP(4) = DELDIP(1,K*3-1) TEMP(3) = DELDIP(3,K*3-2) TEMP(2) = DELDIP(2,K*3-2) TEMP(1) = DELDIP(1,K*3-2) C CALL MAT33(R(1,N), TEMP, TEMP2) C DELTMP(3,I*3 ) = TEMP2(9) + DELTMP(3,I*3 ) DELTMP(2,I*3 ) = TEMP2(8) + DELTMP(2,I*3 ) DELTMP(1,I*3 ) = TEMP2(7) + DELTMP(1,I*3 ) DELTMP(3,I*3-1) = TEMP2(6) + DELTMP(3,I*3-1) DELTMP(2,I*3-1) = TEMP2(5) + DELTMP(2,I*3-1) DELTMP(1,I*3-1) = TEMP2(4) + DELTMP(1,I*3-1) DELTMP(3,I*3-2) = TEMP2(3) + DELTMP(3,I*3-2) DELTMP(2,I*3-2) = TEMP2(2) + DELTMP(2,I*3-2) DELTMP(1,I*3-2) = TEMP2(1) + DELTMP(1,I*3-2) C 30 CONTINUE 40 CONTINUE C DO 50 I = 1, (NUMAT*3*(NUMAT*3+1))/2 50 H(I) = HA(I)/NSYM C DO 60 I = 1, 3*NUMAT DELDIP(1,I) = DELTMP(1,I)/NSYM DELDIP(2,I) = DELTMP(2,I)/NSYM 60 DELDIP(3,I) = DELTMP(3,I)/NSYM C RETURN END SUBROUTINE MAT33(A, B, C) C A subroutine that will multiply two 3 by 3 matricies in the following C fashion: C = A(transpose) B A C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION A(9), B(9), C(9), T(9) C C T(1) = B(1)*A(1) + B(2)*A(4) + B(3)*A(7) T(2) = B(1)*A(2) + B(2)*A(5) + B(3)*A(8) T(3) = B(1)*A(3) + B(2)*A(6) + B(3)*A(9) T(4) = B(4)*A(1) + B(5)*A(4) + B(6)*A(7) T(5) = B(4)*A(2) + B(5)*A(5) + B(6)*A(8) T(6) = B(4)*A(3) + B(5)*A(6) + B(6)*A(9) T(7) = B(7)*A(1) + B(8)*A(4) + B(9)*A(7) T(8) = B(7)*A(2) + B(8)*A(5) + B(9)*A(8) T(9) = B(7)*A(3) + B(8)*A(6) + B(9)*A(9) C C(1) = A(1)*T(1) + A(4)*T(4) + A(7)*T(7) C(2) = A(1)*T(2) + A(4)*T(5) + A(7)*T(8) C(3) = A(1)*T(3) + A(4)*T(6) + A(7)*T(9) C(4) = A(2)*T(1) + A(5)*T(4) + A(8)*T(7) C(5) = A(2)*T(2) + A(5)*T(5) + A(8)*T(8) C(6) = A(2)*T(3) + A(5)*T(6) + A(8)*T(9) C(7) = A(3)*T(1) + A(6)*T(4) + A(9)*T(7) C(8) = A(3)*T(2) + A(6)*T(5) + A(9)*T(8) C(9) = A(3)*T(3) + A(6)*T(6) + A(9)*T(9) C RETURN END SUBROUTINE SYMP IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT COMMON /SYMOPC/ ISYMT(6) CHARACTER*10 ISYMT CHARACTER*5 OPER ***************************************************************** * * ON INPUT R = SYMMETRY OPERATIONS (7 MAX) * IPO = PERM OPR FOR ABOVE OPERATIONS * NSYM = CURRENT NUMBER OF SYMMETRY OPERATIONS * NENT = NUMBER OF USER SUPPLIED OPERATIONS * * ON OUTPUT R = SYMMETRY OPERATIONS (120 MAX) * IPO = PERMUTATION OPERATOR FOR SYMMETRY OPERATIONS * NSYM = NUMBER OF SYMMETRY OPERATIONS * ***************************************************************** C C A SUBROUTINE THAT WILL EXPAND THE SYMMETRY OPERATIONS READ IN INTO C THE COMPLETE SET. NOTE: VERY FEW OPERATIONS ARE REQUIRED TO C GENERATE EVEN VERY LARGE GROUPS OF OPERATIONS. C C COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /COORD / COORD(3,NUMATM) COMMON /KEYWRD/ KEYWRD CHARACTER KEYWRD*241 C THE NEXT PARAMETERS ARE THE MAX NUMBER OF SYMM FUNCTIONS, THE C MAX NUMBER OF SYMM FUNCTIONS TO READ IN, AND THE C TOLERENCE USED TO DETERMINE IF TWO FUNCTIONS ARE IDENTICAL PARAMETER (MAXFUN=120) PARAMETER (TOL =1D-2) C C C Variables used: (n represents the number of atomic centers) C C For the next two items, the last index represents the symmetry C operation number. C R(9,*): The 9 elements of each record are a packed 3 by 3 C array of a given symmetry operations. C IPO(n,*): A vector that contains the symmetry mapping of atomic ce C C NSYM IS ALWAYS THE UPPER BOUND OF THE VALID FUNCTIONS. QUIT IF IT C REACHES 120. C I IS THE SLOW INDEX OF FUNCTIONS TO MULTIPLY C J IS THE FAST INDEX OF FUNCTIONS TO MULTIPLY C ALWAYS DO R(I)*R(J) AND TAKE I,J FROM 2 TO NSYM C I = 2 J = 1 C C IF MORE INFORMATION IS WANTED, PRINT HEADDER. C IF (INDEX(KEYWRD,' RMAT') .NE. 0)WRITE(6,100) 100 FORMAT(/,' ENTERING THE SYMMETRY GENERATING ROUTINE ', +/,' NUMBER SYMM. OPER. * ', + ' NUMBER SYMM. OPER. = ', + ' NUMBER SYMM. OPER.') C DETERMINE IF IT IS TIME TO STOP C 10 J = J+1 IF (J .GT. NSYM) THEN J = 2 I = I+1 IF (I .GT. NSYM) GOTO 50 ENDIF IF(NSYM .EQ. MAXFUN) GOTO 50 C C NOW TO START THE MULTIPLICATION C R(1,NSYM+1)=R(1,I)*R(1,J)+R(2,I)*R(4,J)+R(3,I)*R(7,J) R(2,NSYM+1)=R(1,I)*R(2,J)+R(2,I)*R(5,J)+R(3,I)*R(8,J) R(3,NSYM+1)=R(1,I)*R(3,J)+R(2,I)*R(6,J)+R(3,I)*R(9,J) R(4,NSYM+1)=R(4,I)*R(1,J)+R(5,I)*R(4,J)+R(6,I)*R(7,J) R(5,NSYM+1)=R(4,I)*R(2,J)+R(5,I)*R(5,J)+R(6,I)*R(8,J) R(6,NSYM+1)=R(4,I)*R(3,J)+R(5,I)*R(6,J)+R(6,I)*R(9,J) R(7,NSYM+1)=R(7,I)*R(1,J)+R(8,I)*R(4,J)+R(9,I)*R(7,J) R(8,NSYM+1)=R(7,I)*R(2,J)+R(8,I)*R(5,J)+R(9,I)*R(8,J) R(9,NSYM+1)=R(7,I)*R(3,J)+R(8,I)*R(6,J)+R(9,I)*R(9,J) C C IS IT UNIQUE? C DO 30 N = 1, NSYM RES = 0.D0 DO 20 M = 1, 9 20 RES = RES + ABS(R(M,N) - R(M,NSYM+1)) IF (RES .LT. TOL) GOTO 10 30 CONTINUE C C YES, IT IS UNIQUE. NOW, GENERATE THE NEW IPO(,NSYM) C NSYM = NSYM + 1 DO 40 N = 1, NUMAT 40 IPO(N,NSYM) = IPO(IPO(N,J),I) C C ALL DONE ADDING THE NEW FUNCTION. GO TRY TO FIND A NEW ONE. C BUT FIRST, SEE IF WE NEED TO PRINT THIS. C IF (INDEX(KEYWRD,' RMAT') .NE. 0) + WRITE(6,110)I,OPER(R(1,I)),J,OPER(R(1,J)),NSYM,OPER(R(1,NSYM)) 110 FORMAT(8X,I3,6X,A5,4X,'*',8X,I3,6X,A5,4X,'=',8X,I3,6X,A5) IF (INDEX(KEYWRD,' RMAT') .NE. 0) THEN WRITE(6,120)(R(K,I),K=1,3),(R(K,J),K=1,3),(R(K,NSYM),K=1,3) WRITE(6,130)(R(K,I),K=4,6),(R(K,J),K=4,6),(R(K,NSYM),K=4,6) WRITE(6,140)(R(K,I),K=7,9),(R(K,J),K=7,9),(R(K,NSYM),K=7,9) 120 FORMAT(' |',3F7.3,' | |',3F7.3,' | |',3F7.3,' |') 130 FORMAT(' |',3F7.3,' | * |',3F7.3,' | = |',3F7.3,' |') 140 FORMAT(' |',3F7.3,' | |',3F7.3,' | |',3F7.3,' |',/) ENDIF C GOTO 10 C C 50 CONTINUE C C NOW, TO DO FINAL WRAPUP C WRITE(6,150)NSYM 150 FORMAT(/,' THERE ARE ',I3,' UNIQUE SYMMETRY FUNCTIONS.',/) C C PRINT THE IPO MATRIX IF ASKED FOR. C IF(INDEX(KEYWRD,' IPO') .NE. 0) THEN WRITE(6,160) 160 FORMAT(/,20X,'THE PERMUTATION MATRIX') I = 1 J = MIN(12,NSYM) 60 WRITE(6,170)(K,K=I,J) 170 FORMAT(/,/,5X,'OPER. NO. ',12I5) WRITE(6,175)(OPER(R(1,K)),K=I,J) 175 FORMAT(5X,'SYMM. OPER. ',12A5) WRITE(6,180) 180 FORMAT(5X,'ATOM NO.') DO 70 K = 1, NUMAT 70 WRITE(6,190)K,(IPO(K,L),L=I,J) 190 FORMAT(I10,5X,12I5) IF (J .LT. NSYM) THEN I = J+1 J = MIN(J+12,NSYM) GOTO 60 ENDIF ENDIF RETURN END CHARACTER*5 FUNCTION OPER(R) C IMPLICIT DOUBLE PRECISION (A-H,O-Z) CHARACTER OPR*5, NUM*10 DIMENSION R(9) C C OPR = ' ' NUM = '0123456789' TRACE = R(1) + R(5) + R(9) DET = R(1)*R(5)*R(9) + R(2)*R(6)*R(7) + R(3)*R(4)*R(8) + - R(1)*R(6)*R(8) - R(2)*R(4)*R(9) - R(3)*R(5)*R(7) TRACE = (TRACE - DET)/2.D0 IF (DET .GT. 0.D0) THEN OPR(1:1) = 'C' IF (TRACE .GT. 0.97D0) THEN OPR(1:1) = 'E' GOTO 20 ENDIF ELSE OPR(1:1) = 'S' IF (TRACE .GT. 0.97D0) THEN OPR(1:5) = 'Sigma' GOTO 20 ENDIF IF (TRACE .LT. -0.97D0) THEN OPR(1:5) = ' Inv ' GOTO 20 ENDIF ENDIF IF (TRACE .LT. -0.97D0) THEN OPR(2:2) = NUM(3:3) GOTO 20 ENDIF ANG = ACOS(TRACE) AFULL = ACOS(-1.0D0)*2.D0 DO 10 I = 3, 18 ANS = I*ANG/AFULL IF (ABS(ANS - NINT(ANS)) .LE. 2.5D-3) THEN IF(I .GE.10) THEN OPR(2:2) = NUM(2:2) OPR(3:3) = NUM(I-9:I-9) ELSE OPR(2:2) = NUM(I+1:I+1) ENDIF IF (NINT(ANS) .NE. 1) THEN OPR(4:5) = '* ' OPR(5:5) = NUM(NINT(ANS)+1:NINT(ANS)+1) ENDIF GOTO 20 ENDIF 10 CONTINUE OPR(2:5) = 'Unkn' C 20 OPER = OPR RETURN END mopac7-1.15/fortran/local.f0000644000175000017500000001275611053302063012467 00000000000000 SUBROUTINE LOCAL(C,MDIM,NOCC,EIG) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C(MDIM,MDIM), EIG(MAXORB) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT C********************************************************************** C C LOCALISATION SUBROUTINE C ON INPUT C C = EIGENVECTORS IN AN MDIM*MDIM MATRIX C NOCC = NUMBER OF FILLED LEVELS C NORBS = NUMBER OF ORBITALS C NUMAT = NUMBER OF ATOMS C NLAST = INTEGER ARRAY OF ATOM ORBITAL COUNTERS C NFIRST = INTEGER ARRAY OF ATOM ORBITAL COUNTERS C C SUBROUTINE MAXIMIZES (PSI)**4 C REFERENCE_ C A NEW RAPID METHOD FOR ORBITAL LOCALISATION, P.G. PERKINS AND C J.J.P. STEWART, J.C.S. FARADAY (II) 77, 000, (1981). C C MODIFIED AND CORRECTED TO AVOID SIGMA-PI ORBITAL MIXING BY C JUAN CARLOS PANIAGUA, UNIVERSITY OF BARCELONA, MAY 1983. C C********************************************************************** COMMON /SCRACH/ COLD(MAXORB,MAXORB),XDUMY(MAXPAR**2-MAXORB*MAXORB) DIMENSION EIG1(MAXORB),PSI1(MAXORB),PSI2(MAXORB), 1 CII(MAXORB), REFEIG(MAXORB),IEL(20) SAVE ELEMNT CHARACTER*2 ELEMNT(99) DATA ELEMNT/'H','HE', 1 'LI','BE','B','C','N','O','F','NE', 2 'NA','MG','AL','SI','P','S','CL','AR', 3 'K','CA','SC','TI','V','CR','MN','FE','CO','NI','CU', 4 'ZN','GA','GE','AS','SE','BR','KR', 5 'RB','SR','Y','ZR','NB','MO','TC','RU','RH','PD','AG', 6 'CD','IN','SN','SB','TE','I','XE', 7 'CS','BA','LA','CE','PR','ND','PM','SM','EU','GD','TB','DY', 8 'HO','ER','TM','YB','LU','HF','TA','W','RE','OS','IR','PT', 9 'AU','HG','TL','PB','BI','PO','AT','RN', 1 'FR','RA','AC','TH','PA','U','NP','PU','AM','CM','BK','CF','XX'/ NITER=100 EPS=1.0D-7 DO 10 I=1,NORBS REFEIG(I)=EIG(I) DO 10 J=1,NORBS 10 COLD(I,J)=C(I,J) ITER=0 20 CONTINUE SUM=0.D0 ITER=ITER+1 DO 80 I=1,NOCC DO 70 J=1,NOCC IF(J.EQ.I) GOTO 70 XIJJJ=0.0D0 XJIII=0.0D0 XIIII=0.0D0 XJJJJ=0.0D0 XIJIJ=0.0D0 XIIJJ=0.0D0 DO 30 K=1,NORBS PSI1(K)=C(K,I) 30 PSI2(K)=C(K,J) C NOW FOLLOWS THE RATE-DETERMINING STEP FOR THE CALCULATION DO 50 K1=1,NUMAT KL=NFIRST(K1) KU=NLAST(K1) DIJ=0.D0 DII=0.D0 DJJ=0.D0 C$DOIT ASIS DO 40 K=KL,KU DIJ=DIJ+PSI1(K)*PSI2(K) DII=DII+PSI1(K)*PSI1(K) DJJ=DJJ+PSI2(K)*PSI2(K) 40 CONTINUE XIJJJ=XIJJJ+DIJ*DJJ XJIII=XJIII+DIJ*DII XIIII=XIIII+DII*DII XJJJJ=XJJJJ+DJJ*DJJ XIJIJ=XIJIJ+DIJ*DIJ XIIJJ=XIIJJ+DII*DJJ 50 CONTINUE AIJ=XIJIJ-(XIIII+XJJJJ-2.0D0*XIIJJ)/4.0D0 BIJ=XJIII-XIJJJ CA=SQRT(AIJ*AIJ+BIJ*BIJ) SA=AIJ+CA IF(SA.LT.1.0D-14) GO TO 70 SUM=SUM+SA CA=-AIJ/CA CA=(1.0D0+SQRT((1.0D0+CA)/2.0D0))/2.0D0 IF((2.0D0*CA-1.0D0)*BIJ.LT.0.0D0)CA=1.0D0-CA SA=SQRT(1.0D0-CA) CA=SQRT(CA) DO 60 K=1,NORBS C(K,I)=CA*PSI1(K)+SA*PSI2(K) 60 C(K,J)=-SA*PSI1(K)+CA*PSI2(K) 70 CONTINUE 80 CONTINUE SUM1=0.D0 DO 100 I=1,NOCC DO 100 J=1,NUMAT IL=NFIRST(J) IU=NLAST(J) X=0.0D0 C$DOIT ASIS DO 90 K=IL,IU 90 X=X+C(K,I)**2 100 SUM1=SUM1+X*X IF(SUM.GT.EPS.AND.ITER.LT.NITER) GO TO 20 WRITE(6,110)ITER,SUM1 110 FORMAT(/10X,'NUMBER OF ITERATIONS =',I4/ 110X,'LOCALISATION VALUE =',F14.9,/) WRITE(6,120) 120 FORMAT(3X,'NUMBER OF CENTERS',14X,'(COMPOSITION OF ORBITALS)'//) DO 150 I=1,NOCC SUM=0.D0 DO 140 J=1,NOCC CO=0.D0 DO 130 K=1,NORBS 130 CO=CO+COLD(K,J)*C(K,I) 140 SUM=SUM+CO*CO*EIG(J) 150 EIG1(I)=SUM DO 180 I=1,NOCC X=100.D0 DO 160 J=I,NOCC IF (X.LT.EIG1(J)) GOTO 160 X=EIG1(J) I1=J 160 CONTINUE EIG(I)=EIG1(I1) X=EIG1(I1) EIG1(I1)=EIG1(I) EIG1(I)=X DO 170 J=1,NORBS X=C(J,I1) C(J,I1)=C(J,I) 170 C(J,I)=X 180 CONTINUE DO 250 I=1,NOCC X=0.D0 DO 200 K1=1,NUMAT KL=NFIRST(K1) KU=NLAST(K1) DII=0.D0 DO 190 K=KL,KU 190 DII=DII+C(K,I)**2 X=X+DII*DII 200 PSI1(K1)=DII*100.D0 X=1/X DO 220 II=1,NUMAT SUM=0.D0 DO 210 J=1,NUMAT IF(PSI1(J).LT.SUM) GOTO 210 SUM=PSI1(J) K=J 210 CONTINUE PSI1(K)=0.D0 CII(II)=SUM IEL(II)=K IF(SUM.LT.1.D0) GOTO 230 220 CONTINUE 230 CONTINUE II=II-1 WRITE(6,240)X,(ELEMNT(NAT(IEL(K))),IEL(K),CII(K),K=1,II) 240 FORMAT(F10.4,4(5(3X,A2,I3,F6.2),/10X)) 250 CONTINUE 260 FORMAT(//20X,20H LOCALIZED ORBITALS ,//) WRITE(6,260) CALL MATOUT(C,EIG,NOCC,NORBS,MDIM) 270 FORMAT(10F12.6) DO 280 I=1,NOCC EIG(I)=REFEIG(I) DO 280 J=1,NORBS 280 C(J,I)=COLD(J,I) RETURN END mopac7-1.15/fortran/locmin.f0000644000175000017500000001476011053302063012653 00000000000000 SUBROUTINE LOCMIN(M,X,N,P,SSQ,ALF,EFS,ITRAP,ESCF) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /NLLSQI/ NCOUNT COMMON /KEYWRD/ CONTRL COMMON /NUMCAL/ NUMCAL DIMENSION X(*), P(*), EFS(*) DIMENSION CONST(MAXPAR), XSTOR(MAXPAR), GSTOR(MAXPAR) DIMENSION PHI(3),VT(3) INTEGER LEFT,RIGHT,CENTER CHARACTER*241 KEYWRD, CONTRL SAVE XMAXM, SCALE, KEYWRD, EPS, DEBUG, TEE, YMAXST, XCRIT SAVE MXCNT2, IPRINT, CONST LOGICAL DEBUG, LOWER DATA CONST/MAXPAR*1.D0/ DATA ICALCN/0/ ************************************************************************ * * LOCMIN IS CALLED BY NLLSQ ONLY. IT IS A LINE-SEARCH PROCEDURE FOR * LOCATING A MINIMUM IN THE FUNCTION SPACE OF COMPFG. SEE NLLSQ * FOR MORE DETAILS * ************************************************************************ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL XMAXM=1.D9 SCALE=1.D0 KEYWRD=CONTRL C C THE ABOVE LINE IS TO TRY TO PREVENT OVERFLOW IN NLLSQ C EPS=1.D-5 DEBUG=(INDEX(KEYWRD,'LINMIN') .NE. 0) TEE=1.D-2 YMAXST=0.005D0 XCRIT=0.0002D0 MXCNT2=30 IPRINT=0 IF(DEBUG)IPRINT=-1 ENDIF XMAXM=1.D-11 DO 10 I=1,N 10 XMAXM=MAX(XMAXM,ABS(P(I))) XMINM=XMAXM*SCALE XMAXM=YMAXST/XMAXM/SCALE FIN = SSQ LOWER = .FALSE. T=ALF PHI(1) = SSQ VT(1) = 0.0D0 VT(2) = T/4.0D0 IF(VT(2).GT.XMAXM) VT(2)=XMAXM T = VT(2) DO 20 I=1,N 20 X(I) = X(I)+T*P(I)*CONST(I)*SCALE CALL COMPFG(X,.TRUE.,ESCF,.TRUE.,EFS,.TRUE.) PHI(2)=DOT(EFS,EFS,N) CALL EXCHNG(PHI(2),SQSTOR,ENERGY,ESTOR,X,XSTOR,T,ALFS,N) DO 30 I=1,M 30 GSTOR(I)=EFS(I) IF (PHI(1) .LE. PHI(2)) THEN VT(3) = -VT(2) LEFT = 3 CENTER = 1 RIGHT = 2 ELSE VT(3)=2.0D0*VT(2) LEFT = 1 CENTER = 2 RIGHT = 3 ENDIF TLAST = VT(3) T = TLAST-T DO 40 I=1,N 40 X(I) = X(I)+T*P(I)*CONST(I)*SCALE FLAST=PHI(2) CALL COMPFG(X,.TRUE.,ESCF,.TRUE.,EFS,.TRUE.) F=DOT(EFS,EFS,N) IF(F.LT.SQSTOR) CALL EXCHNG(F,SQSTOR,ENERGY,ESTOR,X, 1XSTOR,T,ALFS,N) DO 50 I=1,M 50 GSTOR(I)=EFS(I) IF(F.LT.FIN) LOWER = .TRUE. NCOUNT = NCOUNT+2 PHI(3) = F IF (IPRINT) 60,70,70 60 WRITE (6,310) VT(1),PHI(1),VT(2),PHI(2),VT(3),PHI(3) 70 MXCT=MXCNT2 DO 250 ICTR=3,MXCT XMAXM=XMAXM*3.D0 ALPHA = VT(2) - VT(3) BETA = VT(3) - VT(1) GAMMA = VT(1)-VT(2) IF(ALPHA.EQ.0.D0)ALPHA=1.D-20 IF(BETA.EQ.0.D0)BETA=1.D-20 IF(GAMMA.EQ.0.D0)GAMMA=1.D-20 ABG =-(PHI(1)*ALPHA+PHI(2)*BETA+PHI(3)*GAMMA)/ALPHA ABG=ABG/BETA ABG=ABG/GAMMA ALPHA=ABG BETA = ((PHI(1)-PHI(2))/GAMMA)-ALPHA*(VT(1)+VT(2)) IF (ALPHA) 80,80,110 80 IF (PHI(RIGHT) .GT. PHI(LEFT)) GO TO 90 T = 3.0D0*VT(RIGHT)-2.0D0*VT(CENTER) GO TO 100 90 T = 3.0D0*VT(LEFT)-2.0D0*VT(CENTER) 100 S=T-TLAST T=S+TLAST GO TO 150 110 T = -BETA/(2.0D0*ALPHA) S=T-TLAST IF (S) 120,260,130 120 AMDIS=VT(LEFT)-TLAST-XMAXM GO TO 140 130 AMDIS=VT(RIGHT)-TLAST+XMAXM 140 IF(ABS(S).GT.ABS(AMDIS)) S=AMDIS T=S+TLAST 150 CONTINUE IF(ICTR.GT.3.AND.ABS(S*XMINM).LT.XCRIT) THEN IF( DEBUG ) 1 WRITE(6,'('' EXIT DUE TO SMALL PROJECTED STEP'')') GO TO 260 ENDIF T=S+TLAST DO 160 I=1,N 160 X(I) = X(I)+S*P(I)*CONST(I)*SCALE FLAST=F CALL COMPFG(X,.TRUE.,ESCF,.TRUE.,EFS,.TRUE.) F=DOT(EFS,EFS,N) IF(F.LT.SQSTOR) CALL EXCHNG(F,SQSTOR,ENERGY,ESTOR,X,XSTOR, 1T,ALFS,N) DO 170 I=1,M 170 GSTOR(I)=EFS(I) IF(F.LT.FIN) LOWER = .TRUE. NCOUNT = NCOUNT+1 IF (IPRINT) 180,190,190 180 WRITE (6,320) VT(LEFT),PHI(LEFT),VT(CENTER),PHI(CENTER), 1 VT(RIGHT),PHI(RIGHT),T,F 190 CONTINUE C C TEST FOR EXCITED STATES AND POTHOLES C ITRAP=0 IF(ABS(VT(CENTER)).GT.1.D-10) GOTO 200 IF(ABS(T)/(ABS(VT(LEFT))+1.D-15).GT.0.3333) GOTO 200 IF(2.5D0*F-PHI(RIGHT)-PHI(LEFT).LT.0.5D0*PHI(CENTER)) GOTO 200 C C WE ARE STUCK ON A FALSE MINIMUM C ITRAP=1 GOTO 260 200 CONTINUE * * NOW FOR THE MAIN STOPPING TESTS. LOCMIN WILL STOP IF:- * THE ERROR FUNCTION HAS BEEN REDUCED, AND * THE RATE OF DROP OF THE ERROR FUNCTION IS LESS THAN 0.5% PER STEP * AND * (A) THE RATIO OF THE PROPOSED STEP TO THE TOTAL STEP IS LESS THAN * EPS, OR * (B) THE LAST DROP IN ERROR FUNCTION WAS LESS THAN 5%OFTHETOTALDROP * DURING THIS CALL TO LOCMIN. * IF(DEBUG)WRITE(6,'('' F/FLAST'',F13.6)')F/FLAST IF( LOWER .AND. F/FLAST .GT. 0.995D0) THEN IF((ABS(T-TLAST).LE.EPS*ABS(T+TLAST)+TEE)) THEN IF( DEBUG ) 1 WRITE(6,'('' EXIT AS STEP IS ABSOLUTELY SMALL '')') GO TO 260 ENDIF SUM=MIN(ABS(F-PHI(1)),ABS(F-PHI(2)),ABS(F-PHI(3))) SUM2=(FIN-SQSTOR)*0.05D0 IF(SUM .LT. SUM2) THEN IF( DEBUG ) 1 WRITE(6,'('' EXIT DUE TO HAVING REACHED BOTTOM'')') GOTO 260 ENDIF ENDIF TLAST = T IF ((T .GT. VT(RIGHT)) .OR. (T .GT. VT(CENTER) .AND. F .LT. 1 PHI(CENTER)) .OR. (T .GT. VT(LEFT) .AND. T .LT. VT(CENTER) .AND. 2 F .GT. PHI(CENTER))) GO TO 210 VT(RIGHT) = T PHI(RIGHT) = F GO TO 220 210 VT(LEFT) = T PHI(LEFT) = F 220 IF (VT(CENTER) .LT. VT(RIGHT)) GO TO 230 I = CENTER CENTER = RIGHT RIGHT = I 230 IF (VT(LEFT) .LT. VT(CENTER)) GO TO 240 I = LEFT LEFT = CENTER CENTER = I 240 IF (VT(CENTER) .LT. VT(RIGHT)) GO TO 250 I = CENTER CENTER = RIGHT RIGHT = I 250 CONTINUE 260 CONTINUE CALL EXCHNG(SQSTOR,F,ESTOR,ENERGY,XSTOR,X,ALFS,T,N) DO 270 I=1,M 270 EFS(I)=GSTOR(I) SSQ=(F) ALF=T IF (T) 280,300,300 280 T = -T DO 290 I=1,N 290 P(I) = -P(I) 300 CONTINUE ALF=T RETURN 310 FORMAT(' ---LOCMIN'/5X,'LEFT ...',2F19.6/5X,'CENTER ...', 1 2F19.6/5X,'RIGHT ...',2F19.6/' ') 320 FORMAT(5X,'LEFT ...',2F19.6/5X,'CENTER ...',2F19.6/5X, 1 'RIGHT ...',2F19.6/5X,'NEW ...',2F19.6/' ') END mopac7-1.15/fortran/timout.f0000644000175000017500000001016711053302064012711 00000000000000 SUBROUTINE TIMOUT(NOUT,TIM) C C CONVERT THE TIME FROM SECONDS TO DAYS, HOURS, MINUTES, AND SECONDS C IMPLICIT DOUBLE PRECISION (A-H,O-Z) C DOUBLE PRECISION MINS, MINPHR C C DATA HRSPD /24.0D0/, MINPHR /60.0D0/ DATA SECPD /86400.0D0/, SECPMI /60.0D0/ C DAYS = TIM / SECPD IDAYS = INT(DAYS) HOURS = (DAYS - FLOAT(IDAYS)) * HRSPD IHOURS = INT(HOURS) MINS = (HOURS - FLOAT(IHOURS)) * MINPHR IMINS = INT(MINS) SECS = (MINS - FLOAT(IMINS)) * SECPMI C IF (IDAYS .GT. 1) THEN WRITE (NOUT,10) IDAYS,IHOURS,IMINS,SECS ELSE IF (IDAYS .EQ. 1) THEN WRITE (NOUT,20) IDAYS,IHOURS,IMINS,SECS ELSE IF (IHOURS .GT. 0) THEN WRITE (NOUT,30) IHOURS,IMINS,SECS ELSE IF (IMINS .GT. 0) THEN WRITE (NOUT,40) IMINS,SECS ELSE WRITE (NOUT,50) SECS END IF C 10 FORMAT (10X,'COMPUTATION TIME = ',I2,1X,'DAYS',2X,I2,1X,'HOURS', 1 1X,I2,1X,'MINUTES AND',1X,F7.3,1X,'SECONDS') 20 FORMAT (10X,'COMPUTATION TIME = ',I2,1X,'DAY',2X,I2,1X,'HOURS', 1 1X,I2,1X,'MINUTES AND',1X,F7.3,1X,'SECONDS') 30 FORMAT (10X,'COMPUTATION TIME = ',I2,1X,'HOURS', 1 1X,I2,1X,'MINUTES AND',1X,F7.3,1X,'SECONDS') 40 FORMAT (10X,'COMPUTATION TIME = ',I2,1X,'MINUTES AND', 1 1X,F7.3,1X,'SECONDS') 50 FORMAT (10X,'COMPUTATION TIME = ',F7.3,1X,'SECONDS') END SUBROUTINE MPCPOP(C,ICOK) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C C This subroutine calculates the total Mulliken populations on the C atoms by summing the diagonal elements from the Mulliken C population analysis. C COMMON / MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /CORE/ CORE(107) DIMENSION C(MORB2),POP(NUMATM),CHRG(NUMATM) WRITE(16,'(I4,5X'' MULLIKEN POPULATION AND CHARGE'')',ERR=40)ICOK C C ICOK = 1 ==> PRINT POPULATIONS C ICOK = 0 ==> KEYWORD mulliken = .f. C NO POPULATION ANALYSIS PERFORMED C IF (ICOK.NE.0) THEN DO 20 I = 1,NUMAT IF = NFIRST(I) IL = NLAST(I) SUM = 0.0D0 POP(I) = 0.0D0 CHRG(I) = 0.0D0 DO 10 J = IF,IL C C Diagonal element of mulliken matrix C SUM = SUM + C((J*(J+1))/2) 10 CONTINUE K = NAT(I) C C Mulliken population for i'th atom C POP(I) = SUM CHRG(I) = CORE(K) - POP(I) 20 CONTINUE WRITE(6,'(///10X,''MULLIKEN POPULATIONS AND CHARGES'')') DO 30 J = 1,NUMAT WRITE(6,60) J, POP(J), CHRG(J) WRITE(16,70,ERR=40) POP(J), CHRG(J) 30 CONTINUE ENDIF RETURN 40 WRITE(6,'(A)') 'Error writing SYBYL Mulliken population output' RETURN 50 FORMAT(//,5X,'ATOM',8X,'POPULATION',6X,'CHARGE') 60 FORMAT(5X,I4,4X,F11.6,6X,F11.6) 70 FORMAT(2F12.6) END C C This subroutine writes out the optimized geometry and atomic charges C for a MOPAC run. C SUBROUTINE MPCSYB(NUMAT,COORD,CHR,ICOK,EIGS,NCLOSE,FUNCT 1 ,EIONIS,KCHRGE,DIP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COORD(3, NUMAT), CHR(NUMAT),EIGS(MAXORB) C Write out the charge flag and number of atoms WRITE(16,'(2I4)', ERR=30) ICOK,NUMAT C Write out the coordinates and charges DO 10 I=1, NUMAT WRITE(16,'(4F12.6)', ERR=30) (COORD(J, I), J=1, 3), CHR(I) 10 CONTINUE I1 = MAX(1,NCLOSE - 1) I2 = MIN(MAXORB,NCLOSE + 2) C C Write out the 2 highest and 2 lowest orbital energies C WRITE(16,20,ERR=30)(EIGS(J),J=I1,I2),NCLOSE 20 FORMAT(4F12.6,2X,I4,2X,'HOMOs,LUMOs,# of occupied MOs') C C Write out the Heat of Formation and Ionisation Potential C WRITE(16,'(2F12.6,4X,''HF and IP'')',ERR=30) FUNCT,EIONIS C C Write out the Dipole Moment C IF(KCHRGE.NE.0) DIP = 0.0D0 WRITE(16, '(I4,F10.3,'' Charge,Dipole Moment'')', ERR=30) 1KCHRGE, DIP RETURN 30 WRITE(6,'(A)') 'Error writing SYBYL MOPAC output' RETURN END mopac7-1.15/fortran/mullik.f0000644000175000017500000000774611053302064012676 00000000000000 SUBROUTINE MULLIK(C,H,F,NORBS,VECS,STORE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C(*), H(*), VECS(*), STORE(*), F(*) ********************************************************************** * * MULLIK DOES A MULLIKEN POPULATION ANALYSIS * ON INPUT C = SQUARE ARRAY OF EIGENVECTORS. * H = PACKED ARRAY OF ONE-ELECTRON MATRIX * F = WORKSTORE OF SIZE AT LEAST NORBS*NORBS * VECS = WORKSTORE OF SIZE AT LEAST NORBS*NORBS * STORE = WORKSTORE OF SIZE AT LEAST (NORBS*(NORBS+1))/2 * ********************************************************************** COMMON 1 /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 2 NLAST(NUMATM), NORBX, NELECS,NALPHA,NBETA, 3 NCLOSE,NOPEN,NDUMY,FRACT 4 /KEYWRD/ KEYWRD 5 /BETAS / BETAS(107),BETAP(107),BETAD(107) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /EXPONT/ ZS(107),ZP(107),ZD(107) CHARACTER KEYWRD*241, GETNAM*80 LOGICAL GRAPH ********************************************************************** * * FIRST, RE-CALCULATE THE OVERLAP MATRIX * ********************************************************************** DIMENSION EIGS(MAXORB), IFACT(MAXORB), XYZ(3,NUMATM) GRAPH=(INDEX(KEYWRD,'GRAPH').NE.0) DO 10 I=1,NORBS 10 IFACT(I)=(I*(I-1))/2 IFACT(NORBS+1)=(NORBS*(NORBS+1))/2 DO 50 I=1,NUMAT IF=NFIRST(I) IL=NLAST(I) IM1=I-1 BI=BETAS(NAT(I)) DO 50 K=IF,IL II=(K*(K-1))/2 DO 30 J=1,IM1 JF=NFIRST(J) JL=NLAST(J) BJ=BETAS(NAT(J)) DO 20 JJ=JF,JL IJ=II+JJ H(IJ)=2.D0*H(IJ)/(BI+BJ) +1.D-14 C THE +1.D-14 IS TO PREVENT POSSIBLE ERRORS IN THE DIAGONALIZATION. STORE(IJ)=H(IJ) 20 BJ=BETAP(NAT(J)) 30 CONTINUE DO 40 JJ=IF,K IJ=II+JJ STORE(IJ)=0.D0 40 H(IJ)=0.D0 50 BI=BETAP(NAT(I)) DO 60 I=1,NORBS STORE(IFACT(I+1))=1.D0 60 H(IFACT(I+1))=1.D0 CALL RSP(H,NORBS,NORBS,EIGS,VECS) DO 70 I=1,NORBS 70 EIGS(I)=1.D0/SQRT(ABS(EIGS(I))) IJ=0 DO 90 I=1,NORBS DO 90 J=1,I IJ=IJ+1 SUM=0.D0 DO 80 K=1,NORBS 80 SUM=SUM+VECS(I+(K-1)*NORBS)*EIGS(K) 1 *VECS(J+(K-1)*NORBS) F(I+(J-1)*NORBS)=SUM 90 F(J+(I-1)*NORBS)=SUM IF (GRAPH) THEN CALL GMETRY(GEO,XYZ) * * WRITE TO DISK THE FOLLOWING DATA FOR GRAPHICS CALCULATION, IN ORDER: * * NUMBER OF ATOMS, ORBITAL, ELECTRONS * ALL ATOMIC COORDINATES * ORBITAL COUNTERS * ORBITAL EXPONENTS, S, P, AND D, AND ATOMIC NUMBERS * EIGENVECTORS (M.O.S NOT RE-NORMALIZED) * INVERSE-SQUARE ROOT OF THE OVERLAP MATRIX. * OPEN(UNIT=13,FILE=GETNAM('FOR013'),FORM='UNFORMATTED', +STATUS='NEW',ERR=31) GOTO 32 31 OPEN(UNIT=13,FILE=GETNAM('FOR013'),STATUS='OLD', +FORM='UNFORMATTED') 32 CONTINUE WRITE(13)NUMAT,NORBS,NELECS,((XYZ(I,J),J=1,NUMAT),I=1,3) WRITE(13)(NLAST(I),NFIRST(I),I=1,NUMAT) WRITE(13)(ZS(NAT(I)),I=1,NUMAT),(ZP(NAT(I)),I=1,NUMAT), 1 (ZD(NAT(I)),I=1,NUMAT),(NAT(I),I=1,NUMAT) LINEAR=NORBS*NORBS WRITE(13)(C(I),I=1,LINEAR) WRITE(13)(F(I),I=1,LINEAR) IF(INDEX(KEYWRD,'MULLIK').EQ.0)RETURN ENDIF * * OTHERWISE PERFORM MULLIKEN ANALYSIS * CALL MULT(C,F,VECS,NORBS) I=-1 CALL DENSIT(VECS,NORBS,NORBS,NCLOSE,NOPEN,FRACT,C,2) LINEAR=(NORBS*(NORBS+1))/2 DO 100 I=1,LINEAR 100 C(I)=C(I)*STORE(I) SUMM=0.D0 DO 130 I=1,NORBS SUM=0 DO 110 J=1,I 110 SUM=SUM+C(IFACT(I)+J) DO 120 J=I+1,NORBS 120 SUM=SUM+C(IFACT(J)+I) SUMM=SUMM+SUM 130 C(IFACT(I+1))=SUM CALL VECPRT(C,NORBS) RETURN END mopac7-1.15/fortran/dtrti2.f0000644000175000017500000001025611053302064012577 00000000000000 SUBROUTINE DTRTI2( UPLO, DIAG, N, A, LDA, INFO ) * * -- LAPACK ROUTINE (VERSION 1.0B) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * FEBRUARY 29, 1992 * * .. SCALAR ARGUMENTS .. CHARACTER DIAG, UPLO INTEGER INFO, LDA, N * .. * .. ARRAY ARGUMENTS .. DOUBLE PRECISION A( LDA, * ) * .. * * PURPOSE * ======= * * DTRTI2 COMPUTES THE INVERSE OF A REAL UPPER OR LOWER TRIANGULAR * MATRIX. * * THIS IS THE LEVEL 2 BLAS VERSION OF THE ALGORITHM. * * ARGUMENTS * ========= * * UPLO (INPUT) CHARACTER*1 * SPECIFIES WHETHER THE MATRIX A IS UPPER OR LOWER TRIANGULAR. * = 'U': UPPER TRIANGULAR * = 'L': LOWER TRIANGULAR * * DIAG (INPUT) CHARACTER*1 * SPECIFIES WHETHER OR NOT THE MATRIX A IS UNIT TRIANGULAR. * = 'N': NON-UNIT TRIANGULAR * = 'U': UNIT TRIANGULAR * * N (INPUT) INTEGER * THE ORDER OF THE MATRIX A. N >= 0. * * A (INPUT/OUTPUT) DOUBLE PRECISION ARRAY, DIMENSION (LDA,N) * ON ENTRY, THE TRIANGULAR MATRIX A. IF UPLO = 'U', THE * LEADING N BY N UPPER TRIANGULAR PART OF THE ARRAY A CONTAINS * THE UPPER TRIANGULAR MATRIX, AND THE STRICTLY LOWER * TRIANGULAR PART OF A IS NOT REFERENCED. IF UPLO = 'L', THE * LEADING N BY N LOWER TRIANGULAR PART OF THE ARRAY A CONTAINS * THE LOWER TRIANGULAR MATRIX, AND THE STRICTLY UPPER * TRIANGULAR PART OF A IS NOT REFERENCED. IF DIAG = 'U', THE * DIAGONAL ELEMENTS OF A ARE ALSO NOT REFERENCED AND ARE * ASSUMED TO BE 1. * * ON EXIT, THE (TRIANGULAR) INVERSE OF THE ORIGINAL MATRIX, IN * THE SAME STORAGE FORMAT. * * LDA (INPUT) INTEGER * THE LEADING DIMENSION OF THE ARRAY A. LDA >= MAX(1,N). * * INFO (OUTPUT) INTEGER * = 0: SUCCESSFUL EXIT * < 0: IF INFO = -K, THE K-TH ARGUMENT HAD AN ILLEGAL VALUE * * ===================================================================== * * .. PARAMETERS .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. LOCAL SCALARS .. LOGICAL NOUNIT, UPPER INTEGER J DOUBLE PRECISION AJJ * .. * .. EXTERNAL FUNCTIONS .. LOGICAL LSAME EXTERNAL LSAME * .. * .. EXTERNAL SUBROUTINES .. EXTERNAL DSCAL, DTRMV, XERBLA * .. * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * INFO = 0 UPPER = LSAME( UPLO, 'U' ) NOUNIT = LSAME( DIAG, 'N' ) IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN INFO = -1 ELSE IF( .NOT.NOUNIT .AND. .NOT.LSAME( DIAG, 'U' ) ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DTRTI2', -INFO ) RETURN END IF * IF( UPPER ) THEN * * COMPUTE INVERSE OF UPPER TRIANGULAR MATRIX. * DO 10 J = 1, N IF( NOUNIT ) THEN A( J, J ) = ONE / A( J, J ) AJJ = -A( J, J ) ELSE AJJ = -ONE END IF * * COMPUTE ELEMENTS 1:J-1 OF J-TH COLUMN. * CALL DTRMV( 'UPPER', 'NO TRANSPOSE', DIAG, J-1, A, LDA, $ A( 1, J ), 1 ) CALL DSCAL( J-1, AJJ, A( 1, J ), 1 ) 10 CONTINUE ELSE * * COMPUTE INVERSE OF LOWER TRIANGULAR MATRIX. * DO 20 J = N, 1, -1 IF( NOUNIT ) THEN A( J, J ) = ONE / A( J, J ) AJJ = -A( J, J ) ELSE AJJ = -ONE END IF IF( J.LT.N ) THEN * * COMPUTE ELEMENTS J+1:N OF J-TH COLUMN. * CALL DTRMV( 'LOWER', 'NO TRANSPOSE', DIAG, N-J, $ A( J+1, J+1 ), LDA, A( J+1, J ), 1 ) CALL DSCAL( N-J, AJJ, A( J+1, J ), 1 ) END IF 20 CONTINUE END IF * RETURN * * END OF DTRTI2 * END mopac7-1.15/fortran/react1.f0000644000175000017500000003126711053302064012553 00000000000000 SUBROUTINE REACT1(ESCF) IMPLICIT DOUBLE PRECISION (A-H,O-Z) REAL PASTOR, PBSTOR INCLUDE 'SIZES' COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) DIMENSION GEOA(3,NUMATM), GEOVEC(3,NUMATM), 1 PASTOR(MPACK), 2 PBSTOR(MPACK), XOLD(MAXPAR), GROLD(MAXPAR) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM), NB(NUMATM), NC(NUMATM) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /ISTOPE/ AMS(107) COMMON /GRAVEC/ COSINE COMMON /KEYWRD/ KEYWRD COMMON /MESAGE/ IFLEPO,ISCF 1 /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 2 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 3 NCLOSE,NOPEN,NDUMY,FRACT COMMON /REACTN/ STEP, GEOA, GEOVEC,CALCST LOGICAL GRADNT, FINISH, XYZ, INT, GOK(2) SAVE GRADNT, FINISH, XYZ,INT, GOK ************************************************************************ * * REACT1 DETERMINES THE TRANSITION STATE OF A CHEMICAL REACTION. * * REACT WORKS BY USING TWO SYSTEMS SIMULTANEOUSLY, THE HEATS OF * FORMATION OF BOTH ARE CALCULATED, THEN THE MORE STABLE ONE * IS MOVED IN THE DIRECTION OF THE OTHER. AFTER A STEP THE * ENERGIES ARE COMPARED, AND THE NOW LOWER-ENERGY FORM IS MOVED * IN THE DIRECTION OF THE HIGHER-ENERGY FORM. THIS IS REPEATED * UNTIL THE SADDLE POINT IS REACHED. * * IF ONE FORM IS MOVED 3 TIMES IN SUCCESSION, THEN THE HIGHER ENERGY * FORM IS RE-OPTIMIZED WITHOUT SHORTENING THE DISTANCE BETWEEN THE TWO * FORMS. THIS REDUCES THE CHANCE OF BEING CAUGHT ON THE SIDE OF A * TRANSITION STATE. * ************************************************************************ DIMENSION IDUM1(NUMATM), IDUM2(NUMATM), XSTORE(MAXPAR), 1IDUM3(NUMATM), COORD(3,NUMATM), IROT(2,3) DIMENSION IDUMMY(3*NUMATM) SAVE IROT CHARACTER*241 KEYWRD EQUIVALENCE (IDUMMY,COORD) DATA IROT/1,2,1,3,2,3/ GOLD=0.D0 LINEAR=0 IFLAG=1 GOK(1)=.FALSE. GOK(2)=.FALSE. XYZ=(INDEX(KEYWRD,' XYZ') .NE. 0) GRADNT=(INDEX(KEYWRD,'GRAD') .NE. 0) I=(INDEX(KEYWRD,' BAR')) STEPMX=0.15D0 IF(I.NE.0) STEPMX=READA(KEYWRD,I) MAXSTP=1000 C C READ IN THE SECOND GEOMETRY. C IF(XYZ) THEN CALL GETGEO(5,LABELS,GEOA,LOC,NA,NB,NC,AMS,NATOMS,INT) ELSE CALL GETGEO(5,IDUM1,GEOA,IDUMMY, 1 IDUM1,IDUM2,IDUM3,AMS,NATOMS,INT) C C IF INTERNAL COORDINATES ARE TO BE USED, CHECK THE CONNECTIVITY C L=0 DO 10 I=1,NATOMS IF(IDUM1(I).NE.NA(I))THEN L=L+1 IF(L.EQ.1)WRITE(6,'(10X,''ERRORS DETECTED IN CONNECTIVITY 1'')') WRITE(6,'(A,I3,A,I3,A,I3,A)')' FOR ATOM',I,' THE BOND LAB 1ELS ARE DIFFERENT: ',IDUM1(I),' AND',NA(I) ENDIF IF(IDUM2(I).NE.NB(I))THEN L=L+1 IF(L.EQ.1)WRITE(6,'(10X,''ERRORS DETECTED IN CONNECTIVITY 1'')') WRITE(6,'(A,I3,A,I3,A,I3,A)')' FOR ATOM',I,' THE BOND ANG 1LE LABELS ARE DIFFERENT:',IDUM2(I),' AND',NB(I) ENDIF IF(IDUM3(I).NE.NC(I))THEN L=L+1 IF(L.EQ.1)WRITE(6,'(10X,''ERRORS DETECTED IN CONNECTIVITY 1'')') WRITE(6,'(A,I3,A,I3,A,I3,A)')' FOR ATOM',I,' THE DIHEDRAL 1 LABELS ARE DIFFERENT: ',IDUM3(I),' AND',NC(I) ENDIF 10 CONTINUE IF(L.NE.0)WRITE(6,'(10X,A)')' CORRECT BEFORE RESUBMISSION' IF(L.NE.0)STOP ENDIF TIME0= SECOND() C C SWAP FIRST AND SECOND GEOMETRIES AROUND C SO THAT GEOUT CAN OUTPUT DATA ON SECOND GEOMETRY. C NUMAT2=0 DO 20 I=1,NATOMS IF(LABELS(I).NE.99) NUMAT2=NUMAT2+1 X=GEOA(1,I) GEOA(1,I)=GEO(1,I) GEO(1,I)=X X=GEOA(2,I)*0.0174532925D0 GEOA(2,I)=GEO(2,I) GEO(2,I)=X X=GEOA(3,I)*0.0174532925D0 GEOA(3,I)=GEO(3,I) GEO(3,I)=X 20 CONTINUE IF(NUMAT2.NE.NUMAT) THEN WRITE(6,'(//10X,'' NUMBER OF ATOMS IN SECOND SYSTEM IS '', 1''INCORRECT'',/)') WRITE(6,'('' NUMBER OF ATOMS IN FIRST SYSTEM ='',I4)')NUMAT WRITE(6,'('' NUMBER OF ATOMS IN SECOND SYSTEM ='',I4)')NUMAT2 GOTO 280 ENDIF WRITE(6,'(//10X,'' GEOMETRY OF SECOND SYSTEM'',/)') IF(NDEP.NE.0) CALL SYMTRY CALL GEOUT(1) C C CONVERT TO CARTESIAN, IF NECESSARY C IF( XYZ )THEN CALL GMETRY(GEO,COORD) SUMX=0.D0 SUMY=0.D0 SUMZ=0.D0 DO 30 J=1,NUMAT SUMX=SUMX+COORD(1,J) SUMY=SUMY+COORD(2,J) 30 SUMZ=SUMZ+COORD(3,J) SUMX=SUMX/NUMAT SUMY=SUMY/NUMAT SUMZ=SUMZ/NUMAT DO 40 J=1,NUMAT GEO(1,J)=COORD(1,J)-SUMX GEO(2,J)=COORD(2,J)-SUMY 40 GEO(3,J)=COORD(3,J)-SUMZ WRITE(6,'(//,'' CARTESIAN GEOMETRY OF FIRST SYSTEM'',//)') WRITE(6,'(3F14.5)')((GEO(J,I),J=1,3),I=1,NUMAT) SUMX=0.D0 SUMY=0.D0 SUMZ=0.D0 DO 50 J=1,NUMAT SUMX=SUMX+GEOA(1,J) SUMY=SUMY+GEOA(2,J) 50 SUMZ=SUMZ+GEOA(3,J) SUM=0.D0 SUMX=SUMX/NUMAT SUMY=SUMY/NUMAT SUMZ=SUMZ/NUMAT DO 60 J=1,NUMAT GEOA(1,J)=GEOA(1,J)-SUMX GEOA(2,J)=GEOA(2,J)-SUMY GEOA(3,J)=GEOA(3,J)-SUMZ SUM=SUM+(GEO(1,J)-GEOA(1,J))**2 1 +(GEO(2,J)-GEOA(2,J))**2 2 +(GEO(3,J)-GEOA(3,J))**2 60 CONTINUE DO 110 L=3,1,-1 C C DOCKING IS DONE IN STEPS OF 16, 4, AND 1 DEGREES AT A TIME. C CA=COS(4.D0**(L-1)*0.01745329D0) SA=SQRT(ABS(1.D0-CA**2)) DO 100 J=1,3 IR=IROT(1,J) JR=IROT(2,J) DO 90 I=1,10 SUMM=0.D0 DO 70 K=1,NUMAT X = CA*GEOA(IR,K)+SA*GEOA(JR,K) GEOA(JR,K)=-SA*GEOA(IR,K)+CA*GEOA(JR,K) GEOA(IR,K)=X SUMM=SUMM+(GEO(1,K)-GEOA(1,K))**2 1 +(GEO(2,K)-GEOA(2,K))**2 2 +(GEO(3,K)-GEOA(3,K))**2 70 CONTINUE IF(SUMM.GT.SUM) THEN IF(I.GT.1)THEN SA=-SA DO 80 K=1,NUMAT X = CA*GEOA(IR,K)+SA*GEOA(JR,K) GEOA(JR,K)=-SA*GEOA(IR,K)+CA*GEOA(JR,K) GEOA(IR,K)=X 80 CONTINUE GOTO 100 ENDIF SA=-SA ENDIF 90 SUM=SUMM 100 CONTINUE 110 CONTINUE WRITE(6,'(//,'' CARTESIAN GEOMETRY OF SECOND SYSTEM'',//)') WRITE(6,'(3F14.5)')((GEOA(J,I),J=1,3),I=1,NUMAT) WRITE(6,'(//,'' "DISTANCE":'',F13.6)')SUM WRITE(6,'(//,'' REACTION COORDINATE VECTOR'',//)') WRITE(6,'(3F14.5)')((GEOA(J,I)-GEO(J,I),J=1,3),I=1,NUMAT) NA(1)=99 J=0 NVAR=0 DO 130 I=1,NATOMS IF(LABELS(I).NE.99)THEN J=J+1 DO 120 K=1,3 NVAR=NVAR+1 LOC(2,NVAR)=K 120 LOC(1,NVAR)=J LABELS(J)=LABELS(I) ENDIF 130 CONTINUE NATOMS=NUMAT ENDIF C C XPARAM HOLDS THE VARIABLE PARAMETERS FOR GEOMETRY IN GEO C XOLD HOLDS THE VARIABLE PARAMETERS FOR GEOMETRY IN GEOA C IF(NVAR.EQ.0)THEN WRITE(6,'(///10X,''THERE ARE NO VARIABLES IN THE SADDLE'', 1'' CALCULATION!'')') STOP ENDIF SUM=0.D0 DO 140 I=1,NVAR GROLD(I)=1.D0 XPARAM(I)=GEO(LOC(2,I),LOC(1,I)) XOLD(I)=GEOA(LOC(2,I),LOC(1,I)) 140 SUM=SUM+(XPARAM(I)-XOLD(I))**2 STEP0=SQRT(SUM) IF(STEP0.LT.1.D-5)THEN WRITE(6,'(//,3(5X,A,/))')' BOTH GEOMETRIES ARE IDENTICAL', 1' A SADDLE CALCULATION INVOLVES A REACTANT AND A PRODUCT', 2' THESE MUST BE DIFFERENT GEOMETRIES' STOP ENDIF ONE=1.D0 DELL=0.1D0 EOLD=-2000.D0 TIME1=SECOND() SWAP=0 DO 240 ILOOP=1,MAXSTP WRITE(6,'('' '',40(''*+''))') C C THIS METHOD OF CALCULATING 'STEP' IS QUITE ARBITARY, AND NEEDS C TO BE IMPROVED BY INTELLIGENT GUESSWORK! C IF (GNORM.LT.1.D-3)GNORM=1.D-3 STEP=MIN(SWAP,0.5D0, 6.D0/GNORM, DELL,STEPMX*STEP0+0.005D0) STEP=MIN(0.2D0,STEP/STEP0)*STEP0 SWAP=SWAP+1.D0 DELL=DELL+0.1D0 WRITE(6,'('' BAR SHORTENED BY'',F12.7,'' PERCENT'')') 1STEP/STEP0*100.D0 STEP0=STEP0-STEP IF(STEP0.LT.0.01D0) GOTO 250 STEP=STEP0 DO 150 I=1,NVAR 150 XSTORE(I)=XPARAM(I) CALL FLEPO(XPARAM, NVAR, ESCF) IF(LINEAR.EQ.0)THEN LINEAR=(NORBS*(NORBS+1))/2 DO 160 I=1,LINEAR PASTOR(I)=PA(I) 160 PBSTOR(I)=PB(I) ENDIF DO 170 I=1,NVAR 170 XPARAM(I)=GEO(LOC(2,I),LOC(1,I)) IF(IFLAG.EQ.1)THEN WRITE(6,'(//10X,''FOR POINT'',I3,'' SECOND STRUCTURE'')')ILO 1OP ELSE WRITE(6,'(//10X,''FOR POINT'',I3,'' FIRST STRUCTURE'')')ILO 1OP ENDIF WRITE(6,'('' DISTANCE A - B '',F12.6)')STEP C C NOW TO CALCULATE THE "CORRECT" GRADIENTS, SWITCH OFF 'STEP'. C STEP=0.D0 DO 180 I=1,NVAR 180 GRAD(I)=GROLD(I) CALL COMPFG (XPARAM, .TRUE., FUNCT1,.TRUE.,GRAD,.TRUE.) DO 190 I=1,NVAR 190 GROLD(I)=GRAD(I) IF (GRADNT) THEN WRITE(6,'('' ACTUAL GRADIENTS OF THIS POINT'')') WRITE(6,'(8F10.4)')(GRAD(I),I=1,NVAR) ENDIF WRITE(6,'('' HEAT '',F12.6)')FUNCT1 GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) WRITE(6,'('' GRADIENT NORM '',F12.6)')GNORM COSINE=COSINE*ONE WRITE(6,'('' DIRECTION COSINE'',F12.6)')COSINE CALL GEOUT(6) IF(SWAP.GT.2.9D0 .OR. ILOOP .GT. 3 .AND. COSINE .LT. 0.D0 1 .OR. ESCF .GT. EOLD) 2 THEN IF(SWAP.GT.2.9D0)THEN SWAP=0.D0 ELSE SWAP=0.5D0 ENDIF C C SWAP REACTANT AND PRODUCT AROUND C FINISH=(GOK(1).AND.GOK(2) .AND. COSINE .LT. 0.D0) IF(FINISH) THEN WRITE(6,'(//10X,'' BOTH SYSTEMS ARE ON THE SAME SIDE OF T 1HE '',''TRANSITION STATE -'',/10X,'' GEOMETRIES OF THE SYSTEMS'', 2'' ON EACH SIDE OF THE T.S. ARE AS FOLLOWS'')') DO 200 I=1,NVAR 200 XPARAM(I)=XSTORE(I) CALL COMPFG (XPARAM, .TRUE., FUNCT1,.TRUE.,GRAD,.TRUE.) WRITE(6,'(//10X,'' GEOMETRY ON ONE SIDE OF THE TRANSITION 1'','' STATE'')') CALL WRITMO(TIME0,FUNCT1) ENDIF TIME2=SECOND() WRITE(6,'('' TIME='',F9.2)')TIME2-TIME1 TIME1=TIME2 WRITE(6,'('' REACTANTS AND PRODUCTS SWAPPED AROUND'')') IFLAG=1-IFLAG ONE=-1.D0 EOLD=ESCF SUM=GOLD GOLD=GNORM I=1.7D0+ONE*0.5D0 IF(GNORM.GT.10.D0)GOK(I)=.TRUE. GNORM=SUM DO 210 I=1,NATOMS DO 210 J=1,3 X=GEO(J,I) GEO(J,I)=GEOA(J,I) 210 GEOA(J,I)=X DO 220 I=1,NVAR X=XOLD(I) XOLD(I)=XPARAM(I) 220 XPARAM(I)=X C C C SWAP AROUND THE DENSITY MATRICES. C DO 230 I=1,LINEAR X=PASTOR(I) PASTOR(I)=PA(I) PA(I)=X X=PBSTOR(I) PBSTOR(I)=PB(I) PB(I)=X P(I)=PA(I)+PB(I) 230 CONTINUE IF(FINISH) GOTO 250 ELSE ONE=1.D0 ENDIF 240 CONTINUE 250 CONTINUE WRITE(6,'('' AT END OF REACTION'')') GOLD=SQRT(DOT(GRAD,GRAD,NVAR)) CALL COMPFG (XPARAM, .TRUE., FUNCT1,.TRUE.,GRAD,.TRUE.) GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) DO 260 I=1,NVAR 260 GROLD(I)=XPARAM(I) CALL WRITMO(TIME0,FUNCT1) * * THE GEOMETRIES HAVE (A) BEEN OPTIMIZED CORRECTLY, OR * (B) BOTH ENDED UP ON THE SAME SIDE OF THE T.S. * * TRANSITION STATE LIES BETWEEN THE TWO GEOMETRIES * C1=GOLD/(GOLD+GNORM) C2=1.D0-C1 WRITE(6,'('' BEST ESTIMATE GEOMETRY OF THE TRANSITION STATE'')') WRITE(6,'(//10X,'' C1='',F8.3,''C2='',F8.3)')C1,C2 DO 270 I=1,NVAR 270 XPARAM(I)=C1*GROLD(I)+C2*XOLD(I) STEP=0.D0 CALL COMPFG (XPARAM, .TRUE., FUNCT1,.TRUE.,GRAD,.TRUE.) CALL WRITMO(TIME0,FUNCT1) 280 RETURN END mopac7-1.15/fortran/iter.f0000644000175000017500000010066711053302063012337 00000000000000 SUBROUTINE ITER (H, W, WJ, WK, EE, FULSCF,RAND) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DOUBLE PRECISION MECI DIMENSION H(*), W(*), WJ(*), WK(*) COMMON /FOKMAT/ F(MPACK), FB(MPACK) COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /VECTOR/ C(MORB2),EIGS(MAXORB),CBETA(MORB2),EIGB(MAXORB) COMMON /GRADNT/ DUMY(MAXPAR),GNORM COMMON /LAST / LAST COMMON /MESAGE/ IFLEPO,IITER COMMON /ATHEAT/ ATHEAT COMMON /ENUCLR/ ENUCLR COMMON /CITERM/ XI,XJ,XK COMMON /PATH / LATOM,LPARAM,REACT(200) COMMON /NUMCAL/ NUMCAL COMMON /SCFTYP/ EMIN, LIMSCF C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** LOGICAL FULSCF, RAND, LIMSCF DOUBLE PRECISION WJ, WK C*********************************************************************** C C ITER GENERATES A SCF FIELD AND RETURNS THE ENERGY IN "ENERGY" C C THE MAIN ARRAYS USED IN ITER ARE: C P ONLY EVER CONTAINS THE TOTAL DENSITY MATRIX C PA ONLY EVER CONTAINS THE ALPHA DENSITY MATRIX C PB ONLY EVER CONTAINS THE BETA DENSITY MATRIX C C ONLY EVER CONTAINS THE EIGENVECTORS C H ONLY EVER CONTAINS THE ONE-ELECTRON MATRIX C F STARTS OFF CONTAINING THE ONE-ELECTRON MATRIX, C AND IS USED TO HOLD THE FOCK MATRIX C W ONLY EVER CONTAINS THE TWO-ELECTRON MATRIX C C THE MAIN INTEGERS CONSTANTS IN ITER ARE: C C LINEAR SIZE OF PACKED TRIANGLE = NORBS*(NORBS+1)/2 C C THE MAIN INTEGER VARIABLES ARE C NITER NUMBER OF ITERATIONS EXECUTED C C PRINCIPAL REFERENCES: C C ON MNDO: "GROUND STATES OF MOLECULES. 38. THE MNDO METHOD. C APPROXIMATIONS AND PARAMETERS." C DEWAR, M.J.S., THIEL,W., J. AM. CHEM. SOC.,99,4899,(1977). C ON SHIFT: "THE DYNAMIC 'LEVEL SHIFT' METHOD FOR IMPROVING THE C CONVERGENCE OF THE SCF PROCEDURE", A. V. MITIN, J. COMP. C CHEM. 9, 107-110 (1988) C ON HALF-ELECTRON: "MINDO/3 COMPARISON OF THE GENERALIZED S.C.F. C COUPLING OPERATOR AND "HALF-ELECTRON" METHODS FOR C CALCULATING THE ENERGIES AND GEOMETRIES OF OPEN SHELL C SYSTEMS" C DEWAR, M.J.S., OLIVELLA, S., J. CHEM. SOC. FARA. II, C 75,829,(1979). C ON PULAY'S CONVERGER: "CONVERGANCE ACCELERATION OF ITERATIVE C SEQUENCES. THE CASE OF SCF ITERATION", PULAY, P., C CHEM. PHYS. LETT, 73, 393, (1980). C ON CNVG: IT ENCORPORATES THE IMPROVED ITERATION SCHEME (IIS) BY C PIOTR BADZIAG & FRITZ SOLMS. ACCEPTED FOR PUBLISHING C IN COMPUTERS & CHEMISTRY C ON PSEUDODIAGONALISATION: "FAST SEMIEMPIRICAL CALCULATIONS", C STEWART. J.J.P., CSASZAR, P., PULAY, P., J. COMP. CHEM., C 3, 227, (1982) C C*********************************************************************** DIMENSION POLD(MPACK), POLD2(MPACK), POLD3(MAXORB+400) DIMENSION PBOLD(MPACK), PBOLD2(MPACK), PBOLD3(MAXORB+400) ************************************************************************ * * * PACK ALL THE ARRAYS USED BY PULAY INTO A COMMON BLOCK SO THAT THEY * * CAN BE USED BY THE C.I. DERIVATIVE, IF NEEDED * * * ************************************************************************ COMMON /WORK3/POLD,POLD2,PBOLD,PBOLD2 COMMON /WORK1/ AR1,AR2,AR3,AR4,BR1,BR2,BR3,BR4 DIMENSION AR1(2*NPULAY), AR2(2*NPULAY), AR3(2*NPULAY), 1 AR4(2*NPULAY) DIMENSION BR1(2*NPULAY), BR2(2*NPULAY), BR3(2*NPULAY), 1 BR4(7*NPULAY) DIMENSION ESCF0(10) COMMON /PRECI / SELCON COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS, 2 NALPHA, NBETA, NCLOSE, NOPEN, NDUMY, FRACT 3 /MOLORB/ DUMMY(MAXORB),PDIAG(MAXORB) 4 /KEYWRD/ KEYWRD 5 /NUMSCF/ NSCF SAVE ICALCN, DEBUG, PRTFOK, PRTEIG, PRTDEN, PRT1EL, ABPRT SAVE LINEAR, MINPRT, NEWDG, SCFCRT, PRTPL, PRTVEC, PL SAVE BSHIFT, PLTEST, ITRMAX, NA2EL, NA1EL, NB2EL,NB1EL SAVE IFILL, CAMKIN, CI, OKPULY, UHF, SCF1, OKNEWD, TIMES SAVE FORCE, ALLCON, TRANS, HALFE, W1, W2, RANDOM CHARACTER KEYWRD*241, ABPRT(3)*5, GETNAM*80 LOGICAL PRTFOK,PRTEIG,PRTDEN, DEBUG, TIMES, CI 1,UHF, NEWDG, SCF1, HALFE, FORCE, PRT1EL,PRTPL, OKNEWD 2,MINPRT, FRST, BFRST, OKPULY, READY, PRTVEC, 3CAMKIN, ALLCON, MAKEA, MAKEB, INCITR, CAPPS, TIMITR DATA ICALCN/0/, DEBUG/.FALSE./, PRTFOK/.FALSE./ DATA PRTEIG/.FALSE./,PRTDEN/.FALSE./ DATA PRT1EL/.FALSE./ DATA ABPRT/' ','ALPHA',' BETA'/ C C INITIALIZE C IFILL=0 IHOMO=MAX(1,NCLOSE+NALPHA) IHOMOB=MAX(1,NCLOSE+NBETA) EOLD=1.D2 READY=.FALSE. IF (ICALCN.NE.NUMCAL) THEN CALL EPSETA(EPS,ETA) C C ULTIMATE SCF CRITERION: HEAT OF FORMATION CONVERGED WITHIN A FACTOR C OF 10 OF THE LIMITING PRECISION OF THE COMPUTER C EPS=23.061D0*EPS*10.D0 IRRR=5 SHIFT=0.D0 ICALCN=NUMCAL SHFMAX=20.D0 LINEAR=(NORBS*(NORBS+1))/2 C C DEBUG KEY-WORDS WORKED OUT C DEBUG=( INDEX(KEYWRD,'DEBUG') .NE. 0 ) MINPRT=(INDEX(KEYWRD,'SADDLE')+ 1 LATOM .EQ.0 .OR. DEBUG) PRTEIG=( INDEX(KEYWRD,'EIGS') .NE. 0 ) PRTPL =( INDEX(KEYWRD,' PL ') .NE.0 ) PRT1EL=( INDEX(KEYWRD,'1ELE') .NE.0 .AND. DEBUG) PRTDEN=( INDEX(KEYWRD,' DENS').NE.0 .AND. DEBUG) PRTFOK=( INDEX(KEYWRD,'FOCK') .NE. 0 .AND. DEBUG) PRTVEC=( INDEX(KEYWRD,'VECT') .NE. 0 .AND. DEBUG) DEBUG=( INDEX(KEYWRD,'ITER') .NE. 0 ) C C INITIALIZE SOME LOGICALS AND CONSTANTS C NEWDG =.FALSE. PLCHEK=0.005D0 PL =1.D0 BSHIFT=0.D0 SHIFT=1.D0 * * SCFCRT IS MACHINE-PRECISION DEPENDENT * SCFCRT=1.D-4 ITRMAX = 200 NA2EL=NCLOSE NA1EL=NALPHA+NOPEN NB2EL=0 NB1EL=NBETA+NOPEN C C USE KEY-WORDS TO ASSIGN VARIOUS CONSTANTS C IF(INDEX(KEYWRD,'FILL').NE.0) 1 IFILL=-READA(KEYWRD,INDEX(KEYWRD,'FILL')) IF(INDEX(KEYWRD,'SHIFT').NE.0) 1 BSHIFT=-READA(KEYWRD,INDEX(KEYWRD,'SHIFT')) IF(BSHIFT.NE.0)TEN=BSHIFT IF(INDEX(KEYWRD,'ITRY').NE.0) 1 ITRMAX=READA(KEYWRD,INDEX(KEYWRD,'ITRY')) CAMKIN=(INDEX(KEYWRD,'KING')+INDEX(KEYWRD,'CAMP') .NE. 0) CI=(INDEX(KEYWRD,'MICROS')+INDEX(KEYWRD,'C.I.') .NE. 0) OKPULY=.FALSE. OKPULY=(INDEX(KEYWRD,'PULAY').NE.0) UHF=(INDEX(KEYWRD,'UHF') .NE. 0) SCF1=(INDEX(KEYWRD,'1SCF') .NE. 0) OKNEWD=ABS(BSHIFT) .LT. 0.001D0 IF(CAMKIN.AND.ABS(BSHIFT).GT.1.D-5) BSHIFT=4.44D0 TIMES=(INDEX(KEYWRD,'TIMES') .NE. 0) TIMITR=(TIMES.AND.DEBUG) FORCE=(INDEX(KEYWRD,'FORCE') .NE. 0) ALLCON=(OKPULY.OR.CAMKIN) C C DO WE NEED A CAPPED ATOM CORRECTION? C J=0 DO 10 I=1,NUMAT 10 IF(NAT(I).EQ.102)J=J+1 CAPPS=(J.GT.0) IITER=1 TRANS=0.1D0 IF(INDEX(KEYWRD,'RESTART')+INDEX(KEYWRD,'OLDENS') 1 .NE. 0) THEN IF(INDEX(KEYWRD,'OLDENS').NE.0) 1 OPEN(UNIT=10,FILE=GETNAM('FOR010'), + STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 10 READ(10)(PA(I),I=1,LINEAR) IF( UHF) THEN READ(10)(PB(I),I=1,LINEAR) DO 20 I=1,LINEAR POLD(I)=PA(I) PBOLD(I)=PB(I) 20 P(I)=PA(I)+PB(I) ELSE DO 30 I=1,LINEAR PB(I)=PA(I) PBOLD(I)=PA(I) POLD(I)=PA(I) 30 P(I)=PA(I)*2.D0 ENDIF ELSE NSCF=0 DO 40 I=1,LINEAR P(I)=0.D0 PA(I)=0.D0 40 PB(I)=0.D0 W1=NA1EL/(NA1EL+1.D-6+NB1EL) W2=1.D0-W1 IF(W1.LT.1.D-6)W1=0.5D0 IF(W2.LT.1.D-6)W2=0.5D0 C C SLIGHTLY PERTURB THE DENSITY MATRIX IN CASE THE SYSTEM IS C TRAPPED IN A S**2 = 0 STATE. C RANDOM=1.0D0 IF(UHF.AND.NA1EL.EQ.NB1EL) RANDOM=1.1D0 DO 50 I=1,NORBS J=(I*(I+1))/2 P(J)=PDIAG(I) PA(J)=P(J)*W1*RANDOM RANDOM=1.D0/RANDOM 50 PB(J)=P(J)*W2*RANDOM DO 60 I=1,LINEAR PBOLD(I)=PB(I) 60 POLD(I)=PA(I) ENDIF HALFE=(NOPEN .NE. NCLOSE.AND.FRACT.NE.2.D0.AND.FRACT.NE.0.D0) C C DETERMINE THE SELF-CONSISTENCY CRITERION C IF(INDEX(KEYWRD,'PREC') .NE. 0) 1 SCFCRT=SCFCRT*0.01D0 IF( INDEX(KEYWRD,'POLAR') + INDEX(KEYWRD,'NLLSQ') + 1 INDEX(KEYWRD,'SIGMA') .NE. 0) SCFCRT=SCFCRT*0.001D0 IF(FORCE) SCFCRT=SCFCRT*0.0001D0 IF(NOPEN-NCLOSE.GT.4) SCFCRT=SCFCRT*0.1D0 SCFCRT=MAX(SCFCRT,1.D-12) IF(INDEX(KEYWRD,'POLAR').NE.0)SCFCRT=1.D-11 C C THE USER CAN STATE THE SCF CRITERION, IF DESIRED. C I=INDEX(KEYWRD,'SCFCRT') IF(I.NE.0) THEN SCFCRT=READA(KEYWRD,I) WRITE(6,'('' SCF CRITERION ='',G14.4)')SCFCRT IF(SCFCRT.LT.1.D-12) 1 WRITE(6,'(//2X,'' THERE IS A RISK OF INFINITE LOOPING WITH'', 2'' THE SCFCRT LESS THAN 1.D-12'')') ELSE IF(DEBUG)WRITE(6,'('' SCF CRITERION ='',G14.4)')SCFCRT ENDIF IF(.NOT.SCF1)LAST=0 C C END OF INITIALIZATION SECTION. C ELSEIF(FORCE.AND.NSCF.GT.0.AND..NOT.UHF)THEN C C RESET THE DENSITY MATRIX IF MECI HAS FORMED AN EXCITED STATE. THIS C PREVENTS THE SCF GETTING TRAPPED ON AN EXCITED STATE, PARTICULARLY C IF THE PULAY CONVERGER IS USED. C DO 70 I=1,LINEAR 70 P(I)=2.D0*PA(I) ENDIF C C INITIALIZATION OPERATIONS DONE EVERY TIME ITER IS CALLED C MAKEA=.TRUE. MAKEB=.TRUE. IEMIN=0 IEMAX=0 C C TURN OFF SHIFT IF NOT A FULL SCF. C IF(.NOT.FULSCF) SHIFT=0.D0 IF(NEWDG) NEWDG=(ABS(BSHIFT).LT.0.001D0) IF(LAST.EQ.1) NEWDG=.FALSE. C C SELF-CONSISTENCY CRITERIA: SELCON IS IN KCAL/MOL, PLTEST IS C A LESS IMPORTANT TEST TO MAKE SURE THAT THE SELCON TEST IS NOT C PASSED 'BY ACCIDENT' C IF GNORM IS LARGE, MAKE SELCON BIGGER C SELCON=SCFCRT IF(.NOT. FORCE .AND. .NOT. HALFE) THEN IF(GNORM.GT.5.D0) SELCON=SCFCRT*GNORM*0.2D0 IF(GNORM.GT.200.D0) SELCON=SCFCRT*40.D0 ENDIF PLTEST=0.05D0*SQRT(SELCON) C C SOMETIMES HEAT GOES SCF BUT DENSITY IS STILL FLUCTUATING IN UHF C IN WHICH CASE PAY LESS ATTENTION TO DENSITY MATRIX C IF(NALPHA.NE.NBETA.AND.UHF)PLTEST=0.001D0 IF(DEBUG)THEN WRITE(6,'('' SELCON, PLTEST'',3G16.7)')SELCON, PLTEST ENDIF IF(PRT1EL) THEN WRITE(6,'(//10X,''ONE-ELECTRON MATRIX AT ENTRANCE TO ITER'')') CALL VECPRT(H,NORBS) ENDIF IREDY=1 80 NITER=0 FRST=.TRUE. IF(CAMKIN) THEN MODEA=1 MODEB=1 ELSE MODEA=0 MODEB=0 ENDIF BFRST=.TRUE. ********************************************************************** * * * * * START THE SCF LOOP HERE * * * * * ********************************************************************** INCITR=.TRUE. 90 INCITR=(MODEA.NE.3.AND.MODEB.NE.3) IF(INCITR)NITER=NITER+1 IF(TIMITR)THEN TITER=SECOND() WRITE(6,*) WRITE(6,'(A,F7.2)')' TIME FOR ITERATION:', TITER-TITER0 TITER0=TITER ENDIF IF(NITER.GT.ITRMAX-10.AND..NOT.ALLCON) THEN ************************************************************************ * * * SWITCH ON ALL CONVERGERS * * * ************************************************************************ WRITE(6,'(//,'' ALL CONVERGERS ARE NOW FORCED ON'',/ 1 '' SHIFT=10, PULAY ON, CAMP-KING ON'',/ 2 '' AND ITERATION COUNTER RESET'',//)') ALLCON=.TRUE. BSHIFT=4.44D0 IREDY=-4 EOLD=100.D0 OKPULY=.TRUE. NEWDG=.FALSE. CAMKIN=(.NOT.HALFE) GOTO 80 ENDIF ************************************************************************ * * * MAKE THE ALPHA FOCK MATRIX * * * ************************************************************************ IF(ABS(SHIFT).GT.1.D-10.AND.BSHIFT .NE. 0.D0) THEN L=0 IF(NITER.GT.1)THEN IF(NEWDG.AND..NOT.(HALFE.OR.CAMKIN))THEN C C SHIFT WILL APPLY TO THE VIRTUAL ENERGY LEVELS USED IN THE C PSEUDODIAGONALIIZATION. IF DIFF IS -VE, GOOD, THEN LOWER THE C HOMO-LUMO GAP BY 0.1EV, OTHERWISE INCREASE IT. IF(DIFF.GT.0)THEN SHIFT=1.D0 C C IF THE PSEUDODIAGONALIZATION APPROXIMATION -- THAT THE WAVEFUNCTION C IS ALMOST STABLE -- IS INVALID, TURN OFF NEWDG IF(DIFF.GT.1)NEWDG=.FALSE. ELSE SHIFT=-0.1D0 ENDIF ELSE SHIFT=TEN+EIGS(IHOMO+1)-EIGS(IHOMO)+SHIFT ENDIF IF(DIFF.GT.0.D0) THEN IF(SHIFT.GT.4.D0)SHFMAX=4.5D0 IF(SHIFT.GT.SHFMAX)SHFMAX=MAX(SHFMAX-0.5D0,0.D0) ENDIF C C IF SYSTEM GOES UNSTABLE, LIMIT SHIFT TO THE RANGE -INFINITY - SHFMAX C BUT IF SYSTEM IS STABLE, LIMIT SHIFT TO THE RANGE -INFINITY - +20 C SHIFT=MAX(-20.D0,MIN(SHFMAX,SHIFT)) IF(ABS(SHIFT-SHFMAX).LT.1.D-5)SHFMAX=SHFMAX+0.01D0 C C THE CAMP-KING AND PULAY CONVERGES NEED A CONSTANT SHIFT. C IF THE SHIFT IS ALLOWED TO VARY, THESE CONVERGERS WILL NOT C WORK PROPERLY. C IF(OKPULY.OR.ABS(BSHIFT-4.44D0).LT.1.D-5)THEN SHIFT=-8.D0 IF(NEWDG) SHIFT=0 ENDIF IF(UHF)THEN IF(NEWDG.AND..NOT.(HALFE.OR.CAMKIN))THEN SHIFTB=TEN-TENOLD ELSE SHIFTB=TEN+EIGS(IHOMOB+1)-EIGS(IHOMOB)+SHIFTB ENDIF IF(DIFF.GT.0.D0)SHIFTB=MIN(4.D0,SHIFTB) SHIFTB=MAX(-20.D0,MIN(SHFMAX,SHIFTB)) IF(OKPULY.OR.ABS(BSHIFT-4.44D0).LT.1.D-5)THEN SHIFTB=-8.D0 IF(NEWDG)SHIFT=0 ENDIF DO 100 I=IHOMOB+1,NORBS 100 EIGB(I)=EIGB(I)+SHIFTB ELSE ENDIF ENDIF TENOLD=TEN IF(PL.GT.PLCHEK)THEN SHFTBO=SHIFTB SHFTO=SHIFT ELSE SHIFTB=SHFTBO SHIFT=SHFTO ENDIF DO 110 I=IHOMO+1,NORBS 110 EIGS(I)=EIGS(I)+SHIFT DO 130 I=1,NORBS DO 120 J=1,I L=L+1 120 F(L)=H(L)+SHIFT*PA(L) 130 F(L)=F(L)-SHIFT ELSEIF (I.EQ.77.AND.LAST.EQ.0.AND.NITER.LT.2.AND.FULSCF)THEN C C SLIGHTLY PERTURB THE FOCK MATRIX IN CASE THE SYSTEM IS C TRAPPED IN A METASTABLE EXCITED ELECTRONIC STATE C RANDOM=0.001D0 DO 140 I=1,LINEAR RANDOM=-RANDOM 140 F(I)=H(I)+RANDOM ELSE DO 150 I=1,LINEAR 150 F(I)=H(I) ENDIF 160 CONTINUE IF(TIMITR)THEN T0=SECOND() WRITE(6,'(A,F7.2)')' LOAD FOCK MAT. INTEGRAL',T0-TITER0 ENDIF C# CALL TIMER('BEFORE FOCK2') CALL FOCK2(F,P,PA,W, WJ, WK,NUMAT,NAT,NFIRST,NMIDLE,NLAST) C# CALL TIMER('AFTER FOCK2') C# CALL TIMER('BEFORE FOCK1') CALL FOCK1(F,P,PA,PB) C# CALL TIMER('AFTER FOCK1') IF(TIMITR)THEN T0=SECOND() TF1=TF1+T0-T1 WRITE(6,'(2(A,F7.2))')' FOCK1:',T0-T1,'INTEGRAL:',T0-TITER0 ENDIF ************************************************************************ * * * MAKE THE BETA FOCK MATRIX * * * ************************************************************************ IF (UHF) THEN IF(SHIFTB .NE. 0.D0) THEN L=0 DO 180 I=1,NORBS DO 170 J=1,I L=L+1 170 FB(L)=H(L)+SHIFTB*PB(L) 180 FB(L)=FB(L)-SHIFTB ELSEIF (RAND.AND.LAST.EQ.0.AND.NITER.LT.2.AND.FULSCF)THEN RANDOM=0.001D0 DO 190 I=1,LINEAR RANDOM=-RANDOM 190 FB(I)=H(I)+RANDOM ELSE DO 200 I=1,LINEAR 200 FB(I)=H(I) ENDIF CALL FOCK2(FB,P,PB,W, WJ, WK,NUMAT,NAT,NFIRST,NMIDLE,NLAST) CALL FOCK1(FB,P,PB,PA) ENDIF IF( .NOT. FULSCF) GOTO 380 IF(PRTFOK) THEN WRITE(6,210)NITER 210 FORMAT(' FOCK MATRIX ON ITERATION',I3) CALL VECPRT (F,NORBS) ENDIF C C CODE THE FOLLOWING LINE IN PROPERLY SOMETIME C THIS OPERATION IS BELIEVED TO GIVE RISE TO A BETTER FOCK MATRIX C THAN THE CONVENTIONAL GUESS. C IF(IRRR.EQ.0)THEN DO 220 I=1,NORBS 220 F((I*(I+1))/2)=F((I*(I+1))/2)*0.5D0 IRRR=2 ENDIF ************************************************************************ * * * CALCULATE THE ENERGY IN KCAL/MOLE * * * ************************************************************************ IF (NITER .GE. ITRMAX) THEN IF(DIFF.LT.1.D-3.AND.PL.LT.1.D-4.AND..NOT.FORCE)THEN WRITE(6,'('' """""""""""""""UNABLE TO ACHIEVE SELF-CONSISTEN 1CE, JOB CONTINUING'')') GOTO 380 ENDIF IF(MINPRT)WRITE (6,230) 230 FORMAT (//10X,'"""""""""""""UNABLE TO ACHIEVE SELF-CONSISTENCE' 1,/) WRITE (6,240) DIFF,PL 240 FORMAT (//,10X,'DELTAE= ',E12.4,5X,'DELTAP= ',E12.4,///) C *** here we failed to calculate a valid energy, but we don't want to close the whole program either. C *** instead of calling STOP, continue like in the above case where GOTO 380 is called... GOTO 380 C IFLEPO=9 C IITER=2 C CALL WRITMO(TIME0,ESCF) C STOP ENDIF EE=HELECT(NORBS,PA,H,F) IF(UHF)THEN EE=EE+HELECT(NORBS,PB,H,FB) ELSE EE=EE*2.D0 ENDIF IF(CAPPS)EE=EE+CAPCOR(NAT,NFIRST,NLAST,NUMAT,P,H) IF(BSHIFT.NE.0.D0) 1SCORR=SHIFT*(NOPEN-NCLOSE)*23.061D0*0.25D0*(FRACT*(2.D0-FRACT)) ESCF=(EE+ENUCLR)*23.061D0+ATHEAT+SCORR IF(INCITR)THEN DIFF=ESCF-EOLD IF(DIFF.GT.0)THEN TEN=TEN-1.D0 ELSE TEN=TEN*0.975D0+0.05D0 ENDIF C C MAKE SURE SELF-CONSISTENCY TEST IS NOT MORE STRINGENT THAN THE C COMPUTER CAN HANDLE C SELLIM=MAX(SELCON,EPS*MAX(ABS(EE),1.D0)) C C SCF TEST: CHANGE IN HEAT OF FORMATION IN KCAL/MOL SHOULD BE C LESS THAN SELLIM. THE OTHER TESTS ARE SAFETY MEASURES C IF(.NOT.(NITER.GT.4.AND.(PL.EQ.0.D0.OR.PL.LT.PLTEST.AND. 1 ABS(DIFF).LT.SELLIM) .AND. READY)) GOTO 270 ************************************************************************ * * * SELF-CONSISTENCY TEST, EXIT MODE FROM ITERATIONS * * * ************************************************************************ 250 IF (ABS(SHIFT) .LT. 1.D-10) GOTO 380 SHIFT=0.D0 SHIFTB=0.D0 DO 260 I=1,LINEAR 260 F(I)=H(I) MAKEA=.TRUE. MAKEB=.TRUE. GOTO 160 270 CONTINUE *********************************************************************** *********************************************************************** IF(LIMSCF.AND.EMIN.NE.0.D0.AND..NOT.(CI.OR.HALFE))THEN C C THE FOLLOWING TESTS ARE INTENDED TO ALLOW A FAST EXIT FROM ITER C IF THE RESULT IS 'GOOD ENOUGH' FOR THE CURRENT STEP IN THE GEOMETRY C OPTIMIZATION C IF(ESCF.LT.EMIN)THEN C C THE ENERGY IS LOWER THAN THE PREVIOUS MINIMUM. NOW CHECK THAT C IT IS CONSISTENTLY LOWER. C IEMAX=0 IEMIN=MIN(5,IEMIN+1) DO 280 I=2,IEMIN 280 ESCF0(I-1)=ESCF0(I) ESCF0(IEMIN)=ESCF C C IS THE DIFFERENCE IN ENERGY BETWEEN TWO ITERATIONS LESS THAN 5% C OF THE ENERGY GAIN FOR THIS GEOMETRY RELATIVE TO THE PREVIOUS C MINIMUM. C IF(IEMIN.GT.3)THEN DO 290 I=2,IEMIN IF(ABS(ESCF0(I)-ESCF0(I-1)).GT.0.05D0*(EMIN-ESCF)) 1GOTO 320 290 CONTINUE C C IS GOOD ENOUGH -- RAPID EXIT C IF(DEBUG) WRITE(6,*) 1' RAPID EXIT BECAUSE ENERGY IS CONSISTENTLY LOWER' GOTO 250 ENDIF ELSE C C THE ENERGY HAS RISEN ABOVE THAT OF THE PREVIOUS MINIMUM. C WE NEED TO CHECK WHETHER THIS IS A FLUKE OR IS THIS REALLY C A BAD GEOMETRY. C IEMIN=0 IEMAX=MIN(5,IEMAX+1) DO 300 I=2,IEMAX 300 ESCF0(I-1)=ESCF0(I) ESCF0(IEMAX)=ESCF C C IS THE DIFFERENCE IN ENERGY BETWEEN TWO ITERATIONS LESS THAN 5% C OF THE ENERGY LOST FOR THIS GEOMETRY RELATIVE TO THE PREVIOUS C MINIMUM. C IF(IEMAX.GT.3)THEN DO 310 I=2,IEMAX IF(ABS(ESCF0(I)-ESCF0(I-1)).GT.0.05D0*(ESCF-EMIN)) 1GOTO 320 310 CONTINUE C C IS GOOD ENOUGH -- RAPID EXIT C IF(DEBUG) WRITE(6,*) 1' RAPID EXIT BECAUSE ENERGY IS CONSISTENTLY HIGHER' GOTO 250 ENDIF ENDIF ENDIF 320 READY=(IREDY.GT.0.AND.(ABS(DIFF).LT.SELLIM*10.D0.OR.PL.EQ.0.D0) 1) IREDY=IREDY+1 ENDIF IF(PRTPL.OR.DEBUG.AND.NITER.GT.ITRMAX-20) THEN IF(ABS(ESCF).GT.99999.D0) ESCF=SIGN(9999.D0,ESCF) IF(ABS(DIFF).GT.9999.D0)DIFF=0.D0 IF(INCITR) 1 WRITE(6,'('' ITERATION'',I3,'' PLS='',2E10.3,'' ENERGY '', 2F14.7,'' DELTAE'',F13.7)')NITER,PL,PLB,ESCF,DIFF close (6) C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C OPEN(UNIT=6,FILE=GETNAM('FOR006'),ACCESS='APPEND') C *** exactly why do we want to open unit 6??? it's already open?!?!?! C *** we also remove this because we want use STDOUT for output... C OPEN(UNIT=6,FILE=GETNAM('FOR006')) C 9990 read (6,'()',end=9999) C goto 9990 C 9999 continue C ***************************** at 1994-05-25 ***** ENDIF IF(INCITR)EOLD=ESCF ************************************************************************ * * * INVOKE THE CAMP-KING CONVERGER * * * ************************************************************************ IF(NITER.GT.2 .AND. CAMKIN .AND. MAKEA) 1CALL INTERP(NORBS,NA1EL,NORBS-NA1EL, MODEA, ESCF/23.061D0, 2F, C, AR1, AR2, AR3, AR4, AR1) MAKEB=.FALSE. IF(MODEA.EQ.3)GOTO 340 MAKEB=.TRUE. IF(TIMITR)THEN T0=SECOND() WRITE(6,'(2(A,F7.2))')' ADJUST DAMPER INTEGRAL',T0-TITER0 ENDIF IF( NEWDG ) THEN ************************************************************************ * * * INVOKE PULAY'S CONVERGER * * * ************************************************************************ IF(OKPULY.AND.MAKEA.AND.IREDY.GT.1) 1CALL PULAY(F,PA,NORBS,POLD,POLD2,POLD3,JALP,IALP,MPACK,FRST,PL) ************************************************************************ * * * DIAGONALIZE THE ALPHA OR RHF SECULAR DETERMINANT * * WHERE POSSIBLE, USE THE PULAY-STEWART METHOD, OTHERWISE USE BEPPU'S * * * ************************************************************************ IF (HALFE.OR.CAMKIN) THEN CALL HQRII(F,NORBS,NORBS,EIGS,C) ELSE C# CALL TIMER('BEFORE DIAG') CALL DIAG (F,C,NA1EL,EIGS,NORBS,NORBS) C# CALL TIMER('AFTER DIAG') ENDIF ELSE C# CALL TIMER('BEFORE HQRII') CALL HQRII(F,NORBS,NORBS,EIGS,C) C# CALL TIMER('AFTER HQRII') IF(TIMITR)THEN T1=SECOND() WRITE(6,'(2(A,F7.2))')' HQRII:',T1-T0,' INTEGRAL',T1-TITER0 ENDIF ENDIF J=1 IF(PRTVEC) THEN J=1 IF(UHF)J=2 WRITE(6,'(//10X,A, 1'' EIGENVECTORS AND EIGENVALUES ON ITERATION'',I3)') 2 ABPRT(J),NITER CALL MATOUT(C,EIGS,NORBS,NORBS,NORBS) ELSE IF (PRTEIG) WRITE(6,330)ABPRT(J),NITER,(EIGS(I),I=1,NORBS) ENDIF 330 FORMAT(10X,A,' EIGENVALUES ON ITERATION',I3,/10(6G13.6,/)) 340 IF(IFILL.NE.0)CALL SWAP(C,NORBS,NORBS,NA2EL,IFILL) ************************************************************************ * * * CALCULATE THE ALPHA OR RHF DENSITY MATRIX * * * ************************************************************************ IF(UHF)THEN CALL DENSIT( C,NORBS, NORBS, NA2EL,NA1EL, FRACT, PA, 1) IF(MODEA.NE.3.AND..NOT. (NEWDG.AND.OKPULY)) 1 CALL CNVG(PA, POLD, POLD2, NORBS, NITER, PL) ELSE C# CALL TIMER('BEFORE DENSIT') CALL DENSIT( C,NORBS, NORBS, NA2EL,NA1EL, FRACT, P, 1) C# CALL TIMER('AFTER DENSIT') IF(MODEA.NE.3.AND..NOT. (NEWDG.AND.OKPULY))THEN C# CALL TIMER('BEFORE CNVG') CALL CNVG(P, POLD, POLD2, NORBS, NITER, PL) C# CALL TIMER('AFTER CNVG') ENDIF ENDIF ************************************************************************ * * * UHF-SPECIFIC CODE * * * ************************************************************************ IF( UHF )THEN ************************************************************************ * * * INVOKE THE CAMP-KING CONVERGER * * * ************************************************************************ IF(NITER.GT.2 .AND. CAMKIN .AND. MAKEB ) 1CALL INTERP(NORBS,NB1EL,NORBS-NB1EL, MODEB, ESCF/23.061D0, 2FB, CBETA, BR1, BR2, BR3, BR4, BR1) MAKEA=.FALSE. IF(MODEB.EQ.3) GOTO 350 MAKEA=.TRUE. IF( NEWDG ) THEN ************************************************************************ * * * INVOKE PULAY'S CONVERGER * * * ************************************************************************ IF( OKPULY.AND.MAKEB.AND.IREDY.GT.1) 1CALL PULAY(FB,PB,NORBS,PBOLD,PBOLD2, 2PBOLD3,JBET,IBET,MPACK,BFRST,PLB) ************************************************************************ * * * DIAGONALIZE THE ALPHA OR RHF SECULAR DETERMINANT * * WHERE POSSIBLE, USE THE PULAY-STEWART METHOD, OTHERWISE USE BEPPU'S * * * ************************************************************************ IF (HALFE.OR.CAMKIN) THEN CALL HQRII(FB,NORBS,NORBS,EIGB,CBETA) ELSE CALL DIAG (FB,CBETA,NB1EL,EIGB,NORBS,NORBS) ENDIF ELSE CALL HQRII(FB,NORBS,NORBS,EIGB,CBETA) ENDIF IF(PRTVEC) THEN WRITE(6,'(//10X,A,'' EIGENVECTORS AND EIGENVALUES ON '', 1''ITERATION'',I3)')ABPRT(3),NITER CALL MATOUT(CBETA,EIGB,NORBS,NORBS,NORBS) ELSE IF (PRTEIG) WRITE(6,330)ABPRT(3),NITER,(EIGB(I),I=1,NORBS) ENDIF ************************************************************************ * * * CALCULATE THE BETA DENSITY MATRIX * * * ************************************************************************ 350 CALL DENSIT( CBETA,NORBS, NORBS, NB2EL, NB1EL, FRACT, PB, 1) IF( .NOT. (NEWDG.AND.OKPULY)) 1CALL CNVG(PB, PBOLD, PBOLD2, NORBS, NITER, PLB) ENDIF ************************************************************************ * * * CALCULATE THE TOTAL DENSITY MATRIX * * * ************************************************************************ IF(UHF) THEN DO 360 I=1,LINEAR 360 P(I)=PA(I)+PB(I) ELSE DO 370 I=1,LINEAR PA(I)=P(I)*0.5D0 370 PB(I)=PA(I) ENDIF IF(PRTDEN) THEN WRITE(6,'('' DENSITY MATRIX ON ITERATION'',I4)')NITER CALL VECPRT (P,NORBS) ENDIF OKNEWD=(PL.LT.SELLIM .OR. OKNEWD) NEWDG=(PL.LT.TRANS .AND. OKNEWD .OR. NEWDG) IF(PL.LT.TRANS*0.3333D0)OKNEWD=.TRUE. GO TO 90 ********************************************************************** * * * * * END THE SCF LOOP HERE * * NOW CALCULATE THE ELECTRONIC ENERGY * * * * * ********************************************************************** * SELF-CONSISTENCE ACHEIVED. * 380 EE=HELECT(NORBS,PA,H,F) IF(UHF) THEN EE=EE+HELECT(NORBS,PB,H,FB) ELSE EE=EE*2.D0 + 1SHIFT*(NOPEN-NCLOSE)*23.061D0*0.25D0*(FRACT*(2.D0-FRACT)) ENDIF IF(CAPPS)EE=EE+CAPCOR(NAT,NFIRST,NLAST,NUMAT,P,H) C C NORMALLY THE EIGENVALUES ARE INCORRECT BECAUSE THE C PSEUDODIAGONALIZATION HAS BEEN USED. IF THIS C IS THE LAST SCF, THEN DO AN EXACT DIAGONALIZATION IF( NSCF.EQ.0 .OR. LAST.EQ.1 .OR. CI .OR. HALFE ) THEN C C PUT F AND FB INTO POLD IN ORDER TO NOT DESTROY F AND FB C AND DO EXACT DIAGONALISATIONS DO 390 I=1,LINEAR 390 POLD(I)=F(I) CALL HQRII(POLD,NORBS,NORBS,EIGS,C) IF(UHF) THEN DO 400 I=1,LINEAR 400 POLD(I)=FB(I) CALL HQRII(POLD,NORBS,NORBS,EIGB,CBETA) DO 410 I=1,LINEAR 410 POLD(I)=PA(I) ELSE DO 420 I=1,LINEAR 420 POLD(I)=P(I) ENDIF IF(CI.OR.HALFE) THEN C# CALL TIMER('BEFORE MECI') SUM=MECI(EIGS,C) C# CALL TIMER('AFTER MECI') EE=EE+SUM IF(PRTPL)THEN ESCF=(EE+ENUCLR)*23.061D0+ATHEAT WRITE(6,'(27X,''AFTER MECI, ENERGY '',F14.7)')ESCF ENDIF ENDIF ENDIF NSCF=NSCF+1 IF(DEBUG)WRITE(6,'('' NO. OF ITERATIONS ='',I6)')NITER C IF(FORCE) SCFCRT=1.D-5 IF(ALLCON.AND.ABS(BSHIFT-4.44D0).LT.1.D-7)THEN CAMKIN=.FALSE. ALLCON=.FALSE. NEWDG=.FALSE. BSHIFT=-10.D0 OKPULY=.FALSE. ENDIF SHIFT=1.D0 IF(EMIN.EQ.0.D0)THEN EMIN=ESCF ELSE EMIN=MIN(EMIN,ESCF) ENDIF RETURN END mopac7-1.15/fortran/timer.f0000644000175000017500000000113611053302063012503 00000000000000 SUBROUTINE TIMER(A) IMPLICIT DOUBLE PRECISION (A-H,O-Z) CHARACTER*(*) A LOGICAL FIRST DATA FIRST/.TRUE./ IF(FIRST)THEN C C DEFINE THE ZERO OF TIME C T0=SECOND() T1=T0 FIRST=.FALSE. ENDIF C C THE ACT OF CALLING THIS ROUTINE COSTS 0.026 SECONDS C T0=T0+0.026D0 T2=SECOND() IF(INDEX(A,'BEF').EQ.0.AND.A.NE.' ')THEN WRITE(6,'(2X,A,A,F7.2,A,F8.2)') 1A,' INTERVAL:',T2-T1,' INTEGRAL:',T2-T0 ELSE WRITE(6,'(40X,''TIME LOST:'',F7.2)')T2-T1 ENDIF T1=T2+0.026D0 RETURN END mopac7-1.15/fortran/linmin.f0000644000175000017500000001732111053302063012654 00000000000000 SUBROUTINE LINMIN(XPARAM,ALPHA,PVECT,NVAR,FUNCT,OKF,IC, DOTT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XPARAM(NVAR),PVECT(NVAR),GRAD(MAXPAR) COMMON /GRAVEC/ COSINE COMMON /NUMCAL/ NUMCAL C********************************************************************* C C LINMIN DOES A LINE MINIMISATION. C C ON INPUT: XPARAM = STARTING COORDINATE OF SEARCH. C ALPHA = STEP SIZE FOR INITIATING SEARCH. C PVECT = DIRECTION OF SEARCH. C NVAR = NUMBER OF VARIABLES IN XPARAM. C FUNCT = INITIAL VALUE OF THE FUNCTION TO BE MINIMIZED. C ISOK = NOT IMPORTANT. C COSINE = COSINE OF ANGLE OF CURRENT AND PREVIOUS GRADIENT. C C ON OUTPUT: XPARAM = COORDINATE OF MINIMUM OF FUNCTI0N. C ALPHA = NEW STEP SIZE, USED IN NEXT CALL OF LINMIN. C FUNCT = FINAL, MINIMUM VALUE OF THE FUNCTION. C OKF = TRUE IF LINMIN IMPROVED FUNCT, FALSE OTHERWISE. C C********************************************************************** COMMON /KEYWRD/ KEYWRD C C THE FOLLOWING COMMON IS USED TO FIND OUT IF A NON-VARIATIONALLY C OPTIMIZED WAVE-FUNCTION IS BEING USED. C COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT CHARACTER KEYWRD*241 DIMENSION PHI(3), VT(4) DIMENSION XSTOR(MAXPAR), XPAREF(MAXPAR) INTEGER LEFT,RIGHT,CENTER LOGICAL PRINT,OKF, HALFE, DIIS SAVE ICALCN, PRINT, HALFE, XMAXM, I SAVE MAXLIN, YMAXST DATA ICALCN /0/ IF (ICALCN.NE.NUMCAL) THEN HALFE =(INDEX(KEYWRD,'C.I.') .NE. 0 .OR. NCLOSE.NE.NOPEN) IF(INDEX(KEYWRD,'GNORM') .NE. 0) 1DROP=DROP*MIN(READA(KEYWRD,INDEX(KEYWRD,'GNORM')),1.D0) XMAXM = 0.4D0 DELTA2 = 0.001D0 IF(INDEX(KEYWRD,'NOTH') .EQ. 0) THEN DELTA1 = 0.5D0 ELSE DELTA1 = 0.1D0 ENDIF ALPHA = 1.D0 MAXLIN = 15 IF(NVAR.EQ.1)THEN PVECT(1)=0.01D0 DROP=0.01D0 ALPHA=1.D0 DELTA1 = 0.00005D0 DELTA2 = 0.00001D0 IF(INDEX(KEYWRD,'PREC') .NE. 0) DELTA1=0.0000005D0 MAXLIN=30 ENDIF COSINE=99.99D0 C YMAXST = 0.4D0 PRINT=(INDEX(KEYWRD,'LINMIN') .NE. 0) ICALCN=NUMCAL ENDIF DO 10 I=1,NVAR XPAREF(I)=XPARAM(I) 10 CONTINUE XMAXM=0.D0 DO 20 I=1,NVAR PABS=ABS(PVECT(I)) 20 XMAXM=MAX(XMAXM,PABS) XMAXM=YMAXST/XMAXM IF(NVAR.EQ.1) 1CALL COMPFG(XPARAM, .TRUE., FUNCT,.TRUE.,GRAD,.FALSE.) FIN=FUNCT SSQLST=FUNCT DIIS=IC.EQ.1.AND.NVAR.GT.1 PHI(1)=FUNCT ALPHA=1.D0 VT(1)=0.0D00 VT(2)=ALPHA IF (VT(2).GT.XMAXM) VT(2)=XMAXM FMAX=FUNCT FMIN=FUNCT ALPHA=VT(2) DO 30 I=1,NVAR 30 XPARAM(I)=XPAREF(I)+ALPHA*PVECT(I) CALL COMPFG(XPARAM, .TRUE., PHI(2),.TRUE.,GRAD,.FALSE.) IF(PHI(2).GT.FMAX) FMAX=PHI(2) IF(PHI(2).LT.FMIN) FMIN=PHI(2) CALL EXCHNG (PHI(2),SQSTOR,ENERGY,ESTOR,XPARAM,XSTOR, 1ALPHA,ALFS,NVAR) IF(DIIS)GOTO 190 IF(NVAR.GT.1)THEN C C CALCULATE A NEW ALPHA BASED ON THIEL'S FORMULA C ALPHA=-ALPHA**2*DOTT/(2.D0*(PHI(2)-SSQLST-ALPHA*DOTT)) IF(ALPHA.GT.2.D0)ALPHA=2.D0 ELSE IF(PHI(2).LT.PHI(1))THEN ALPHA=2*ALPHA ELSE ALPHA=-ALPHA ENDIF ENDIF C# IF(PRINT)WRITE(6,'(3(A,F12.6))')' ESTIMATED DROP:',DOTT*0.5D0, C# 1' ACTUAL: ',PHI(2)-SSQLST, ' PREDICTED ALPHA',ALPHA OKF=OKF.OR.PHI(2).LT.SSQLST IF(DELTA1.GT.0.3D0)THEN C C THIEL'S TESTS # 18 AND 19 C IF(OKF.AND.ALPHA.LT.2.D0)GOTO 190 ENDIF VT(3)=ALPHA IF (VT(3).LE.1.D0) THEN LEFT=3 CENTER=1 RIGHT=2 ELSE LEFT=1 CENTER=2 RIGHT=3 ENDIF DO 40 I=1,NVAR 40 XPARAM(I)=XPAREF(I)+ALPHA*PVECT(I) CALL COMPFG (XPARAM, .TRUE., FUNCT,.TRUE.,GRAD,.FALSE.) IF(FUNCT.GT.FMAX) FMAX=FUNCT IF(FUNCT.LT.FMIN) FMIN=FUNCT IF (FUNCT.LT.SQSTOR) CALL EXCHNG (FUNCT,SQSTOR,ENERGY, 1ESTOR,XPARAM,XSTOR,ALPHA,ALFS,NVAR) OKF=(OKF.OR.FUNCT.LT.FIN) PHI(3)=FUNCT IF (PRINT)WRITE (6,50) VT(1),PHI(1),PHI(1)-FIN, 1 VT(2),PHI(2),PHI(2)-FIN, 2 VT(3),PHI(3),PHI(3)-FIN 50 FORMAT ( ' ---QLINMN ',/5X, 'LEFT ...',F17.8,2F17.11/5X, 1 'CENTER ...',F17.8,2F17.11,/5X, 'RIGHT ...',F17.8,2F17.11,/) DO 180 ICTR=3,MAXLIN ALPHA=VT(2)-VT(3) BETA=VT(3)-VT(1) GAMMA=VT(1)-VT(2) IF(ABS(ALPHA*BETA*GAMMA) .GT. 1.D-4)THEN ALPHA=-(PHI(1)*ALPHA+PHI(2)*BETA+PHI(3)*GAMMA)/(ALPHA*BETA*G 1AMM A) ELSE C C FINISH BECAUSE TWO POINTS CALCULATED ARE VERY CLOSE TOGETHER C GOTO 190 ENDIF BETA=((PHI(1)-PHI(2))/GAMMA)-ALPHA*(VT(1)+VT(2)) IF (ALPHA) 60,60,90 60 IF (PHI(RIGHT).GT.PHI(LEFT)) GO TO 70 ALPHA=3.0D00*VT(RIGHT)-2.0D00*VT(CENTER) GO TO 80 70 ALPHA=3.0D00*VT(LEFT)-2.0D00*VT(CENTER) 80 S=ALPHA-ALPOLD IF (ABS(S).GT.XMAXM) S=SIGN(XMAXM,S)*(1+0.01D0*(XMAXM/S)) ALPHA=S+ALPOLD GO TO 100 90 ALPHA=-BETA/(2.0D00*ALPHA) S=ALPHA-ALPOLD XXM=2.0D00*XMAXM IF (ABS(S).GT.XXM) S=SIGN(XXM,S)*(1+0.01D0*(XXM/S)) ALPHA=S+ALPOLD 100 CONTINUE C C FINISH IF CALCULATED POINT IS NEAR TO POINT ALREADY CALCULATED C DO 110 I=1,3 110 IF (ABS(ALPHA-VT(I)).LT.DELTA1*(1.D0+VT(I)).AND.OKF) GOTO 190 DO 120 I=1,NVAR 120 XPARAM(I)=XPAREF(I)+ALPHA*PVECT(I) FUNOLD=FUNCT CALL COMPFG (XPARAM, .TRUE., FUNCT,.TRUE.,GRAD,.FALSE.) IF(FUNCT.GT.FMAX) FMAX=FUNCT IF(FUNCT.LT.FMIN) FMIN=FUNCT IF (FUNCT.LT.SQSTOR) CALL EXCHNG (FUNCT,SQSTOR,ENERGY,ESTOR, 1 XPARAM,XSTOR,ALPHA,ALFS,NVAR) OKF=OKF .OR. (FUNCT.LT.FIN) IF (PRINT) WRITE(6,130) VT(LEFT),PHI(LEFT), PHI(LEFT)-FIN, 1 VT(CENTER),PHI(CENTER),PHI(CENTER)-FIN, 2 VT(RIGHT),PHI(RIGHT),PHI(RIGHT)-FIN, 3 ALPHA,FUNCT,FUNCT-FIN 130 FORMAT (5X,'LEFT ...',F17.8,2F17.11,/5X,'CENTER ...', 1F17.8,2F17.11,/5X,'RIGHT ...',F17.8,2F17.11,/5X, 2 'NEW ...',F17.8,2F17.11,/) C C TEST TO EXIT FROM LINMIN IF NOT DROPPING IN VALUE OF FUNCTION FAST. C IF(ABS(FUNOLD-FUNCT) .LT. DELTA2 .AND. OKF) GOTO 190 ALPOLD=ALPHA IF ((ALPHA.GT.VT(RIGHT)).OR.(ALPHA.GT.VT(CENTER) 1 .AND.FUNCT.LT.PHI(CENTER)).OR.(ALPHA.GT.VT(LEFT) 2 .AND.ALPHA.LT.VT(CENTER).AND.FUNCT.GT.PHI(CENTER))) 3 GOTO 140 VT(RIGHT)=ALPHA PHI(RIGHT)=FUNCT GO TO 150 140 VT(LEFT)=ALPHA PHI(LEFT)=FUNCT 150 IF (VT(CENTER).LT.VT(RIGHT)) GO TO 160 I=CENTER CENTER=RIGHT RIGHT=I 160 IF (VT(LEFT).LT.VT(CENTER)) GO TO 170 I=LEFT LEFT=CENTER CENTER=I 170 IF (VT(CENTER).LT.VT(RIGHT)) GO TO 180 I=CENTER CENTER=RIGHT RIGHT=I 180 CONTINUE 190 CONTINUE C C IC=1 IF THE LAST POINT CALCULATED WAS THE BEST POINT, IC=2 OTHERWISE C IC=2 IF(ABS(ESTOR-ENERGY).LT.1.D-12)IC=1 CALL EXCHNG (SQSTOR,FUNCT,ESTOR,ENERGY,XSTOR,XPARAM, 1 ALFS,ALPHA,NVAR) OKF = (FUNCT.LT.SSQLST.OR.DIIS) IF (FUNCT.GE.SSQLST) RETURN IF (ALPHA) 200,220,220 200 ALPHA=-ALPHA DO 210 I=1,NVAR 210 PVECT(I)=-PVECT(I) 220 CONTINUE RETURN C C END mopac7-1.15/fortran/upsurf.f0000644000175000017500000001726411053302064012721 00000000000000 SUBROUTINE UPSURF (COORD) C This routine is called alternatively to CONSTS during geometry C optimization. It updates the segments on the SCAS , i.e. their C areas and centers, according to a new geometry, but it doesnot create C a new segmentation. The reason for using UPSURF is to smooth the total C energy with respect to fluctations arisig from a fluctuating segmentation. C Be aware that the use of UPSURF brings some 'hysteresis' into the C Hamiltonian. C UPSURF fills the A-matrix and calls the inversion routine. C written by A. Klamt, Burscheider Str. 524, 5090 Leverkusen 3, Germany IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COORD(3,*) DIMENSION XX(3),XA(3),COBAS(3,NPPA,NUMATM) DIMENSION XSP(4,MAXNSS),NSET(MAXNSS,MAXNSS) C Added to satisfy the LAPACK call to DGETRI. SJC 1/10/93 DIMENSION IPIV(MAXNSS) DIMENSION DIRTM(3,NPPA) LOGICAL DIN(NPPA) COMMON / SOLVI / NSPA,NSS,IATSP(MAXNSS),NAR(MAXNSS),NN(2,NUMATM) COMMON / SOLVR / DIPL,FEPSI,RDS,DISEX2,TM(3,3,NUMATM), & AAMAT(MAXNSS,MAXNSS),ADMAT(MAXNSS,MAXNSS), & CCMAT(MAXORB,MAXORB), BBMAT(MAXORB,MAXNSS), & COSURF(3,MAXNSS), SRAD(NUMATM) COMMON /DIRVEC/ DIRVEC(3,NPPA), NNX(3,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /CHANEL/ IFILES(30) EQUIVALENCE (IW,IFILES(6)) EQUIVALENCE (ADMAT,COBAS),(BBMAT,XSP) FDIAG=1.05D0*SQRT(NPPA+0.D0) AREA=0.0D0 DS=SQRT(4.D0/NSPA) C2DS=COS(2.0D0*DS) NSS1=0 DO 1000 I=1,NUMAT DO 4 IX=1,3 4 XA(IX)=COORD(IX,I) R=SRAD(I) RM=R-RDS NSS0=NSS1+1 IF (IATSP(NSS0) .NE. I) GO TO 1000 IPS=NSS0 304 IF (IPS .GT. NSS .OR. IATSP(IPS) .NE. I) GO TO 306 NAR(IPS)=0 XSP(1,IPS)=0.D0 XSP(2,IPS)=0.D0 XSP(3,IPS)=0.D0 XSP(4,IPS)=ADMAT(IPS,IPS) IPS=IPS+1 GO TO 304 306 NSS1=IPS-1 C TRANSFORM COSURF ACCORDING TO TM(INV) DO 5 J=NSS0,NSS1 XX(1)=COSURF(1,J) XX(2)=COSURF(2,J) XX(3)=COSURF(3,J) COSURF(1,J)=XX(1)*TM(1,1,I)+XX(2)*TM(1,2,I)+XX(3)*TM(1,3,I) COSURF(2,J)=XX(1)*TM(2,1,I)+XX(2)*TM(2,2,I)+XX(3)*TM(2,3,I) COSURF(3,J)=XX(1)*TM(3,1,I)+XX(2)*TM(3,2,I)+XX(3)*TM(3,3,I) 5 CONTINUE C UPDATE TM NN1=NN(1,I) NN2=NN(2,I) IF (NN1 .EQ. 0) THEN TM(1,1,I)=1.D0 TM(1,2,I)=0.D0 TM(1,3,I)=0.D0 ELSE DIST1=0.D0 DO 6 IX=1,3 6 DIST1=DIST1+(XA(IX)-COORD(IX,NN1))**2 DIST=1.D0/DSQRT(DIST1) TM(1,1,I)=(COORD(1,NN1)-XA(1))*DIST TM(1,2,I)=(COORD(2,NN1)-XA(2))*DIST TM(1,3,I)=(COORD(3,NN1)-XA(3))*DIST END IF IF (NN2 .EQ. 0) THEN TM(2,1,I)=-TM(1,2,I) TM(2,2,I)=TM(1,1,I) TM(2,3,I)=0.D0 ELSE DIST2=0.D0 DO 7 IX=1,3 7 DIST2=DIST2+(XA(IX)-COORD(IX,NN2))**2 DIST=1.D0/DSQRT(DIST2) XX(1)=(COORD(1,NN2)-XA(1))*DIST XX(2)=(COORD(2,NN2)-XA(2))*DIST XX(3)=(COORD(3,NN2)-XA(3))*DIST SP=XX(1)*TM(1,1,I)+XX(2)*TM(1,2,I)+XX(3)*TM(1,3,I) SININV=1.D0/DSQRT(1.D0-SP*SP) TM(2,1,I)=(XX(1)-SP*TM(1,1,I))*SININV TM(2,2,I)=(XX(2)-SP*TM(1,2,I))*SININV TM(2,3,I)=(XX(3)-SP*TM(1,3,I))*SININV END IF TM(3,1,I)=TM(1,2,I)*TM(2,3,I)-TM(2,2,I)*TM(1,3,I) TM(3,2,I)=TM(1,3,I)*TM(2,1,I)-TM(2,3,I)*TM(1,1,I) TM(3,3,I)=TM(1,1,I)*TM(2,2,I)-TM(2,1,I)*TM(1,2,I) C TRANSFORM COSURF ACCORDING TO TM DO 35 J=NSS0,NSS1 XX(1)=COSURF(1,J) XX(2)=COSURF(2,J) XX(3)=COSURF(3,J) COSURF(1,J)=XX(1)*TM(1,1,I)+XX(2)*TM(2,1,I)+XX(3)*TM(3,1,I) COSURF(2,J)=XX(1)*TM(1,2,I)+XX(2)*TM(2,2,I)+XX(3)*TM(3,2,I) COSURF(3,J)=XX(1)*TM(1,3,I)+XX(2)*TM(2,3,I)+XX(3)*TM(3,3,I) 35 CONTINUE DO 45 J=1,NPPA XX(1)=DIRVEC(1,J) XX(2)=DIRVEC(2,J) XX(3)=DIRVEC(3,J) DO 45 IX=1,3 X=XX(1)*TM(1,IX,I)+XX(2)*TM(2,IX,I)+XX(3)*TM(3,IX,I) DIRTM(IX,J)=X COBAS(IX,J,I)=RM*X+XA(IX) 45 CONTINUE DO 2080 J = 1,NPPA DIN(J)=.FALSE. DO 2020 IX=1,3 XX(IX) = XA(IX) + DIRTM(IX,J)* R 2020 CONTINUE DO 2040 K = 1, NUMAT IF (K . EQ. I) GO TO 2040 DIST=0.D0 DO 2030 IX=1,3 DIST = DIST + (XX(IX) - COORD(IX,K))**2 2030 CONTINUE DIST=SQRT(DIST)-SRAD(K) IF (DIST .LT. 0.D0) GO TO 2080 2040 CONTINUE DIN(J)=.TRUE. 2080 CONTINUE DO 350 J=1,NPPA IF (.NOT. DIN(J)) GO TO 350 SPM=-1.D0 X1=DIRTM(1,J) X2=DIRTM(2,J) X3=DIRTM(3,J) DO 340 IPS=NSS0,NSS1 SP=X1*COSURF(1,IPS)+X2*COSURF(2,IPS)+X3*COSURF(3,IPS) IF (SP .LT. SPM) GO TO 340 SPM=SP IPM=IPS 340 CONTINUE IF (SPM .LT. C2DS) GO TO 350 NARA=NAR(IPM)+1 NSET(IPM,NARA)=J NAR(IPM)=NARA DO 345 IX=1,3 345 XSP(IX,IPM)=XSP(IX,IPM)+DIRTM(IX,J) 350 CONTINUE DO 400 IPS=NSS0,NSS1 DIST=0.D0 IF (NAR(IPS) .EQ. 0) THEN GO TO 400 END IF DO 390 IX=1,3 X=XSP(IX,IPS) DIST=DIST+X*X 390 CONTINUE DIST=1.D0/SQRT(DIST) DO 391 IX=1,3 391 COSURF(IX,IPS)=XSP(IX,IPS)*DIST 400 CONTINUE DO 490 IPS=NSS0,NSS1 DO 405 IX=1,3 405 XSP(IX,IPS)=XA(IX)+COSURF(IX,IPS)*RM 490 CONTINUE 1000 CONTINUE C C filling AAMAT DO 170 IPS=1,NSS I=IATSP(IPS) RI=SRAD(I)-RDS NARI=NAR(IPS) AA=0.D0 DO 140 K=1,NARI J1=NSET(IPS,K) AA=AA+.5D0*FDIAG X1=DIRVEC(1,J1) X2=DIRVEC(2,J1) X3=DIRVEC(3,J1) DO 140 L=1,K-1 J2=NSET(IPS,L) AA=AA+1.D0/SQRT((X1-DIRVEC(1,J2))**2+ & (X2-DIRVEC(2,J2))**2+(X3-DIRVEC(3,J2))**2) 140 CONTINUE AA=2*AA/RI IF (NARI .EQ. 0) THEN AAMAT(IPS,IPS)=XSP(4,IPS) ELSE AAMAT(IPS,IPS)=AA ENDIF DO 141 IX=1,3 141 XA(IX)=XSP(IX,IPS) DO 169 JPS=1,IPS-1 NARJ=NAR(JPS) DIST=0.D0 DO 143 IX=1,3 143 DIST=DIST+(XSP(IX,JPS)-XA(IX))**2 IF (DIST .LT. DISEX2) THEN J=IATSP(JPS) AIJ=0.D0 DO 149 K=1,NARI J1=NSET(IPS,K) X1=COBAS(1,J1,I) X2=COBAS(2,J1,I) X3=COBAS(3,J1,I) DO 149 L=1,NARJ J2=NSET(JPS,L) AIJ=AIJ+1.D0/SQRT((COBAS(1,J2,J)-X1)**2+ & (COBAS(2,J2,J)-X2)**2+(COBAS(3,J2,J)-X3)**2) 149 CONTINUE ELSE AIJ=NARI*NARJ/SQRT(DIST) END IF AAMAT(IPS,JPS)=AIJ AAMAT(JPS,IPS)=AIJ 169 CONTINUE 170 CONTINUE DO 175 I=1,NSS DO 175 J=1,NSS 175 ADMAT(I,J)=AAMAT(I,J) C invert AAMAX C CALL MA22BD(AAMAT,MAXNSS,NSS,BBMAT,ERROR) C CALL INVAA(AAMAT,MAXNSS,NSS) CALL DGETRF(NSS,NSS,AAMAT,MAXNSS,IPIV,INFO) IF (INFO .NE. 0) THEN WRITE (IW,*) 'UPSURF: Factorization failed. INFO=',INFO STOP ENDIF CALL DGETRI(NSS,AAMAT,MAXNSS,IPIV,BBMAT,MAXORB*MAXNSS,INFO) IF (INFO .NE. 0) THEN WRITE (IW,*) 'UPSURF: Inversion failed. INFO=',INFO STOP ENDIF RETURN END mopac7-1.15/fortran/anavib.f0000644000175000017500000001432511053302064012630 00000000000000 SUBROUTINE ANAVIB(COORD,EIGS,DIPT,N3,VIBS,RIJ,HESS,TRAVEL,REDMAS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COORD(3,NUMATM),EIGS(N3),VIBS(N3,N3), DIPT(N3), 1RIJ(MAXHES), TRAVEL(N3), HESS(*), REDMAS(*) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ELEMTS/ ELEMNT(107) LOGICAL VIB1, VIB2, VIB3, VIB4 COMMON /FOKMAT/ F(MPACK*2) CHARACTER*2 ELEMNT DIMENSION VANRAD(107), IJF(10), FIJ(10) SAVE VANRAD DATA VANRAD/ 1 0.32,0.93, 2 1.23, 0.90, 0.82, 0.77, 0.75, 0.73, 0.72, 0.71, 3 1.54, 1.36, 1.18, 1.11, 1.06, 1.02, 0.99, 0.98, 4 2.03, 1.74, 1.44, 1.32, 1.22, 1.18, 1.17, 1.17, 1.16, 5 1.15, 1.17, 1.25, 1.26, 1.22, 1.20, 1.16, 1.14, 1.12, 6 2.16, 1.91, 1.62, 1.45, 1.34, 1.30, 1.27, 1.25, 1.25, 7 1.28, 1.34, 1.48, 1.44, 1.41, 1.40, 1.36, 1.33, 1.31, 8 2.35, 1.98, 1.69, 9 1.65, 1.65, 1.64, 1.63, 1.62, 1.85, 1.61, 1.59, 1.59, 1.58, 1 1.57, 1.56, 1.56, 1.56, 2 1.44, 1.34, 1.30, 1.28, 1.26, 1.27, 1.30, 1.34, 3 1.49, 1.48, 1.47, 1.46, 1.46, 1.45,1.45,21*1.45/ N3=NUMAT*3 C C COMPUTE INTERATOMIC DISTANCES. C L=0 DO 10 I=1,NUMAT DO 10 J=1,I-1 L=L+1 10 RIJ(L)=SQRT((COORD(1,J)-COORD(1,I))**2+ 1 (COORD(2,J)-COORD(2,I))**2+ 2 (COORD(3,J)-COORD(3,I))**2)+1.D-10 C C ANALYSE VIBRATIONS C WRITE(6,'(''1'',//10X,''DESCRIPTION OF VIBRATIONS'',/)') ILINE=0 DO 120 K=1,N3 IF(ABS(EIGS(K)).LT.50) GOTO 120 VIB1=.TRUE. VIB2=.TRUE. VIB3=.TRUE. VIB4=.TRUE. J3=0 L=0 TOT=0.D0 LINEAR=0 J1=-2 DO 70 J=1,NUMAT J1=J1+3 I1=-2 DO 70 I=1,J-1 I1=I1+3 VDW=(VANRAD(NAT(I))+VANRAD(NAT(J)))*1.5D0 L=L+1 F(L)=0.D0 IF( RIJ(L) .LT. VDW) THEN C C CALCULATE ENERGY TERM BETWEEN THE TWO ATOMS C EAB=0.D0 DO 20 JJ=J1,J1+2 DO 20 II=I1,I1+2 20 EAB=EAB+VIBS(JJ,K)*HESS((JJ*(JJ-1))/2+II)*VIBS(II,K) EB=0.D0 DO 40 JJ=J1,J1+2 DO 30 II=J1,JJ 30 EB=EB+VIBS(JJ,K)*HESS((JJ*(JJ-1))/2+II)*VIBS(II,K)* 12.D0 40 EB=EB-VIBS(JJ,K)*HESS((JJ*(JJ+1))/2)*VIBS(JJ,K) EA=0.D0 DO 60 JJ=I1,I1+2 DO 50 II=I1,JJ 50 EA=EA+VIBS(JJ,K)*HESS((JJ*(JJ-1))/2+II)*VIBS(II,K)* 12.D0 60 EA=EA-VIBS(JJ,K)*HESS((JJ*(JJ+1))/2)*VIBS(JJ,K) LINEAR=LINEAR+1 F(L)=EA+EAB*2.D0+EB TOT=TOT+F(L) ENDIF 70 CONTINUE C C NOW TO SORT F INTO DECENDING ORDER C DO 90 I=1,10 SUM=-100.D0 DO 80 J=1,L IF(ABS(F(J)).GT.SUM)THEN JJ=J SUM=ABS(F(J)) ENDIF 80 CONTINUE IF(SUM.LT.0.D0)GOTO 100 FIJ(I)=SUM F(JJ)=-1.D-5 IJF(I)=JJ C# WRITE(6,*)FIJ(I),IJF(I) 90 CONTINUE I=10 100 LINEAR=I SUM=1.D0/(TOT+1.D-8) DO 110 IJ=1,LINEAR J=0.5D0*(0.99D0+SQRT(1.D0+8.D0*IJF(IJ))) I=IJF(IJ)-(J*(J-1))/2 J=J+1 XJ=COORD(1,J) YJ=COORD(2,J) ZJ=COORD(3,J) J1=3*J-2 J2=J1+1 J3=J2+1 I3=0 XI=COORD(1,I) YI=COORD(2,I) ZI=COORD(3,I) I1=3*I-2 I2=I1+1 I3=I2+1 X= VIBS(J1,K)-VIBS(I1,K) Y= VIBS(J2,K)-VIBS(I2,K) Z= VIBS(J3,K)-VIBS(I3,K) E=FIJ(IJ)*SUM*100.D0 C# IF(ABS(E).GT.110)GOTO 120 SHIFT=X*X+Y*Y+Z*Z+1.D-30 IF(ABS(E) .GT. 10.D0.OR.IJ.LT.5.AND.ABS(E).GT.0.1) THEN SHIFT=SQRT(SHIFT) RADIAL=((X*(XI-XJ)+Y*(YI-YJ)+Z*(ZI-ZJ)) 1 /(SHIFT*RIJ(IJF(IJ))))**2*100.D0 IF (VIB1) THEN WRITE(6,'(/,'' VIBRATION'',I4,'' ATOM PAIR 1 '','' ENERGY CONTRIBUTION RADIAL'')')K ANS=100.D0*SQRT(FIJ(IJ)*1.D5*6.023D23)/(2.998D10*3.141 159D0*2.D0)/EIGS(K) ANS=MIN(999.9D0,MAX(-99.9D0,ANS)) WRITE(6,'('' FREQ. '',F9.2,6X,1A2,I2, 1'' -- '',A2,I2, '' '',F6.1,''% ('',F5.1,''%)'',F18.1 2,''%'')') 3EIGS(K),ELEMNT(NAT(I)),I,ELEMNT(NAT(J)),J,E,ANS,RADIAL C# WRITE(6,*)ANS VIB1=.FALSE. ELSEIF (VIB2) THEN VIB2=.FALSE. WRITE(6,'('' T-DIPOLE'',F9.4,6X,1A2,I2, 1'' -- '',A2,I2, '' '',F6.1,''%'',F27.1,''%'')') 2DIPT(K),ELEMNT(NAT(I)),I,ELEMNT(NAT(J)),J,E,RADIAL ELSEIF (VIB3) THEN VIB3=.FALSE. WRITE(6,'('' TRAVEL '',F9.4,6X,1A2,I2, 1'' -- '',A2,I2, '' '',F6.1,''%'',F27.1,''%'')') 2TRAVEL(K),ELEMNT(NAT(I)),I,ELEMNT(NAT(J)),J,E,RADIAL ELSEIF (VIB4) THEN VIB4=.FALSE. WRITE(6,'('' RED. MASS'',F8.4,6X,1A2,I2, 1'' -- '',A2,I2, '' '',F6.1,''%'',F27.1,''%'')') 2REDMAS(K),ELEMNT(NAT(I)),I,ELEMNT(NAT(J)),J,E,RADIAL ELSE ILINE=ILINE+1 WRITE(6,'('' '',1A2,I2, 1'' -- '',A2,I2, '' '',F6.1,''%'',F27.1,''%'')') 2ELEMNT(NAT(I)),I,ELEMNT(NAT(J)),J,E,RADIAL ENDIF ENDIF 110 CONTINUE ILINE=ILINE+6 IF(VIB1)WRITE(6,'(/,'' VIBRATION'',I4)')K IF(VIB1)WRITE(6,'( '' FREQ. '',F8.2)')EIGS(K) IF(VIB2)WRITE(6,'( '' T-DIPOLE '',F8.4)')DIPT(K) IF(VIB3)WRITE(6,'( '' TRAVEL '',F8.4)')TRAVEL(K) IF(VIB4)WRITE(6,'( '' RED. MASS'',F8.4)')REDMAS(K) IF(ILINE.GT.52)THEN ILINE=0 WRITE(6,'(''1'')') ENDIF 120 CONTINUE RETURN END mopac7-1.15/fortran/deritr.f0000644000175000017500000001007211053302063012653 00000000000000 SUBROUTINE DERITR(ERRFN,GEO) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION GEO(3,NUMATM), ERRFN(MAXPAR) ************************************************************************ * * DERITR CALCULATES THE DERIVATIVES OF THE ENERGY WITH RESPECT TO THE * INTERNAL COORDINATES. THIS IS DONE BY FINITE DIFFERENCES * USING FULL SCF CALCULATIONS. * * THIS IS VERY TIME-CONSUMING, AND SHOULD ONLY BE USED WHEN * NO OTHER DERIVATIVE CALCULATION WILL DO. * * THE MAIN ARRAYS IN DERIV ARE: * LOC INTEGER ARRAY, LOC(1,I) CONTAINS THE ADDRESS OF THE ATOM * INTERNAL COORDINATE LOC(2,I) IS TO BE USED IN THE * DERIVATIVE CALCULATION. * GEO ARRAY \GEO\ HOLDS THE INTERNAL COORDINATES. * ************************************************************************ COMMON / EULER/ TVEC(3,3), ID COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, DUMMY(MAXPAR) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOSYM/ NDEP, IDUMYS(MAXPAR,3) COMMON /UCELL / L1L,L2L,L3L,L1U,L2U,L3U COMMON /ENUCLR/ ENUCLR COMMON /NUMCAL/ NUMCAL COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /WMATRX/ WJ(N2ELEC), WK(N2ELEC) COMMON /HMATRX/ H(MPACK) COMMON /KEYWRD / KEYWRD CHARACTER*241 KEYWRD DIMENSION CHANGE(3), COORD(3,NUMATM) 1, XDERIV(3), XPARAM(MAXPAR), XJUC(3), W(N2ELEC) DOUBLE PRECISION WJ, WK SAVE IDELTA, XDERIV LOGICAL DEBUG EQUIVALENCE (W,WJ) DATA ICALCN /0/ IF(ICALCN.NE.NUMCAL) THEN DEBUG = (INDEX(KEYWRD,'DERITR') .NE. 0) ICALCN=NUMCAL * * IDELTA IS A MACHINE-PRECISION DEPENDANT INTEGER * IDELTA=-3 CHANGE(1)= 10.D0**IDELTA CHANGE(2)= 10.D0**IDELTA CHANGE(3)= 10.D0**IDELTA C C CHANGE(I) IS THE STEP SIZE USED IN CALCULATING THE DERIVATIVES. C BECAUSE FULL SCF CALCULATIONS ARE BEING DONE QUITE LARGE STEPS C ARE NEEDED. ON THE OTHER HAND, THE STEP CANNOT BE VERY LARGE, C AS THE SECOND DERIVITIVE IN FLEPO IS CALCULATED FROM THE C DIFFERENCES OF TWO FIRST DERIVATIVES. CHANGE(1) IS FOR CHANGE IN C BOND LENGTH, (2) FOR ANGLE, AND (3) FOR DIHEDRAL. C XDERIV(1)= 0.5D0/CHANGE(1) XDERIV(2)= 0.5D0/CHANGE(2) XDERIV(3)= 0.5D0/CHANGE(3) ENDIF DO 10 I=1,NVAR 10 XPARAM(I)=GEO(LOC(2,I),LOC(1,I)) IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY(GEO,COORD) C C ESTABLISH THE ENERGY AT THE CURRENT POINT C CALL HCORE(COORD,H,W, WJ, WK, ENUCLR) IF(NORBS*NELECS.GT.0)THEN CALL ITER(H, W, WJ, WK, AA,.TRUE.,.FALSE.) ELSE AA=0.D0 ENDIF LINEAR=(NORBS*(NORBS+1))/2 C C RESTORE THE DENSITY MATRIX (WHY?) C DO 20 I=1,LINEAR 20 P(I)=PA(I)*2.D0 AA=(AA+ENUCLR) IJ=0 DO 60 II=1,NUMAT DO 50 IL=L1L,L1U DO 50 JL=L2L,L2U DO 50 KL=L3L,L3U DO 30 LL=1,3 30 XJUC(LL)=COORD(LL,II)+TVEC(LL,1)*IL+TVEC(LL,2)*JL+TVEC 1(LL,3)*KL IJ=IJ+1 50 CONTINUE 60 CONTINUE DO 90 I=1,NVAR K=LOC(1,I) L=LOC(2,I) XSTORE=XPARAM(I) DO 70 J=1,NVAR 70 GEO(LOC(2,J),LOC(1,J))=XPARAM(J) GEO(L,K)=XSTORE-CHANGE(L) IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY(GEO,COORD) C C IF NEEDED, CALCULATE "EXACT" DERIVITIVES. C CALL HCORE(COORD,H,W, WJ, WK,ENUCLR) IF(NORBS*NELECS.GT.0)THEN CALL ITER(H,W, WJ, WK,EE,.TRUE.,.FALSE.) ELSE EE=0.D0 ENDIF DO 80 II=1,LINEAR 80 P(II)=PA(II)*2.D0 EE=(EE+ENUCLR) ERRFN(I)=(AA-EE)*23.061D0*XDERIV(L)*2.D0 90 CONTINUE IF(DEBUG)THEN WRITE(6,'('' ERROR FUNCTION'')') WRITE(6,'(10F8.3)')(ERRFN(I),I=1,NVAR) ENDIF RETURN END mopac7-1.15/fortran/moldat.f0000644000175000017500000005233111053302063012646 00000000000000 SUBROUTINE MOLDAT(MODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /MOLMEC/ HTYPE(4),NHCO(4,20),NNHCO,ITYPE COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT 3 /KEYWRD/ KEYWRD 4 /NATORB/ NATORB(107) COMMON /CORE / CORE(107) 1 /BETAS / BETAS(107),BETAP(107),BETAD(107) 2 /MOLORB/ USPD(MAXORB),PSPD(MAXORB) 3 /VSIPS / VS(107),VP(107),VD(107) 4 /ONELEC/ USS(107),UPP(107),UDD(107) COMMON /ATHEAT/ ATHEAT 1 /POLVOL/ POLVOL(107) 2 /MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107) 3 /TWOELE/ GSS(107),GSP(107),GPP(107),GP2(107),HSP(107) 4 ,GSD(107),GPD(107),GDD(107) 5 /IDEAA / GUESA1(107,10),GUESA2(107,10),GUESA3(107,10) 6 /IDEAS / GUESS1(107,10),GUESS2(107,10),GUESS3(107,10) 7 /IDEAP / GUESP1(107,10),GUESP2(107,10),GUESP3(107,10) COMMON /ALPHA / ALP(107) 1 /REFS/ ALLREF(107,4) COMMON /MNDO/ USSM(107), UPPM(107), UDDM(107), ZSM(107), 1ZPM(107), ZDM(107), BETASM(107), BETAPM(107), BETADM(107), 2ALPM(107), EISOLM(107), DDM(107), QQM(107), AMM(107), 3ADM(107), AQM(107), GSSM(107), GSPM(107), GPPM(107), 4GP2M(107), HSPM(107), POLVOM(107) COMMON /PM3 / USSPM3(107), UPPPM3(107), UDDPM3(107), ZSPM3(107), 1ZPPM3(107), ZDPM3(107), BETASP(107), BETAPP(107), BETADP(107), 2ALPPM3(107), EISOLP(107), DDPM3(107), QQPM3(107), AMPM3(107), 3ADPM3(107), AQPM3(107) ,GSSPM3(107), GSPPM3(107), GPPPM3(107), 4GP2PM3(107), HSPPM3(107),POLVOP(107) COMMON /AM1BLO/USSAM1(107), UPPAM1(107), UDDAM1(107), ZSAM1(107), 1ZPAM1(107), ZDAM1(107), BETASA(107), BETAPA(107), BETADA(107), 2ALPAM1(107), EISOLA(107), DDAM1(107), QQAM1(107), AMAM1(107), 3ADAM1(107), AQAM1(107) ,GSSAM1(107), GSPAM1(107), GPPAM1(107), 4GP2AM1(107), HSPAM1(107),POLVOA(107) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) PARAMETER (MDUMY=MAXPAR**2-MPACK) COMMON /SCRACH/ RXYZ(MPACK), XDUMY(MDUMY) * * COMMON BLOCKS FOR MINDO/3 * COMMON /ONELE3 / USS3(18),UPP3(18) 1 /ATOMI3 / EISOL3(18),EHEAT3(18) 2 /EXPON3 / ZS3(18),ZP3(18) * * END OF MINDO/3 COMMON BLOCKS * COMMON /EXPONT/ ZS(107),ZP(107),ZD(107) COMMON /ATOMIC/ EISOL(107),EHEAT(107) DIMENSION COORD(3,NUMATM), ISWAP(2,20), ESTORE(107) CHARACTER*241 KEYWRD, OLDE(20)*6, ALLREF*80 LOGICAL DEBUG, UHF,EXCI, TRIP, MINDO3, BIRAD, AM1, LPM3, 1LMNDO, HALFE, SLOW DATA ESTORE(1)/0.D0/ IF(ESTORE(1).EQ.0.D0)THEN DO 9 I=1,107 9 ESTORE(I)=EHEAT(I) ENDIF DO 8 I=1,107 8 EHEAT(I)=ESTORE(I) DEBUG = (INDEX(KEYWRD,'MOLDAT').NE.0) LPM3 = (INDEX(KEYWRD,'PM3').NE.0) MINDO3= (INDEX(KEYWRD,'MINDO').NE.0) UHF=(INDEX(KEYWRD,'UHF') .NE. 0) AM1= (INDEX(KEYWRD,'AM1').NE.0) LMNDO=(.NOT.AM1.AND..NOT.LPM3) KHARGE=0 I=INDEX(KEYWRD,'CHARGE') IF(I.NE.0) KHARGE=READA(KEYWRD,I) ELECS=-KHARGE NDORBS=0 ATHEAT=0.D0 EAT=0.D0 NUMAT=0 IF(MODE.EQ.1) GOTO 80 IF ( LMNDO ) THEN * * SWITCH IN MNDO PARAMETERS * C C ZERO OUT GAUSSIAN 1 FOR CARBON. THIS WILL BE USED IN C ROTATE TO DECIDE WHETHER OR NOT TO USE AM1-TYPE GAUSSIANS C GUESS1(6,1)=0.D0 DO 10 I=1,107 IF(.NOT.MINDO3) POLVOL(I)=POLVOM(I) ZS(I)=ZSM(I) ZP(I)=ZPM(I) ZD(I)=ZDM(I) USS(I)=USSM(I) UPP(I)=UPPM(I) UDD(I)=UDDM(I) BETAS(I)=BETASM(I) BETAP(I)=BETAPM(I) BETAD(I)=BETADM(I) ALP(I)=ALPM(I) EISOL(I)=EISOLM(I) DD(I)=DDM(I) QQ(I)=QQM(I) AM(I)=AMM(I) AD(I)=ADM(I) AQ(I)=AQM(I) GSS(I)=GSSM(I) GPP(I)=GPPM(I) GSP(I)=GSPM(I) GP2(I)=GP2M(I) HSP(I)=HSPM(I) 10 CONTINUE ELSEIF( LPM3 ) THEN * * SWITCH IN MNDO-PM3 PARAMETERS * DO 30 I=1,107 DO 20 J=1,10 GUESS1(I,J)=GUESP1(I,J) GUESS2(I,J)=GUESP2(I,J) 20 GUESS3(I,J)=GUESP3(I,J) POLVOL(I)=POLVOP(I) ZS(I)=ZSPM3(I) ZP(I)=ZPPM3(I) ZD(I)=ZDPM3(I) USS(I)=USSPM3(I) UPP(I)=UPPPM3(I) UDD(I)=UDDPM3(I) BETAS(I)=BETASP(I) BETAP(I)=BETAPP(I) BETAD(I)=BETADP(I) ALP(I)=ALPPM3(I) EISOL(I)=EISOLP(I) DD(I)=DDPM3(I) QQ(I)=QQPM3(I) AM(I)=AMPM3(I) AD(I)=ADPM3(I) AQ(I)=AQPM3(I) GSS(I)=GSSPM3(I) GPP(I)=GPPPM3(I) GSP(I)=GSPPM3(I) GP2(I)=GP2PM3(I) HSP(I)=HSPPM3(I) 30 CONTINUE ELSE * * SWITCH IN AM1 PARAMETERS * DO 50 I=1,107 DO 40 J=1,10 GUESS1(I,J)=GUESA1(I,J) GUESS2(I,J)=GUESA2(I,J) 40 GUESS3(I,J)=GUESA3(I,J) POLVOL(I)=POLVOA(I) ZS(I)=ZSAM1(I) ZP(I)=ZPAM1(I) ZD(I)=ZDAM1(I) USS(I)=USSAM1(I) UPP(I)=UPPAM1(I) UDD(I)=UDDAM1(I) BETAS(I)=BETASA(I) BETAP(I)=BETAPA(I) BETAD(I)=BETADA(I) ALP(I)=ALPAM1(I) EISOL(I)=EISOLA(I) DD(I)=DDAM1(I) QQ(I)=QQAM1(I) AM(I)=AMAM1(I) AD(I)=ADAM1(I) AQ(I)=AQAM1(I) GSS(I)=GSSAM1(I) GPP(I)=GPPAM1(I) GSP(I)=GSPAM1(I) GP2(I)=GP2AM1(I) HSP(I)=HSPAM1(I) 50 CONTINUE ENDIF C C SWAP IN OLD PARAMETERS FOR ELEMENTS. OLDE CONTAINS THE C CHARACTER NAME OF THE ELEMENT, AND ISWAP(1,1:NEWELE) CONTAINS C THE ATOMIC NUMBER OF THE ELEMENT. ISWAP(2,1:NEWELE) CONTAINS C THE STORAGE ADDRESS OF THE OLD SET OF PARAMETERS. C NEWELE=2 OLDE(1)=' S1978' ISWAP(1,1)=16 ISWAP(2,1)=91 OLDE(2)='SI1978' ISWAP(1,2)=14 ISWAP(2,2)=90 C$DOIT ASIS DO 60 K=1,NEWELE IF(INDEX(KEYWRD,OLDE(K)).NE.0)THEN I=ISWAP(1,K) J=ISWAP(2,K) ALLREF(I,3)=ALLREF(J,1) ALLREF(I,1)=ALLREF(J,1) ZS(I)=ZS(J) ZP(I)=ZP(J) ZD(I)=ZD(J) USS(I)=USS(J) UPP(I)=UPP(J) UDD(I)=UDD(J) BETAS(I)=BETAS(J) BETAP(I)=BETAP(J) BETAD(I)=BETAD(J) ALP(I)=ALP(J) EISOL(I)=EISOL(J) DD(I)=DD(J) QQ(I)=QQ(J) AM(I)=AM(J) AD(I)=AD(J) AQ(I)=AQ(J) IF(GSS(J).NE.0)GSS(I)=GSS(J) IF(GPP(J).NE.0)GPP(I)=GPP(J) IF(GSP(J).NE.0)GSP(I)=GSP(J) IF(GP2(J).NE.0)GP2(I)=GP2(J) IF(HSP(J).NE.0)HSP(I)=HSP(J) ENDIF 60 CONTINUE IF( MINDO3 ) THEN DO 70 I=1,17 IF(I.NE.2.AND.I.NE.10)THEN USS(I)=USS3(I) UPP(I)=UPP3(I) EISOL(I)=EISOL3(I) EHEAT(I)=EHEAT3(I) ZS(I)=ZS3(I) ZP(I)=ZP3(I) GSS(I)=GSSM(I) GPP(I)=GPPM(I) GSP(I)=GSPM(I) GP2(I)=GP2M(I) HSP(I)=HSPM(I) ENDIF 70 CONTINUE ENDIF 80 CONTINUE IF(USS(1) .GT. -1.D0) THEN WRITE(6,'('' THE HAMILTONIAN REQUESTED IS NOT AVAILABLE IN'' 1,'' THIS PROGRAM'')') STOP ENDIF IA=1 IB=0 NHEAVY=0 DO 130 II=1,NATOMS IF(LABELS(II).EQ.99.OR.LABELS(II).EQ.107) GOTO 130 NUMAT=NUMAT+1 NAT(NUMAT)=LABELS(II) NFIRST(NUMAT)=IA NI=NAT(NUMAT) ATHEAT=ATHEAT+EHEAT(NI) EAT =EAT +EISOL(NI) ELECS=ELECS+CORE(NI) IB=IA+NATORB(NI)-1 NMIDLE(NUMAT)=IB IF(NATORB(NI).EQ.9)NDORBS=NDORBS+5 IF(NATORB(NI).EQ.9)NMIDLE(NUMAT)=IA+3 NLAST(NUMAT)=IB IF(IA.GT.MAXORB) GOTO 270 USPD(IA)=USS(NI) IF(IA.EQ.IB) GOTO 120 K=IA+1 K1=IA+3 C$DOIT ASIS DO 90 J=K,K1 IF(J.GT.MAXORB) GOTO 270 USPD(J)=UPP(NI) 90 CONTINUE NHEAVY=NHEAVY+1 100 IF(K1.EQ.IB)GOTO 120 K=K1+1 C$DOIT ASIS DO 110 J=K,IB 110 USPD(J)=UDD(NI) 120 CONTINUE 130 IA=IB+1 IF(NUMAT.EQ.1)THEN IF(INDEX(KEYWRD,'FORCE').NE.0)THEN WRITE(6,'(///,A)')' A SINGLE ATOM HAS NO VIBRATIONAL MO 1DES' STOP ENDIF ENDIF IF(MODE.NE.1)CALL REFER ATHEAT=ATHEAT-EAT*23.061D0 NORBS=NLAST(NUMAT) IF(NORBS.GT.MAXORB)THEN WRITE(6,'(//10X,''**** MAX. NUMBER OF ORBITALS:'',I4,/ 1 10X,''NUMBER OF ORBITALS IN SYSTEM:'',I4)') 2MAXORB,NORBS STOP ENDIF NLIGHT=NUMAT-NHEAVY N2EL=50*NHEAVY*(NHEAVY-1)+10*NHEAVY*NLIGHT+(NLIGHT*(NLIGHT-1))/2 IF(N2EL.GT.N2ELEC)THEN WRITE(6,'(//10X,''**** MAX. NUMBER OF TWO-ELECTRON INTEGRALS:'' 1,I8,/ 2 10X,''NUMBER OF TWO ELECTRON INTEGRALS IN SYSTEM:'', 3I8)') 4N2ELEC,N2EL STOP ENDIF C C NOW TO CALCULATE THE NUMBER OF LEVELS OCCUPIED TRIP=(INDEX(KEYWRD,'TRIP').NE.0) EXCI=(INDEX(KEYWRD,'EXCI').NE.0) BIRAD=(EXCI.OR.INDEX(KEYWRD,'BIRAD').NE.0) IF(INDEX(KEYWRD,'C.I.') .NE. 0 .AND. UHF ) THEN WRITE(6,'(//10X,''C.I. NOT ALLOWED WITH UHF '')') STOP ENDIF C C NOW TO WORK OUT HOW MANY ELECTRONS ARE IN EACH TYPE OF SHELL C NALPHA=0 NBETA=0 C C PROTECT DUMB USERS FROM DUMB ERRORS! C NELECS=MAX(ELECS+0.5D0,0.D0) NELECS=MIN(2*NORBS,NELECS) NCLOSE=0 NOPEN=0 IF( UHF ) THEN FRACT=1.D0 NBETA=NELECS/2 IF( TRIP ) THEN IF(NBETA*2 .NE. NELECS) THEN WRITE(6,'(//10X,''TRIPLET SPECIFIED WITH ODD NUMBER'', 1 '' OF ELECTRONS, CORRECT FAULT '')') STOP ELSE IF(MODE.NE.1) 1WRITE(6,'(//'' TRIPLET STATE CALCULATION'')') NBETA=NBETA-1 ENDIF ENDIF IF(INDEX(KEYWRD,'QUAR').NE.0) THEN IF(NBETA*2 .EQ. NELECS) THEN WRITE(6,'(//10X,''QUARTET SPECIFIED WITH EVEN NUMBER'', 1 '' OF ELECTRONS, CORRECT FAULT '')') STOP ELSE IF(MODE.NE.1) 1WRITE(6,'(//'' QUARTET STATE CALCULATION'')') NBETA=NBETA-1 ENDIF ENDIF IF(INDEX(KEYWRD,'QUIN').NE.0) THEN IF(NBETA*2 .NE. NELECS) THEN WRITE(6,'(//10X,''QUINTET SPECIFIED WITH ODD NUMBER'', 1 '' OF ELECTRONS, CORRECT FAULT '')') STOP ELSE IF(MODE.NE.1) 1WRITE(6,'(//'' QUINTET STATE CALCULATION'')') NBETA=NBETA-2 ENDIF ENDIF IF(INDEX(KEYWRD,'SEXT').NE.0) THEN IF(NBETA*2 .EQ. NELECS) THEN WRITE(6,'(//10X,''SEXTET SPECIFIED WITH EVEN NUMBER'', 1 '' OF ELECTRONS, CORRECT FAULT '')') STOP ELSE IF(MODE.NE.1)WRITE(6,'(//'' SEXTET STATE CALCULATION'')') NBETA=NBETA-2 ENDIF ENDIF NALPHA=NELECS-NBETA IF(MODE.NE.1) 1WRITE(6,'(//10X,''UHF CALCULATION, NO. OF ALPHA ELECTRONS ='',I 23,/27X,''NO. OF BETA ELECTRONS ='',I3)')NALPHA,NBETA ELSE C C NOW TO DETERMINE OPEN AND CLOSED SHELLS C IELEC=0 ILEVEL=0 IF( TRIP .OR. EXCI .OR. BIRAD ) THEN IF( (NELECS/2)*2 .NE. NELECS) THEN WRITE(6,'(//10X,''SYSTEM SPECIFIED WITH ODD NUMBER'', 1 '' OF ELECTRONS, CORRECT FAULT '')') STOP ENDIF IF(MODE.NE.1) THEN IF(BIRAD)WRITE(6,'(//'' SYSTEM IS A BIRADICAL'')') IF(TRIP )WRITE(6,'(//'' TRIPLET STATE CALCULATION'')') IF(EXCI )WRITE(6,'(//'' EXCITED STATE CALCULATION'')') ENDIF IELEC=2 ILEVEL=2 ELSEIF((NELECS/2)*2.NE.NELECS) THEN IELEC=1 ILEVEL=1 ENDIF IF(INDEX(KEYWRD,'QUAR').NE.0) THEN IF(MODE.NE.1)WRITE(6,'(//'' QUARTET STATE CALCULATION'')') IELEC=3 ILEVEL=3 ENDIF IF(INDEX(KEYWRD,'QUIN').NE.0) THEN IF(MODE.NE.1)WRITE(6,'(//'' QUINTET STATE CALCULATION'')') IELEC=4 ILEVEL=4 ENDIF IF(INDEX(KEYWRD,'SEXT').NE.0) THEN IF(MODE.NE.1)WRITE(6,'(//'' SEXTET STATE CALCULATION'')') IELEC=5 ILEVEL=5 ENDIF I=INDEX(KEYWRD,'OPEN(') IF(I.NE.0)THEN IELEC=READA(KEYWRD,I) ILEVEL=READA(KEYWRD,I+7) ENDIF NCLOSE=NELECS/2 NOPEN = NELECS-NCLOSE*2 IF( IELEC.NE.0 )THEN IF((NELECS/2)*2.EQ.NELECS .NEQV. 1 (IELEC/2)*2.EQ.IELEC) THEN WRITE(6,'('' IMPOSSIBLE NUMBER OF OPEN SHELL ELECTR 1ONS'')') STOP ENDIF NCLOSE=NCLOSE-IELEC/2 NOPEN=ILEVEL IF(NCLOSE+NOPEN.GT.NORBS)THEN WRITE(6,'(A)')' NUMBER OF DOUBLY FILLED PLUS PARTLY FILLE 1D LEVELS' WRITE(6,'(A)')' GREATER THAN TOTAL NUMBER OF ORBITALS.' STOP ENDIF FRACT=IELEC*1.D0/ILEVEL IF(MODE.NE.1) 1WRITE(6,'('' THERE ARE'',I3,'' DOUBLY FILLED LEVELS'')')NCLOSE ENDIF IF(MODE.NE.1)WRITE(6,'(//10X,''RHF CALCULATION, NO. OF '', 1''DOUBLY OCCUPIED LEVELS ='',I3)')NCLOSE IF(MODE.NE.1 .AND. NOPEN.NE.0.AND.ABS(FRACT-1.D0).LT.1.D-4) 1WRITE(6,'(/27X,''NO. OF SINGLY OCCUPIED LEVELS ='',I3)')NOPEN IF(MODE.NE.1 .AND. NOPEN.NE.0.AND.ABS(FRACT-1.D0).GT.1.D-4) 1WRITE(6,'(/27X,''NO. OF LEVELS WITH OCCUPANCY'',F6.3,'' ='',I3)') 2FRACT,NOPEN IF(INDEX(KEYWRD,'C.I.=(').NE.0) THEN I=READA(KEYWRD,INDEX(KEYWRD,'C.I.=(')+5)- 1 READA(KEYWRD,INDEX(KEYWRD,'C.I.=(')+7) IF(NOPEN.GT.I)THEN WRITE(6,'(//,'' NUMBER OF OPEN-SHELLS ALLOWED IN C.I. IS 1LESS '' /'' THAN THAT SPECIFIED BY OTHER KEYWORDS'') 2') STOP ENDIF ENDIF IF(INDEX(KEYWRD,'C.I.').NE.0.AND.NOPEN.EQ.0)THEN NOPEN=1 NCLOSE=NCLOSE-1 FRACT=2.D0 ENDIF NOPEN=NOPEN+NCLOSE ENDIF C C WORK OUT IF DEFINED SPIN-STATE ALLOWED C MSDEL=INDEX(KEYWRD,' MS') IF(MSDEL.NE.0)THEN MSDEL=1.0001D0*READA(KEYWRD,INDEX(KEYWRD,' MS')) ELSE IF(INDEX(KEYWRD,'TRIP')+INDEX(KEYWRD,'QUAR').GT.0)MSDEL=1 IF(INDEX(KEYWRD,'QUIN')+INDEX(KEYWRD,'SEXT').GT.0)MSDEL=2 ENDIF IF(MSDEL.NE.0.AND..NOT.UHF)THEN C C MSDEL = NUMBER OF ALPHA ELECTRONS - NUMBER OF BETA ELECTRONS C NDOUBL=99 IF(INDEX(KEYWRD,'C.I.=(').NE.0)THEN NDOUBL=READA(KEYWRD,INDEX(KEYWRD,'C.I.=(')+7) NMOS=READA(KEYWRD,INDEX(KEYWRD,'C.I.=(')+5) ELSEIF (INDEX(KEYWRD,'C.I.=').NE.0)THEN NMOS=READA(KEYWRD,INDEX(KEYWRD,'C.I.=')+5) ELSE NMOS=NOPEN-NCLOSE ENDIF IF(NDOUBL.EQ.99)THEN J=MAX(MIN((NCLOSE+NOPEN+1)/2-(NMOS-1)/2,NORBS-NMOS+1),1) ELSE J=NCLOSE-NDOUBL+1 ENDIF NE=MAX(0.D0,(NCLOSE-J+1.D0))*2.D0+ 1 MAX(0.D0,(NOPEN-NCLOSE)*FRACT) + 0.5D0 NUPP=(NE+1)/2+MSDEL NDOWN=NE-NUPP C C NUPP = NUMBER OF ALPHA ELECTRONS IN ACTIVE SPACE C NDOWN = NUMBER OF BETA ELECTRONS IN ACTIVE SPACE C IF(NUPP*NDOWN.LT.0.OR.NUPP.GT.NMOS.OR.NDOWN.GT.NMOS)THEN WRITE(6,'(A)') 1' SPECIFIED SPIN COMPONENT NOT SPANNED BY ACTIVE SPACE' STOP ENDIF ENDIF C# WRITE(6,'('' NOPEN,NCLOSE,NALPHA,NBETA,FRACT'',4I4,F12.5)') C# 1 NOPEN, NCLOSE, NLAPHA, NBETA, FRACT C C MAKE SURE ANALYT IS NOT USED WITH ANALYTICAL C.I. DERIVATIVES C HALFE = (NOPEN.GT.NCLOSE.AND.FRACT.NE.2.D0.AND.FRACT.NE.0.D0 1 .OR. INDEX(KEYWRD,'C.I.').NE.0) SLOW=(INDEX(KEYWRD,'EXCI').NE.0.OR. 1INDEX(KEYWRD,'ROOT').NE.0.AND.INDEX(KEYWRD,'ROOT=1').EQ.0) IF(HALFE)HALFE=(.NOT.SLOW) IF(INDEX(KEYWRD,'NOANCI').EQ.0.AND. 1INDEX(KEYWRD,'ANALYT').NE.0.AND.HALFE)THEN WRITE(6,*) WRITE(6,'(A)')' KEYWORD ''ANALYT'' CANNOT BE USED HERE: ', 1' ANALYICAL C.I. DERIVATIVES MUST USE FINITE DIFFERENCES', 2' TO CORRECT, REMOVE KEYWORD ''ANALYT'' OR ADD ''NOANCI''' STOP ENDIF YY=FLOAT(KHARGE)/(NORBS+1.D-10) L=0 DO 160 I=1,NUMAT NI=NAT(I) XX=1.D0/(NLAST(I)-NFIRST(I)+1+1.D-10) W=CORE(NI)*XX-YY IA=NFIRST(I) IC=NMIDLE(I) IB=NLAST(I) C$DOIT ASIS DO 140 J=IA,IC L=L+1 140 PSPD(L)=W C$DOIT ASIS DO 150 J=IC+1,IB L=L+1 150 PSPD(L)=0.D0 160 CONTINUE C C WRITE OUT THE INTERATOMIC DISTANCES C CALL GMETRY(GEO,COORD) RMIN=100.D0 L=0 DO 170 I=1,NUMAT DO 170 J=1,I L=L+1 RXYZ(L)=SQRT((COORD(1,I)-COORD(1,J))**2+ 1 (COORD(2,I)-COORD(2,J))**2+ 2 (COORD(3,I)-COORD(3,J))**2) IF(RMIN.GT.RXYZ(L) .AND. I .NE. J .AND. 1 (NAT(I).LT.103 .OR. NAT(J).LT.103)) THEN IMINR=I JMINR=J RMIN=RXYZ(L) ENDIF 170 CONTINUE NNHCO=0 C C SET UP MOLECULAR-MECHANICS CORRECTION TO -(C=O)-(NH)- LINKAGE C THIS WILL BE USED IF MMOK HAS BEEN SPECIFIED. C ITYPE=1 IF(INDEX(KEYWRD,'AM1').NE.0)ITYPE=2 IF(INDEX(KEYWRD,'PM3').NE.0)ITYPE=3 IF(INDEX(KEYWRD,'MINDO').NE.0)ITYPE=4 C C IDENTIFY O=C-N-H SYSTEMS VIA THE INTERATOMIC DISTANCES MATRIX DO 220 I=1,NUMAT IF(NAT(I).NE.8) GOTO 220 DO 210 J=1,NUMAT IF(NAT(J).NE.6) GOTO 210 IJ=MAX(I,J) JI=I+J-IJ IF(RXYZ((IJ*(IJ-1))/2+JI).GT.1.3)GOTO 210 DO 200 K=1,NUMAT IF(NAT(K).NE.7) GOTO 200 JK=MAX(J,K) KJ=J+K-JK IF(RXYZ((JK*(JK-1))/2+KJ).GT.1.6)GOTO 200 DO 190 L=1,NUMAT IF(NAT(L).NE.1) GOTO 190 KL=MAX(K,L) LK=K+L-KL IF(RXYZ((KL*(KL-1))/2+LK).GT.1.3)GOTO 190 C C WE HAVE A H-N-C=O SYSTEM. THE ATOM NUMBERS ARE L-K-J-I C NOW SEARCH OUT ATOM ATTACHED TO NITROGEN, THIS SPECIFIES C THE SYSTEM X-N-C=O C DO 180 M=1,NUMAT IF(M.EQ.K.OR.M.EQ.L.OR.M.EQ.J) GOTO 180 MK=MAX(M,K) KM=M+K-MK IF(RXYZ((MK*(MK-1))/2+KM).GT.1.7)GOTO 180 NNHCO=NNHCO+1 NHCO(1,NNHCO)=I NHCO(2,NNHCO)=J NHCO(3,NNHCO)=K NHCO(4,NNHCO)=M NNHCO=NNHCO+1 NHCO(1,NNHCO)=I NHCO(2,NNHCO)=J NHCO(3,NNHCO)=K NHCO(4,NNHCO)=L GOTO 190 180 CONTINUE 190 CONTINUE 200 CONTINUE 210 CONTINUE 220 CONTINUE IF(MODE.NE.1.AND.NNHCO.NE.0)THEN IF(INDEX(KEYWRD,'MMOK').NE.0) THEN WRITE(6,'(A)')' MOLECULAR MECHANICS CORRECTION APPLIED TO PE 1PTIDELINKAGE' ELSEIF(INDEX(KEYWRD,'NOMM').NE.0)THEN WRITE(6,'(A,I2,2A)')' THERE ARE ',NNHCO/2,' PEPTIDE LINKAGES 1',' IDENTIFIED IN THIS SYSTEM' WRITE(6,'(A)')' IF YOU WANT MM CORRECTION TO THE CONH BARRIE 1R, ADD THE KEY-WORD "MMOK"' NNHCO=0 ELSE WRITE(6,'(A)')' THIS SYSTEM CONTAINS -HNCO- GROUPS.' WRITE(6,'(A)')' YOU MUST SPECIFY "NOMM" OR "MMOK" REGARDING 1MOLECULAR MECHANICS CORRECTION' STOP ENDIF ENDIF IF(MODE.NE.1.AND.INDEX(KEYWRD,'NOINTER') .EQ. 0) THEN WRITE(6,'(//10X,'' INTERATOMIC DISTANCES'')') CALL VECPRT(RXYZ,NUMAT) ENDIF IF(RMIN.LT.0.8D0.AND.INDEX(KEYWRD,'GEO-OK') .EQ.0) THEN WRITE(6,230)IMINR,JMINR,RMIN 230 FORMAT(//,' ATOMS',I3,' AND',I3,' ARE SEPARATED BY',F8.4, 1' ANGSTROMS.',/' TO CONTINUE CALCULATION SPECIFY "GEO-OK"') STOP ENDIF IF(.NOT. DEBUG) RETURN WRITE(6,240)NUMAT,NORBS,NDORBS,NATOMS 240 FORMAT(' NUMBER OF REAL ATOMS:',I4,/ 1 ,' NUMBER OF ORBITALS: ',I4,/ 2 ,' NUMBER OF D ORBITALS:',I4,/ 3 ,' TOTAL NO. OF ATOMS: ',I4) WRITE(6,250)(USPD(I),I=1,NORBS) 250 FORMAT(' ONE-ELECTRON DIAGONAL TERMS',/,10(/,10F8.3)) WRITE(6,260)(PSPD(I),I=1,NORBS) 260 FORMAT(' INITIAL P FOR ALL ATOMIC ORBITALS',/,10(/,10F8.3)) RETURN 270 WRITE(6,'(//10X,'' MAXIMUM NUMBER OF ATOMIC ORBITALS EXCEEDED'')') WRITE(6,'( 10X,'' MAXIMUM ALLOWED ='',I4)')MAXORB STOP END mopac7-1.15/fortran/ijkl.f0000644000175000017500000000742211053302063012320 00000000000000 SUBROUTINE IJKL(CP, CF, NELEC, NMOS, DIJKL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION CP(NORBS,NMOS), CF(NORBS,NORBS), 1DIJKL(NORBS,NMOS,(NMOS*(NMOS+1))/2) ************************************************************************ * * IJKL FILLS THE XY ARRAY. XY HOLDS THE TWO-ELECTRON INTEGRALS OVER * MOLECULAR ORBITALS IN THE ACTIVE SPACE. * XY(I,J,K,L) = * * ON INPUT * * CP = M.O.'S OVER C.I. ACTIVE SPACE (NORMALLY 1 TO 5 M.O.S) * CF = ALL M.O.'S, INCLUDING THOSE IN CP * NORBS = NUMBER OF ATOMIC ORBITALS * NELEC = NUMBER OF OCCUPIED M.O.S NOT INVOLVED IN THE C.I. * NMOS = NUMBER OF M.O.S INVOLVED IN THE C.I. (NORMALLY 1 TO 5 M.O.S) * ALSO CALLED THE ACTIVE SPACE OF THE C.I. * * NOTE: THIS SUBROUTINE IS UNUSUAL IN THAT ONE FUNCTION IS TO * FILL THE ARRAY XY WHICH IS NOT PASSED AS AN ARGUMENT, * INSTEAD IT IS PASSED VIA COMMON BLOCK XYIJKL. * ************************************************************************ COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /VECTOR/ DUMY1(MORB2+MAXORB), CIJ(10*MAXORB), 1WCIJ(10*MAXORB), DUMY(MORB2-19*MAXORB) COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) DIMENSION CKL(10*MAXORB) DIMENSION NB(0:8) EQUIVALENCE (CKL, CIJ) DATA NB /1,0,0,10,0,0,0,0,45/ C C CALCULATE TWO-ELECTRON INTEGRALS FOR THE SET DIJKL(K,L,IJ) C THE INDEX K RUNS OVER ALL M.O.'S, L OVER ACTIVE-SPACE M.O.'S, C AND IJ OVER LOWER-HALF TRIANGLE OF ACTIVE-SPACE M.O.'S, J FASTER THAN C I. C ALL ACTIVE-SPACE INTERACTIONS ARE COPIED INTO THE ARRAY XY C IJ=0 DO 70 I=1,NMOS DO 70 J=1,I IJ=IJ+1 IPQ=0 DO 10 II=1,NUMAT DO 10 IP=NFIRST(II),NLAST(II) DO 10 IQ=NFIRST(II),IP IPQ=IPQ+1 10 CIJ(IPQ)=CP(IP,I)*CP(IQ,J)+CP(IP,J)*CP(IQ,I) C C CIJ HOLDS THE DENSITY DISTRIBUTION PSI(I)*PSI(J) OVER ATOMIC BASES C I AND J ARE M.O. INDICES WITHIN THE ACTIVE SPACE. CIJ(M,N) IS FOR C THE ATOMIC BASES M AND N FOR M.O.'S I AND J. C CALL PARTXY (CIJ,WCIJ) C C WCIJ HOLDS THE KET PART OF THE INTEGRAL C THAT IS, |1/R(1,2)|I,J>. WCIJ(M,N) IS FOR THE ATOMIC BASES M AND N C FOR M.O.'S K AND L. C 20 CONTINUE DO 60 K=1,NORBS DO 50 L=1,NMOS C C ABOUT TO CALCULATE C IPQ=0 DO 30 II=1,NUMAT DO 30 IP=NFIRST(II),NLAST(II) DO 30 IQ=NFIRST(II),IP IPQ=IPQ+1 30 CKL(IPQ)=CF(IP,K)*CP(IQ,L)+CP(IP,L)*CF(IQ,K) C C CKL HOLDS THE DENSITY DISTRIBUTION PSI(K)*PSI(L) OVER ATOMIC BASES. C K IS THE INDEX OF A M.O.; L IS AN INDEX OF A M.O. IN THE ACTIVE SPACE. C SUM=0.D0 DO 40 II=1,IPQ 40 SUM=SUM+CKL(II)*WCIJ(II) C C SUM IS THE INTEGRAL C DIJKL(K,L,IJ)=SUM 50 CONTINUE 60 CONTINUE 70 CONTINUE C C NOW SPREAD THE INTEGRALS OVER THE XY ARRAY. XY IS ENTIRELY C IN ACTIVE SPACE C DO 80 K=1,NMOS KK=NELEC+K C C K IS A M.O. INDEX IN ACTIVE SPACE C KK IS A M.O. INDEX C DO 80 L=1,NMOS IJ=0 DO 80 I=1,NMOS DO 80 J=1,I IJ=IJ+1 SUM=DIJKL(KK,L,IJ) XY(I,J,K,L)=SUM XY(I,J,L,K)=SUM XY(J,I,K,L)=SUM XY(J,I,L,K)=SUM XY(K,L,I,J)=SUM XY(K,L,J,I)=SUM XY(L,K,I,J)=SUM 80 CONTINUE RETURN END mopac7-1.15/fortran/parsav.f0000644000175000017500000000564511053302063012670 00000000000000 SUBROUTINE PARSAV(MODE,N,M) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' ********************************************************************** * * PARSAV SAVES AND RESTORES DATA USED IN NLLSQ GRADIENT MINIMIZATION. * * IF MODE IS 0 DATA ARE RESTORED, IF 1 THEN SAVED. * ********************************************************************** COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /ALPARM/ ALPARM(3,MAXPAR),X0, X1, X2, ILOOP COMMON /KEYWRD/ KEYWRD COMMON /ELEMTS/ ELEMNT(107) COMMON /ERRFN / ERRFN(MAXPAR), AICORR(MAXPAR) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /NLLCOM/ Q(MAXPAR,MAXPAR),R(MAXPAR,MAXPAR*2) COMMON /NLLCO2/ DDDUM(6),EFSLST(MAXPAR),XLAST(MAXPAR),IIIUM(7) COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), JDUMY, DUMY(MAXPAR) COMMON /LOCVAR/ LOCVAR(2,MAXPAR) COMMON /VALVAR/ VALVAR(MAXPAR),NUMVAR DIMENSION COORD(3,NUMATM) CHARACTER ELEMNT*2, KEYWRD*241, GETNAM*80 OPEN(UNIT=9,FILE=GETNAM('FOR009'), + STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 9 OPEN(UNIT=10,FILE=GETNAM('FOR010'), + STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 10 IF(MODE.NE.0) GOTO 10 * * MODE=0: RETRIEVE DATA FROM DISK. * READ(9,END=30,ERR=30)IIIUM,DDDUM,EFSLST,N,(XLAST(I),I=1,N),M READ(9)((Q(J,I),J=1,M),I=1,M) READ(9)((R(J,I),J=1,N),I=1,N) READ(9)(VALVAR(I),I=1,N) IF(INDEX(KEYWRD,'AIDER').NE.0) READ(9)(AICORR(I),I=1,N) RETURN 10 CONTINUE IF(MODE.EQ.1)THEN WRITE(6,'(//10X,'' **** TIME UP ****'')') WRITE(6,'(//10X,'' CURRENT VALUES OF GEOMETRIC VARIABLES'',//)' 1) IF(NA(1) .EQ. 99) THEN C C CONVERT FROM CARTESIAN COORDINATES TO INTERNAL C DO 20 I=1,NATOMS DO 20 J=1,3 20 COORD(J,I)=GEO(J,I) CALL XYZINT(COORD,NUMAT,NA,NB,NC,1.D0,GEO) ENDIF CALL GEOUT(6) WRITE(6,'(//10X, 1''TO RESTART CALCULATION USE THE KEYWORD "RESTART".'')') ENDIF WRITE(9)IIIUM,DDDUM,EFSLST,N,(XLAST(I),I=1,N),M WRITE(9)((Q(J,I),J=1,M),I=1,M) WRITE(9)((R(J,I),J=1,N),I=1,N) WRITE(9)(VALVAR(I),I=1,N) IF(INDEX(KEYWRD,'AIDER').NE.0) WRITE(9)(AICORR(I),I=1,N) C***** C The density matrix is required by ITER upon restart . C LINEAR=(NORBS*(NORBS+1))/2 WRITE(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)WRITE(10)(PB(I),I=1,LINEAR) C***** CLOSE(9) CLOSE(10) RETURN 30 WRITE(6,'(//10X,''NO RESTART FILE EXISTS!'')') STOP END mopac7-1.15/fortran/greenf.f0000644000175000017500000021261211053302064012635 00000000000000 SUBROUTINE GREENF IMPLICIT DOUBLE PRECISION (A-H,O-Z) ******************************************************************* * * * SUBROUTINE NEED FOR GREEN FUNCTION CALCULATION * ******************************************************************* INCLUDE 'SIZES' COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, 2 FRACT COMMON/DOD/ITL(200),IT(200) COMMON/DOD1/NMUX,LM6,LM7 COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) * IW=6 WRITE(IW,10) 10 FORMAT(///) WRITE(IW,20) 20 FORMAT(10X,'************************************************'/ 1 10X,'* *'/ 2 10X,'* SEMIEMPIRICAL GREEN FUNCTION CALCULATION *'/ 3 10X,'* *'/ 4 10X,'* This package was written by Dr. D.Danovich *'/ 5 10X,'* Chemistry Department *'/ 6 10X,'* TECHNION-Israel Institute of Technology *'/ 7 10X,'* Technion City, Haifa 32000, ISRAEL *'/ 8 10X,'* *'/ 9 10X,'************************************************') K=0 DO 30 I=1,200 IT(I)=K 30 K=K+I DO 40 I=1,200 N=IT(I) 40 ITL(I)=N*(N-1)/2 MMM=NORBS NMUX=ITL(MMM)+IT(MMM)*MMM+IT(MMM)+IT(MMM)+MMM LM6=0 DO 50 I=1,NUMAT IAO=NLAST(I)-NFIRST(I)+1 50 LM6=LM6+(IAO*(IAO+1))/2 LM7=LM6*LM6 MEMORY=NMUX+2*LM6+LM7+8 CALL INSYMC CALL MO(MEMORY) RETURN END C C================================================================== C SUBROUTINE GSTORE(II,JJ,KK,LL,WERT,PGR,NMUX) ************************************************************ * * * STORE TWO-ELECTRON MO INTEGRALS ON FILE NTP3. * * SUBROUTINE WRITTEN BY DR.DAVID DANOVICH, * * COMPUTATIONAL CHEMISTRY CENTRE, CHEMISTRY DEPARTMENT * * TECHNION-ISRAEL INSTITUTE OF TECHNOLOGY, HAIFA, * * 32000, ISRAEL, VERSION 02.09.90 * ************************************************************ IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION PGR(*) COMMON/DOD/ITL(200),IT(200) III=II JJJ=JJ KKK=KK LLL=LL IF(III.GE.JJJ) GO TO 10 LT=III III=JJJ JJJ=LT 10 IF(KKK.GE.LLL) GO TO 20 LT=KKK KKK=LLL LLL=LT 20 IF(III.GT.KKK) GO TO 40 IF(III.EQ.KKK) GO TO 30 LT=III III=KKK KKK=LT LT=JJJ JJJ=LLL LLL=LT GO TO 40 30 IF(JJJ.GE.LLL) GO TO 40 LT=JJJ JJJ=LLL LLL=LT 40 NNNN=ITL(III)+IT(III)*JJJ+IT(JJJ)+IT(KKK)+LLL PGR(NNNN)=WERT RETURN END C C====================================================================== C SUBROUTINE INSYMC IMPLICIT DOUBLE PRECISION (A-H,O-Z) ****************************************************************** * * * SUBROUTINE NEED FOR GREEN FUNCTION CALCULATIONS * ****************************************************************** INCLUDE 'SIZES' COMMON/CIMOS /IMOCI(200) COMMON/CIPARM/ICI1,ICI2,IOUT2 COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), * NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN, * NDUMY,FRACT CHARACTER LINE*80 DIMENSION VALUE(40) NRA=6 NAMB=NORBS-NCLOSE READ(5,'(A)') LINE CALL NUCHAR(LINE,VALUE,NVALUE) ICI1=VALUE(1) ICI2=VALUE(2) IOUTCI=VALUE(3) IF(ICI1.EQ.0) ICI1=20 IF(ICI1.GT.NCLOSE) ICI1=NCLOSE IF(ICI2.EQ.0) ICI2=20 IF(ICI2.GT.NAMB) ICI2=NAMB WRITE(NRA,3185) ICI1,ICI2,IOUTCI IOUT2=IOUTCI C *** DEFINITION OF ORBITALS INVOLVED IN THE GREEN TREATMENT. IA=ICI1+1 IB=ICI1+ICI2 DO 101 I=1,ICI1 101 IMOCI(I)=NCLOSE+1-I DO 102 I=IA,IB 102 IMOCI(I)=NCLOSE+1+I-IA RETURN 3185 FORMAT(///1X,'NUMBER OF OCCUPIED MOS',4X,I4, 1 /1X,'NUMBER OF UNOCCUPIED MOS',2X,I4, 2 /1X,'PRINTING FLAG',13X,I4) END C C============================================================== C SUBROUTINE MO(MEMORY) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ******************************************************************* * * * SUBROUTINE NEED FOR GREEN FUNCTION CALCULATIONS * ******************************************************************* INCLUDE 'SIZES' COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, 2 FRACT COMMON/DOD/ITL(200),IT(200) COMMON/VECTOR/C(MORB2),EIG(MAXORB),CBETA(MORB2),EIGB(MAXORB) COMMON/WMATRX/W(N2ELEC),WK(N2ELEC) COMMON/CIPARM/ICI1,ICI2,IOUT2 COMMON/DOD1/NMUX,LM6,LM7 COMMON/FMCOM/X(IGREEN) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) IF(MEMORY.GT.IGREEN)THEN WRITE(IW,'(A)')' AVAILABLE MEMORY IN '// 1'GREENS FUNCTION CALCULATION' WRITE(IW,'(A,I8,A,I8)')' TOO SMALL. AVAILABLE:' 1,IGREEN,' NEEDED:',MEMORY WRITE(IW,'(A)')' TO RUN THIS JOB, MODIFY IGREEN IN SUBROUTINE' 1//' MO (CALLED BY GREENF) AND RECOMPILE' STOP ENDIF LOADFM=0 I10=1+LOADFM NNMM=I10+NMUX NNNN1=NNMM+LM7 NNMM1=NNNN1+LM6 LAST=NNMM1+LM6 NEED=LAST-I10 CALL WORDER(X(NNMM),LM7,IOUT2) CALL MOINT(C,X(I10),X(NNMM),X(NNNN1),X(NNMM1),NORBS,NORBS,LM7,LM6, 1 NMUX) CALL FCNPP(X(I10),NMUX) RETURN END SUBROUTINE MOINT(C,PGR,CC,W,C12,NORBS,LM2,LM8,KMAX,NMUX) ******************************************************************** * TRANSFORMATION OF TWO-ELECTRON INTEGRALS FROM AO TO MO BASIS * * SUBROUTINE WRITTEN BY DR.DAVID DANOVICH, COMPUTATIONAL * * CHEMISTRY CENTRE, DEPARTMENT OF CHEMISTRY, TECHNION - * * ISRAEL INSTITUTE OF TECHNOLOGY, HAIFA, 32000, ISRAEL * * VERSION 02.09.90 * * SUBROUTINE NEED FOR GREEN FUNCTION CALCULATIONS * ******************************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION PGR(*) COMMON/CIMOS /IMOCI(200) COMMON/CIPARM/ICI1,ICI2,IOUT2 COMMON/DAVI/NINTG COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION C(LM2,NORBS),CC(*),W(*),C12(*) DATA OFF/1.0D-8/,ZERO/0.0D0/ C SET CONTROL VARIABLES. C LMAX = STORAGE CAPACITY OF CC(LM8) LMAX = LM8/KMAX C COMPUTE (IJ,KL) INTEGRALS IEND=ICI1+ICI2 NINTG=0 C OUTER IJ-LOOP DO 10 I=1,IEND II = IMOCI(I) DO 10 J=1,I IJ = IMOCI(J) C COMPUTE SET OF (IJ,AB) INTEGRALS CALL CCPROD(C(1,II),C(1,IJ),C12,LM2,KMAX) CALL WWSTEP(C12,CC,W,LM8,KMAX,LMAX) C INNER KL-LOOP DO 10 K=1,I IK = IMOCI(K) DO 10 L=1,K IF(I.EQ.K.AND.J.LT.L) GO TO 10 IL = IMOCI(L) WNN = ZERO C COMPUTE THE INTEGRAL NINTG = NINTG+1 CALL CCPROD(C(1,IK),C(1,IL),C12,LM2,KMAX) WNN = SISMS(C12,W,KMAX) IF(DABS(WNN).LT.OFF) WNN=ZERO CALL GSTORE(II,IJ,IK,IL,WNN,PGR,NMUX) 10 CONTINUE IF(IOUT2.GT.-5) WRITE(IW,20) NINTG 20 FORMAT(///1X,'THERE ARE',I12,' NONZERO INTEGRALS.'/) RETURN END C C======================================================================= C FUNCTION SISMS (C12,CC,LM6) C SCALAR PRODUCT. ******************************************************************* * FUNCTION NEED FOR GREEN FUNCTION CALCULATIONS * ******************************************************************* IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION C12(*),CC(*) SISMS=0.D0 DO 10 I=1,LM6 10 SISMS=SISMS+C12(I)*CC(I) RETURN END C C=================================================================== C SUBROUTINE SUMA2(P,NDIS,EP) ******************************************************************** * CALCULATION SECOND-ORDER CONTRIBUTION IN THE SELF-ENERGY * * FUNCTION * * SUBROUTINE WRITTEN BY DR. DAVID DANOVICH, COMPUTATIONAL * * CHEMISTRY CENTRE, DEPARTMENT OF CHEMISTRY, TECHNION - * * ISRAEL INSTITUTE OF TECHNOLOGY, HAIFA, 32000, ISRAEL * * VERSION 02.09.90 * ******************************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION P(*) COMMON/DOD/ITL(200),IT(200) COMMON/VECTOR/C(MORB2),EIG(MAXORB),CBETA(MORB2),EIGB(MAXORB) COMMON/PEREM/NYR,IY,IGGV,IGGW COMMON/SUMA/SU2R,EPS,SUM1,SUM2 KYR2=NYR+IGGV KYR1=NYR+1 MYR=NYR-IGGW SUM1=0.D0 SUM2=0.D0 DO 70 M=KYR1,KYR2 DO 70 I=MYR,NYR DO 70 J=MYR,NYR IYR=IY II=I MM=M JJ=J IF(IYR.GE.II) GO TO 10 LT=IYR IYR=II II=LT 10 IF(IYR.GT.MM) GO TO 30 IF(IYR.EQ.MM) GO TO 20 LT=IYR IYR=MM MM=LT LT=II II=JJ JJ=LT GO TO 30 20 IF(II.GE.JJ) GO TO 30 LT=II II=JJ JJ=LT 30 NUMB=ITL(IYR)+IT(IYR)*II+IT(II)+IT(MM)+JJ IYR=IY JJ=J MM=M II=I IF(IYR.GE.JJ) GO TO 40 LT=IYR IYR=JJ JJ=LT 40 IF(IYR.GT.MM) GO TO 60 IF(IYR.EQ.MM) GO TO 50 LT=IYR IYR=MM MM=LT LT=JJ JJ=II II=LT GO TO 60 50 IF(JJ.GE.II) GO TO 60 LT=JJ JJ=II II=LT 60 NUMB1=ITL(IYR)+IT(IYR)*JJ+IT(JJ)+IT(MM)+II SUM1=SUM1+(2.D0*P(NUMB)-P(NUMB1))*P(NUMB)/ 1(EP+EIG(M)-EIG(I)-EIG(J)) 70 CONTINUE DO 140 M=KYR1,KYR2 DO 140 N=KYR1,KYR2 DO 140 I=MYR,NYR IYR=IY II=I MM=M NN=N IF(IYR.GE.MM) GO TO 80 LT=IYR IYR=MM MM=LT 80 IF(IYR.GT.NN) GO TO 100 IF(IYR.EQ.NN) GO TO 90 LT=IYR IYR=NN NN=LT LT=MM MM=II II=LT GO TO 100 90 IF(MM.GE.II) GO TO 100 LT=MM MM=II II=LT 100 NUMB=ITL(IYR)+IT(IYR)*MM+IT(MM)+IT(NN)+II IYR=IY NN=N MM=M II=I IF(IYR.GE.NN) GO TO 110 LT=IYR IYR=NN NN=LT 110 IF(IYR.GT.MM) GO TO 130 IF(IYR.EQ.MM) GO TO 120 LT=IYR IYR=MM MM=LT LT=NN NN=II II=LT GO TO 130 120 IF(NN.GE.II) GO TO 130 LT=NN NN=II II=LT 130 NUMB1=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(MM)+II SUM2=SUM2+(2.D0*P(NUMB)-P(NUMB1))*P(NUMB)/ 1(EP+EIG(I)-EIG(M)-EIG(N)) 140 CONTINUE SU2R=SUM1+SUM2 RETURN END C C======================================================================= C SUBROUTINE WORDER(CC,LM7,IOUT2) ********************************************************* * * * ORDERING OF AO REPULSION INTEGRALS. * * SUBROUTINE NEED FOR GREEN FUNCTION CALCULATION * ********************************************************* IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON/TWOELE/GSS(107),GSP(107),GPP(107),GP2(107),HSP(107), 1 GSD(107),GPD(107),GDD(107) COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, 2 FRACT COMMON/WMATRX/W(N2ELEC),WK(N2ELEC) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION CC(*) DIMENSION INDX(NUMATM),INDY(NUMATM) DATA ZERO/0.0D0/ KK=1 DO 10 I=1,NUMAT INDX(I)=KK KK=KK+1 IF(NAT(I).GT.2) KK=KK+9 INDY(I)=KK-1 10 CONTINUE C STORAGE CONTROL. KMAX=KK-1 LMAX=LM7/KMAX KTOT=KMAX*KMAX IF(KMAX.GT.LMAX) KTOT=KMAX*LMAX C SORTING OF INTEGRALS FOR MNDO C NUMBER OF RECORDS. LREC=1+(KMAX-1)/LMAX DO 190 L=1,LREC LA=LMAX*(L-1)+1 LB=LMAX*L KP=KMAX*(LA-1) C INITIALIZE INTEGRALS. DO 20 KK=1,KTOT 20 CC(KK)=ZERO C LOOP OVER ONE-CENTER INTEGRALS. DO 90 II=1,NUMAT IA=INDX(II) IF(IA.GT.LB) GO TO 100 IB=INDY(II) IF(IB.LT.LA) GO TO 90 NI=NAT(II) IF(NI.GT.2) GO TO 30 C HYDROGEN. KK=KMAX*(IA-1)+IA-KP CC(KK)=GSS(NI) GO TO 90 C HEAVY ATOM. 30 DO 80 I=IA,IB IF(I.LT.LA.OR.I.GT.LB) GO TO 80 KS =KMAX*(I-1)+IA-1-KP KGO=I-IA+1 KK =KS+KGO GO TO (40,50,60,50,70,60,50,70,70,60),KGO 40 CC(KK )=GSS(NI) CC(KS+3 )=GSP(NI) CC(KS+6 )=GSP(NI) CC(KS+10)=GSP(NI) GO TO 80 50 CC(KK )=HSP(NI) GO TO 80 60 CC(KS+1 )=GSP(NI) CC(KS+3 )=GP2(NI) CC(KS+6 )=GP2(NI) CC(KS+10)=GP2(NI) CC(KK )=GPP(NI) GO TO 80 70 CC(KK )=0.5D0*(GPP(NI)-GP2(NI)) 80 CONTINUE 90 CONTINUE C LOOP OVER TWO-CENTER INTEGRALS, MNDO. 100 IF(NUMAT.EQ.1) GO TO 180 NA=0 DO 170 II=2,NUMAT IA=INDX(II) IB=INDY(II) IW1=IB-IA+1 IMINUS=II-1 DO 170 JJ=1,IMINUS JA=INDX(JJ) JB=INDY(JJ) JW=JB-JA+1 NO=IW1*JW C CASE II.GT.JJ. IF(IA.GT.LB.OR.IB.LT.LA) GO TO 130 DO 120 I=IA,IB IF(I.LT.LA.OR.I.GT.LB) GO TO 120 KS=KMAX*(I-1)+JA-1-KP NS=NA+JW*(I-IA) DO 110 J=1,JW KK=KS+J NN=NS+J 110 CC(KK)=W(NN) 120 CONTINUE C CASE II.LT.JJ. 130 IF(JA.GT.LB.OR.JB.LT.LA) GO TO 160 DO 150 J=JA,JB IF(J.LT.LA.OR.J.GT.LB) GO TO 150 KS=KMAX*(J-1)+IA-1-KP NS=NA+J-JA+1-JW DO 140 I=1,IW1 KK=KS+I NN=NS+JW*I 140 CC(KK)=W(NN) 150 CONTINUE 160 NA=NA+NO 170 CONTINUE 180 CONTINUE 190 CONTINUE C DEBUG PRINT. IF(IOUT2.LT.1) RETURN WRITE(IW,220) WRITE(IW,230) KMAX IF(LREC.GT.1) WRITE(IW,240) LREC,LMAX,KTOT IF(IOUT2.LT.4) RETURN IMAX=KMAX IF(LREC.EQ.1) GO TO 200 IMAX=LMAX 200 WRITE(IW,250) KK=1 DO 210 I=1,IMAX KA=KK KB=KA+KMAX-1 WRITE(IW,260) (CC(K),K=KA,KB) 210 KK=KA+KMAX RETURN 220 FORMAT(1H1,//1X,'AO INTEGRALS IN NEW ORDER.'/) 230 FORMAT(//1X,'THE AO INTEGRALS ARE STORED IN A MATRIX WITH',I4, 1 ' ROWS AND COLUMNS.') 240 FORMAT( 1X,'THERE ARE',I4,' RECORDS EACH OF WHICH ', 1 'CONTAINS',I4/2X,' COLUMNS AND',I6,' INTEGRALS.') 250 FORMAT(//1X,'INTEGRALS IN THE FIRST RECORD.'/) 260 FORMAT( 1X,10F7.3) END C C======================================================================= C SUBROUTINE WWSTEP(C12,CC,WW,LM7,KMAX,LMAX) ********************************************************* * * * CALCULATION OF A SET OF (IJ,AB) INTEGRALS. * * SUBROUTINE NEED FOR GREEN FUNCTION CALCULATION * ********************************************************* IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION C12(*),CC(*),WW(*) IF(KMAX.GT.LMAX) GO TO 20 C AO INTEGRALS IN CC(LM7). KK=1-KMAX DO 10 NN=1,KMAX KK=KK+KMAX 10 WW(NN) = SISMS(C12,CC(KK),KMAX) RETURN 20 CONTINUE KK=1-KMAX LL=0 DO 40 NN=1,KMAX LL=LL+1 IF(LL.LE.LMAX) GO TO 30 KK=1-KMAX LL=1 30 KK=KK+KMAX 40 WW(NN) = SISMS(C12,CC(KK),KMAX) RETURN END C C======================================================================= C SUBROUTINE ASUM(P,NDIS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ***************************************************************** * CALCULATION "AI" VALUES FOR GREEN'S FUNCTION METHOD * * SUBROUTINE WRITTEN BY DR. DAVID DANOVICH, DEPARTMENT OF * * OF CHEMISTRY, TECHNION-ISRAEL INSTITUTE OF TECHNOLOGY, * * HAIFA, 32000, ISRAEL. VERSION: 2.09.90 * ***************************************************************** INCLUDE 'SIZES' DIMENSION P(*) COMMON/DOD/ITL(200),IT(200) COMMON/VECTOR/C(MORB2),EIG(MAXORB),DUMY(MORB2+MAXORB) COMMON/PEREM/NYR,IY,IGGV,IGGW COMMON/ASMA/AS1,AS2,AS3,AS4,AS5,AS6 KYR2=NYR+IGGV KYR1=NYR+1 MYR1=NYR-IGGW AS1=0.D0 AS2=0.D0 AS3=0.D0 AS4=0.D0 AS5=0.D0 AS6=0.D0 DO 200 M=KYR1,KYR2 DO 200 N=KYR1,KYR2 DO 200 I=MYR1,NYR DO 200 J=MYR1,NYR DO 200 K=MYR1,NYR IYR=IY KK=K JJ=J IF(KK.GE.JJ) GO TO 10 LT=KK KK=JJ JJ=LT 10 IF(IYR.GT.NYR) GO TO 20 IF(IYR.GE.KK) GO TO 20 NUMB=ITL(KK)+IT(KK)*JJ+IT(JJ)+IT(IYR)+IYR GO TO 30 20 NUMB=ITL(IYR)+IT(IYR)*IYR+IT(IYR)+IT(KK)+JJ 30 IYR=IY KK=K JJ=J IF(IYR.LE.NYR) GO TO 50 IF(JJ.GE.KK) GO TO 40 LT=JJ JJ=KK KK=LT 40 NUMB1=ITL(IYR)+IT(IYR)*JJ+IT(JJ)+IT(IYR)+KK GO TO 100 50 IF(IYR.GE.JJ.AND.IYR.GE.KK) GO TO 60 IF(IYR.LT.JJ.AND.IYR.LT.KK) GO TO 70 IF(IYR.GE.JJ.AND.IYR.LT.KK) GO TO 90 NUMB1=ITL(JJ)+IT(JJ)*IYR+IT(IYR)+IT(IYR)+KK GO TO 100 60 IF(JJ.GE.KK) GO TO 40 LT=JJ JJ=KK KK=LT GO TO 40 70 IF(JJ.GE.KK) GO TO 80 LT=JJ JJ=KK KK=LT 80 NUMB1=ITL(JJ)+IT(JJ)*IYR+IT(IYR)+IT(KK)+IYR GO TO 100 90 NUMB1=ITL(KK)+IT(KK)*IYR+IT(IYR)+IT(IYR)+JJ 100 JJ=J II=I MM=M NN=N IF(MM.GT.NN) GO TO 110 IF(MM.EQ.NN) GO TO 120 NUMB2=ITL(NN)+IT(NN)*II+IT(II)+IT(MM)+JJ GO TO 130 110 NUMB2=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(NN)+II GO TO 130 120 IF(JJ.GE.II) GO TO 110 LT=JJ JJ=II II=LT GO TO 110 130 JJ=J NN=N II=I MM=M IF(NN.GT.MM) GO TO 140 IF(NN.EQ.MM) GO TO 150 NUMB3=ITL(MM)+IT(MM)*II+IT(II)+IT(NN)+JJ GO TO 160 140 NUMB3=ITL(NN)+IT(NN)*JJ+IT(JJ)+IT(MM)+II GO TO 160 150 IF(JJ.GE.II) GO TO 140 LT=JJ JJ=II II=LT GO TO 140 160 MM=M KK=K NN=N II=I IF(MM.GT.NN) GO TO 170 IF(MM.EQ.NN) GO TO 180 NUMB4=ITL(NN)+IT(NN)*II+IT(II)+IT(MM)+KK GO TO 190 170 NUMB4=ITL(MM)+IT(MM)*KK+IT(KK)+IT(NN)+II GO TO 190 180 IF(KK.GE.II) GO TO 170 LT=KK KK=II II=LT GO TO 170 190 AS1=AS1+(2.D0*P(NUMB)-P(NUMB1))* 1(2.D0*P(NUMB2)-P(NUMB3))*P(NUMB4)/ 2((EIG(J)+EIG(I)-EIG(M)-EIG(N))*(EIG(K)+EIG(I)-EIG(M)-EIG(N))) 200 CONTINUE AS1=-AS1 DO 400 M=KYR1,KYR2 DO 400 N=KYR1,KYR2 DO 400 L=KYR1,KYR2 DO 400 I=MYR1,NYR DO 400 J=MYR1,NYR IYR=IY NN=N LL=L IF(LL.GE.NN) GO TO 210 LT=LL LL=NN NN=LT 210 IF(IYR.LE.NYR) GO TO 220 IF(IYR.LT.LL) GO TO 220 NUMB=ITL(IYR)+IT(IYR)*IYR+IT(IYR)+IT(LL)+NN GO TO 230 220 NUMB=ITL(LL)+IT(LL)*NN+IT(NN)+IT(IYR)+IYR 230 IYR=IY NN=N LL=L IF(IYR.GT.NYR) GO TO 250 IF(NN.GE.LL) GO TO 240 LT=NN NN=LL LL=LT 240 NUMB1=ITL(NN)+IT(NN)*IYR+IT(IYR)+IT(LL)+IYR GO TO 300 250 IF(IYR.GE.NN.AND.IYR.GE.LL) GO TO 260 IF(IYR.LT.NN.AND.IYR.LT.LL) GO TO 280 IF(IYR.GE.NN.AND.IYR.LT.LL) GO TO 290 NUMB1=ITL(NN)+IT(NN)*IYR+IT(IYR)+IT(IYR)+LL GO TO 300 260 IF(NN.GE.LL) GO TO 270 LT=NN NN=LL LL=LT 270 NUMB1=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(IYR)+LL GO TO 300 280 IF(NN.GE.LL) GO TO 240 LT=NN NN=LL LL=LT GO TO 240 290 NUMB1=ITL(LL)+IT(LL)*IYR+IT(IYR)+IT(IYR)+NN 300 JJ=J MM=M II=I NN=N IF(MM.GT.NN) GO TO 310 IF(MM.EQ.NN) GO TO 320 NUMB2=ITL(NN)+IT(NN)*II+IT(II)+IT(MM)+JJ GO TO 330 310 NUMB2=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(NN)+II GO TO 330 320 IF(JJ.GE.II) GO TO 310 LT=JJ JJ=II II=LT GO TO 310 330 JJ=J NN=N II=I MM=M IF(NN.GT.MM) GO TO 340 IF(NN.EQ.MM) GO TO 350 NUMB3=ITL(MM)+IT(MM)*II+IT(II)+IT(NN)+JJ GO TO 360 340 NUMB3=ITL(NN)+IT(NN)*JJ+IT(JJ)+IT(MM)+II GO TO 360 350 IF(JJ.GE.II) GO TO 340 LT=JJ JJ=II II=LT GO TO 340 360 JJ=J LL=L II=I MM=M IF(LL.GT.MM) GO TO 370 IF(LL.EQ.MM) GO TO 380 NUMB4=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(LL)+II GO TO 390 370 NUMB4=ITL(LL)+IT(LL)*II+IT(II)+IT(MM)+JJ GO TO 390 380 IF(II.GE.JJ) GO TO 370 LT=II II=JJ JJ=LT GO TO 370 390 AS2=AS2+(2.D0*P(NUMB)-P(NUMB1))* 1(2.D0*P(NUMB2)-P(NUMB3))*P(NUMB4)/ 2((EIG(J)+EIG(I)-EIG(M)-EIG(N))*(EIG(J)+EIG(I)-EIG(M)-EIG(L))) 400 CONTINUE DO 560 M=KYR1,KYR2 DO 560 N=KYR1,KYR2 DO 560 L=KYR1,KYR2 DO 560 I=MYR1,NYR DO 560 J=MYR1,NYR IYR=IY LL=L JJ=J IF(IYR.GE.LL) GO TO 410 NUMB=ITL(LL)+IT(LL)*JJ+IT(JJ)+IT(IYR)+IYR GO TO 420 410 NUMB=ITL(IYR)+IT(IYR)*IYR+IT(IYR)+IT(LL)+JJ 420 IYR=IY JJ=J LL=L IF(IYR.GT.NYR) GO TO 440 IF(IYR.GE.JJ) GO TO 430 NUMB1=ITL(LL)+IT(LL)*IYR+IT(IYR)+IT(JJ)+IYR GO TO 460 430 NUMB1=ITL(LL)+IT(LL)*IYR+IT(IYR)+IT(IYR)+JJ GO TO 460 440 IF(IYR.LT.LL) GO TO 430 IF(IYR.GT.LL) GO TO 450 NUMB1=ITL(IYR)+IT(IYR)*IYR+IT(IYR)+IT(LL)+JJ GO TO 460 450 NUMB1=ITL(IYR)+IT(IYR)*LL+IT(LL)+IT(IYR)+JJ 460 JJ=J MM=M II=I NN=N IF(MM.GT.NN) GO TO 470 IF(MM.EQ.NN) GO TO 480 NUMB2=ITL(NN)+IT(NN)*II+IT(II)+IT(MM)+JJ GO TO 490 470 NUMB2=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(NN)+II GO TO 490 480 IF(JJ.GE.II) GO TO 470 LT=JJ JJ=II II=LT GO TO 470 490 JJ=J NN=N II=I MM=M IF(NN.GT.MM) GO TO 500 IF(NN.EQ.MM) GO TO 510 NUMB3=ITL(MM)+IT(MM)*II+IT(II)+IT(NN)+JJ GO TO 520 500 NUMB3=ITL(NN)+IT(NN)*JJ+IT(JJ)+IT(MM)+II GO TO 520 510 IF(JJ.GE.II) GO TO 500 LT=JJ JJ=II II=LT GO TO 500 520 MM=M LL=L II=I NN=N IF(MM.GE.LL) GO TO 530 LT=MM MM=LL LL=LT 530 IF(MM.GE.NN) GO TO 540 NUMB4=ITL(NN)+IT(NN)*II+IT(II)+IT(MM)+LL GO TO 550 540 NUMB4=ITL(MM)+IT(MM)*LL+IT(LL)+IT(NN)+II 550 AS3=AS3+(2.D0*P(NUMB)-P(NUMB1))* 1(2.D0*P(NUMB2)-P(NUMB3))*P(NUMB4)/ 2((EIG(J)+EIG(I)-EIG(M)-EIG(N))*(EIG(J)-EIG(L))) 560 CONTINUE AS4=AS3 DO 700 M=KYR1,KYR2 DO 700 N=KYR1,KYR2 DO 700 I=MYR1,NYR DO 700 J=MYR1,NYR DO 700 K=MYR1,NYR IYR=IY NN=N KK=K IF(IYR.GE.NN) GO TO 570 NUMB=ITL(NN)+IT(NN)*KK+IT(KK)+IT(IYR)+IYR GO TO 580 570 NUMB=ITL(IYR)+IT(IYR)*IYR+IT(IYR)+IT(NN)+KK 580 IYR=IY KK=K NN=N IF(IYR.GT.NYR) GO TO 600 IF(IYR.GE.KK) GO TO 590 NUMB1=ITL(NN)+IT(NN)*IYR+IT(IYR)+IT(KK)+IYR GO TO 620 590 NUMB1=ITL(NN)+IT(NN)*IYR+IT(IYR)+IT(IYR)+KK GO TO 620 600 IF(IYR.LT.NN) GO TO 590 IF(IYR.GT.NN) GO TO 610 NUMB1=ITL(IYR)+IT(IYR)*IYR+IT(IYR)+IT(NN)+KK GO TO 620 610 NUMB1=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(IYR)+KK 620 JJ=J MM=M II=I NN=N IF(MM.GT.NN) GO TO 630 IF(MM.EQ.NN) GO TO 640 NUMB2=ITL(NN)+IT(NN)*II+IT(II)+IT(MM)+JJ GO TO 650 630 NUMB2=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(NN)+II GO TO 650 640 IF(JJ.GE.II) GO TO 630 LT=JJ JJ=II II=LT GO TO 630 650 JJ=J NN=N II=I MM=M IF(NN.GT.MM) GO TO 660 IF(NN.EQ.MM) GO TO 670 NUMB3=ITL(MM)+IT(MM)*II+IT(II)+IT(NN)+JJ GO TO 680 660 NUMB3=ITL(NN)+IT(NN)*JJ+IT(JJ)+IT(MM)+II GO TO 680 670 IF(JJ.GE.II) GO TO 660 LT=JJ JJ=II II=LT GO TO 660 680 II=I KK=K JJ=J MM=M IF(II.GE.KK) GO TO 690 LT=II II=KK KK=LT 690 NUMB4=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(II)+KK AS5=AS5+(2.D0*P(NUMB)-P(NUMB1))* 1(2.D0*P(NUMB2)-P(NUMB3))*P(NUMB4)/ 2((EIG(J)+EIG(I)-EIG(M)-EIG(N))*(EIG(K)-EIG(N))) 700 CONTINUE AS5=-AS5 AS6=AS5 RETURN END C C===================================================================== C SUBROUTINE CCPROD(C1,C2,C12,LM2,LM6) ********************************************************** * PRODUCTS OF COEFFICIENTS. * * SUBROUTINE FROM QCPE 438, MNDOC * * WRITTEN BY W.THIEL * * SUBROUTINE NEED FOR GREEN FUNCTION CALCULATIONS * * SUBROUTINE REWRITTEN BY D.DANOVICH * ********************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, 2 FRACT DIMENSION C1(LM2),C2(LM2),C12(*) KK=0 DO 10 II=1,NUMAT IA=NFIRST(II) IB=NLAST(II) KK=KK+1 C12(KK)=C1(IA)*C2(IA) IF(IA.EQ.IB) GO TO 10 CS1 = C1(IA) CPX1 = C1(IA+1) CPY1 = C1(IA+2) CPZ1 = C1(IA+3) CS2 = C2(IA) CPX2 = C2(IA+1) CPY2 = C2(IA+2) CPZ2 = C2(IA+3) C12(KK+1) = CPX1*CS2 + CPX2*CS1 C12(KK+2) = CPX1*CPX2 C12(KK+3) = CPY1*CS2 + CPY2*CS1 C12(KK+4) = CPY1*CPX2 + CPY2*CPX1 C12(KK+5) = CPY1*CPY2 C12(KK+6) = CPZ1*CS2 + CPZ2*CS1 C12(KK+7) = CPZ1*CPX2 + CPZ2*CPX1 C12(KK+8) = CPZ1*CPY2 + CPZ2*CPY1 C12(KK+9) = CPZ1*CPZ2 KK = KK+9 10 CONTINUE RETURN END C C================================================================= C SUBROUTINE CSUM(P,NDIS,EP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ************************************************************ * CALCULATION 'CI' VALUES FOR GREEN'S FUNCTION METHOD * * SUBROUTINE WRITTEN BY DR. DAVID DANOVICH, DEPARTMENT OF * * CHEMISTRY, TECHNION-ISRAEL INSTITUTE OF TECHNOLOGY, * * HAIFA, 32000, ISRAEL. VERSION: 2.09.90 * ************************************************************ INCLUDE 'SIZES' DIMENSION P(*) COMMON/DOD/ITL(200),IT(200) COMMON/VECTOR/C(MORB2),EIG(MAXORB),CBETA(MORB2),EIGBET(MAXORB) COMMON/PEREM/NYR,IY,IGGV,IGGW COMMON/CSUC/CS1,CS2,CS3,CS4,CS5,CS6 KYR2=NYR+IGGV KYR1=NYR+1 MYR1=NYR-IGGW CS1=0.D0 CS2=0.D0 CS3=0.D0 CS4=0.D0 CS5=0.D0 CS6=0.D0 DO 1 M=KYR1,KYR2 DO 1 N=KYR1,KYR2 DO 1 L=KYR1,KYR2 DO 1 K=KYR1,KYR2 DO 1 I=MYR1,NYR IYR=IY MM=M II=I NN=N IF(IYR.GE.MM) GO TO 2 LT=IYR IYR=MM MM=LT 2 IF(IYR.GT.NN) GO TO 3 IF(IYR.EQ.NN) GO TO 4 LT=IYR IYR=NN NN=LT LT=MM MM=II II=LT GO TO 3 4 IF(MM.GE.II) GO TO 3 LT=MM MM=II II=LT 3 NUMB=ITL(IYR)+IT(IYR)*MM+IT(MM)+IT(NN)+II IYR=IY NN=N II=I MM=M IF(IYR.GE.NN) GO TO 5 LT=IYR IYR=NN NN=LT 5 IF(IYR.GT.MM) GO TO 6 IF(IYR.EQ.MM) GO TO 7 LT=IYR IYR=MM MM=LT LT=NN NN=II II=LT GO TO 6 7 IF(NN.GE.II) GO TO 6 LT=NN NN=II II=LT 6 NUMB1=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(MM)+II KK=K LL=L MM=M NN=N IF(MM.GE.LL) GO TO 8 LT=MM MM=LL LL=LT 8 IF(NN.GE.KK) GO TO 9 LT=NN NN=KK KK=LT 9 IF(MM.GT.NN) GO TO 10 IF(MM.EQ.NN) GO TO 11 LT=MM MM=NN NN=LT LT=LL LL=KK KK=LT GO TO 10 11 IF(LL.GE.KK) GO TO 10 LT=LL LL=KK KK=LT 10 NUMB2=ITL(MM)+IT(MM)*LL+IT(LL)+IT(NN)+KK IYR=IY LL=L II=I KK=K IF(IYR.GE.LL) GO TO 12 LT=IYR IYR=LL LL=LT 12 IF(IYR.GT.KK) GO TO 13 IF(IYR.EQ.KK) GO TO 14 LT=IYR IYR=KK KK=LT LT=LL LL=II II=LT GO TO 13 14 IF(LL.GE.II) GO TO 13 LT=LL LL=II II=LT 13 NUMB3=ITL(IYR)+IT(IYR)*LL+IT(LL)+IT(KK)+II CS1=CS1+(2.D0*P(NUMB)-P(NUMB1))*P(NUMB2)*P(NUMB3)/((EP+EIG(I)- *EIG(M)-EIG(N))*(EP+EIG(I)-EIG(L)-EIG(K))) 1 CONTINUE DO 21 M=KYR1,KYR2 DO 21 N=KYR1,KYR2 DO 21 I=MYR1,NYR DO 21 J=MYR1,NYR DO 21 K=MYR1,NYR IYR=IY MM=M II=I NN=N IF(IYR.GE.MM) GO TO 22 LT=IYR IYR=MM MM=LT 22 IF(IYR.GT.NN) GO TO 23 IF(IYR.EQ.NN) GO TO 24 LT=IYR IYR=NN NN=LT LT=MM MM=II II=LT GO TO 23 24 IF(MM.GE.II) GO TO 23 LT=MM MM=II II=LT 23 NUMB=ITL(IYR)+IT(IYR)*MM+IT(MM)+IT(NN)+II IYR=IY NN=N II=I MM=M IF(IYR.GE.NN) GO TO 25 LT=IYR IYR=NN NN=LT 25 IF(IYR.GT.MM) GO TO 26 IF(IYR.EQ.MM) GO TO 27 LT=IYR IYR=MM MM=LT LT=NN NN=II II=LT GO TO 26 27 IF(NN.GE.II) GO TO 26 LT=NN NN=II II=LT 26 NUMB1=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(MM)+II MM=M JJ=J NN=N KK=K IF(MM.GT.NN) GO TO 28 IF(MM.EQ.NN) GO TO 29 LT=MM MM=NN NN=LT LT=JJ JJ=KK KK=LT GO TO 28 29 IF(JJ.GE.KK) GO TO 28 LT=JJ JJ=KK KK=LT 28 NUMB2=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(NN)+KK IYR=IY JJ=J II=I KK=K IF(IYR.GE.JJ) GO TO 30 LT=IYR IYR=JJ JJ=LT 30 IF(II.GE.KK) GO TO 31 LT=II II=KK KK=LT 31 IF(IYR.GT.II) GO TO 32 IF(IYR.EQ.II) GO TO 33 LT=IYR IYR=II II=LT LT=JJ JJ=KK KK=LT GO TO 32 33 IF(JJ.GE.KK) GO TO 32 LT=JJ JJ=KK KK=LT 32 NUMB3=ITL(IYR)+IT(IYR)*JJ+IT(JJ)+IT(II)+KK CS2=CS2+(2.D0*P(NUMB)-P(NUMB1))*P(NUMB2)*P(NUMB3)/((EP+EIG(I)- *EIG(M)-EIG(N))*(EIG(J)+EIG(K)-EIG(M)-EIG(N))) 21 CONTINUE CS3=CS2 DO 41 M=KYR1,KYR2 DO 41 N=KYR1,KYR2 DO 41 L=KYR1,KYR2 DO 41 I=MYR1,NYR DO 41 J=MYR1,NYR IYR=IY MM=M II=I JJ=J IF(IYR.GE.II) GO TO 42 LT=IYR IYR=II II=LT 42 IF(IYR.GT.MM) GO TO 43 IF(IYR.EQ.MM) GO TO 44 LT=IYR IYR=MM MM=LT LT=II II=JJ JJ=LT GO TO 43 44 IF(II.GE.JJ) GO TO 43 LT=II II=JJ JJ=LT 43 NUMB=ITL(IYR)+IT(IYR)*II+IT(II)+IT(MM)+JJ IYR=IY JJ=J II=I MM=M IF(IYR.GE.JJ) GO TO 45 LT=IYR IYR=JJ JJ=LT 45 IF(IYR.GT.MM) GO TO 46 IF(IYR.EQ.MM) GO TO 47 LT=IYR IYR=MM MM=LT LT=JJ JJ=II II=LT GO TO 46 47 IF(JJ.GE.II) GO TO 46 LT=JJ JJ=II II=LT 46 NUMB1=ITL(IYR)+IT(IYR)*JJ+IT(JJ)+IT(MM)+II II=I JJ=J NN=N LL=L IF(NN.GT.LL) GO TO 48 IF(NN.EQ.LL) GO TO 49 LT=NN NN=LL LL=LT LT=II II=JJ JJ=LT GO TO 48 49 IF(II.GE.JJ) GO TO 48 LT=II II=JJ JJ=LT 48 NUMB2=ITL(NN)+IT(NN)*II+IT(II)+IT(LL)+JJ IYR=IY NN=N MM=M LL=L IF(IYR.GE.NN) GO TO 50 LT=IYR IYR=NN NN=LT 50 IF(MM.GE.LL) GO TO 51 LT=MM MM=LL LL=LT 51 IF(IYR.GT.MM) GO TO 52 IF(IYR.EQ.MM) GO TO 53 LT=IYR IYR=MM MM=LT LT=NN NN=LL LL=LT GO TO 52 53 IF(NN.GE.LL) GO TO 52 LT=NN NN=LL LL=LT 52 NUMB3=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(MM)+LL CS4=CS4+(2.D0*P(NUMB)-P(NUMB1))*P(NUMB2)*P(NUMB3)/((EP+EIG(M)- *EIG(I)-EIG(J))*(EIG(I)+EIG(J)-EIG(N)-EIG(L))) 41 CONTINUE CS5=CS4 DO 61 M=KYR1,KYR2 DO 61 I=MYR1,NYR DO 61 J=MYR1,NYR DO 61 K=MYR1,NYR DO 61 L=MYR1,NYR IYR=IY MM=M KK=K LL=L IF(IYR.GE.KK) GO TO 62 LT=IYR IYR=KK KK=LT 62 IF(IYR.GT.MM) GO TO 63 IF(IYR.EQ.MM) GO TO 64 LT=IYR IYR=MM MM=LT LT=KK KK=LL LL=LT GO TO 63 64 IF(KK.GE.LL) GO TO 63 LT=KK KK=LL LL=LT 63 NUMB=ITL(IYR)+IT(IYR)*KK+IT(KK)+IT(MM)+LL IYR=IY LL=L KK=K MM=M IF(IYR.GE.LL) GO TO 65 LT=IYR IYR=LL LL=LT 65 IF(IYR.GT.MM) GO TO 66 IF(IYR.EQ.MM) GO TO 67 LT=IYR IYR=MM MM=LT LT=LL LL=KK KK=LT GO TO 66 67 IF(LL.GE.KK) GO TO 66 LT=LL LL=KK KK=LT 66 NUMB1=ITL(IYR)+IT(IYR)*LL+IT(LL)+IT(MM)+KK KK=K II=I LL=L JJ=J IF(KK.GE.II) GO TO 68 LT=KK KK=II II=LT 68 IF(LL.GE.JJ) GO TO 69 LT=LL LL=JJ JJ=LT 69 IF(KK.GT.LL) GO TO 70 IF(KK.EQ.LL) GO TO 71 LT=KK KK=LL LL=LT LT=II II=JJ JJ=LT GO TO 70 71 IF(II.GE.JJ) GO TO 70 LT=II II=JJ JJ=LT 70 NUMB2=ITL(KK)+IT(KK)*II+IT(II)+IT(LL)+JJ IYR=IY II=I MM=M JJ=J IF(IYR.GE.II) GO TO 72 LT=IYR IYR=II II=LT 72 IF(IYR.GT.MM) GO TO 73 IF(IYR.EQ.MM) GO TO 74 LT=IYR IYR=MM MM=LT LT=II II=JJ JJ=LT GO TO 73 74 IF(II.GE.JJ) GO TO 73 LT=II II=JJ JJ=LT 73 NUMB3=ITL(IYR)+IT(IYR)*II+IT(II)+IT(MM)+JJ CS6=CS6+(2.D0*P(NUMB)-P(NUMB1))*P(NUMB2)*P(NUMB3)/((EP+EIG(M)- *EIG(I)-EIG(J))*(EP+EIG(M)-EIG(K)-EIG(L))) 61 CONTINUE CS6=-CS6 RETURN END C C=================================================================== C SUBROUTINE DSUM(P,NDIS,EP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ************************************************************** * CALCULATION 'DI' VALUES FOR GREEN'S FUNCTION METHOD * * SUBROUTINE WRITTEN BY DR. DAVID DANOVICH, DEPARTMENT OF * * CHEMISTRY, TECHNION-ISRAEL INSTITUTE OF TECHNOLOGY, * * HAIFA, 32000, ISRAEL. VERSION: 2.09.90 * ************************************************************** INCLUDE 'SIZES' DIMENSION P(*) COMMON/DOD/ITL(200),IT(200) COMMON/VECTOR/C(MORB2),EIG(MAXORB),DUMY(MORB2+MAXORB) COMMON/PEREM/NYR,IY,IGGV,IGGW COMMON/DSMD/DS1,DS2,DS3,DS4,DS5,DS6 KYR2=NYR+IGGV KYR1=NYR+1 MYR1=NYR-IGGW DS1=0.D0 DS2=0.D0 DS3=0.D0 DS4=0.D0 DS5=0.D0 DS6=0.D0 DO 170 M=KYR1,KYR2 DO 170 N=KYR1,KYR2 DO 170 L=KYR1,KYR2 DO 170 I=MYR1,NYR DO 170 J=MYR1,NYR IYR=IY MM=M II=I NN=N IF(IYR.GE.MM) GO TO 10 LT=IYR IYR=MM MM=LT 10 IF(IYR.GT.NN) GO TO 30 IF(IYR.EQ.NN) GO TO 20 LT=IYR IYR=NN NN=LT LT=MM MM=II II=LT GO TO 30 20 IF(MM.GE.II) GO TO 30 LT=MM MM=II II=LT 30 NUMB=ITL(IYR)+IT(IYR)*MM+IT(MM)+IT(NN)+II MM=M II=I JJ=J LL=L IF(MM.GT.LL) GO TO 50 IF(MM.EQ.LL) GO TO 40 LT=MM MM=LL LL=LT LT=II II=JJ JJ=LT GO TO 50 40 IF(II.GE.JJ) GO TO 50 LT=II II=JJ JJ=LT 50 NUMB1=ITL(MM)+IT(MM)*II+IT(II)+IT(LL)+JJ IYR=IY LL=L JJ=J NN=N IF(IYR.GE.LL) GO TO 60 LT=IYR IYR=LL LL=LT 60 IF(IYR.GT.NN) GO TO 80 IF(IYR.EQ.NN) GO TO 70 LT=IYR IYR=NN NN=LT LT=LL LL=JJ JJ=LT GO TO 80 70 IF(LL.GE.JJ) GO TO 80 LT=LL LL=JJ JJ=LT 80 NUMB2=ITL(IYR)+IT(IYR)*LL+IT(LL)+IT(NN)+JJ IYR=IY LL=L NN=N JJ=J IF(IYR.GE.NN) GO TO 90 LT=IYR IYR=NN NN=LT 90 IF(IYR.GT.LL) GO TO 110 IF(IYR.EQ.LL) GO TO 100 LT=IYR IYR=LL LL=LT LT=NN NN=JJ JJ=LT GO TO 110 100 IF(NN.GE.JJ) GO TO 110 LT=NN NN=JJ JJ=LT 110 NUMB3=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(LL)+JJ MM=M LL=L JJ=J II=I IF(MM.GE.LL) GO TO 120 LT=MM MM=LL LL=LT 120 IF(JJ.GE.II) GO TO 130 LT=JJ JJ=II II=LT 130 NUMB4=ITL(MM)+IT(MM)*LL+IT(LL)+IT(JJ)+II IYR=IY NN=N II=I MM=M IF(IYR.GE.NN) GO TO 140 LT=IYR IYR=NN NN=LT 140 IF(IYR.GT.MM) GO TO 160 IF(IYR.EQ.MM) GO TO 150 LT=IYR IYR=MM MM=LT LT=NN NN=II II=LT GO TO 160 150 IF(NN.GE.II) GO TO 160 LT=NN NN=II II=LT 160 NUMB6=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(MM)+II DS1=DS1+(P(NUMB)*(P(NUMB1)* 1(P(NUMB2)-2.D0*P(NUMB3))+P(NUMB4)*(P(NUMB3)-2.D0*P(NUMB2)))/ 2((EP+EIG(I)-EIG(M)-EIG(N))*(EP+EIG(J)-EIG(N)-EIG(L)))+ 3P(NUMB6)*(P(NUMB1)*(4.D0*P(NUMB3)-2.D0*P(NUMB2))+ 4P(NUMB4)*(P(NUMB2)-2.D0*P(NUMB3)))/ 5((EP+EIG(I)-EIG(M)-EIG(N))*(EP+EIG(J)-EIG(N)-EIG(L)))) 170 CONTINUE DO 350 M=KYR1,KYR2 DO 350 N=KYR1,KYR2 DO 350 L=KYR1,KYR2 DO 350 I=MYR1,NYR DO 350 J=MYR1,NYR IYR=IY MM=M II=I LL=L IF(IYR.GE.LL) GO TO 180 LT=IYR IYR=LL LL=LT 180 IF(IYR.GT.MM) GO TO 200 IF(IYR.EQ.MM) GO TO 190 LT=IYR IYR=MM MM=LT LT=LL LL=II II=LT GO TO 200 190 IF(LL.GE.II) GO TO 200 LT=LL LL=II II=LT 200 NUMB=ITL(IYR)+IT(IYR)*LL+IT(LL)+IT(MM)+II MM=M II=I JJ=J NN=N IF(MM.GT.NN) GO TO 220 IF(MM.EQ.NN) GO TO 210 LT=MM MM=NN NN=LT LT=II II=JJ JJ=LT GO TO 220 210 IF(II.GE.JJ) GO TO 220 LT=II II=JJ JJ=LT 220 NUMB1=ITL(MM)+IT(MM)*II+IT(II)+IT(NN)+JJ IYR=IY LL=L JJ=J NN=N IF(IYR.GE.LL) GO TO 230 LT=IYR IYR=LL LL=LT 230 IF(IYR.GT.NN) GO TO 250 IF(IYR.EQ.NN) GO TO 240 LT=IYR IYR=NN NN=LT LT=LL LL=JJ JJ=LT GO TO 250 240 IF(LL.GE.JJ) GO TO 250 LT=LL LL=JJ JJ=LT 250 NUMB2=ITL(IYR)+IT(IYR)*LL+IT(LL)+IT(NN)+JJ IYR=IY LL=L NN=N JJ=J IF(IYR.GE.JJ) GO TO 260 LT=IYR IYR=JJ JJ=LT 260 IF(NN.GE.LL) GO TO 270 LT=NN NN=LL LL=LT 270 IF(IYR.GT.NN) GO TO 290 IF(IYR.EQ.NN) GO TO 280 LT=IYR IYR=NN NN=LT LT=JJ JJ=LL LL=LT GO TO 290 280 IF(JJ.GE.LL) GO TO 290 LT=JJ JJ=LL LL=LT 290 NUMB3=ITL(IYR)+IT(IYR)*JJ+IT(JJ)+IT(NN)+LL MM=M NN=N JJ=J II=I IF(MM.GT.NN) GO TO 310 IF(MM.EQ.NN) GO TO 300 LT=MM MM=NN NN=LT LT=JJ JJ=II II=LT GO TO 310 300 IF(JJ.GE.II) GO TO 310 LT=JJ JJ=II II=LT 310 NUMB4=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(NN)+II IYR=IY LL=L II=I MM=M IF(IYR.GE.MM) GO TO 320 LT=IYR IYR=MM MM=LT 320 IF(IYR.GT.LL) GO TO 340 IF(IYR.EQ.LL) GO TO 330 LT=IYR IYR=LL LL=LT LT=MM MM=II II=LT GO TO 340 330 IF(MM.GE.II) GO TO 340 LT=MM MM=II II=LT 340 NUMB5=ITL(IYR)+IT(IYR)*MM+IT(MM)+IT(LL)+II DS2=DS2+(P(NUMB)*(P(NUMB1)*(4.D0*P(NUMB2)- 12.D0*P(NUMB3))+P(NUMB4)*(P(NUMB3)-2.D0*P(NUMB2)))/ 2((EP+EIG(I)-EIG(M)-EIG(L))*(EIG(I)+EIG(J)-EIG(M)-EIG(N)))+ 3P(NUMB5)*(P(NUMB1)*(P(NUMB3)-2.D0*P(NUMB2))+ 4P(NUMB4)*(P(NUMB2)-2.D0*P(NUMB3)))/ 5((EP+EIG(I)-EIG(M)-EIG(L))*(EIG(I)+EIG(J)-EIG(M)-EIG(N)))) 350 CONTINUE DS3=DS2 DO 530 M=KYR1,KYR2 DO 530 N=KYR1,KYR2 DO 530 I=MYR1,NYR DO 530 J=MYR1,NYR DO 530 K=MYR1,NYR IYR=IY MM=M KK=K JJ=J IF(IYR.GE.KK) GO TO 360 LT=IYR IYR=KK KK=LT 360 IF(IYR.GT.MM) GO TO 380 IF(IYR.EQ.MM) GO TO 370 LT=IYR IYR=MM MM=LT LT=KK KK=JJ JJ=LT GO TO 380 370 IF(KK.GE.JJ) GO TO 380 LT=KK KK=JJ JJ=LT 380 NUMB=ITL(IYR)+IT(IYR)*KK+IT(KK)+IT(MM)+JJ MM=M II=I JJ=J NN=N IF(MM.GT.NN) GO TO 400 IF(MM.EQ.NN) GO TO 390 LT=MM MM=NN NN=LT LT=JJ JJ=II II=LT GO TO 400 390 IF(JJ.GE.II) GO TO 400 LT=JJ JJ=II II=LT 400 NUMB1=ITL(MM)+IT(MM)*JJ+IT(JJ)+IT(NN)+II IYR=IY KK=K II=I NN=N IF(IYR.GE.KK) GO TO 410 LT=IYR IYR=KK KK=LT 410 IF(IYR.GT.NN) GO TO 430 IF(IYR.EQ.NN) GO TO 420 LT=IYR IYR=NN NN=LT LT=KK KK=II II=LT GO TO 430 420 IF(KK.GE.II) GO TO 430 LT=KK KK=II II=LT 430 NUMB2=ITL(IYR)+IT(IYR)*KK+IT(KK)+IT(NN)+II IYR=IY II=I NN=N KK=K IF(IYR.GE.NN) GO TO 440 LT=IYR IYR=NN NN=LT 440 IF(II.GE.KK) GO TO 450 LT=II II=KK KK=LT 450 IF(IYR.GT.II) GO TO 470 IF(IYR.EQ.II) GO TO 460 LT=IYR IYR=II II=LT LT=NN NN=KK KK=LT GO TO 470 460 IF(NN.GE.KK) GO TO 470 LT=NN NN=KK KK=LT 470 NUMB3=ITL(IYR)+IT(IYR)*NN+IT(NN)+IT(II)+KK MM=M NN=N JJ=J II=I IF(NN.GT.MM) GO TO 490 IF(NN.EQ.MM) GO TO 480 LT=NN NN=MM MM=LT LT=JJ JJ=II II=LT GO TO 490 480 IF(JJ.GE.II) GO TO 490 LT=JJ JJ=II II=LT 490 NUMB4=ITL(NN)+IT(NN)*JJ+IT(JJ)+IT(MM)+II IYR=IY JJ=J KK=K MM=M IF(IYR.GE.JJ) GO TO 500 LT=IYR IYR=JJ JJ=LT 500 IF(IYR.GT.MM) GO TO 520 IF(IYR.EQ.MM) GO TO 510 LT=IYR IYR=MM MM=LT LT=JJ JJ=KK KK=LT GO TO 520 510 IF(JJ.GE.KK) GO TO 520 LT=JJ JJ=KK KK=LT 520 NUMB5=ITL(IYR)+IT(IYR)*JJ+IT(JJ)+IT(MM)+KK DS4=DS4+(P(NUMB)*(P(NUMB1)*(4.D0*P(NUMB2)- 12.D0*P(NUMB3))+P(NUMB4)*(P(NUMB3)-2.D0*P(NUMB2)))/ 2((EP+EIG(M)-EIG(J)-EIG(K))*(EIG(I)+EIG(J)-EIG(M)-EIG(N)))+ 3P(NUMB5)*(P(NUMB1)*(P(NUMB3)-2.D0*P(NUMB2))+ 4P(NUMB4)*(P(NUMB2)-2*P(NUMB3)))/ 5((EP+EIG(M)-EIG(J)-EIG(K))*(EIG(I)+EIG(J)-EIG(M)-EIG(N)))) 530 CONTINUE DS5=DS4 DO 720 M=KYR1,KYR2 DO 720 N=KYR1,KYR2 DO 720 I=MYR1,NYR DO 720 J=MYR1,NYR DO 720 K=MYR1,NYR IYR=IY MM=M KK=K II=I IF(IYR.GE.KK) GO TO 540 LT=IYR IYR=KK KK=LT 540 IF(IYR.GT.MM) GO TO 560 IF(IYR.EQ.MM) GO TO 550 LT=IYR IYR=MM MM=LT LT=KK KK=II II=LT GO TO 560 550 IF(KK.GE.II) GO TO 560 LT=KK KK=II II=LT 560 NUMB=ITL(IYR)+IT(IYR)*KK+IT(KK)+IT(MM)+II MM=M II=I JJ=J NN=N IF(MM.GT.NN) GO TO 580 IF(MM.EQ.NN) GO TO 570 LT=MM MM=NN NN=LT LT=II II=JJ JJ=LT GO TO 580 570 IF(II.GE.JJ) GO TO 580 LT=II II=JJ JJ=LT 580 NUMB1=ITL(MM)+IT(MM)*II+IT(II)+IT(NN)+JJ IYR=IY KK=K JJ=J NN=N IF(IYR.GE.KK) GO TO 590 LT=IYR IYR=KK KK=LT 590 IF(IYR.GT.NN) GO TO 610 IF(IYR.EQ.NN) GO TO 600 LT=IYR IYR=NN NN=LT LT=KK KK=JJ JJ=LT GO TO 610 600 IF(KK.GE.JJ) GO TO 610 LT=KK KK=JJ JJ=LT 610 NUMB2=ITL(IYR)+IT(IYR)*KK+IT(KK)+IT(NN)+JJ IYR=IY JJ=J NN=N KK=K IF(IYR.GE.JJ) GO TO 620 LT=IYR IYR=JJ JJ=LT 620 IF(IYR.GT.NN) GO TO 640 IF(IYR.EQ.NN) GO TO 630 LT=IYR IYR=NN NN=LT LT=JJ JJ=KK KK=LT GO TO 640 630 IF(JJ.GE.KK) GO TO 640 LT=JJ JJ=KK KK=LT 640 NUMB3=ITL(IYR)+IT(IYR)*JJ+IT(JJ)+IT(NN)+KK MM=M NN=N JJ=J II=I IF(II.GE.JJ) GO TO 650 LT=II II=JJ JJ=LT 650 IF(NN.GE.MM) GO TO 660 LT=NN NN=MM MM=LT 660 IF(II.GT.NN) GO TO 680 IF(II.EQ.NN) GO TO 670 LT=II II=NN NN=LT LT=JJ JJ=MM MM=LT GO TO 680 670 IF(JJ.GE.MM) GO TO 680 LT=JJ JJ=MM MM=LT 680 NUMB4=ITL(II)+IT(II)*JJ+IT(JJ)+IT(NN)+MM IYR=IY II=I KK=K MM=M IF(IYR.GE.II) GO TO 690 LT=IYR IYR=II II=LT 690 IF(IYR.GT.MM) GO TO 710 IF(IYR.EQ.MM) GO TO 700 LT=IYR IYR=MM MM=LT LT=II II=KK KK=LT GO TO 710 700 IF(II.GE.KK) GO TO 710 LT=II II=KK KK=LT 710 NUMB5=ITL(IYR)+IT(IYR)*II+IT(II)+IT(MM)+KK DS6=DS6+(P(NUMB)*(P(NUMB1)*(4.D0*P(NUMB2)- 12.D0*P(NUMB3))+P(NUMB4)*(P(NUMB3)-2.D0*P(NUMB2)))/ 2((EP+EIG(M)-EIG(I)-EIG(K))*(EP+EIG(N)-EIG(J)-EIG(K)))+ 3P(NUMB5)*(P(NUMB1)*(P(NUMB3)-2.D0*P(NUMB2))+ 4P(NUMB4)*(P(NUMB2)-2.D0*P(NUMB3)))/ 5((EP+EIG(M)-EIG(I)-EIG(K))*(EP+EIG(N)-EIG(J)-EIG(K)))) 720 CONTINUE DS6=-DS6 RETURN END C C==================================================================== C SUBROUTINE FCNPP(P,NDIS) ***************************************************************** * MAIN PROGRAM FOR GREEN'S FUNCTION CALCULATIONS * * SUBROUTINE WRITTEN BY DR. D.DANOVICH, COMPUTATION * * CHEMISTRY CENTRE, DEPARTMENT OF CHEMISTRY, TECHNION- * * ISRAEL INSTITUTE OF TECHNOLOGY, HAIFA, 32000, ISRAEL * * VERSION 2.09.90 * ***************************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION P(*),EG2(20),EG23(20),EGA(20),IG2(20),IG23(20), .IGA(20),RIR(20),PRIR(20) COMMON/MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), * NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, * FRACT COMMON/DOD/ITL(200),IT(200) COMMON/DAVI/INTSO COMMON/PEREM/NYR,IYR,IGGV,IGGW COMMON/CSUC/CS1,CS2,CS3,CS4,CS5,CS6 COMMON/ASMA/AS1,AS2,AS3,AS4,AS5,AS6 COMMON/DSMD/DS1,DS2,DS3,DS4,DS5,DS6 COMMON/SUMA/SU2R,EPS,SUM1,SUM2 COMMON/VECTOR/C(MORB2),EIG(MAXORB),CBETA(MORB2),EIGB(MAXORB) DIMENSION VALUE(40) CHARACTER LINE*80 WRITE(6,1) INTSO,NORBS 1 FORMAT(//5X,'number of nonzero integrals =',I10,5X, *'Total number of MO =',I4) WRITE(6,2) 2 FORMAT(//35X,' Orbital energy ') IF(NORBS.GT.200) STOP WRITE(6,3) (I,I=1,NORBS) 3 FORMAT(/5X,10I7) WRITE(6,4) (EIG(I),I=1,NORBS) 4 FORMAT(//5X,10F7.3) NUMB=NELECS/2 WRITE(6,5) NUMB 5 FORMAT(//5X,' Higher occupied MO is ',I4,' MO ') DO 2000 I=1,20 EG2(I)=0.D0 EG23(I)=0.D0 EGA(I)=0.D0 RIR(I)=0.D0 PRIR(I)=0.D0 IG2(I)=0 IG23(I)=0 2000 IGA(I)=0 READ(5,'(A)') LINE CALL NUCHAR(LINE,VALUE,NVALUE) IGGWW=VALUE(1) IGGV=VALUE(2) NIZ=VALUE(3) IVER=VALUE(4) IEPS=VALUE(5) ITER2=VALUE(6) ITER3=VALUE(7) IFULIT=VALUE(8) IPRINT=VALUE(9) IT23=VALUE(10) EPS=10.D0**(-IEPS) IGGW=IGGWW-1 WRITE(6,120) IGGWW,IGGV,NIZ,IVER,EPS,ITER2,ITER3,IFULIT, *IPRINT,IT23 120 FORMAT(///5X,'TOTAL NUMBER OF OCCUPIED ORBITALS INVOLVED IN THE'/ *5X,' OVGF CALCULATION =',I3/5X,'TOTAL NUMBER OF UNOCCUPIED ', *'ORBITALS INVOLVED IN THE'/5X,' OVGF CALCULATION =',I3/5X, *'THE NUMBER OF FIRST OCCUPIED MO FOR WHICH OVGF CORRECTION '/5X, *'MUST BE STARTED =',I3/5X, *'THE NUMBER OF LAST OCCUPIED MO FOR WHICH OVGF CORRECTION '/5X, *'MUST BE FINISHED =',I3/5X, *'TOLERANCE FACTOR = ',F12.8/5X, *'SECOND-ORDER CONTRIBUTION = ',I3/5X, *'THIRD-ORDER CONTRIBUTION = ',I3/5X, *'FULL EXPRESSION = ',I3/5X, *'PRINT FACTOR = ',I3/5X, *'ONLY SECOND-ORDER CONTRIBUTION = ',I3) NYR=NUMB NUMH=NIZ NUMV=IVER IF(ITER2.NE.0) GO TO 16 III=0 IF(NUMH.LE.0) NUMH=1 DO 10 IYR=NUMH,NUMV EP=EIG(IYR) IF(IPRINT.NE.0) PRINT 122, EP CALL SUMA2(P,NDIS,EP) IR=0 W=EP+SU2R 11 IR=IR+1 CALL SUMA2(P,NDIS,W) W1=EP+SU2R IF(DABS(W1-W).LT.EPS) GO TO 12 W=W1 GO TO 11 12 III=III+1 EG2(III)=W1 IG2(III)=IR IF(IPRINT.NE.0) WRITE(6,154) W1,IR 10 CONTINUE 16 NUMH=NIZ NUMV=IVER IF(IT23.NE.0) GO TO 1000 IF(ITER3.NE.0) GO TO 17 III=0 IF(NUMH.LE.0) NUMH=1 DO 18 IYR=NUMH,NUMV EP=EIG(IYR) IF(IPRINT.NE.0) WRITE(6,122) EP CALL SUMA2(P,NDIS,EP) CALL ASUM(P,NDIS) CALL CSUM(P,NDIS,EP) CALL DSUM(P,NDIS,EP) IR=0 SU3R=AS1+CS1+DS1+AS2+CS2+DS2+AS3+CS3+DS3+AS4+CS4+DS4+AS5+CS5+ *DS5+AS6+CS6+DS6 W=EP+SU2R+SU3R 19 IR=IR+1 CALL SUMA2(P,NDIS,W) CALL CSUM(P,NDIS,W) CALL DSUM(P,NDIS,W) SU3R=AS1+CS1+DS1+AS2+CS2+DS2+AS3+CS3+DS3+AS4+CS4+DS4+AS5+CS5+ *DS5+AS6+CS6+DS6 W1=EP+SU2R+SU3R IF(DABS(W1-W).LT.EPS) GO TO 20 W=W1 GO TO 19 20 III=III+1 EG23(III)=W1 IG23(III)=IR IF(IPRINT.NE.0) WRITE(6,154) W1,IR 18 CONTINUE 17 NUMH=NIZ NUMV=IVER IF(NUMH.LE.0) NUMH=1 WRITE(6,121) NUMH,NUMV 121 FORMAT(/5X,'NUMH =',I4,5X,'NUMV =',I4) IF(IFULIT.GT.0) GO TO 23 IF(IFULIT.LT.0) GO TO 24 III=0 DO 25 IYR=NUMH,NUMV EP=EIG(IYR) IF(IPRINT.NE.0) WRITE(6,122) EP 122 FORMAT(/5X,'EP =',F18.8) CALL SUMA2(P,NDIS,EP) CALL ASUM(P,NDIS) CALL CSUM(P,NDIS,EP) CALL DSUM(P,NDIS,EP) IR=0 SU3R=AS1+CS1+DS1+AS2+CS2+DS2+AS3+CS3+DS3+AS4+CS4+DS4+AS5+CS5+DS5+ *AS6+CS6+DS6 IF(SU2R.EQ.0.D0) GO TO 26 FACA=-(CS2+CS3+CS4+CS5+DS2+DS3+DS4+DS5)/SU2R GO TO 27 26 WRITE(6,28) 28 FORMAT(/5X,' SU2R=0 ON 0 STEP ') FACA=0.D0 27 W=EP+SU2R+(1+FACA)**(-1)*SU3R 29 IR=IR+1 CALL SUMA2(P,NDIS,W) CALL CSUM(P,NDIS,W) CALL DSUM(P,NDIS,W) SU3R=AS1+CS1+DS1+AS2+CS2+DS2+AS3+CS3+DS3+AS4+CS4+DS4+AS5+CS5+DS5+ *AS6+CS6+DS6 IF(SU2R.EQ.0.D0) GO TO 30 FACA=-(CS2+CS3+CS4+CS5+DS2+DS3+DS4+DS5)/SU2R GO TO 31 30 WRITE(6,32) IR 32 FORMAT(/5X,' SU2R =0 ON ',I5,' STEP ') FACA=0.D0 31 W1=EP+SU2R+(1+FACA)**(-1)*SU3R IF(DABS(W1-W).LT.EPS) GO TO 33 W=W1 GO TO 29 33 III=III+1 EGA(III)=W1 IGA(III)=IR IF(IPRINT.NE.0) WRITE(6,154) W1,IR 154 FORMAT(/5X,' W1 = ',F12.8,5X,' IR = ',I5) 25 CONTINUE GO TO 1000 23 III=0 DO 127 IYR=NUMH,NUMV EP=EIG(IYR) IF(IPRINT.NE.0) WRITE(6,122) EP CALL SUMA2(P,NDIS,EP) CALL ASUM(P,NDIS) CALL CSUM(P,NDIS,EP) CALL DSUM(P,NDIS,EP) IR=0 IF(SUM1.EQ.0.D0) GO TO 34 G1=-(CS4+CS5+DS4+DS5)/SUM1 GO TO 35 34 WRITE(6,36) 36 FORMAT(/5X,'SUM1=0 ON 0 STEP ') G1=0.D0 35 IF(SUM2.EQ.0.D0) GO TO 37 G2=-(CS2+CS3+DS2+DS3)/SUM2 GO TO 38 37 WRITE(6,39) 39 FORMAT(/5X,' SUM2 = 0 ON 0 STEP ') G2=0.D0 38 W=EP+SU2R+(1+G1)**(-1)*(CS4+CS5+CS6+DS4+DS5+DS6)+(1+G2)**(-1)* *(CS1+CS2+CS3+DS1+DS2+DS3)+(AS1+AS2+AS3+AS4+AS5+AS6) 40 IR=IR+1 CALL SUMA2(P,NDIS,W) CALL CSUM(P,NDIS,W) CALL DSUM(P,NDIS,W) IF(SUM1.EQ.0.D0) GO TO 41 G1=-(CS4+CS5+DS4+DS5)/SUM1 GO TO 42 41 WRITE(6,43) IR 43 FORMAT(/5X,'SUM1=0 ON',I5,' STEP ') G1=0.D0 42 IF(SUM2.EQ.0.D0) GO TO 44 G2=-(CS2+CS3+DS2+DS3)/SUM2 GO TO 45 44 WRITE(6,46) IR 46 FORMAT(/5X,' SUM2 = 0 ON',I5,' STEP ') G2=0.D0 45 W1=EP+SU2R+(1+G1)**(-1)*(CS4+CS5+CS6+DS4+DS5+DS6)+(1+G2)**(-1)* *(CS1+CS2+CS3+DS1+DS2+DS3)+(AS1+AS2+AS3+AS4+AS5+AS6) IF(DABS(W1-W).LT.EPS) GO TO 47 W=W1 GO TO 40 47 III=III+1 EGA(III)=W1 IGA(III)=IR IF(IPRINT.NE.0) WRITE(6,154) W1,IR 127 CONTINUE GO TO 1000 24 III=0 DO 48 IYR=NUMH,NUMV EP=EIG(IYR) IF(IPRINT.NE.0) WRITE(6,122) EP CALL SUMA2(P,NDIS,EP) CALL ASUM(P,NDIS) CALL CSUM(P,NDIS,EP) CALL DSUM(P,NDIS,EP) IR=0 IF(SUM1.EQ.0.D0) GO TO 49 G1=-(CS4+CS5+DS4+DS5)/SUM1 GO TO 50 49 WRITE(6,51) 51 FORMAT(/5X,'SUM1 B 3 =0 ON 0 STEP ') G1=0.D0 50 IF(SUM2.EQ.0.D0) GO TO 52 G2=-(CS2+CS3+DS2+DS3)/SUM2 GO TO 53 52 WRITE(6,54) 54 FORMAT(/5X,' SUM2 B 3 = 0 ON 0 STEP ') G2=0.D0 53 SZAM=CS1+DS1+CS2+DS2+CS3+DS3+CS4+DS4+CS5+DS5+CS6+DS6 IF(SZAM.NE.0.D0) GO TO 55 WRITE(6,56) 56 FORMAT(/5X,' SZAM 0 ON 0 STEP ') A=0.D0 GO TO 57 55 A=(G1*(CS4+CS5+CS6+DS4+DS5+DS6)+G2*(CS1+CS2+CS3+DS1+DS2+DS3))/SZAM 57 SU3R=AS1+CS1+DS1+AS2+CS2+DS2+AS3+CS3+DS3+AS4+CS4+DS4+AS5+CS5+DS5+ *AS6+CS6+DS6 W=EP+SU2R+(1+A)**(-1)*SU3R 58 IR=IR+1 CALL SUMA2(P,NDIS,W) CALL CSUM(P,NDIS,W) CALL DSUM(P,NDIS,W) IF(SUM1.EQ.0.D0) GO TO 59 G1=-(CS4+CS5+DS4+DS5)/SUM1 GO TO 60 59 WRITE(6,61) IR 61 FORMAT(/5X,'SUM1=0 ON',I5,' STEP ') G1=0.D0 60 IF(SUM2.EQ.0.D0) GO TO 62 G2=-(CS2+CS3+DS2+DS3)/SUM2 GO TO 63 62 WRITE(6,64) IR 64 FORMAT(/5X,' SUM2 = 0 ON',I5,' STEP ') G2=0.D0 63 SZAM=CS1+DS1+CS2+DS2+CS3+DS3+CS4+DS4+CS5+DS5+CS6+DS6 IF(SZAM.NE.0.D0) GO TO 65 WRITE(6,66) IR 66 FORMAT(/5X,' SZAM 0 ON',I5,' STEP ') A=0.D0 GO TO 67 65 A=(G1*(CS4+CS5+CS6+DS4+DS5+DS6)+G2*(CS1+CS2+CS3+DS1+DS2+DS3))/SZAM 67 SU3R=AS1+CS1+DS1+AS2+CS2+DS2+AS3+CS3+DS3+AS4+CS4+DS4+AS5+CS5+DS5+ *AS6+CS6+DS6 W1=EP+SU2R+(1+A)**(-1)*SU3R IF(DABS(W1-W).LT.EPS) GO TO 68 W=W1 GO TO 58 68 III=III+1 EGA(III)=W1 IGA(III)=IR IF(IPRINT.NE.0) WRITE(6,154) W1,IR 48 CONTINUE 1000 WRITE(6,13) 13 FORMAT(///5X,' RESULTS OF CALCULATION PES ') WRITE(6,14) 14 FORMAT(/1X,'LEVEL ',3X,' 2 ',2X,' IR ',3X,' 3 ',2X, *' IR ',3X,' FINAL ',2X,' IR ',3X,' SCF') DO 81 II=1,III WRITE(6,82) NUMH,EG2(II),IG2(II),EG23(II),IG23(II),EGA(II), *IGA(II),EIG(NUMH) NUMH=NUMH+1 81 CONTINUE 82 FORMAT(/I3,5X,F7.3,3X,I2,2X,F7.3,3X,I2,2X,F7.3,4X,I2,4X, *F7.3) WRITE(6,83) IGGWW,IGGV,EPS,IFULIT 83 FORMAT(//5X,' IN CALCULATED USED ',I5,' HOMO and ', *I5,' LUMO '/5X,' ACCURACY SELFCONSISTENT = ',F12.8/5X, *' FINAL RESULT CALCULATED BY ',I3,' METHOD ') WRITE(6,84) 84 FORMAT(//6X,'FINAL=0, CALCULATED BY FORMULA W=EP+SUM2+(1+A)', 1'**(-1)*SU3R'/6X, *'FINAL=1, CALCULATED BY FORMULA W=EP+SUM2+(1+G1)**-1)'/3X, 1'*(CS4+CS5+CS6+DS4+DS5+DS6)+(1+G2)**(-1)*(CS1+CS2+CS3+DS1'/3X, 2'+DS2+DS3)+AA'/6X, *'FINAL= -1, CALCULATED BY FORMULA W=EP+SUM2+(1+A)**(-1)*SUM3') NUMH=NIZ NUMV=IVER NUM1=NUMB-IGGW NUM2=NUMB+IGGV KIL=0 DO 350 I=NUMH,NUMV ZSUMA=0.D0 NAMB=NUMB+1 DO 301 J=NUM1,NUMB DO 301 L=NAMB,NUM2 JJ=J LL=L II=I IF(JJ.GE.LL) GO TO 302 LT=JJ JJ=LL LL=LT 302 IF(JJ.GT.II) GO TO 303 IF(JJ.EQ.II) GO TO 304 306 NYMB=ITL(II)+IT(II)*II+IT(II)+IT(JJ)+LL GO TO 305 304 IF(LL.GE.II) GO TO 303 GO TO 306 303 NYMB=ITL(JJ)+IT(JJ)*LL+IT(LL)+IT(II)+II 305 JJ=J LL=L II=I IF(JJ.GE.II.AND.II.GE.LL) GO TO 307 IF(JJ.GE.II.AND.LL.GE.II.AND.JJ.GE.LL) GO TO 308 IF(JJ.GE.II.AND.LL.GE.II.AND.LL.GE.JJ) GO TO 309 IF(II.GE.JJ.AND.II.GE.LL.AND.JJ.GE.LL) GO TO 310 IF(II.GE.JJ.AND.II.GE.LL.AND.LL.GE.JJ) GO TO 311 IF(II.GE.JJ.AND.LL.GE.II) GO TO 312 WRITE(6,320) JJ,II,LL 320 FORMAT(5X,'JJ=',I5,5X,'II=',I5,5X,'LL=',I5) STOP 307 NYMB1=ITL(JJ)+IT(JJ)*II+IT(II)+IT(II)+LL GO TO 313 308 NYMB1=ITL(JJ)+IT(JJ)*II+IT(II)+IT(LL)+II GO TO 313 309 NYMB1=ITL(LL)+IT(LL)*II+IT(II)+IT(JJ)+II GO TO 313 310 NYMB1=ITL(II)+IT(II)*JJ+IT(JJ)+IT(II)+LL GO TO 313 311 NYMB1=ITL(II)+IT(II)*LL+IT(LL)+IT(II)+JJ GO TO 313 312 NYMB1=ITL(LL)+IT(LL)*II+IT(II)+IT(II)+JJ 313 ZVERX=(P(NYMB)-0.5D0*P(NYMB1))**2 ZNIZ=EIG(L)-EIG(J) PS=ZVERX/ZNIZ ZSUMA=ZSUMA+PS 301 CONTINUE KIL=KIL+1 RIR(KIL)=2.D0*ZSUMA 350 CONTINUE WRITE(6,355) 355 FORMAT(//5X,' CALCULATION RELAXATION EFFECTS ONLY ') DO 356 I=1,III PRIR(I)=-EIG(NUMH)-RIR(I) NUMH=NUMH+1 356 CONTINUE NUMH=NIZ WRITE(6,359) 359 FORMAT(/3X,'LEVEL',2X,'R.effect',3X,'ENERGY SCF',5X,'ENERGY') DO 357 I=1,III WRITE(6,358) NUMH,RIR(I),EIG(NUMH),PRIR(I) NUMH=NUMH+1 357 CONTINUE 358 FORMAT(/3X,I3,2X,F10.6,3X,F8.4,8X,F8.4) RETURN END C C=================================================================== C mopac7-1.15/fortran/libmopac7.h0000644000175000017500000000220411053302063013237 00000000000000/* libmopac7.h ; written by Tommi Hassinen 2005 as a part of mopac7 package */ /* this is a set of C wrapper functions NOT contained in the fortran sources */ /* these are from fortran source files : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ extern "C" void lm7start_(void); extern "C" void lm7stop_(void); extern "C" int lm7iniplt_(void); extern "C" int getesp_(void); extern "C" int geteldens_(void); extern "C" int getorb_(void); /* the rest are from libmopac7.c : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ extern "C" void lm7_ini_full_xyz(void); extern "C" int lm7_get_atom_count(void); extern "C" int lm7_get_electron_count(void); extern "C" void lm7_set_atom_crd(int, double *); /* unit is nm */ extern "C" void lm7_call_compfg(double *, double *, int); extern "C" void lm7_get_atom_grad(int, double *); /* unit is kJ/mol nm^2 ??? */ extern "C" int lm7_get_orbital_count(void); extern "C" void lm7_set_plots_orbital_index(int); extern "C" double lm7_get_orbital_energy(int); /* unit is ??? */ extern "C" void lm7_set_num_potesp(int); extern "C" void lm7_set_crd_potesp(int, double *); extern "C" double lm7_get_val_potesp(int); /* END */ mopac7-1.15/fortran/addfck.f0000644000175000017500000000324311053302063012600 00000000000000 SUBROUTINE ADDFCK (F,P,NUMAT,NAT,NFIRST,NLAST) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION NAT(*),NFIRST(*), NLAST(*) COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 BH(LENABC) 4 /SOLVI/ IATSP(LENABC+1),NAR(LENABC), NNX(2,NUMATM) COMMON /DIRVEC/ DIRVEC(3,NPPA), NN(3,NUMATM) C COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), C 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, C 2 NCLOSE,NOPEN,NDUMY,FRACT DIMENSION F(*),P(*) I0=NPS2+NDEN*NPS IDEN=0 DO 60 I=1,NUMAT IA=NFIRST(I) IDEL=NLAST(I)-IA IM=(IA*(IA+1))/2-1 DO 50 IC=0,IDEL DO 40 ID=0,IC IM=IM+1 IDEN=IDEN+1 FIM=0.D0 JDEN=0 DO 30 J=1,NUMAT JA=NFIRST(J) JDEL=NLAST(J)-JA JM=(JA*(JA+1))/2-1 DO 20 JC=0,JDEL DO 10 JD=0,JC JM=JM+1 JDEN=JDEN+1 KDEN=MAX(IDEN,JDEN) I1=(KDEN*(KDEN-3))/2+IDEN+JDEN+I0 FIM = FIM + ABCMAT(I1) * P(JM) 10 CONTINUE JM=JM+JA-1 20 CONTINUE 30 CONTINUE F(IM)=F(IM)+2*FIM 40 CONTINUE F(IM)=F(IM)+2*FIM IM=IM+IA-1 50 CONTINUE 60 CONTINUE RETURN END mopac7-1.15/fortran/frame.f0000644000175000017500000000664211053302063012464 00000000000000 SUBROUTINE FRAME(FMAT,NUMAT,MODE,SHIFT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION FMAT(*), SHIFT(6) INCLUDE 'SIZES' COMMON /COORD /COORD(3,NUMATM) COMMON /ATMASS/ ATMASS(NUMATM) DIMENSION VIB(6,MAXPAR), ROT(3,3), COORD1(3,NUMATM) *********************************************************************** * * FRAME APPLIES AN RIGID ORIENTATION TO THE MOLECULE IN A FORCE * CALCULATION. THE TRANSLATIONS ARE GIVEN A 'FORCE CONSTANT' * OF T(X)=500 MILLIDYNES/ANGSTROM * T(Y)=600 MILLIDYNES/ANGSTROM * T(Z)=700 MILLIDYNES/ANGSTROM * AND THE ROTATIONS ARE GIVEN A 'FORCE CONSTANT' OF * R(X)=800 MILLIDYNES/ANGSTROM * R(Y)=900 MILLIDYNES/ANGSTROM * R(Z)=1000 MILLIDYNES/ANGSTROM, * THE ROTATIONS ARE MADE ABOUT AXES DETERMINED BY THE MOMENTS * OF INERTIA, WHICH IN TURN DEPEND ON THE ISOTOPIC MASSES. FOR * THE NORMAL FREQUENCY CALCULATION THESE ARE THE REAL MASSES, * FOR THE FORCE CALCULATION THEY ARE ALL UNITY. *********************************************************************** COMMON /EULER / TVEC(3,3), ID CALL AXIS(COORD,NUMAT,A,B,C,SUMW, MODE,ROT ) DO 20 I=1,NUMAT DO 20 J=1,3 SUM=0.D0 DO 10 K=1,3 10 SUM=SUM+COORD(K,I)*ROT(K,J) 20 COORD1(J,I)=SUM N3=NUMAT*3 J=0 WTMASS=1.D0 DO 30 I=1,NUMAT IF(MODE.EQ.1) WTMASS=SQRT(ATMASS(I)) J=J+1 VIB(1,J)=WTMASS VIB(2,J)=0.D0 VIB(3,J)=0.D0 VIB(4,J)=0.D0 VIB(5,J)=COORD1(3,I)*WTMASS VIB(6,J)=COORD1(2,I)*WTMASS J=J+1 VIB(1,J)=0.D0 VIB(2,J)=WTMASS VIB(3,J)=0.D0 VIB(4,J)=COORD1(3,I)*WTMASS VIB(5,J)=0.D0 VIB(6,J)=-COORD1(1,I)*WTMASS J=J+1 VIB(1,J)=0.D0 VIB(2,J)=0.D0 VIB(3,J)=WTMASS VIB(4,J)=-COORD1(2,I)*WTMASS VIB(5,J)=-COORD1(1,I)*WTMASS VIB(6,J)=0.D0 30 CONTINUE J=1 DO 50 I=1,NUMAT DO 40 K=4,6 X=VIB(K,J) Y=VIB(K,J+1) Z=VIB(K,J+2) VIB(K,J )=X*ROT(1,1)+Y*ROT(1,2)+Z*ROT(1,3) VIB(K,J+1)=X*ROT(2,1)+Y*ROT(2,2)+Z*ROT(2,3) VIB(K,J+2)=X*ROT(3,1)+Y*ROT(3,2)+Z*ROT(3,3) 40 CONTINUE J=J+3 50 CONTINUE SUM1=0.D0 SUM2=0.D0 SUM3=0.D0 SUM4=0.D0 SUM5=0.D0 SUM6=0.D0 DO 60 I=1,N3 SUM1=SUM1+VIB(1,I)**2 SUM2=SUM2+VIB(2,I)**2 SUM3=SUM3+VIB(3,I)**2 SUM4=SUM4+VIB(4,I)**2 SUM5=SUM5+VIB(5,I)**2 60 SUM6=SUM6+VIB(6,I)**2 IF(SUM1.GT.1.D-5)SUM1=SQRT(1.D0/SUM1) IF(SUM2.GT.1.D-5)SUM2=SQRT(1.D0/SUM2) IF(SUM3.GT.1.D-5)SUM3=SQRT(1.D0/SUM3) IF(SUM4.GT.1.D-5)SUM4=SQRT(1.D0/SUM4) IF(SUM5.GT.1.D-5)SUM5=SQRT(1.D0/SUM5) IF(SUM6.GT.1.D-5)SUM6=SQRT(1.D0/SUM6) IF(ID.NE.0)THEN SUM4=0.D0 SUM5=0.D0 SUM6=0.D0 ENDIF DO 70 I=1,N3 VIB(1,I)=VIB(1,I)*SUM1 VIB(2,I)=VIB(2,I)*SUM2 VIB(3,I)=VIB(3,I)*SUM3 VIB(4,I)=VIB(4,I)*SUM4 VIB(5,I)=VIB(5,I)*SUM5 70 VIB(6,I)=VIB(6,I)*SUM6 DO 80 I=1,6 80 SHIFT(I)=400.D0+I*100.D0 L=0 DO 100 I=1,N3 DO 100 J=1,I L=L+1 SUM1=0.D0 DO 90 K=1,6 90 SUM1=SUM1+VIB(K,I)*SHIFT(K)*VIB(K,J) 100 FMAT(L)=FMAT(L)+SUM1 END mopac7-1.15/fortran/btoc.f0000644000175000017500000000535111053302063012315 00000000000000 SUBROUTINE BTOC (COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XX(3),XA(3),COORD(3,*) COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 BH(LENABC) 4 /SOLVI/ IATSP(LENABC+1),NAR(LENABC), NN(2,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT 3 /MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107) DO 10 I=1,NPS J=IATSP(I) RI=SRAD(J)-RDS DO 10 IX=1,3 10 COSURF(IX,I)=COSURF(IX,I)*RI+COORD(IX,J) C FILLING B-MATRIX I0=NPS2-NDEN IDEN=0 DO 50 I=1,NUMAT IA=NFIRST(I) IDEL=NLAST(I)-IA NATI=NAT(I) DDI=DD(NATI)*2*.529177D0 QQI2=(.529177D0*QQ(NATI))**2 DO 20 IX=1,3 XX(IX)=COORD(IX,I) 20 CONTINUE DO 40 IPS=1,NPS I1=I0+IPS*NDEN DIST=0.D0 DO 30 IX=1,3 XA(IX)=COSURF(IX,IPS)-XX(IX) DIST=DIST+XA(IX)**2 30 CONTINUE RM1=1.D0/DSQRT(DIST) ABCMAT(IDEN+1+I1)=RM1 IF (IDEL .EQ. 0) GO TO 40 RM3=RM1**3 RM5=RM1**5 ABCMAT(IDEN+3+I1)=RM1+3*XA(1)**2*QQI2*RM5-QQI2*RM3 ABCMAT(IDEN+6+I1)=RM1+3*XA(2)**2*QQI2*RM5-QQI2*RM3 ABCMAT(IDEN+10+I1)=RM1+3*XA(3)**2*QQI2*RM5-QQI2*RM3 ABCMAT(IDEN+2+I1)=XA(1)*DDI*RM3 ABCMAT(IDEN+4+I1)=XA(2)*DDI*RM3 ABCMAT(IDEN+7+I1)=XA(3)*DDI*RM3 ABCMAT(IDEN+5+I1)=6*XA(1)*XA(2)*QQI2*RM5 ABCMAT(IDEN+8+I1)=6*XA(1)*XA(3)*QQI2*RM5 ABCMAT(IDEN+9+I1)=6*XA(3)*XA(2)*QQI2*RM5 40 CONTINUE 50 IDEN=IDEN+1+IDEL**2 I1=NPS2+NDEN*NPS C FILLING C-MATRIX FACT=-.5D0*2*13.6058D0*.5292D0*FEPSI DO 110 I=1,NDEN DO 80 K=1,NPS BHK=0.D0 KK2=(K*(K-1))/2 DO 60 L=1,K 60 BHK=BHK+ABCMAT(I+L*NDEN+I0)*ABCMAT(KK2+L) DO 70 L=K+1,NPS 70 BHK=BHK+ABCMAT(I+L*NDEN+I0)*ABCMAT((L*(L-1))/2+K) BH(K)=BHK 80 CONTINUE DO 100 J=1,I CIJ=0.D0 DO 90 K=1,NPS 90 CIJ=CIJ+BH(K)*ABCMAT(J+K*NDEN+I0) I1=I1+1 ABCMAT(I1)=FACT*CIJ 100 CONTINUE 110 CONTINUE I1=NPS2+NDEN*NPS DO 120 I=1,NDEN 120 I1=I1+I DO 130 I=1,NPS J=IATSP(I) RM=SRAD(J)-RDS DO 130 IX=1,3 130 COSURF(IX,I)=(COSURF(IX,I)-COORD(IX,J))/RM C CALL DIELEN(EDIE) RETURN END mopac7-1.15/fortran/solrot.f0000644000175000017500000000414111053302064012705 00000000000000 SUBROUTINE SOLROT (NI,NJ,XI,XJ,WJ,WK,KR,E1B,E2A,ENUC,CUTOFF) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION XI(3), XJ(3), WJ(100), WK(100), E1B(10), E2A(10) ************************************************************************ * * SOLROT FORMS THE TWO-ELECTRON TWO-ATOM J AND K INTEGRAL STRINGS. * ON EXIT WJ = "J"-TYPE INTEGRALS * WK = "K"-TYPE INTEGRALS * * FOR MOLECULES, WJ = WK. ************************************************************************ COMMON /EULER / TVEC(3,3), ID COMMON /UCELL / L1L,L2L,L3L,L1U,L2U,L3U COMMON /NUMCAL/ NUMCAL DIMENSION WSUM(100), WBITS(100), LIMS(3,2), XJUC(3), E1BITS(10), 1E2BITS(10), WMAX(100) SAVE ICALCN EQUIVALENCE (L1L,LIMS(1,1)) DATA ICALCN/0/ IF(ICALCN.NE.NUMCAL)THEN ICALCN=NUMCAL C$DOIT ASIS DO 10 I=1,ID LIMS(I,1)=-1 10 LIMS(I,2)= 1 C$DOIT ASIS DO 20 I=ID+1,3 LIMS(I,1)=0 20 LIMS(I,2)=0 ENDIF ONE=1.D0 IF(XI(1).EQ.XJ(1) .AND. XI(2).EQ.XJ(2) .AND. XI(3).EQ. XJ(3)) 1ONE=0.5D0 DO 30 I=1,100 WMAX(I)=0.D0 WSUM(I)=0.D0 30 WBITS(I)=0.D0 DO 40 I=1,10 E1B(I)=0.D0 40 E2A(I)=0.D0 ENUC=0.D0 DO 90 I=L1L,L1U DO 90 J=L2L,L2U DO 90 K=L3L,L3U C$DOIT ASIS DO 50 L=1,3 50 XJUC(L)=XJ(L)+TVEC(L,1)*I+TVEC(L,2)*J+TVEC(L,3)*K KB=1 CALL ROTATE (NI,NJ,XI,XJUC,WBITS,KB,E1BITS,E2BITS, 1ENUBIT,CUTOFF) KB=KB-1 DO 60 II=1,KB 60 WSUM(II)=WSUM(II)+WBITS(II) IF(WMAX(1).LT.WBITS(1))THEN DO 70 II=1,KB 70 WMAX(II)=WBITS(II) ENDIF DO 80 II=1,10 E1B(II)=E1B(II)+E1BITS(II) 80 E2A(II)=E2A(II)+E2BITS(II) ENUC=ENUC+ENUBIT*ONE 90 CONTINUE IF(ONE.LT.0.9D0) THEN DO 100 I=1,KB 100 WMAX(I)=0.D0 ENDIF DO 110 I=1,KB WK(I)=WMAX(I) 110 WJ(I)=WSUM(I) KR=KB+KR RETURN END mopac7-1.15/fortran/deri1.f0000644000175000017500000003062511053302063012374 00000000000000 SUBROUTINE DERI1(C,NORBS,COORD,NUMBER,WORK,GRAD 1 ,F,MINEAR,FD,WMAT,HMAT,FMAT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION WMAT(MPACK),HMAT(MPACK*2),FMAT(MPACK*2) ********************************************************************* * * DERI1 COMPUTE THE NON-RELAXED DERIVATIVE OF THE NON-VARIATIONALLY * OPTIMIZED WAVEFUNCTION ENERGY WITH RESPECT TO ONE CARTESIAN * COORDINATE AT A TIME * AND * COMPUTE THE NON-RELAXED FOCK MATRIX DERIVATIVE IN M.O BASIS AS * REQUIRED IN THE RELAXATION SECTION (ROUTINE 'DERI2'). * * INPUT * C(NORBS,NORBS) : M.O. COEFFICIENTS. * COORD : CARTESIAN COORDINATES ARRAY. * NUMBER : LOCATION OF THE REQUIRED VARIABLE IN COORD. * WORK : WORK ARRAY OF SIZE N*N. * WMAT : WORK ARRAYS FOR d (2-CENTERS A.O) * OUTPUT * C,COORD,NUMBER : NOT MODIFIED. * GRAD : DERIVATIVE OF THE HEAT OF FORMATION WITH RESPECT TO * COORD(NUMBER), WITHOUT RELAXATION CORRECTION. * F(MINEAR) : NON-RELAXED FOCK MATRIX DERIVATIVE WITH RESPECT TO * COORD(NUMBER), EXPRESSED IN M.O BASIS, SCALED AND * PACKED, OFF-DIAGONAL BLOCKS ONLY. * FD : IDEM BUT UNSCALED, DIAGONAL BLOCKS, C.I-ACTIVE ONLY. * ************************************************************************ COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM) 1 ,NLAST(NUMATM), NDUMY1, NELECS,NALPHA,NBETA 2 ,NCLOSE,NOPEN,NDUMY,FRACT 3 /VECTOR/ CDUM(MORB2),EIGS(MAXORB),WDUM(MORB2),EIGB(MAXORB) 4 /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /CIBITS/ NMOS,LAB,NELEC,NBO(3) 1 /HMATRX/ H(MPACK) 2 /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) 3 /CIVECT/ CONF(NMECI**4+NMECI**2+1) COMMON /FOKMAT/ FDUMY(MPACK), SCALAR(MPACK) COMMON /NVOMAT/ DIAG(MPACK/2) 1 /KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL DIMENSION COORD(*),C(NORBS,NORBS),WORK(NORBS,NORBS),F(*),FD(*) CHARACTER KEYWRD*241 LOGICAL DEBUG DATA ICALCN /0/ C IF(ICALCN.NE.NUMCAL) THEN DEBUG=INDEX(KEYWRD,'DERI1').NE.0 IPRT=6 LINEAR=NORBS*(NORBS+1)/2 ICALCN=NUMCAL ENDIF IF(DEBUG) CALL TIMER('BEFORE DERI1') STEP=1.D-3 C C 2 POINTS FINITE DIFFERENCE TO GET THE INTEGRAL DERIVATIVES C ---------------------------------------------------------- C STORED IN HMAT AND WMAT, WITHOUT DIVIDING BY THE STEP SIZE. C NATI=(NUMBER-1)/3+1 NATX=NUMBER-3*(NATI-1) CALL DHCORE (COORD,HMAT,WMAT,ENUCL2,NATI,NATX,STEP) C C HMAT HOLDS THE ONE-ELECTRON DERIVATIVES OF ATOM NATI FOR DIRECTION C NATX W.R.T. ALL OTHER ATOMS C WMAT HOLDS THE TWO-ELECTRON DERIVATIVES OF ATOM NATI FOR DIRECTION C NATX W.R.T. ALL OTHER ATOMS STEP=0.5D0/STEP C C NON-RELAXED FOCK MATRIX DERIVATIVE IN A.O BASIS. C ------------------------------------------------ C STORED IN FMAT, DIVIDED BY STEP. C CALL SCOPY (LINEAR,HMAT,1,FMAT,1) CALL DFOCK2 (FMAT,P,PA,WMAT,NUMAT,NFIRST,NMIDLE,NLAST,NATI) C C FMAT HOLDS THE ONE PLUS TWO - ELECTRON DERIVATIVES OF ATOM NATI FOR C DIRECTION NATX W.R.T. ALL OTHER ATOMS C C DERIVATIVE OF THE SCF-ONLY ENERGY (I.E BEFORE C.I CORRECTION) C GRAD=(HELECT(NORBS,P,HMAT,FMAT)+ENUCL2)*STEP C TAKE STEP INTO ACCOUNT IN FMAT DO 10 I=1,LINEAR 10 FMAT(I)=FMAT(I)*STEP C C RIGHT-HAND SIDE SUPER-VECTOR F = C' FMAT C USED IN RELAXATION C ----------------------------------------------------------- C STORED IN NON-STANDARD PACKED FORM IN F(MINEAR) AND FD. C THE SUPERVECTOR IS THE NON-RELAXED FOCK MATRIX DERIVATIVE IN C M.O BASIS: F(IJ)= ( (C' * FOCK * C)(I,J) ) WITH I.GT.J . C F IS SCALED AND PACKED IN SUPERVECTOR FORM WITH C THE CONSECUTIVE FOLLOWING OFF-DIAGONAL BLOCKS: C 1) OPEN-CLOSED I.E. F(IJ)=F(I,J) WITH I OPEN & J CLOSED C AND I RUNNING FASTER THAN J, C 2) VIRTUAL-CLOSED SAME RULE OF ORDERING, C 3) VIRTUAL-OPEN SAME RULE OF ORDERING. C FD IS PACKED OVER THE C.I-ACTIVE M.O WITH C THE CONSECUTIVE DIAGONAL BLOCKS: C 1) CLOSED-CLOSED IN CANONICAL ORDER, WITHOUT THE C DIAGONAL ELEMENTS, C 2) OPEN-OPEN SAME RULE OF ORDERING, C 3) VIRTUAL-VIRTUAL SAME RULE OF ORDERING. C C PART 1 : WORK(N,N) = FMAT(N,N) * C(N,N) DO 20 I=1,NORBS 20 CALL SUPDOT (WORK(1,I),FMAT,C(1,I),NORBS,1) C C PART 2 : F(IJ) = (C' * WORK)(I,J) ... OFF-DIAGONAL BLOCKS. L=1 IF(NBO(2).NE.0 .AND. NBO(1).NE.0) THEN C OPEN-CLOSED CALL MTXM (C(1,NBO(1)+1),NBO(2),WORK,NORBS,F(L),NBO(1)) L=L+NBO(2)*NBO(1) ENDIF IF(NBO(3).NE.0 .AND. NBO(1).NE.0) THEN C VIRTUAL-CLOSED CALL MTXM (C(1,NOPEN+1),NBO(3),WORK,NORBS,F(L),NBO(1)) L=L+NBO(3)*NBO(1) ENDIF IF(NBO(3).NE.0 .AND. NBO(2).NE.0) THEN C VIRTUAL-OPEN CALL MTXM (C(1,NOPEN+1),NBO(3),WORK(1,NBO(1)+1),NORBS,F(L),NBO( 12)) ENDIF C SCALE F ACCORDING TO THE DIAGONAL METRIC TENSOR 'SCALAR '. DO 30 I=1,MINEAR 30 F(I)=F(I)*SCALAR(I) IF(DEBUG)THEN WRITE(6,*)' F IN DERI1' J=MIN(20,MINEAR) WRITE(6,'(5F12.6)')(F(I),I=1,J) ENDIF C C PART 3 : SUPER-VECTOR FD, C.I-ACTIVE DIAGONAL BLOCKS, UNSCALED. L=1 NEND=0 DO 50 LOOP=1,3 NINIT=NEND+1 NEND =NEND+NBO(LOOP) N1=MAX(NINIT,NELEC+1 ) N2=MIN(NEND ,NELEC+NMOS) IF(N2.LT.N1) GO TO 50 DO 40 I=N1,N2 IF(I.GT.NINIT) THEN CALL MXM (C(1,I),1,WORK(1,NINIT),NORBS,FD(L),I-NINIT) L=L+I-NINIT ENDIF 40 CONTINUE 50 CONTINUE C C NON-RELAXED C.I CORRECTION TO THE ENERGY DERIVATIVE. C ---------------------------------------------------- C C C.I-ACTIVE FOCK EIGENVALUES DERIVATIVES, STORED IN FD(CONTINUED). LCUT=L DO 60 I=NELEC+1,NELEC+NMOS FD(L)=DOT(C(1,I),WORK(1,I),NORBS) 60 L=L+1 C C C.I-ACTIVE 2-ELECTRONS INTEGRALS DERIVATIVES. STORED IN XY. C FMAT IS USED HERE AS SCRATCH SPACE C CALL DIJKL1 (C(1,NELEC+1),NORBS,NATI,WMAT,FMAT,HMAT,FMAT) DO 70 I=1,NMOS DO 70 J=1,NMOS DO 70 K=1,NMOS DO 70 L=1,NMOS 70 XY(I,J,K,L)=XY(I,J,K,L)*STEP C C BUILD THE C.I MATRIX DERIVATIVE, STORED IN WMAT. CALL MECID (FD(LCUT-NELEC),GSE,EIGB,WORK) IF(DEBUG)THEN WRITE(6,*)' GSE:',GSE C# WRITE(6,*)' EIGB:',(EIGB(I),I=1,10) C# WRITE(6,*)' WORK:',(WORK(I,1),I=1,10) ENDIF CALL MECIH (WORK,WMAT,NMOS,LAB) C C NON-RELAXED C.I CONTRIBUTION TO THE ENERGY DERIVATIVE. CALL SUPDOT (WORK,WMAT,CONF,LAB,1) GRAD=(GRAD+DOT(CONF,WORK,LAB))*23.061D0 IF(DEBUG) THEN WRITE(IPRT,'('' * * * GRADIENT COMPONENT NUMBER'',I4)')NUMBER WRITE(IPRT,'('' NON-RELAXED C.I-ACTIVE FOCK EIGENVALUES '', 1 ''DERIVATIVES (E.V.)'')') WRITE(IPRT,'(8F10.4)')(FD(LCUT-1+I),I=1,NMOS) WRITE(IPRT,'('' NON-RELAXED 2-ELECTRONS DERIVATIVES (E.V.)''/ 1'' I J K L d'')') DO 80 I=1,NMOS DO 80 J=1,I DO 80 K=1,I LL=K IF(K.EQ.I) LL=J DO 80 L=1,LL 80 WRITE(IPRT,'(4I5,F20.10)') 1 NELEC+I,NELEC+J,NELEC+K,NELEC+L,XY(I,J,K,L) WRITE(IPRT,'('' NON-RELAXED GRADIENT COMPONENT'',F10.4, 1'' KCAL/MOLE'')')GRAD CALL TIMER('AFTER DERI1') ENDIF RETURN END SUBROUTINE DHCORE (COORD,H,W,ENUCLR,NATI,NATX,STEP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COORD(3,*),H(*),W(*) C C DHCORE GENERATES THE 1-ELECTRON AND 2-ELECTRON INTEGRALS DERIVATIVES C WITH RESPECT TO THE CARTESIAN COORDINATE COORD (NATX,NATI). C C INPUT C COORD : CARTESIAN COORDINATES OF THE MOLECULE. C NATI,NATX : INDICES OF THE MOVING COORDINATE. C STEP : STEP SIZE OF THE 2-POINTS FINITE DIFFERENCE. C OUTPUT C H : 1-ELECTRON INTEGRALS DERIVATIVES (PACKED CANONICAL). C W : 2-ELECTRON INTEGRALS DERIVATIVES (ORDERED AS REQUIRED C IN DFOCK2 AND DIJKL1). C ENUCLR : NUCLEAR ENERGY DERIVATIVE. C COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT 3 /MOLORB/ USPD(MAXORB),DUMY(MAXORB) 4 /KEYWRD/ KEYWRD 5 /WMATRX/ WDUMMY(N2ELEC*2) CHARACTER*241 KEYWRD LOGICAL FIRST,MINDO DIMENSION E1B(10),DE1B(10),E2A(10),DE2A(10) 1 ,DI(9,9),DDI(9,9),WJD(101),DWJD(101) 2,NB(0:8) DATA NB/1,0,0,10,0,0,0,0,45/ DATA FIRST/.TRUE./ IF (FIRST) THEN CUTOFF=1.D10 FIRST=.FALSE. MINDO=INDEX(KEYWRD,'MINDO') .NE. 0 ENDIF DO 10 I=1,(NORBS*(NORBS+1))/2 10 H(I)=0 ENUCLR=0.D0 KR=1 NROW=0 I=NATI CSAVE=COORD(NATX,NATI) IA=NFIRST(NATI) IB=NLAST(NATI) IC=NMIDLE(NATI) NI=NAT(NATI) NROW=-NB(IB-IA) DO 20 J=1,NUMAT 20 NROW=NROW+NB(NLAST(J)-NFIRST(J)) C# NCOL=NB(NLAST(NATI)-NFIRST(NATI)) NBAND2=0 DO 120 J=1,NUMAT IF (J.EQ.NATI) GO TO 120 JA=NFIRST(J) JB=NLAST(J) JC=NMIDLE(J) NJ=NAT(J) COORD(NATX,NATI)=CSAVE+STEP CALL H1ELEC(NI,NJ,COORD(1,NATI),COORD(1,J),DI) C C THE FOLLOWING STYLE WAS NECESSARY TO GET ROUND A BUG IN THE C GOULD COMPILER C COORD(NATX,NATI)=CSAVE+STEP*(-1.D0) CALL H1ELEC(NI,NJ,COORD(1,NATI),COORD(1,J),DDI) C C FILL THE ATOM-OTHER ATOM ONE-ELECTRON MATRIX. C I2=0 IF (IA.GT.JA) THEN DO 30 I1=IA,IB IJ=I1*(I1-1)/2+JA-1 I2=I2+1 J2=0 DO 30 J1=JA,JB IJ=IJ+1 J2=J2+1 30 H(IJ)=H(IJ)+(DI(I2,J2)-DDI(I2,J2)) ELSE DO 40 I1=JA,JB IJ=I1*(I1-1)/2+IA-1 I2=I2+1 J2=0 DO 40 J1=IA,IB IJ=IJ+1 J2=J2+1 40 H(IJ)=H(IJ)+(DI(J2,I2)-DDI(J2,I2)) ENDIF C C CALCULATE THE TWO-ELECTRON INTEGRALS, W; THE ELECTRON NUCLEAR TERM C E1B AND E2A; AND THE NUCLEAR-NUCLEAR TERM ENUC. C KRO=KR NBAND2=NBAND2+NB(NLAST(J)-NFIRST(J)) IF (MINDO) THEN COORD(NATX,NATI)=CSAVE+STEP CALL ROTATE (NI,NJ,COORD(1,NATI),COORD(1,J) 1 ,WJD,KR,E1B,E2A,ENUC,CUTOFF) KR=KRO COORD(NATX,NATI)=CSAVE+STEP*(-1.D0) CALL ROTATE (NI,NJ,COORD(1,NATI),COORD(1,J) 1 ,DWJD,KR,DE1B,DE2A,DENUC,CUTOFF) IF (KR.GT.KRO) THEN DO 50 K=1,KR-KRO+1 50 W(KRO+K-1)=WJD(K)-DWJD(K) ENDIF ELSE COORD(NATX,NATI)=CSAVE+STEP CALL ROTATE (NI,NJ,COORD(1,NATI),COORD(1,J) 1 ,WJD,KR,E1B,E2A,ENUC,CUTOFF) KR=KRO COORD(NATX,NATI)=CSAVE+STEP*(-1.D0) CALL ROTATE (NI,NJ,COORD(1,NATI),COORD(1,J) 1 ,DWJD,KR,DE1B,DE2A,DENUC,CUTOFF) IF (KR.GT.KRO) THEN DO 60 K=1,KR-KRO+1 60 WJD(K)=WJD(K)-DWJD(K) J7=0 DO 70 I1=KRO,KR J7=J7+1 70 W(I1)=WJD(J7) ENDIF ENDIF COORD(NATX,NATI)=CSAVE ENUCLR = ENUCLR + ENUC-DENUC C C ADD ON THE ELECTRON-NUCLEAR ATTRACTION TERM FOR ATOM I. C I2=0 DO 80 I1=IA,IC II=I1*(I1-1)/2+IA-1 DO 80 J1=IA,I1 II=II+1 I2=I2+1 80 H(II)=H(II)+E1B(I2)-DE1B(I2) C CONTRIB D, CNDO. DO 90 I1=IC+1,IB II=(I1*(I1+1))/2 90 H(II)=H(II)+E1B(1)-DE1B(1) C C ADD ON THE ELECTRON-NUCLEAR ATTRACTION TERM FOR ATOM J. C I2=0 DO 100 I1=JA,JC II=I1*(I1-1)/2+JA-1 DO 100 J1=JA,I1 II=II+1 I2=I2+1 100 H(II)=H(II)+E2A(I2)-DE2A(I2) C CONTRIB D, CNDO. DO 110 I1=JC+1,JB II=(I1*(I1+1))/2 110 H(II)=H(II)+E2A(1)-DE2A(1) 120 CONTINUE C C 'SIZE' OF H IS NROW * NCOL C RETURN END mopac7-1.15/fortran/fock2.f0000644000175000017500000005546011053302063012400 00000000000000 SUBROUTINE FOCK2(F, PTOT, P, W, WJ, WK, NUMAT, NAT, NFIRST, 1NMIDLE, NLAST) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION F(*), PTOT(*), WJ(*), WK(*), NFIRST(*), NMIDLE(*), 1 NLAST(*), P(*), W(*), NAT(*) DOUBLE PRECISION WJ,WK C*********************************************************************** C C FOCK2 FORMS THE TWO-ELECTRON TWO-CENTER REPULSION PART OF THE FOCK C MATRIX C ON INPUT PTOT = TOTAL DENSITY MATRIX. C P = ALPHA OR BETA DENSITY MATRIX. C W = TWO-ELECTRON INTEGRAL MATRIX. C C ON OUTPUT F = PARTIAL FOCK MATRIX C*********************************************************************** COMMON /EULER / TVEC(3,3), ID COMMON /MOLMEC/ HTYPE(4),NHCO(4,20),NNHCO,ITYPE COMMON /NUMCAL/ NUMCAL COMMON /KEYWRD/ KEYWRD COMMON /WORK4 / PTOT2 C COSMO change LOGICAL ISEPS, USEPS, UPDA COMMON /ISEPS/ ISEPS, USEPS, UPDA C end of COSMO change SAVE IFACT,I1FACT, IONE, LID DIMENSION IFACT(MAXORB), 1I1FACT(MAXORB), JINDEX(256), KINDEX(256), IJPERM(10), LLPERM(10), 2PK(16), PJA(16), PJB(16), MMPERM(10), 3PTOT2(NUMATM,16), JJNDEX(256) CHARACTER*241 KEYWRD LOGICAL LID DATA ICALCN/0/ IF(ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL C C SET UP ARRAY OF LOWER HALF TRIANGLE INDICES (PASCAL'S TRIANGLE) C DO 10 I=1,MAXORB IFACT(I)=(I*(I-1))/2 10 I1FACT(I)=IFACT(I)+I C C SET UP GATHER-SCATTER TYPE ARRAYS FOR USE WITH TWO-ELECTRON C INTEGRALS. JINDEX ARE THE INDICES OF THE J-INTEGRALS FOR ATOM I C INTEGRALS. JJNDEX ARE THE INDICES OF THE J-INTEGRALS FOR ATOM J C KINDEX ARE THE INDICES OF THE K-INTEGRALS C M=0 DO 20 I=1,4 DO 20 J=1,4 IJ=MIN(I,J) JI=I+J-IJ DO 20 K=1,4 IK=MIN(I,K) KI=I+K-IK DO 20 L=1,4 M=M+1 KL=MIN(K,L) LK=K+L-KL JL=MIN(J,L) LJ=J+L-JL KINDEX(M)= IFACT(LJ) +JL + 10*( IFACT(KI) +IK) -10 20 JINDEX(M)=(IFACT(JI) + IJ)*10 + IFACT(LK) + KL - 10 L=0 DO 30 I=1,4 I1=(I-1)*4 DO 30 J=1,I I1=I1+1 L=L+1 IJPERM(L)=I1 MMPERM(L)=IJPERM(L)-16 LLPERM(L)=(I1-1)*16 30 CONTINUE L=0 DO 40 I=1,10 M=MMPERM(I) L=LLPERM(I) DO 40 K=1,16 L=L+1 M=M+16 40 JJNDEX(L)=JINDEX(M) LID=(ID.EQ.0) IONE=1 IF(ID.NE.0)IONE=0 C C END OF INITIALIZATION C ENDIF IF(ITYPE.EQ.4) GOTO 200 C C START OF MNDO, AM1, OR PM3 OPTION C KK=0 L=0 DO 60 I=1,NUMAT IA=NFIRST(I) IB=NLAST(I) M=0 DO 50 J=IA,IB DO 50 K=IA,IB M=M+1 JK=MIN(J,K) KJ=K+J-JK JK=JK+(KJ*(KJ-1))/2 PTOT2(I,M)=PTOT(JK) 50 CONTINUE 60 CONTINUE DO 190 II=1,NUMAT IA=NFIRST(II) IB=NLAST(II) C C IF NUMAT=2 THEN WE ARE IN A DERIVATIVE OR IN A MOLECULE CALCULATION C IF(NUMAT.NE.2)THEN IMINUS=II-IONE ELSE IMINUS=II-1 ENDIF DO 180 JJ=1,IMINUS JA=NFIRST(JJ) JB=NLAST(JJ) JC=NMIDLE(JJ) IF(LID) THEN IF(IB-IA.GE.3.AND.JB-JA.GE.3)THEN C C HEAVY-ATOM - HEAVY-ATOM C C EXTRACT COULOMB TERMS C DO 70 I=1,16 PJA(I)=PTOT2(II,I) 70 PJB(I)=PTOT2(JJ,I) C C COULOMB TERMS C CALL JAB(IA,JA,LLPERM,JINDEX, JJNDEX, PJA,PJB,W(KK+1), 1F) C C EXCHANGE TERMS C C C EXTRACT INTERSECTION OF ATOMS II AND JJ IN THE SPIN DENSITY MATRIX C L=0 DO 80 I=IA,IB I1=IFACT(I)+JA DO 80 J=I1,I1+3 L=L+1 80 PK(L)=P(J) CALL KAB(IA,JA, PK, W(KK+1), KINDEX, F) KK=KK+100 ELSEIF(IB-IA.GE.3.AND.JA.EQ.JB)THEN C C LIGHT-ATOM - HEAVY-ATOM C C C COULOMB TERMS C SUMDIA=0.D0 SUMOFF=0.D0 LL=I1FACT(JA) K=0 DO 100 I=0,3 J1=IFACT(IA+I)+IA-1 DO 90 J=0,I-1 K=K+1 J1=J1+1 F(J1)=F(J1)+PTOT(LL)*W(KK+K) 90 SUMOFF=SUMOFF+PTOT(J1)*W(KK+K) J1=J1+1 K=K+1 F(J1)=F(J1)+PTOT(LL)*W(KK+K) 100 SUMDIA=SUMDIA+PTOT(J1)*W(KK+K) F(LL)=F(LL)+SUMOFF*2.D0+SUMDIA C C EXCHANGE TERMS C C C EXTRACT INTERSECTION OF ATOMS II AND JJ IN THE SPIN DENSITY MATRIX C K=0 DO 120 I=IA,IB I1=IFACT(I)+JA SUM=0.D0 DO 110 J=IA,IB K=K+1 J1=IFACT(J)+JA 110 SUM=SUM+P(J1)*W(KK+JINDEX(K)) 120 F(I1)=F(I1)-SUM KK=KK+10 ELSEIF(JB-JA.GE.3.AND.IA.EQ.IB)THEN C C HEAVY-ATOM - LIGHT-ATOM C C C COULOMB TERMS C SUMDIA=0.D0 SUMOFF=0.D0 LL=I1FACT(IA) K=0 DO 140 I=0,3 J1=IFACT(JA+I)+JA-1 DO 130 J=0,I-1 K=K+1 J1=J1+1 F(J1)=F(J1)+PTOT(LL)*W(KK+K) 130 SUMOFF=SUMOFF+PTOT(J1)*W(KK+K) J1=J1+1 K=K+1 F(J1)=F(J1)+PTOT(LL)*W(KK+K) 140 SUMDIA=SUMDIA+PTOT(J1)*W(KK+K) F(LL)=F(LL)+SUMOFF*2.D0+SUMDIA C C EXCHANGE TERMS C C C EXTRACT INTERSECTION OF ATOMS II AND JJ IN THE SPIN DENSITY MATRIX C K=IFACT(IA)+JA J=0 DO 160 I=K,K+3 SUM=0.D0 DO 150 L=K,K+3 J=J+1 150 SUM=SUM+P(L)*W(KK+JINDEX(J)) 160 F(I)=F(I)-SUM KK=KK+10 ELSEIF(JB.EQ.JA.AND.IA.EQ.IB)THEN C C LIGHT-ATOM - LIGHT-ATOM C I1=I1FACT(IA) J1=I1FACT(JA) IJ=I1+JA-IA F(I1)=F(I1)+PTOT(J1)*W(KK+1) F(J1)=F(J1)+PTOT(I1)*W(KK+1) F(IJ)=F(IJ)-P (IJ)*W(KK+1) KK=KK+1 ENDIF ELSE DO 170 I=IA,IB KA=IFACT(I) DO 170 J=IA,I KB=IFACT(J) IJ=KA+J AA=2.0D00 IF (I.EQ.J) AA=1.0D00 DO 170 K=JA,JC KC=IFACT(K) IF(I.GE.K) THEN IK=KA+K ELSE IK=0 ENDIF IF(J.GE.K) THEN JK=KB+K ELSE JK=0 ENDIF DO 170 L=JA,K IF(I.GE.L) THEN IL=KA+L ELSE IL=0 ENDIF IF(J.GE.L) THEN JL=KB+L ELSE JL=0 ENDIF KL=KC+L BB=2.0D00 IF (K.EQ.L) BB=1.0D00 KK=KK+1 AJ=WJ(KK) AK=WK(KK) C C A IS THE REPULSION INTEGRAL (I,J/K,L) WHERE ORBITALS I AND J ARE C ON ATOM II, AND ORBITALS K AND L ARE ON ATOM JJ. C AA AND BB ARE CORRECTION FACTORS SINCE C (I,J/K,L)=(J,I/K,L)=(I,J/L,K)=(J,I/L,K) C IJ IS THE LOCATION OF THE MATRIX ELEMENTS BETWEEN ATOMIC ORBITALS C I AND J. SIMILARLY FOR IK ETC. C C THIS FORMS THE TWO-ELECTRON TWO-CENTER REPULSION PART OF THE FOCK C MATRIX. THE CODE HERE IS HARD TO FOLLOW, AND IMPOSSIBLE TO MODIFY!, C BUT IT WORKS, IF(KL.LE.IJ)THEN IF(I.EQ.K.AND.AA+BB.LT.2.1D0)THEN BB=BB*0.5D0 AA=AA*0.5D0 F(IJ)=F(IJ)+BB*AJ*PTOT(KL) F(KL)=F(KL)+AA*AJ*PTOT(IJ) ELSE F(IJ)=F(IJ)+BB*AJ*PTOT(KL) F(KL)=F(KL)+AA*AJ*PTOT(IJ) A=AK*AA*BB*0.25D0 F(IK)=F(IK)-A*P(JL) F(IL)=F(IL)-A*P(JK) F(JK)=F(JK)-A*P(IL) F(JL)=F(JL)-A*P(IK) ENDIF ENDIF 170 CONTINUE ENDIF 180 CONTINUE 190 CONTINUE C COSMO change C The following routine adds the dielectric corretion to F IF (USEPS) CALL ADDFCK (F,P,NUMAT,NAT,NFIRST,NLAST) C A. Klamt 18.7.91 C end of COSMO change RETURN C C START OF MINDO/3 OPTION C 200 KR=0 DO 230 II=1,NUMAT IA=NFIRST(II) IB=NLAST(II) IM1=II-IONE DO 220 JJ=1,IM1 KR=KR+1 IF(LID)THEN ELREP=W(KR) ELEXC=ELREP ELSE ELREP=WJ(KR) ELEXC=WK(KR) ENDIF JA=NFIRST(JJ) JB=NLAST(JJ) DO 210 I=IA,IB KA=IFACT(I) KK=KA+I DO 210 K=JA,JB LL=I1FACT(K) IK=KA+K F(KK)=F(KK)+PTOT(LL)*ELREP F(LL)=F(LL)+PTOT(KK)*ELREP 210 F(IK)=F(IK)-P(IK)*ELEXC 220 CONTINUE 230 CONTINUE RETURN END SUBROUTINE JAB(IA,JA,LLPERM,JINDEX, JJNDEX,PJA,PJB,W, F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION LLPERM(10), PJA(16), PJB(16), W(*), F(*), 1JINDEX(256), JJNDEX(256), SUMA(10), SUMB(10) C C FOR VECTOR MACHINES, REMOVE THE ARRAYS SUMA AND SUMB, UNCOMMENT C THE LINES MARKED CVECTOR, AND COMMENT OUT THE SECOND WHOLE PART C OF THE SUBROUTINE CVECTOR I=0 CVECTOR DO 100 I5=1,4 CVECTOR IIA=IA+I5-1 CVECTOR IJA=JA+I5-1 CVECTOR IOFF=(IIA*(IIA-1))/2+IA-1 CVECTOR JOFF=(IJA*(IJA-1))/2+JA-1 CVECTOR DO 100 I6=1,I5 CVECTOR IOFF=IOFF+1 CVECTOR JOFF=JOFF+1 CVECTOR I=I+1 CVECTOR L=LLPERM(I) CVECTOR SUMA=0 CVECTOR SUMB=0 CVECTOR DO 90 K=1,16 CVECTOR L=L+1 CVECTOR SUMB=SUMB+PJA(K)*W(JJNDEX(L)) CVECTOR 90 SUMA=SUMA+PJB(K)*W(JINDEX(L)) CVECTOR F(IOFF)=F(IOFF)+SUMA CVECTOR 100 F(JOFF)=F(JOFF)+SUMB SUMA( 1)= 1+PJA( 1)*W( 1)+PJA( 2)*W( 11)+PJA( 3)*W( 31)+PJA( 4)*W( 61) 2+PJA( 5)*W( 11)+PJA( 6)*W( 21)+PJA( 7)*W( 41)+PJA( 8)*W( 71) 3+PJA( 9)*W( 31)+PJA(10)*W( 41)+PJA(11)*W( 51)+PJA(12)*W( 81) 4+PJA(13)*W( 61)+PJA(14)*W( 71)+PJA(15)*W( 81)+PJA(16)*W( 91) SUMA( 2)= 1+PJA( 1)*W( 2)+PJA( 2)*W( 12)+PJA( 3)*W( 32)+PJA( 4)*W( 62) 2+PJA( 5)*W( 12)+PJA( 6)*W( 22)+PJA( 7)*W( 42)+PJA( 8)*W( 72) 3+PJA( 9)*W( 32)+PJA(10)*W( 42)+PJA(11)*W( 52)+PJA(12)*W( 82) 4+PJA(13)*W( 62)+PJA(14)*W( 72)+PJA(15)*W( 82)+PJA(16)*W( 92) SUMA( 3)= 1+PJA( 1)*W( 3)+PJA( 2)*W( 13)+PJA( 3)*W( 33)+PJA( 4)*W( 63) 2+PJA( 5)*W( 13)+PJA( 6)*W( 23)+PJA( 7)*W( 43)+PJA( 8)*W( 73) 3+PJA( 9)*W( 33)+PJA(10)*W( 43)+PJA(11)*W( 53)+PJA(12)*W( 83) 4+PJA(13)*W( 63)+PJA(14)*W( 73)+PJA(15)*W( 83)+PJA(16)*W( 93) SUMA( 4)= 1+PJA( 1)*W( 4)+PJA( 2)*W( 14)+PJA( 3)*W( 34)+PJA( 4)*W( 64) 2+PJA( 5)*W( 14)+PJA( 6)*W( 24)+PJA( 7)*W( 44)+PJA( 8)*W( 74) 3+PJA( 9)*W( 34)+PJA(10)*W( 44)+PJA(11)*W( 54)+PJA(12)*W( 84) 4+PJA(13)*W( 64)+PJA(14)*W( 74)+PJA(15)*W( 84)+PJA(16)*W( 94) SUMA( 5)= 1+PJA( 1)*W( 5)+PJA( 2)*W( 15)+PJA( 3)*W( 35)+PJA( 4)*W( 65) 2+PJA( 5)*W( 15)+PJA( 6)*W( 25)+PJA( 7)*W( 45)+PJA( 8)*W( 75) 3+PJA( 9)*W( 35)+PJA(10)*W( 45)+PJA(11)*W( 55)+PJA(12)*W( 85) 4+PJA(13)*W( 65)+PJA(14)*W( 75)+PJA(15)*W( 85)+PJA(16)*W( 95) SUMA( 6)= 1+PJA( 1)*W( 6)+PJA( 2)*W( 16)+PJA( 3)*W( 36)+PJA( 4)*W( 66) 2+PJA( 5)*W( 16)+PJA( 6)*W( 26)+PJA( 7)*W( 46)+PJA( 8)*W( 76) 3+PJA( 9)*W( 36)+PJA(10)*W( 46)+PJA(11)*W( 56)+PJA(12)*W( 86) 4+PJA(13)*W( 66)+PJA(14)*W( 76)+PJA(15)*W( 86)+PJA(16)*W( 96) SUMA( 7)= 1+PJA( 1)*W( 7)+PJA( 2)*W( 17)+PJA( 3)*W( 37)+PJA( 4)*W( 67) 2+PJA( 5)*W( 17)+PJA( 6)*W( 27)+PJA( 7)*W( 47)+PJA( 8)*W( 77) 3+PJA( 9)*W( 37)+PJA(10)*W( 47)+PJA(11)*W( 57)+PJA(12)*W( 87) 4+PJA(13)*W( 67)+PJA(14)*W( 77)+PJA(15)*W( 87)+PJA(16)*W( 97) SUMA( 8)= 1+PJA( 1)*W( 8)+PJA( 2)*W( 18)+PJA( 3)*W( 38)+PJA( 4)*W( 68) 2+PJA( 5)*W( 18)+PJA( 6)*W( 28)+PJA( 7)*W( 48)+PJA( 8)*W( 78) 3+PJA( 9)*W( 38)+PJA(10)*W( 48)+PJA(11)*W( 58)+PJA(12)*W( 88) 4+PJA(13)*W( 68)+PJA(14)*W( 78)+PJA(15)*W( 88)+PJA(16)*W( 98) SUMA( 9)= 1+PJA( 1)*W( 9)+PJA( 2)*W( 19)+PJA( 3)*W( 39)+PJA( 4)*W( 69) 2+PJA( 5)*W( 19)+PJA( 6)*W( 29)+PJA( 7)*W( 49)+PJA( 8)*W( 79) 3+PJA( 9)*W( 39)+PJA(10)*W( 49)+PJA(11)*W( 59)+PJA(12)*W( 89) 4+PJA(13)*W( 69)+PJA(14)*W( 79)+PJA(15)*W( 89)+PJA(16)*W( 99) SUMA(10)= 1+PJA( 1)*W( 10)+PJA( 2)*W( 20)+PJA( 3)*W( 40)+PJA( 4)*W( 70) 2+PJA( 5)*W( 20)+PJA( 6)*W( 30)+PJA( 7)*W( 50)+PJA( 8)*W( 80) 3+PJA( 9)*W( 40)+PJA(10)*W( 50)+PJA(11)*W( 60)+PJA(12)*W( 90) 4+PJA(13)*W( 70)+PJA(14)*W( 80)+PJA(15)*W( 90)+PJA(16)*W(100) SUMB( 1)= 1+PJB( 1)*W( 1)+PJB( 2)*W( 2)+PJB( 3)*W( 4)+PJB( 4)*W( 7) 2+PJB( 5)*W( 2)+PJB( 6)*W( 3)+PJB( 7)*W( 5)+PJB( 8)*W( 8) 3+PJB( 9)*W( 4)+PJB(10)*W( 5)+PJB(11)*W( 6)+PJB(12)*W( 9) 4+PJB(13)*W( 7)+PJB(14)*W( 8)+PJB(15)*W( 9)+PJB(16)*W( 10) SUMB( 2)= 1+PJB( 1)*W( 11)+PJB( 2)*W( 12)+PJB( 3)*W( 14)+PJB( 4)*W( 17) 2+PJB( 5)*W( 12)+PJB( 6)*W( 13)+PJB( 7)*W( 15)+PJB( 8)*W( 18) 3+PJB( 9)*W( 14)+PJB(10)*W( 15)+PJB(11)*W( 16)+PJB(12)*W( 19) 4+PJB(13)*W( 17)+PJB(14)*W( 18)+PJB(15)*W( 19)+PJB(16)*W( 20) SUMB( 3)= 1+PJB( 1)*W( 21)+PJB( 2)*W( 22)+PJB( 3)*W( 24)+PJB( 4)*W( 27) 2+PJB( 5)*W( 22)+PJB( 6)*W( 23)+PJB( 7)*W( 25)+PJB( 8)*W( 28) 3+PJB( 9)*W( 24)+PJB(10)*W( 25)+PJB(11)*W( 26)+PJB(12)*W( 29) 4+PJB(13)*W( 27)+PJB(14)*W( 28)+PJB(15)*W( 29)+PJB(16)*W( 30) SUMB( 4)= 1+PJB( 1)*W( 31)+PJB( 2)*W( 32)+PJB( 3)*W( 34)+PJB( 4)*W( 37) 2+PJB( 5)*W( 32)+PJB( 6)*W( 33)+PJB( 7)*W( 35)+PJB( 8)*W( 38) 3+PJB( 9)*W( 34)+PJB(10)*W( 35)+PJB(11)*W( 36)+PJB(12)*W( 39) 4+PJB(13)*W( 37)+PJB(14)*W( 38)+PJB(15)*W( 39)+PJB(16)*W( 40) SUMB( 5)= 1+PJB( 1)*W( 41)+PJB( 2)*W( 42)+PJB( 3)*W( 44)+PJB( 4)*W( 47) 2+PJB( 5)*W( 42)+PJB( 6)*W( 43)+PJB( 7)*W( 45)+PJB( 8)*W( 48) 3+PJB( 9)*W( 44)+PJB(10)*W( 45)+PJB(11)*W( 46)+PJB(12)*W( 49) 4+PJB(13)*W( 47)+PJB(14)*W( 48)+PJB(15)*W( 49)+PJB(16)*W( 50) SUMB( 6)= 1+PJB( 1)*W( 51)+PJB( 2)*W( 52)+PJB( 3)*W( 54)+PJB( 4)*W( 57) 2+PJB( 5)*W( 52)+PJB( 6)*W( 53)+PJB( 7)*W( 55)+PJB( 8)*W( 58) 3+PJB( 9)*W( 54)+PJB(10)*W( 55)+PJB(11)*W( 56)+PJB(12)*W( 59) 4+PJB(13)*W( 57)+PJB(14)*W( 58)+PJB(15)*W( 59)+PJB(16)*W( 60) SUMB( 7)= 1+PJB( 1)*W( 61)+PJB( 2)*W( 62)+PJB( 3)*W( 64)+PJB( 4)*W( 67) 2+PJB( 5)*W( 62)+PJB( 6)*W( 63)+PJB( 7)*W( 65)+PJB( 8)*W( 68) 3+PJB( 9)*W( 64)+PJB(10)*W( 65)+PJB(11)*W( 66)+PJB(12)*W( 69) 4+PJB(13)*W( 67)+PJB(14)*W( 68)+PJB(15)*W( 69)+PJB(16)*W( 70) SUMB( 8)= 1+PJB( 1)*W( 71)+PJB( 2)*W( 72)+PJB( 3)*W( 74)+PJB( 4)*W( 77) 2+PJB( 5)*W( 72)+PJB( 6)*W( 73)+PJB( 7)*W( 75)+PJB( 8)*W( 78) 3+PJB( 9)*W( 74)+PJB(10)*W( 75)+PJB(11)*W( 76)+PJB(12)*W( 79) 4+PJB(13)*W( 77)+PJB(14)*W( 78)+PJB(15)*W( 79)+PJB(16)*W( 80) SUMB( 9)= 1+PJB( 1)*W( 81)+PJB( 2)*W( 82)+PJB( 3)*W( 84)+PJB( 4)*W( 87) 2+PJB( 5)*W( 82)+PJB( 6)*W( 83)+PJB( 7)*W( 85)+PJB( 8)*W( 88) 3+PJB( 9)*W( 84)+PJB(10)*W( 85)+PJB(11)*W( 86)+PJB(12)*W( 89) 4+PJB(13)*W( 87)+PJB(14)*W( 88)+PJB(15)*W( 89)+PJB(16)*W( 90) SUMB(10)= 1+PJB( 1)*W( 91)+PJB( 2)*W( 92)+PJB( 3)*W( 94)+PJB( 4)*W( 97) 2+PJB( 5)*W( 92)+PJB( 6)*W( 93)+PJB( 7)*W( 95)+PJB( 8)*W( 98) 3+PJB( 9)*W( 94)+PJB(10)*W( 95)+PJB(11)*W( 96)+PJB(12)*W( 99) 4+PJB(13)*W( 97)+PJB(14)*W( 98)+PJB(15)*W( 99)+PJB(16)*W(100) I=0 DO 10 I5=1,4 IIA=IA+I5-1 IJA=JA+I5-1 IOFF=(IIA*(IIA-1))/2+IA-1 JOFF=(IJA*(IJA-1))/2+JA-1 DO 10 I6=1,I5 IOFF=IOFF+1 JOFF=JOFF+1 I=I+1 F(IOFF)=F(IOFF)+SUMB(I) 10 F(JOFF)=F(JOFF)+SUMA(I) RETURN END SUBROUTINE KAB(IA,JA, PK, W, KINDEX, F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION PK(*), W(*), F(*),KINDEX(256), SUM(16) C C FOR VECTOR MACHINES, REMOVE THE ARRAY SUM, UNCOMMENT THE LINES C MARKED CVECTOR, AND COMMENT OUT THE SECOND WHOLE PART OF THE C SUBROUTINE C CVECTOR L=0 CVECTOR M=0 CVECTOR DO 130 J1=IA,IA+3 CVECTOR J=(J1*(J1-1))/2 CVECTOR DO 130 J2=JA,JA+3 CVECTOR M=M+1 CVECTOR IF(IA.GT.JA)THEN CVECTOR J3=J+J2 CVECTOR ELSE CVECTOR J3=J1+(J2*(J2-1))/2 CVECTOR ENDIF CVECTOR SUM=0 CVECTOR DO 120 I=1,16 CVECTOR L=L+1 CVECTOR 120 SUM=SUM+PK(I)*W(KINDEX(L)) CVECTOR 130 F(J3)=F(J3)-SUM SUM( 1)= 1+PK( 1)*W( 1)+PK( 2)*W( 2)+PK( 3)*W( 4)+PK( 4)*W( 7) 2+PK( 5)*W( 11)+PK( 6)*W( 12)+PK( 7)*W( 14)+PK( 8)*W( 17) 3+PK( 9)*W( 31)+PK(10)*W( 32)+PK(11)*W( 34)+PK(12)*W( 37) 4+PK(13)*W( 61)+PK(14)*W( 62)+PK(15)*W( 64)+PK(16)*W( 67) SUM( 2)= 1+PK( 1)*W( 2)+PK( 2)*W( 3)+PK( 3)*W( 5)+PK( 4)*W( 8) 2+PK( 5)*W( 12)+PK( 6)*W( 13)+PK( 7)*W( 15)+PK( 8)*W( 18) 3+PK( 9)*W( 32)+PK(10)*W( 33)+PK(11)*W( 35)+PK(12)*W( 38) 4+PK(13)*W( 62)+PK(14)*W( 63)+PK(15)*W( 65)+PK(16)*W( 68) SUM( 3)= 1+PK( 1)*W( 4)+PK( 2)*W( 5)+PK( 3)*W( 6)+PK( 4)*W( 9) 2+PK( 5)*W( 14)+PK( 6)*W( 15)+PK( 7)*W( 16)+PK( 8)*W( 19) 3+PK( 9)*W( 34)+PK(10)*W( 35)+PK(11)*W( 36)+PK(12)*W( 39) 4+PK(13)*W( 64)+PK(14)*W( 65)+PK(15)*W( 66)+PK(16)*W( 69) SUM( 4)= 1+PK( 1)*W( 7)+PK( 2)*W( 8)+PK( 3)*W( 9)+PK( 4)*W( 10) 2+PK( 5)*W( 17)+PK( 6)*W( 18)+PK( 7)*W( 19)+PK( 8)*W( 20) 3+PK( 9)*W( 37)+PK(10)*W( 38)+PK(11)*W( 39)+PK(12)*W( 40) 4+PK(13)*W( 67)+PK(14)*W( 68)+PK(15)*W( 69)+PK(16)*W( 70) SUM( 5)= 1+PK( 1)*W( 11)+PK( 2)*W( 12)+PK( 3)*W( 14)+PK( 4)*W( 17) 2+PK( 5)*W( 21)+PK( 6)*W( 22)+PK( 7)*W( 24)+PK( 8)*W( 27) 3+PK( 9)*W( 41)+PK(10)*W( 42)+PK(11)*W( 44)+PK(12)*W( 47) 4+PK(13)*W( 71)+PK(14)*W( 72)+PK(15)*W( 74)+PK(16)*W( 77) SUM( 6)= 1+PK( 1)*W( 12)+PK( 2)*W( 13)+PK( 3)*W( 15)+PK( 4)*W( 18) 2+PK( 5)*W( 22)+PK( 6)*W( 23)+PK( 7)*W( 25)+PK( 8)*W( 28) 3+PK( 9)*W( 42)+PK(10)*W( 43)+PK(11)*W( 45)+PK(12)*W( 48) 4+PK(13)*W( 72)+PK(14)*W( 73)+PK(15)*W( 75)+PK(16)*W( 78) SUM( 7)= 1+PK( 1)*W( 14)+PK( 2)*W( 15)+PK( 3)*W( 16)+PK( 4)*W( 19) 2+PK( 5)*W( 24)+PK( 6)*W( 25)+PK( 7)*W( 26)+PK( 8)*W( 29) 3+PK( 9)*W( 44)+PK(10)*W( 45)+PK(11)*W( 46)+PK(12)*W( 49) 4+PK(13)*W( 74)+PK(14)*W( 75)+PK(15)*W( 76)+PK(16)*W( 79) SUM( 8)= 1+PK( 1)*W( 17)+PK( 2)*W( 18)+PK( 3)*W( 19)+PK( 4)*W( 20) 2+PK( 5)*W( 27)+PK( 6)*W( 28)+PK( 7)*W( 29)+PK( 8)*W( 30) 3+PK( 9)*W( 47)+PK(10)*W( 48)+PK(11)*W( 49)+PK(12)*W( 50) 4+PK(13)*W( 77)+PK(14)*W( 78)+PK(15)*W( 79)+PK(16)*W( 80) SUM( 9)= 1+PK( 1)*W( 31)+PK( 2)*W( 32)+PK( 3)*W( 34)+PK( 4)*W( 37) 2+PK( 5)*W( 41)+PK( 6)*W( 42)+PK( 7)*W( 44)+PK( 8)*W( 47) 3+PK( 9)*W( 51)+PK(10)*W( 52)+PK(11)*W( 54)+PK(12)*W( 57) 4+PK(13)*W( 81)+PK(14)*W( 82)+PK(15)*W( 84)+PK(16)*W( 87) SUM(10)= 1+PK( 1)*W( 32)+PK( 2)*W( 33)+PK( 3)*W( 35)+PK( 4)*W( 38) 2+PK( 5)*W( 42)+PK( 6)*W( 43)+PK( 7)*W( 45)+PK( 8)*W( 48) 3+PK( 9)*W( 52)+PK(10)*W( 53)+PK(11)*W( 55)+PK(12)*W( 58) 4+PK(13)*W( 82)+PK(14)*W( 83)+PK(15)*W( 85)+PK(16)*W( 88) SUM(11)= 1+PK( 1)*W( 34)+PK( 2)*W( 35)+PK( 3)*W( 36)+PK( 4)*W( 39) 2+PK( 5)*W( 44)+PK( 6)*W( 45)+PK( 7)*W( 46)+PK( 8)*W( 49) 3+PK( 9)*W( 54)+PK(10)*W( 55)+PK(11)*W( 56)+PK(12)*W( 59) 4+PK(13)*W( 84)+PK(14)*W( 85)+PK(15)*W( 86)+PK(16)*W( 89) SUM(12)= 1+PK( 1)*W( 37)+PK( 2)*W( 38)+PK( 3)*W( 39)+PK( 4)*W( 40) 2+PK( 5)*W( 47)+PK( 6)*W( 48)+PK( 7)*W( 49)+PK( 8)*W( 50) 3+PK( 9)*W( 57)+PK(10)*W( 58)+PK(11)*W( 59)+PK(12)*W( 60) 4+PK(13)*W( 87)+PK(14)*W( 88)+PK(15)*W( 89)+PK(16)*W( 90) SUM(13)= 1+PK( 1)*W( 61)+PK( 2)*W( 62)+PK( 3)*W( 64)+PK( 4)*W( 67) 2+PK( 5)*W( 71)+PK( 6)*W( 72)+PK( 7)*W( 74)+PK( 8)*W( 77) 3+PK( 9)*W( 81)+PK(10)*W( 82)+PK(11)*W( 84)+PK(12)*W( 87) 4+PK(13)*W( 91)+PK(14)*W( 92)+PK(15)*W( 94)+PK(16)*W( 97) SUM(14)= 1+PK( 1)*W( 62)+PK( 2)*W( 63)+PK( 3)*W( 65)+PK( 4)*W( 68) 2+PK( 5)*W( 72)+PK( 6)*W( 73)+PK( 7)*W( 75)+PK( 8)*W( 78) 3+PK( 9)*W( 82)+PK(10)*W( 83)+PK(11)*W( 85)+PK(12)*W( 88) 4+PK(13)*W( 92)+PK(14)*W( 93)+PK(15)*W( 95)+PK(16)*W( 98) SUM(15)= 1+PK( 1)*W( 64)+PK( 2)*W( 65)+PK( 3)*W( 66)+PK( 4)*W( 69) 2+PK( 5)*W( 74)+PK( 6)*W( 75)+PK( 7)*W( 76)+PK( 8)*W( 79) 3+PK( 9)*W( 84)+PK(10)*W( 85)+PK(11)*W( 86)+PK(12)*W( 89) 4+PK(13)*W( 94)+PK(14)*W( 95)+PK(15)*W( 96)+PK(16)*W( 99) SUM(16)= 1+PK( 1)*W( 67)+PK( 2)*W( 68)+PK( 3)*W( 69)+PK( 4)*W( 70) 2+PK( 5)*W( 77)+PK( 6)*W( 78)+PK( 7)*W( 79)+PK( 8)*W( 80) 3+PK( 9)*W( 87)+PK(10)*W( 88)+PK(11)*W( 89)+PK(12)*W( 90) 4+PK(13)*W( 97)+PK(14)*W( 98)+PK(15)*W( 99)+PK(16)*W(100) IF(IA.GT.JA)THEN M=0 DO 10 J1=IA,IA+3 J=(J1*(J1-1))/2 DO 10 J2=JA,JA+3 M=M+1 J3=J+J2 10 F(J3)=F(J3)-SUM(M) ELSE C C IA IS LESS THAN JA, THEREFORE USE OTHER HALF OF TRIANGLE C M=0 DO 20 J1=IA,IA+3 DO 20 J2=JA,JA+3 M=M+1 J3=(J2*(J2-1))/2+J1 20 F(J3)=F(J3)-SUM(M) ENDIF RETURN END mopac7-1.15/fortran/dgetf2.f0000644000175000017500000000734311053302063012544 00000000000000 SUBROUTINE DGETF2( M, N, A, LDA, IPIV, INFO ) * * -- LAPACK ROUTINE (VERSION 1.0B) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * JUNE 30, 1992 * * .. SCALAR ARGUMENTS .. INTEGER INFO, LDA, M, N * .. * .. ARRAY ARGUMENTS .. INTEGER IPIV( * ) DOUBLE PRECISION A( LDA, * ) * .. * * PURPOSE * ======= * * DGETF2 COMPUTES AN LU FACTORIZATION OF A GENERAL M-BY-N MATRIX A * USING PARTIAL PIVOTING WITH ROW INTERCHANGES. * * THE FACTORIZATION HAS THE FORM * A = P * L * U * WHERE P IS A PERMUTATION MATRIX, L IS LOWER TRIANGULAR WITH UNIT * DIAGONAL ELEMENTS (LOWER TRAPEZOIDAL IF M > N), AND U IS UPPER * TRIANGULAR (UPPER TRAPEZOIDAL IF M < N). * * THIS IS THE RIGHT-LOOKING LEVEL 2 BLAS VERSION OF THE ALGORITHM. * * ARGUMENTS * ========= * * M (INPUT) INTEGER * THE NUMBER OF ROWS OF THE MATRIX A. M >= 0. * * N (INPUT) INTEGER * THE NUMBER OF COLUMNS OF THE MATRIX A. N >= 0. * * A (INPUT/OUTPUT) DOUBLE PRECISION ARRAY, DIMENSION (LDA,N) * ON ENTRY, THE M BY N MATRIX TO BE FACTORED. * ON EXIT, THE FACTORS L AND U FROM THE FACTORIZATION * A = P*L*U; THE UNIT DIAGONAL ELEMENTS OF L ARE NOT STORED. * * LDA (INPUT) INTEGER * THE LEADING DIMENSION OF THE ARRAY A. LDA >= MAX(1,M). * * IPIV (OUTPUT) INTEGER ARRAY, DIMENSION (MIN(M,N)) * THE PIVOT INDICES; FOR 1 <= I <= MIN(M,N), ROW I OF THE * MATRIX WAS INTERCHANGED WITH ROW IPIV(I). * * INFO (OUTPUT) INTEGER * = 0: SUCCESSFUL EXIT * < 0: IF INFO = -K, THE K-TH ARGUMENT HAD AN ILLEGAL VALUE * > 0: IF INFO = K, U(K,K) IS EXACTLY ZERO. THE FACTORIZATION * HAS BEEN COMPLETED, BUT THE FACTOR U IS EXACTLY * SINGULAR, AND DIVISION BY ZERO WILL OCCUR IF IT IS USED * TO SOLVE A SYSTEM OF EQUATIONS. * * ===================================================================== * * .. PARAMETERS .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. LOCAL SCALARS .. INTEGER J, JP * .. * .. EXTERNAL FUNCTIONS .. INTEGER IDAMAX EXTERNAL IDAMAX * .. * .. EXTERNAL SUBROUTINES .. EXTERNAL DGER, DSCAL, DSWAP, XERBLA * .. * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX, MIN * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * INFO = 0 IF( M.LT.0 ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -4 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGETF2', -INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE * IF( M.EQ.0 .OR. N.EQ.0 ) $ RETURN * DO 10 J = 1, MIN( M, N ) * * FIND PIVOT AND TEST FOR SINGULARITY. * JP = J - 1 + IDAMAX( M-J+1, A( J, J ), 1 ) IPIV( J ) = JP IF( A( JP, J ).NE.ZERO ) THEN * * APPLY THE INTERCHANGE TO COLUMNS 1:N. * IF( JP.NE.J ) $ CALL DSWAP( N, A( J, 1 ), LDA, A( JP, 1 ), LDA ) * * COMPUTE ELEMENTS J+1:M OF J-TH COLUMN. * IF( J.LT.M ) $ CALL DSCAL( M-J, ONE / A( J, J ), A( J+1, J ), 1 ) * ELSE IF( INFO.EQ.0 ) THEN * INFO = J END IF * IF( J.LT.MIN( M, N ) ) THEN * * UPDATE TRAILING SUBMATRIX. * CALL DGER( M-J, N-J, -ONE, A( J+1, J ), 1, A( J, J+1 ), LDA, $ A( J+1, J+1 ), LDA ) END IF 10 CONTINUE RETURN * * END OF DGETF2 * END mopac7-1.15/fortran/drcout.f0000644000175000017500000001555411053302064012675 00000000000000 SUBROUTINE DRCOUT(XYZ3,GEO3,VEL3,NVAR,TIME,ESCF3,EKIN3, 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,FRACT,TEXT1,TEXT2,II,JLOOP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' CHARACTER TEXT1*3,TEXT2*2 DIMENSION XYZ3(3,NVAR), VEL3(3,NVAR), ESCF3(3), EKIN3(3) DIMENSION XYZ(3,NUMATM), VEL(3,NUMATM), CHARGE(NUMATM), 1 GEO3(3,NUMATM), ETOT3(3), GTOT3(3), XTOT3(3) ************************************************************* * * * DRCOUT PRINTS THE GEOMETRY, ETC. FOR A DRC AT A * * POSITION DETERMINED BY FRACT. * * ON INPUT XYZ3 = QUADRATIC EXPRESSION FOR THE GEOMETRY * * VEL3 = QUADRATIC EXPRESSION FOR THE VELOCITY * * ESCF3 = QUADRATIC EXPRESSION FOR THE P.E. * * EKIN3 = QUADRATIC EXPRESSION FOR THE K.E. * * * ************************************************************* COMMON /KEYWRD/ KEYWRD COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /ELEMTS/ ELEMNT(107) COMMON /GEOVAR/ IIVAR, LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /TITLES/ KOMENT,TITLE COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,XRACT COMMON /NUMCAL/ NUMCAL DIMENSION IEL1(3), GG(3) CHARACTER KEYWRD*241,KOMENT*81,TITLE*81, ALPHA*2, ELEMNT*2 SAVE PRTKEY, PRTKOM, PRTITL, I, DRC INTEGER PRTKOM, PRTITL, PRTKEY LOGICAL LARGE, DRC DATA ICALCN/0/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL IF( INDEX(KEYWRD,'RESTART').EQ.0.OR.INDEX(KEYWRD,'IRC=').NE.0) 1THEN JLOOP=0 ENDIF DO 10 I=80,1,-1 10 IF(KEYWRD(I:I).NE.' ')GOTO 20 I=1 20 PRTKEY=I DO 30 I=80,1,-1 30 IF(KOMENT(I:I).NE.' ')GOTO 40 I=1 40 PRTKOM=I DO 50 I=80,1,-1 50 IF(TITLE(I:I).NE.' ')GOTO 60 I=1 60 PRTITL=I DRC=(INDEX(KEYWRD,'DRC').NE.0) I=INDEX(KEYWRD,'LARGE') IPRINT=10000 IF(I.NE.0)THEN IPRINT=1 I=I+5 LARGE=(KEYWRD(I:I).EQ.' '.OR.KEYWRD(I+1:I+1).EQ.'-') IF(KEYWRD(I:I).EQ.'=') IPRINT=ABS(READA(KEYWRD,I)) ENDIF ENDIF IF(JLOOP.EQ.0.OR.(JLOOP/IPRINT)*IPRINT.EQ.JLOOP) THEN IF(DRC) THEN WRITE(6,'(//,'' FEMTOSECONDS POINT POTENTIAL +'' 1,'' KINETIC = TOTAL ERROR REF% MOVEMENT'')') ELSE WRITE(6,'(//,'' POINT POTENTIAL + '' 1,''ENERGY LOST = TOTAL ERROR REF% MOVEMENT'')') ENDIF ENDIF JLOOP=JLOOP+1 C# FRACT=0.D0 ESCF=ESCF3(1)+ESCF3(2)*FRACT+ESCF3(3)*FRACT**2 EKIN=EKIN3(1)+EKIN3(2)*FRACT+EKIN3(3)*FRACT**2 ETOT=ETOT3(1)+ETOT3(2)*FRACT+ETOT3(3)*FRACT**2 C# GTOT=GTOT3(1)+GTOT3(2)*FRACT+GTOT3(3)*FRACT**2 XTOT=XTOT3(1)+XTOT3(2)*FRACT+XTOT3(3)*FRACT**2 ERRR=MIN(9999.99999D0,MAX(-999.99999D0,ESCF+EKIN-ETOT)) IF(II.NE.0)THEN IF(DRC) THEN WRITE(6,'(F10.3,I8,F12.5,F11.5,F11.5, 1F10.5,'' '',I5,3X,''%'',A,A,I3)')TIME, ILOOP-2, ESCF, EKIN, 2 ESCF+EKIN,ERRR,JLOOP,TEXT1,TEXT2,II WRITE(6,'(9X,A,F9.4,A)')' MOVEMENT FROM START =',XTOT,' ANGS 1TROMS' ELSE WRITE(6,'(I8,F14.5,F13.5,F17.5, 1F10.5,'' '',I5,3X,''%'',A,A,I3)') ILOOP-2, ESCF, EKIN, 2 ESCF+EKIN,ERRR,JLOOP,TEXT1,TEXT2,II C# WRITE(6,'(24X,'' INTEGRATED GRADIENT ERROR ='',G10.3, C# 1'' KCALS/ANGSTROM'')')GTOT WRITE(6,'(9X,A,F9.4,A)')' MOVEMENT FROM START =',XTOT,' ANGS 1TROMS' ENDIF ELSE IF(DRC) THEN IF(TEXT1.EQ.' '.AND.TEXT2.EQ.' ')THEN WRITE(6,'(F10.3,I8,F12.5,F11.5,F11.5, 1F10.5,'' '',I5,3X,''%'',F8.4)')TIME, ILOOP-2, ESCF, EKIN, 2 ESCF+EKIN,ERRR,JLOOP,XTOT ELSE WRITE(6,'(F10.3,I8,F12.5,F11.5,F11.5, 1F10.5,'' '',I5,3X,''%'',A,A,I3)')TIME, ILOOP-2, ESCF, EKIN, 2 ESCF+EKIN,ERRR,JLOOP,TEXT1,TEXT2 ENDIF ELSE IF(TEXT1.EQ.' '.AND.TEXT2.EQ.' ')THEN WRITE(6,'(I8,F14.5,F13.5,F17.5, 1F10.5,'' '',I5,3X,''%'',F8.4)') ILOOP-2, ESCF, EKIN, 2 ESCF+EKIN,ERRR,JLOOP,XTOT ELSE WRITE(6,'(I8,F14.5,F13.5,F17.5, 1F10.5,'' '',I5,3X,''%'',A,A,I3)') ILOOP-2, ESCF, EKIN, 2 ESCF+EKIN,ERRR,JLOOP,TEXT1,TEXT2 ENDIF ENDIF ENDIF NATOMS=NVAR/3 L=0 DO 80 I=1,NATOMS DO 70 J=1,3 L=L+1 VEL(J,I)=VEL3(1,L)+VEL3(2,L)*FRACT+VEL3(3,L)*FRACT**2 70 XYZ(J,I)=XYZ3(1,L)+XYZ3(2,L)*FRACT+XYZ3(3,L)*FRACT**2 80 CONTINUE IF(LARGE.AND.(JLOOP/IPRINT)*IPRINT.EQ.JLOOP)THEN WRITE(6,*)' CARTESIAN GEOMETRY ' 1//'VELOCITY (IN CM/SEC)' WRITE(6,*)' ATOM X Y Z' 1 //' X Y Z' DO 90 I=1,NUMAT LL=(I-1)*3+1 WRITE(6,'(I4,3X,A2,3F11.5,2X,3F11.1)') 1I, ELEMNT(NAT(I)),(XYZ(J,I),J=1,3),(VEL(J,I),J=1,3) 90 CONTINUE ENDIF IF((JLOOP/IPRINT)*IPRINT.EQ.JLOOP)THEN IVAR=1 NA(1)=0 L=0 WRITE(6,'(//10X,''FINAL GEOMETRY OBTAINED'',33X,''CHARGE'')' 1) WRITE(6,'(A)')KEYWRD(:PRTKEY),KOMENT(:PRTKOM),TITLE(:PRTITL) L=0 DO 120 I=1,NUMAT J=I/26 ALPHA(1:1)=CHAR(ICHAR('A')+J) J=I-J*26 ALPHA(2:2)=CHAR(ICHAR('A')+J-1) C$DOIT ASIS DO 100 J=1,3 100 IEL1(J)=0 110 CONTINUE IF(LOC(1,IVAR).EQ.I) THEN IEL1(LOC(2,IVAR))=1 IVAR=IVAR+1 GOTO 110 ENDIF IF(I.LT.4) THEN IEL1(3)=0 IF(I.LT.3) THEN IEL1(2)=0 IF(I.LT.2) THEN IEL1(1)=0 ENDIF ENDIF ENDIF IF(LABELS(I).LT.99)THEN L=L+1 GG(1)=GEO3(1,I*3-2)+GEO3(2,I*3-2)*FRACT+GEO3(3,I*3-2)*FRA 1CT**2 GG(2)=GEO3(1,I*3-1)+GEO3(2,I*3-1)*FRACT+GEO3(3,I*3-1)*FRA 1CT**2 GG(3)=GEO3(1,I*3 )+GEO3(2,I*3 )*FRACT+GEO3(3,I*3 )*FRA 1CT**2 WRITE(6,'(2X,A2,3(F12.6,I3),I4,2I3,F13.4,I5,A)') 1 ELEMNT(LABELS(I)),(GG(K),IEL1(K),K=1,3), 2 NA(I),NB(I),NC(I),CHARGE(L),JLOOP,ALPHA//'*' ELSE WRITE(6,'(2X,A2,3(F12.6,I3),I4,2I3,13X,I5,A)') 1 ELEMNT(LABELS(I)),(GG(K),IEL1(K),K=1,3), 2NA(I),NB(I),NC(I),JLOOP,ALPHA//'%' ENDIF 120 CONTINUE NA(1)=99 ENDIF RETURN END mopac7-1.15/fortran/Makefile.in0000644000175000017500000005771511274260540013307 00000000000000# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = mopac7$(EXEEXT) subdir = fortran DIST_COMMON = $(libmopac7include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(libmopac7includedir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) libmopac7_la_LIBADD = am_libmopac7_la_OBJECTS = aababc.lo addfck.lo addhcr.lo addnuc.lo \ analyt.lo anavib.lo axis.lo block.lo bonds.lo brlzon.lo \ btoc.lo calpar.lo capcor.lo cdiag.lo chrge.lo cnvg.lo \ compfg.lo consts.lo cqden.lo datin.lo dcart.lo delmol.lo \ delri.lo denrot.lo densit.lo depvar.lo deri0.lo deri1.lo \ deri2.lo deri21.lo deri22.lo deri23.lo deritr.lo deriv.lo \ dernvo.lo ders.lo dfock2.lo dfpsav.lo dgemm.lo dgemv.lo \ dger.lo dgetf2.lo dgetrf.lo dgetri.lo diag.lo diat.lo diat2.lo \ diegrd.lo dielen.lo diis.lo dijkl1.lo dijkl2.lo dipind.lo \ dipole.lo dlaswp.lo dofs.lo dot.lo drc.lo drcout.lo dtrmm.lo \ dtrmv.lo dtrsm.lo dtrti2.lo dtrtri.lo dvfill.lo ef.lo \ enpart.lo esp.lo etime.lo exchng.lo fdate.lo ffhpol.lo \ flepo.lo fmat.lo fock1.lo fock2.lo force.lo formxy.lo \ forsav.lo frame.lo freqcy.lo geout.lo geoutg.lo getgeg.lo \ getgeo.lo getsym.lo gettxt.lo gmetry.lo gover.lo greenf.lo \ grid.lo h1elec.lo haddon.lo hcore.lo helect.lo hqrii.lo \ ijkl.lo ilaenv.lo initsv.lo interp.lo iter.lo jcarin.lo \ linmin.lo local.lo locmin.lo lsame.lo makpol.lo mamult.lo \ matou1.lo matout.lo matpak.lo meci.lo mecid.lo mecih.lo \ mecip.lo moldat.lo molval.lo mullik.lo mult.lo nllsq.lo \ nuchar.lo parsav.lo partxy.lo pathk.lo paths.lo perm.lo \ polar.lo powsav.lo powsq.lo prtdrc.lo quadr.lo react1.lo \ reada.lo readmo.lo refer.lo repp.lo rotat.lo rotate.lo rsp.lo \ search.lo second.lo setupg.lo solrot.lo swap.lo sympro.lo \ symtry.lo symtrz.lo thermo.lo timer.lo timout.lo update.lo \ upsurf.lo vecprt.lo writmo.lo wrtkey.lo wrttxt.lo xerbla.lo \ xyzint.lo s_copy.lo mopac7lib.lo libmopac7.lo libmopac7_la_OBJECTS = $(am_libmopac7_la_OBJECTS) libmopac7_la_LINK = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \ $(libmopac7_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(noinst_PROGRAMS) am_mopac7_OBJECTS = mopac7app.$(OBJEXT) mopac7_OBJECTS = $(am_mopac7_OBJECTS) mopac7_LINK = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) $(mopac7_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS) LTF77COMPILE = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS) F77LD = $(F77) F77LINK = $(LIBTOOL) --tag=F77 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libmopac7_la_SOURCES) $(mopac7_SOURCES) DIST_SOURCES = $(libmopac7_la_SOURCES) $(mopac7_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive libmopac7includeHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(libmopac7include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NMEDIT = @NMEDIT@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = c_src_bak c_src_f2c lib_LTLIBRARIES = libmopac7.la libmopac7_la_LDFLAGS = -version-info 1:13:0 libmopac7_la_SOURCES = \ aababc.f addfck.f addhcr.f addnuc.f analyt.f \ anavib.f axis.f block.f bonds.f brlzon.f \ btoc.f calpar.f capcor.f cdiag.f chrge.f \ cnvg.f compfg.f consts.f cqden.f datin.f \ dcart.f delmol.f delri.f denrot.f densit.f \ depvar.f deri0.f deri1.f deri2.f deri21.f \ deri22.f deri23.f deritr.f deriv.f dernvo.f \ ders.f dfock2.f dfpsav.f dgemm.f dgemv.f \ dger.f dgetf2.f dgetrf.f dgetri.f diag.f \ diat.f diat2.f diegrd.f dielen.f diis.f \ dijkl1.f dijkl2.f dipind.f dipole.f dlaswp.f \ dofs.f dot.f drc.f drcout.f dtrmm.f \ dtrmv.f dtrsm.f dtrti2.f dtrtri.f dvfill.f \ ef.f enpart.f esp.f etime.c exchng.f \ fdate.c ffhpol.f flepo.f fmat.f fock1.f \ fock2.f force.f formxy.f forsav.f frame.f \ freqcy.f geout.f geoutg.f getgeg.f getgeo.f \ getsym.f gettxt.f gmetry.f gover.f greenf.f \ grid.f h1elec.f haddon.f hcore.f helect.f \ hqrii.f ijkl.f ilaenv.f initsv.f interp.f \ iter.f jcarin.f linmin.f local.f locmin.f \ lsame.f makpol.f mamult.f matou1.f matout.f \ matpak.f meci.f mecid.f mecih.f mecip.f \ moldat.f molval.f mullik.f mult.f nllsq.f \ nuchar.f parsav.f partxy.f pathk.f paths.f \ perm.f polar.f powsav.f powsq.f prtdrc.f \ quadr.f react1.f reada.f readmo.f refer.f \ repp.f rotat.f rotate.f rsp.f search.f \ second.f setupg.f solrot.f swap.f sympro.f \ symtry.f symtrz.f thermo.f timer.f timout.f \ update.f upsurf.f vecprt.f writmo.f wrtkey.f \ wrttxt.f xerbla.f xyzint.f s_copy.c \ mopac7lib.f libmopac7.c libmopac7includedir = $(includedir)/mopac7 libmopac7include_HEADERS = libmopac7.h mopac7_SOURCES = mopac7app.f ##################################### ##################################### mopac7_DEPENDENCIES = libmopac7.la mopac7_LDADD = libmopac7.la mopac7_LDFLAGS = -lm EXTRA_DIST = SIZES mopac7f2c.h \ symtrz.f_ORIG symtrz.f_ALT1 symtrz.f_ALT2 all: all-recursive .SUFFIXES: .SUFFIXES: .c .f .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu fortran/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu fortran/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f=$(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p=$(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libmopac7.la: $(libmopac7_la_OBJECTS) $(libmopac7_la_DEPENDENCIES) $(libmopac7_la_LINK) -rpath $(libdir) $(libmopac7_la_OBJECTS) $(libmopac7_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done mopac7$(EXEEXT): $(mopac7_OBJECTS) $(mopac7_DEPENDENCIES) @rm -f mopac7$(EXEEXT) $(mopac7_LINK) $(mopac7_OBJECTS) $(mopac7_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/etime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmopac7.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_copy.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .f.o: $(F77COMPILE) -c -o $@ $< .f.obj: $(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .f.lo: $(LTF77COMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libmopac7includeHEADERS: $(libmopac7include_HEADERS) @$(NORMAL_INSTALL) test -z "$(libmopac7includedir)" || $(MKDIR_P) "$(DESTDIR)$(libmopac7includedir)" @list='$(libmopac7include_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(libmopac7includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libmopac7includedir)/$$f'"; \ $(libmopac7includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libmopac7includedir)/$$f"; \ done uninstall-libmopac7includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libmopac7include_HEADERS)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(libmopac7includedir)/$$f'"; \ rm -f "$(DESTDIR)$(libmopac7includedir)/$$f"; \ done # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ am__remove_distdir=: \ am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libmopac7includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-libmopac7includeHEADERS install-dvi: install-dvi-recursive install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-info: install-info-recursive install-man: install-pdf: install-pdf-recursive install-ps: install-ps-recursive installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES \ uninstall-libmopac7includeHEADERS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ install-strip .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES \ install-libmopac7includeHEADERS install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-libLTLIBRARIES uninstall-libmopac7includeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mopac7-1.15/fortran/fock1.f0000644000175000017500000000570011053302064012370 00000000000000 SUBROUTINE FOCK1(F, PTOT, PA, PB) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION F(*), PTOT(*), PA(*), PB(*) C ********************************************************************* C C *** COMPUTE THE REMAINING CONTRIBUTIONS TO THE ONE-CENTRE ELEMENTS. C C ********************************************************************* COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /GAUSS / FN1(107),FN2(107) 1 /MOLORB/ USPD(MAXORB),DUMY(MAXORB) COMMON /TWOELE/ GSS(107),GSP(107),GPP(107),GP2(107),HSP(107) 1 ,GSD(107),GPD(107),GDD(107) DIMENSION QTOT(NUMATM), QA(NUMATM) COMMON /KEYWRD/ KEYWRD CHARACTER*241 KEYWRD CALL CHRGE(PTOT,QTOT) CALL CHRGE(PA,QA) DO 100 II=1,NUMAT IA=NFIRST(II) IB=NMIDLE(II) IC=NLAST(II) NI=NAT(II) DTPOP=0.D0 DAPOP=0.D0 PTPOP=0.D0 PAPOP=0.D0 GOTO (100,40,30,30,30,20,20,20,20,20)IC-IA+2 20 DTPOP=PTOT((IC*(IC+1))/2)+PTOT(((IC-1)*(IC))/2) 1 +PTOT(((IC-2)*(IC-1))/2)+PTOT(((IC-3)*(IC-2))/2) 2 +PTOT(((IC-4)*(IC-3))/2) DAPOP=PA((IC*(IC+1))/2)+PA(((IC-1)*(IC))/2) 1 +PA(((IC-2)*(IC-1))/2)+PA(((IC-3)*(IC-2))/2) 2 +PA(((IC-4)*(IC-3))/2) 30 PTPOP=PTOT((IB*(IB+1))/2)+PTOT(((IB-1)*(IB))/2) 1 +PTOT(((IB-2)*(IB-1))/2) PAPOP=PA((IB*(IB+1))/2)+PA(((IB-1)*(IB))/2) 1 +PA(((IB-2)*(IB-1))/2) 40 IF(NI.EQ.1)THEN SUM=0.D0 ELSE SUM2=0.D0 SUM1=0.D0 DO 60 I=IA,IB IM1=I-1 DO 50 J=IA,IM1 50 SUM1=SUM1+PTOT(J+(I*(I-1))/2)**2 60 SUM2=SUM2+PTOT((I*(I+1))/2)**2 SUM=SUM1*2.D0+SUM2 SUM=SQRT(SUM)-QTOT(II)*0.5D0 ENDIF SUM=SUM*FN1(NI) C C F(S,S) C KA=(IA*(IA+1))/2 F(KA)=F(KA)+PB(KA)*GSS(NI)+PTPOP*GSP(NI) 1 -PAPOP*HSP(NI) + DTPOP*GSD(NI) IF (NI.LT.3) GO TO 100 IPLUS=IA+1 L=KA DO 70 J=IPLUS,IB M=L+IA L=L+J C C F(P,P) C F(L)=F(L)+PTOT(KA)*GSP(NI)-PA(KA)*HSP(NI)+ 1 PB(L)*GPP(NI)+(PTPOP-PTOT(L))*GP2(NI) 2 -0.5D0*(PAPOP-PA(L))*(GPP(NI)-GP2(NI)) 3 +DTPOP*GPD(NI) C C F(S,P) C 70 F(M)=F(M)+2.D0*PTOT(M)*HSP(NI)-PA(M)*(HSP(NI)+GSP(NI)) C C F(P,P*) C IMINUS=IB-1 DO 80 J=IPLUS,IMINUS ICC=J+1 DO 80 L=ICC,IB M=(L*(L-1))/2+J 80 F(M)=F(M)+PTOT(M)*(GPP(NI)-GP2(NI)) 1 -0.5D0*PA (M)*(GPP(NI)+GP2(NI)) DO 90 J=IB+1,IC M=(J*(J+1))/2 90 F(M)=F(M)+PTOT(KA)*GSD(NI) 1 +PTPOP*GPD(NI) 2 +(DTPOP-PA(M))*GDD(NI) 100 CONTINUE RETURN END mopac7-1.15/fortran/dgetrf.f0000644000175000017500000001117411053302063012641 00000000000000 SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO ) * * -- LAPACK ROUTINE (VERSION 1.0B) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * FEBRUARY 29, 1992 * * .. SCALAR ARGUMENTS .. INTEGER INFO, LDA, M, N * .. * .. ARRAY ARGUMENTS .. INTEGER IPIV( * ) DOUBLE PRECISION A( LDA, * ) * .. * * PURPOSE * ======= * * DGETRF COMPUTES AN LU FACTORIZATION OF A GENERAL M-BY-N MATRIX A * USING PARTIAL PIVOTING WITH ROW INTERCHANGES. * * THE FACTORIZATION HAS THE FORM * A = P * L * U * WHERE P IS A PERMUTATION MATRIX, L IS LOWER TRIANGULAR WITH UNIT * DIAGONAL ELEMENTS (LOWER TRAPEZOIDAL IF M > N), AND U IS UPPER * TRIANGULAR (UPPER TRAPEZOIDAL IF M < N). * * THIS IS THE RIGHT-LOOKING LEVEL 3 BLAS VERSION OF THE ALGORITHM. * * ARGUMENTS * ========= * * M (INPUT) INTEGER * THE NUMBER OF ROWS OF THE MATRIX A. M >= 0. * * N (INPUT) INTEGER * THE NUMBER OF COLUMNS OF THE MATRIX A. N >= 0. * * A (INPUT/OUTPUT) DOUBLE PRECISION ARRAY, DIMENSION (LDA,N) * ON ENTRY, THE M BY N MATRIX TO BE FACTORED. * ON EXIT, THE FACTORS L AND U FROM THE FACTORIZATION * A = P*L*U; THE UNIT DIAGONAL ELEMENTS OF L ARE NOT STORED. * * LDA (INPUT) INTEGER * THE LEADING DIMENSION OF THE ARRAY A. LDA >= MAX(1,M). * * IPIV (OUTPUT) INTEGER ARRAY, DIMENSION (MIN(M,N)) * THE PIVOT INDICES; FOR 1 <= I <= MIN(M,N), ROW I OF THE * MATRIX WAS INTERCHANGED WITH ROW IPIV(I). * * INFO (OUTPUT) INTEGER * = 0: SUCCESSFUL EXIT * < 0: IF INFO = -K, THE K-TH ARGUMENT HAD AN ILLEGAL VALUE * > 0: IF INFO = K, U(K,K) IS EXACTLY ZERO. THE FACTORIZATION * HAS BEEN COMPLETED, BUT THE FACTOR U IS EXACTLY * SINGULAR, AND DIVISION BY ZERO WILL OCCUR IF IT IS USED * TO SOLVE A SYSTEM OF EQUATIONS. * * ===================================================================== * * .. PARAMETERS .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. LOCAL SCALARS .. INTEGER I, IINFO, J, JB, NB * .. * .. EXTERNAL SUBROUTINES .. EXTERNAL DGEMM, DGETF2, DLASWP, DTRSM, XERBLA * .. * .. EXTERNAL FUNCTIONS .. INTEGER ILAENV EXTERNAL ILAENV * .. * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX, MIN * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * INFO = 0 IF( M.LT.0 ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -4 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGETRF', -INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE * IF( M.EQ.0 .OR. N.EQ.0 ) $ RETURN * * DETERMINE THE BLOCK SIZE FOR THIS ENVIRONMENT. * NB = ILAENV( 1, 'DGETRF', ' ', M, N, -1, -1 ) IF( NB.LE.1 .OR. NB.GE.MIN( M, N ) ) THEN * * USE UNBLOCKED CODE. * CALL DGETF2( M, N, A, LDA, IPIV, INFO ) ELSE * * USE BLOCKED CODE. * DO 20 J = 1, MIN( M, N ), NB JB = MIN( MIN( M, N )-J+1, NB ) * * FACTOR DIAGONAL AND SUBDIAGONAL BLOCKS AND TEST FOR EXACT * SINGULARITY. * CALL DGETF2( M-J+1, JB, A( J, J ), LDA, IPIV( J ), IINFO ) * * ADJUST INFO AND THE PIVOT INDICES. * IF( INFO.EQ.0 .AND. IINFO.GT.0 ) $ INFO = IINFO + J - 1 DO 10 I = J, MIN( M, J+JB-1 ) IPIV( I ) = J - 1 + IPIV( I ) 10 CONTINUE * * APPLY INTERCHANGES TO COLUMNS 1:J-1. * CALL DLASWP( J-1, A, LDA, J, J+JB-1, IPIV, 1 ) * IF( J+JB.LE.N ) THEN * * APPLY INTERCHANGES TO COLUMNS J+JB:N. * CALL DLASWP( N-J-JB+1, A( 1, J+JB ), LDA, J, J+JB-1, $ IPIV, 1 ) * * COMPUTE BLOCK ROW OF U. * CALL DTRSM( 'LEFT', 'LOWER', 'NO TRANSPOSE', 'UNIT', JB, $ N-J-JB+1, ONE, A( J, J ), LDA, A( J, J+JB ), $ LDA ) IF( J+JB.LE.M ) THEN * * UPDATE TRAILING SUBMATRIX. * CALL DGEMM( 'NO TRANSPOSE', 'NO TRANSPOSE', M-J-JB+1, $ N-J-JB+1, JB, -ONE, A( J+JB, J ), LDA, $ A( J, J+JB ), LDA, ONE, A( J+JB, J+JB ), $ LDA ) END IF END IF 20 CONTINUE END IF RETURN * * END OF DGETRF * END mopac7-1.15/fortran/makpol.f0000644000175000017500000001233511053302064012652 00000000000000 SUBROUTINE MAKPOL(COORD) IMPLICIT DOUBLE PRECISION (A-H, O-Z) INCLUDE 'SIZES' DIMENSION COORD(3,*) ************************************************************************ * * MAKPOL TAKES A PRIMITIVE UNIT CELL AND GENERATES A TOTAL OF 'MERS' * COPIES. THE RESULTING GEOMETRY IS PLACED IN GEO. ARRAYS LOC, * XPARAM, NA, NB, NC, SIMBOL, TXTATM, LABELS, LOCPAR, IDEPFN, AND * LOCDEP ARE EXPANDED TO SUIT. ARRAY TVEC IS MODIFIED, AS ARE SCALARS * NVAR, NATOMS, AND NDEP. * * SYMMETRY IS FORCED ON, OR ADDED ON, IN ORDER TO MAKE THE NEW MERS * EQUIVALENT TO THE SUPPLIED MER. * ************************************************************************ CHARACTER KEYWRD*241, TXTATM*8, SIMBOL*10, LTXT*1 COMMON /KEYWRD/ KEYWRD COMMON /GEOVAR/ NVAR, LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /ATOMTX/ LTXT, TXTATM(NUMATM) COMMON /SIMBOL/ SIMBOL(MAXPAR) COMMON /EULER / TVEC(3,3), ID COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) IOFF=0 MERS=READA(KEYWRD,INDEX(KEYWRD,' MERS')) DO 270 I=1,NATOMS 270 IF(LABELS(I).EQ.99)LABELS(I)=100 CALL GMETRY(GEO,COORD) DO 280 I=1,NATOMS 280 IF(LABELS(I).EQ.100)LABELS(I)=99 NAN=NA(NATOMS-1) NBN=NB(NATOMS-1) NCN=NC(NATOMS-1) DO 330 I=2,MERS+1 IM1=IOFF IOFF=IOFF+NATOMS-2 C C FILL THE NA, NB, AND NC ADDRESSES FOR THE NEW ATOMS C DO 310 J=1,NATOMS-2 IF(J.NE.1.AND.I.GT.MERS)GOTO 310 SIMBOL(IOFF+J)=SIMBOL(IM1+J) IF(IOFF+J.NE.NATOMS-1)THEN NA(IOFF+J)=NA(IM1+J)+NATOMS-2 NB(IOFF+J)=NB(IM1+J)+NATOMS-2 NC(IOFF+J)=NC(IM1+J)+NATOMS-2 ENDIF LABELS(IOFF+J)=LABELS(IM1+J) TXTATM(IOFF+J)=TXTATM(IM1+J) DO 300 K=1,3 300 COORD(K,IOFF+J)=COORD(K,IM1+J)+TVEC(K,1) 310 CONTINUE IF(I.EQ.2)THEN C C SPECIAL TREATMENT FOR THE FIRST THREE ATOMS OF THE SECOND MER C NA(NATOMS-1)=NAN NB(NATOMS-1)=NBN NC(NATOMS-1)=NCN NB(NATOMS+0)=NA(NATOMS-2) NC(NATOMS+0)=NB(NATOMS-2) NC(NATOMS+1)=NA(NATOMS-2) ENDIF C# DO 320 J=1,NATOMS-2 C# 320 WRITE(6,'(3I5,3F12.5,3I4)')I,J,LABELS(IFF+J), C# 1(COORD(K,IOFF+J),K=1,3), C# 2NA(IOFF+J), NB(IOFF+J), NC(IOFF+J) 330 CONTINUE C C USE ATOMS OF FIRST MER TO DEFINE THE OTHER MERS. FOR ATOMS 1, 2, AND C 3, USE DATA FROM THE SECOND MER. C DO 360 I=1,NATOMS-2 DO 350 K=1,3 IF(K.GE.I)THEN KOFF=NATOMS-2 JOFF=3 ELSE KOFF=0 JOFF=2 ENDIF DO 340 J=JOFF,MERS+1 IF(I.NE.1.AND.J.GT.MERS) GOTO 340 NDEP=NDEP+1 LOCPAR(NDEP)=I+KOFF IDEPFN(NDEP)=K LOCDEP(NDEP)=(NATOMS-2)*(J-1)+I 340 CONTINUE 350 CONTINUE 360 CONTINUE C C CARTESIAN COORDINATES OF THE TV C LAST=(NATOMS-2)*MERS+2 COORD(1,LAST)=COORD(1,IOFF+1) COORD(2,LAST)=COORD(2,IOFF+1) COORD(3,LAST)=COORD(3,IOFF+1) C C REMOVE OPTIMIZATION FLAGS OF LAST TWO ATOMS SUPPLIED BY THE USER C DO 331 I=1,6 331 IF(LOC(1,NVAR).GT.NATOMS-2)NVAR=NVAR-1 C C PUT ON OPTIMIZATION FLAGES FOR FIRST THREE ATOMS OF THE SECOND MER C LOC(1,NVAR+1)=NATOMS-1 LOC(2,NVAR+1)=1 LOC(1,NVAR+2)=NATOMS-1 LOC(2,NVAR+2)=2 LOC(1,NVAR+3)=NATOMS-1 LOC(2,NVAR+3)=3 LOC(1,NVAR+4)=NATOMS LOC(2,NVAR+4)=2 LOC(1,NVAR+5)=NATOMS LOC(2,NVAR+5)=3 LOC(1,NVAR+6)=NATOMS+1 LOC(2,NVAR+6)=3 C C RE-DO SPECIFICATION OF THE TV C LABELS(LAST-1)=99 LABELS(LAST)=107 TXTATM(LAST-1)=' ' TXTATM(LAST)=' ' NA(LAST)=1 NB(LAST)=LAST-1 NC(LAST)=LAST-2 LOC(1,NVAR+7)=LAST LOC(2,NVAR+7)=1 C C CONVERT TO INTERNAL COORDINATES. USE CONNECTIVITY CREATED HERE C DEGREE=1.D0 NA(2)=-2 CALL XYZINT(COORD,LAST,NA,NB,NC,DEGREE,GEO) C C RE-SIZE THE TRANSLATION VECTOR C TVEC(1,1)=COORD(1,LAST) TVEC(2,1)=COORD(2,LAST) TVEC(3,1)=COORD(3,LAST) C C THE COORDINATES OF THE FIRST 3 ATOMS NEED TO BE OPTIMIZED C XPARAM(NVAR+1)=GEO(1,NATOMS-1) XPARAM(NVAR+2)=GEO(2,NATOMS-1) XPARAM(NVAR+3)=GEO(3,NATOMS-1) XPARAM(NVAR+4)=GEO(2,NATOMS) XPARAM(NVAR+5)=GEO(3,NATOMS) XPARAM(NVAR+6)=GEO(3,NATOMS+1) NATOMS=LAST XPARAM(NVAR+7)=GEO(1,NATOMS) NVAR=NVAR+7 WRITE(6,160)(I,(TVEC(J,I),J=1,3),I=1,ID) 150 FORMAT(/,' EXPANDED UNIT CELL TRANSLATION VECTORS',/ 1/,' X Y Z') 160 FORMAT(' T',I1,' = ',F11.7,' ',F11.7,' ',F11.7) WRITE(6,'(/,10X,A)')' EXPANDED POLYMER UNIT CELL' CALL GEOUT(1) RETURN END mopac7-1.15/fortran/xerbla.f0000644000175000017500000000250711053302064012644 00000000000000 SUBROUTINE XERBLA( SRNAME, INFO ) * * -- LAPACK AUXILIARY ROUTINE (VERSION 1.0B) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * FEBRUARY 29, 1992 * * .. SCALAR ARGUMENTS .. CHARACTER*6 SRNAME INTEGER INFO C MOPAC CHANGE COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) C END OF MOPAC CHANGE * .. * * PURPOSE * ======= * * XERBLA IS AN ERROR HANDLER FOR THE LAPACK ROUTINES. * IT IS CALLED BY AN LAPACK ROUTINE IF AN INPUT PARAMETER HAS AN * INVALID VALUE. A MESSAGE IS PRINTED AND EXECUTION STOPS. * * INSTALLERS MAY CONSIDER MODIFYING THE STOP STATEMENT IN ORDER TO * CALL SYSTEM-SPECIFIC EXCEPTION-HANDLING FACILITIES. * * ARGUMENTS * ========= * * SRNAME (INPUT) CHARACTER*6 * THE NAME OF THE ROUTINE WHICH CALLED XERBLA. * * INFO (INPUT) INTEGER * THE POSITION OF THE INVALID PARAMETER IN THE PARAMETER LIST * OF THE CALLING ROUTINE. * * .. EXECUTABLE STATEMENTS .. * C MOPAC CHANGE C WRITE( *, FMT = 9999 )SRNAME, INFO WRITE( IW, FMT = 9999 )SRNAME, INFO C END OF MOPAC CHANGE * STOP * 9999 FORMAT( ' ** ON ENTRY TO ', A6, ' PARAMETER NUMBER ', I2, ' HAD ', $ 'AN ILLEGAL VALUE' ) * * END OF XERBLA * END mopac7-1.15/fortran/paths.f0000644000175000017500000001002311053302064012476 00000000000000 SUBROUTINE PATHS IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /PATH / LATOM,LPARAM,REACT(200) COMMON /GEOVAR/ NVAR, LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /KEYWRD/ KEYWRD C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /ALPARM/ ALPARM(3,MAXPAR),X0, X1, X2, ILOOP ************************************************************************ * * PATH FOLLOWS A REACTION COORDINATE. THE REACTION COORDINATE IS ON * ATOM LATOM, AND IS A DISTANCE IF LPARAM=1, * AN ANGLE IF LPARAM=2, * AN DIHEDRALIF LPARAM=3. * ************************************************************************ DIMENSION GD(MAXPAR),XLAST(MAXPAR),MDFP(20),XDFP(20) CHARACTER*241 KEYWRD CHARACTER*10 TYPE(3) SAVE TYPE, GD, XLAST, MDFP, XDFP DATA TYPE / 'ANGSTROMS ','DEGREES ','DEGREES '/ ILOOP=1 IF(INDEX(KEYWRD,'RESTAR') .NE. 0) THEN MDFP(9)=0 CALL DFPSAV(TOTIME,XPARAM,GD,XLAST,FUNCT1,MDFP,XDFP) WRITE(6,'(//10X,'' RESTARTING AT POINT'',I3)')ILOOP ENDIF IF(ILOOP.GT.1) GOTO 10 WRITE(6,'('' ABOUT TO ENTER FLEPO FROM PATH'')') TIME0=SECOND() CALL FLEPO(XPARAM,NVAR,FUNCT) WRITE(6,'('' OPTIMIZED VALUES OF PARAMETERS, INITIAL POINT'')') CALL WRITMO(TIME0,FUNCT) TIME0=SECOND() 10 CONTINUE IF(ILOOP.GT.2) GOTO 40 GEO(LPARAM,LATOM)=REACT(2) IF(ILOOP.EQ.1) THEN X0=REACT(1) X1=X0 X2=REACT(2) IF(X2.LT. -100.D0) STOP DO 20 I=1,NVAR ALPARM(2,I)=XPARAM(I) 20 ALPARM(1,I)=XPARAM(I) ILOOP=2 ENDIF CALL FLEPO(XPARAM,NVAR,FUNCT) RNORD=REACT(2) IF(LPARAM.GT.1) RNORD=RNORD*57.29577951D0 WRITE(6,'(1X,16(''*****'')//17X,''REACTION COORDINATE = '' 1,F12.4,2X,A10,19X//1X,16(''*****''))')RNORD,TYPE(LPARAM) CALL WRITMO(TIME0,FUNCT) TIME0=SECOND() DO 30 I=1,NVAR 30 ALPARM(3,I)=XPARAM(I) C C NOW FOR THE MAIN INTERPOLATION ROUTE C IF(ILOOP.EQ.2)ILOOP=3 40 CONTINUE LPR=ILOOP DO 110 ILOOP = LPR,100 C IF(REACT(ILOOP).LT. -100.D0) RETURN C RNORD=REACT(ILOOP) IF(LPARAM.GT.1) RNORD=RNORD*57.29577951D0 WRITE(6,'(1X,16(''*****'')//19X,''REACTION COORDINATE = '' 1,F12.4,2X,A10,19X//1X,16(''*****''))')RNORD,TYPE(LPARAM) C X3=REACT(ILOOP) C3=(X0**2-X1**2)*(X1-X2)-(X1**2-X2**2)*(X0-X1) C WRITE(6,'('' C3:'',F13.7)')C3 IF (ABS(C3) .LT. 1.D-8) THEN C C WE USE A LINEAR INTERPOLATION C CC1=0.D0 CC2=0.D0 ELSE C WE DO A QUADRATIC INTERPOLATION C CC1=(X1-X2)/C3 CC2=(X0-X1)/C3 ENDIF CB1=1.D0/(X1-X2) CB2=(X1**2-X2**2)*CB1 C C NOW TO CALCULATE THE INTERPOLATED COORDINATES C DO 50 I=1,NVAR DELF0=ALPARM(1,I)-ALPARM(2,I) DELF1=ALPARM(2,I)-ALPARM(3,I) ACONST = CC1*DELF0-CC2*DELF1 BCONST = CB1*DELF1-ACONST*CB2 CCONST = ALPARM(3,I) - BCONST*X2 - ACONST*X2**2 XPARAM(I)=CCONST+BCONST*X3+ACONST*X3**2 ALPARM(1,I)=ALPARM(2,I) 50 ALPARM(2,I)=ALPARM(3,I) C C NOW TO CHECK THAT THE GUESSED GEOMETRY IS NOT TOO ABSURD C DO 60 I=1,NVAR 60 IF(ABS(XPARAM(I)-ALPARM(3,I)) .GT. 0.2) GOTO 70 GOTO 90 70 WRITE(6,'('' GEOMETRY TOO UNSTABLE FOR EXTRAPOLATION TO BE USED 1''/ ,'' - THE LAST GEOMETRY IS BEING USED TO START THE NEXT'' 2,'' CALCULATION'')') DO 80 I=1,NVAR 80 XPARAM(I)=ALPARM(3,I) 90 CONTINUE X0=X1 X1=X2 X2=X3 GEO(LPARAM,LATOM)=REACT(ILOOP) CALL FLEPO(XPARAM,NVAR,FUNCT) CALL WRITMO(TIME0,FUNCT) TIME0=SECOND() DO 100 I=1,NVAR 100 ALPARM(3,I)=XPARAM(I) 110 CONTINUE END mopac7-1.15/fortran/gmetry.f0000644000175000017500000001622011053302063012672 00000000000000 SUBROUTINE GMETRY(GEO,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) 2 /EULER / TVEC(3,3), ID COMMON /REACTN/ STEP, GEOA(3,NUMATM), GEOVEC(3,NUMATM),COLCST COMMON /GEOOK/ IGEOOK COMMON /NUMCAL/ NUMCAL DIMENSION GEO(3,*),COORD(3,*) CHARACTER *15 NDIMEN(4) LOGICAL GEOOK SAVE ICALCN, NDIMEN, GEOOK DATA ICALCN/0/ DATA NDIMEN/' MOLECULE ',' POLYMER ', 1'LAYER STRUCTURE',' SOLID '/ C*********************************************************************** C C GMETRY COMPUTES COORDINATES FROM BOND-ANGLES AND LENGTHS. C *** IT IS ADAPTED FROM THE PROGRAM WRITTEN BY M.J.S. DEWAR. C C THREE SEPARATE OPTIONS EXIST WITHIN GMETRY. THESE ARE: C (A) IF NA(1) IS EQUAL TO 99 (IMPOSSIBLE UNDER NORMAL CIRCUMSTANCES) C THEN GEO IS ASSUMED TO BE IN CARTESIAN RATHER THAN INTERNAL C COORDINATES, AND COORD IS THEN SET EQUAL TO GEO. C (B) IF STEP IS NON-ZERO (THIS IS THE CASE WHEN "SADDLE" IS USED) C THEN GEO IS FIRST MODIFIED BY SHIFTING THE INTERNAL COORDINATES C ALONG A RADIUS FROM GEOA TO PLACE GEO AT ADISTANCESTEPFROMGEOA. C (C) NORMAL CONVERSION FROM INTERNAL TO CARTESIAN COORDINATESISDONE. C C ON INPUT: C GEO = ARRAY OF INTERNAL COORDINATES. C NATOMS = NUMBER OF ATOMS, INCLUDING DUMMIES. C NA = ARRAY OF ATOM LABELS FOR BOND LENGTHS. C C ON OUTPUT: C COORD = ARRAY OF CARTESIAN COORDINATES C C*********************************************************************** C OPTION (B) GEOOK=(IGEOOK.EQ.99) IF(ABS(STEP) .GT. 1.D-4) THEN SUM=0.D0 DO 10 J=1,3 C$DOIT VBEST DO 10 I=1,NATOMS GEOVEC(J,I)=GEO(J,I)-GEOA(J,I) 10 SUM=SUM+GEOVEC(J,I)**2 SUM=SQRT(SUM) ERROR=(SUM-STEP)/SUM ELSE ERROR=0.D0 ENDIF DO 20 J=1,3 C$DOIT VBEST DO 20 I=1,NATOMS 20 GEO(J,I)=GEO(J,I)-ERROR*GEOVEC(J,I) C OPTION (A) IF(NA(1).EQ.99) THEN DO 30 I=1,3 C$DOIT VBEST DO 30 J=1,NATOMS 30 COORD(I,J)=GEO(I,J) GOTO 100 ENDIF C OPTION (C) COORD(1,1)=0.0D00 COORD(2,1)=0.0D00 COORD(3,1)=0.0D00 COORD(1,2)=GEO(1,2) COORD(2,2)=0.0D00 COORD(3,2)=0.0D00 IF(NATOMS.EQ.2) GOTO 100 CCOS=COS(GEO(2,3)) IF(NA(3).EQ.1)THEN COORD(1,3)=COORD(1,1)+GEO(1,3)*CCOS ELSE COORD(1,3)=COORD(1,2)-GEO(1,3)*CCOS ENDIF COORD(2,3)=GEO(1,3)*SIN(GEO(2,3)) COORD(3,3)=0.0D00 DO 90 I=4,NATOMS COSA=COS(GEO(2,I)) MB=NB(I) MC=NA(I) XB=COORD(1,MB)-COORD(1,MC) YB=COORD(2,MB)-COORD(2,MC) ZB=COORD(3,MB)-COORD(3,MC) RBC=XB*XB+YB*YB+ZB*ZB IF(RBC.LT.1.D-16)THEN C C TWO ATOMS ARE COINCIDENT. A FATAL ERROR. C WRITE(6,'(A,I4,A,I4,A)')' ATOMS',MB,' AND',MC,' ARE COINCIDE 1NT' WRITE(6,'(A)')' THIS IS A FATAL ERROR, RUN STOPPED IN GMETRY 1' STOP ELSE RBC=1.0D00/SQRT(RBC) ENDIF MA=NC(I) XA=COORD(1,MA)-COORD(1,MC) YA=COORD(2,MA)-COORD(2,MC) ZA=COORD(3,MA)-COORD(3,MC) C C ROTATE ABOUT THE Z-AXIS TO MAKE YB=0, AND XB POSITIVE. IF XYB IS C TOO SMALL, FIRST ROTATE THE Y-AXIS BY 90 DEGREES. C XYB=SQRT(XB*XB+YB*YB) K=-1 IF (XYB.GT.0.1D00) GO TO 40 XPA=ZA ZA=-XA XA=XPA XPB=ZB ZB=-XB XB=XPB XYB=SQRT(XB*XB+YB*YB) K=+1 C C ROTATE ABOUT THE Y-AXIS TO MAKE ZB VANISH C 40 COSTH=XB/XYB SINTH=YB/XYB XPA=XA*COSTH+YA*SINTH YPA=YA*COSTH-XA*SINTH SINPH=ZB*RBC COSPH=SQRT(ABS(1.D00-SINPH*SINPH)) ZQA=ZA*COSPH-XPA*SINPH C C ROTATE ABOUT THE X-AXIS TO MAKE ZA=0, AND YA POSITIVE. C YZA=SQRT(YPA**2+ZQA**2) IF(YZA.LT.1.D-4)GOTO 60 IF(YZA.LT.2.D-2 .AND. .NOT.GEOOK)THEN WRITE(6,'(//20X,'' CALCULATION ABANDONED AT THIS POINT'')') WRITE(6,'(//10X,'' THREE ATOMS BEING USED TO DEFINE THE'',/ 110X,'' COORDINATES OF A FOURTH ATOM, WHOSE BOND-ANGLE IS'')') WRITE(6,'(10X,'' NOT ZERO OR 180 DEGREEES, ARE '', 1''IN AN ALMOST STRAIGHT'')') WRITE(6,'(10X,'' LINE. THERE IS A HIGH PROBABILITY THAT THE 1'',/10X,'' COORDINATES OF THE ATOM WILL BE INCORRECT.'')') WRITE(6,'(//20X,''THE FAULTY ATOM IS ATOM NUMBER'',I4)')I CALL GEOUT(1) WRITE(6,'(//20X,''CARTESIAN COORDINATES UP TO FAULTY ATOM'') 1') WRITE(6,'(//5X,''I'',12X,''X'',12X,''Y'',12X,''Z'')') DO 50 J=1,I 50 WRITE(6,'(I6,F16.5,2F13.5)')J,(COORD(K,J),K=1,3) WRITE(6,'(//6X,'' ATOMS'',I3,'','',I3,'', AND'',I3, 1'' ARE WITHIN'',F7.4,'' ANGSTROMS OF A STRAIGHT LINE'')') 2MC,MB,MA,YZA STOP ENDIF COSKH=YPA/YZA SINKH=ZQA/YZA GOTO 70 60 CONTINUE C C ANGLE TOO SMALL TO BE IMPORTANT C COSKH=1.D0 SINKH=0.D0 70 CONTINUE C C COORDINATES :- A=(???,YZA,0), B=(RBC,0,0), C=(0,0,0) C NONE ARE NEGATIVE. C THE COORDINATES OF I ARE EVALUATED IN THE NEW FRAME. C SINA=SIN(GEO(2,I)) SIND=-SIN(GEO(3,I)) COSD=COS(GEO(3,I)) XD=GEO(1,I)*COSA YD=GEO(1,I)*SINA*COSD ZD=GEO(1,I)*SINA*SIND C C TRANSFORM THE COORDINATES BACK TO THE ORIGINAL SYSTEM. C YPD=YD*COSKH-ZD*SINKH ZPD=ZD*COSKH+YD*SINKH XPD=XD*COSPH-ZPD*SINPH ZQD=ZPD*COSPH+XD*SINPH XQD=XPD*COSTH-YPD*SINTH YQD=YPD*COSTH+XPD*SINTH IF (K.LT.1) GO TO 80 XRD=-ZQD ZQD=XQD XQD=XRD 80 COORD(1,I)=XQD+COORD(1,MC) COORD(2,I)=YQD+COORD(2,MC) COORD(3,I)=ZQD+COORD(3,MC) 90 CONTINUE C C *** NOW REMOVE THE TRANSLATION VECTORS, IF ANY, FROM THE ARRAY COOR C 100 CONTINUE K=NATOMS 110 IF(LABELS(K).NE.107) GOTO 120 K=K-1 GOTO 110 120 K=K+1 IF(K.GT.NATOMS) GOTO 170 C C SYSTEM IS A SOLID, OF DIMENSION NATOMS+1-K C L=0 DO 130 I=K,NATOMS L=L+1 MC=NA(I) TVEC(1,L)=COORD(1,I)-COORD(1,MC) TVEC(2,L)=COORD(2,I)-COORD(2,MC) TVEC(3,L)=COORD(3,I)-COORD(3,MC) 130 CONTINUE ID=L IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL WRITE(6,140)NDIMEN(ID+1) 140 FORMAT(/10X,' THE SYSTEM IS A ',A15,/) IF(ID.EQ.0) GOTO 170 WRITE(6,150) WRITE(6,160)(I,(TVEC(J,I),J=1,3),I=1,ID) 150 FORMAT(/,' UNIT CELL TRANSLATION VECTORS',/ 1/,' X Y Z') 160 FORMAT(' T',I1,' = ',F11.7,' ',F11.7,' ',F11.7) ENDIF 170 CONTINUE J=0 DO 190 I=1,NATOMS IF (LABELS(I).EQ.99.OR.LABELS(I).EQ.107) GO TO 190 J=J+1 C$DOIT ASIS DO 180 K=1,3 180 COORD(K,J)=COORD(K,I) 190 CONTINUE RETURN END mopac7-1.15/fortran/fmat.f0000644000175000017500000002612511053302064012320 00000000000000 SUBROUTINE FMAT(FMATRX, NREAL, TSCF, TDER, DELDIP, HEAT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT DIMENSION FMATRX(*), DELDIP(3,*) *********************************************************************** * * VALUE CALCULATES THE SECOND-ORDER OF THE ENERGY WITH * RESPECT TO THE CARTESIAN COORDINATES I AND J AND PLACES IT * IN FMATRX * * ON INPUT NATOMS = NUMBER OF ATOMS IN THE SYSTEM. * XPARAM = INTERNAL COORDINATES OF MOLECULE STORED LINEARLY * * VARIABLES USED * COORDL = ARRAY OF CARTESIAN COORDINATES, STORED LINEARLY. * I = INDEX OF CARTESIAN COORDINATE. * J = INDEX OF CARTESIAN COORDINATE. * * ON OUTPUT FMATRX = SECOND DERIVATIVE OF THE ENERGY WITH RESPECT TO * CARTESIAN COORDINATES I AND J. *********************************************************************** COMMON /KEYWRD/ KEYWRD COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR),IDUMY, DUMY(MAXPAR) COMMON /DENSTY/ P(MPACK),PDUMY(2,MPACK) COMMON /TIMDMP/ TLEFT, TDUMP COMMON /ATMASS/ ATMASS(NUMATM) C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /CORE / CORE(107) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /COORD / COORD(3,NUMATM) COMMON /NLLCOM/ EVECS(MAXPAR*MAXPAR),BMAT(MAXPAR,MAXPAR*2) DIMENSION GRAD(MAXPAR), 1GROLD(MAXPAR), COORDL(MAXPAR), Q(NUMATM), DEL2(3), G2OLD(MAXPAR) 2, EIGS(MAXPAR), G2RAD(MAXPAR), 3 FCONST(MAXPAR) CHARACTER*241 KEYWRD SAVE FACT LOGICAL DEBUG, RESTRT, PRNT, RESFIL, PRECIS, BIG, LOG, GROUP EQUIVALENCE (COORD(1,1),COORDL(1)) DATA FACT/6.95125D-3/ C C FACT IS THE CONVERSION FACTOR FROM KCAL/MOLE TO ERGS C C SET UP CONSTANTS AND FLAGS NA(1)=99 C C SET UP THE VARIABLES IN XPARAM ANDLOC,THESE ARE IN CARTESIAN COORDINA C NUMAT=0 C$DOIT ASIS DO 10 I=1,NATOMS IF(LABELS(I).NE.99.AND.LABELS(I).NE.107) THEN NUMAT=NUMAT+1 LABELS(NUMAT)=LABELS(I) ENDIF 10 CONTINUE NATOMS=NUMAT C C THIS IS A QUICK, IF CLUMSY, WAY TO CALCULATE NUMAT, AND TO REMOVE C THE DUMMY ATOMS FROM THE ARRAY LABELS. C NVAR=NUMAT*3 DO 20 I=1,NUMAT LOC(1,(I-1)*3+1)=I LOC(2,(I-1)*3+1)=1 C LOC(1,(I-1)*3+2)=I LOC(2,(I-1)*3+2)=2 C LOC(1,(I-1)*3+3)=I LOC(2,(I-1)*3+3)=3 20 CONTINUE LIN=(NVAR*(NVAR+1))/2 DO 30 I=1,LIN 30 FMATRX(I)=0.D0 PRNT =(INDEX(KEYWRD,'IRC=') .EQ. 0) LOG =(INDEX(KEYWRD,'NOLOG') .EQ. 0) PRECIS =(INDEX(KEYWRD,'PREC') .NE. 0) RESTRT =(INDEX(KEYWRD,'RESTART') .NE. 0) GROUP =(INDEX(KEYWRD,' GROUP').NE.0) IF(INDEX(KEYWRD,'NLLSQ') .NE. 0) RESTRT=.FALSE. DEBUG =(INDEX(KEYWRD,'FMAT') .NE. 0) BIG =(INDEX(KEYWRD,'LARGE') .NE. 0 .AND. DEBUG) IF(PRNT)WRITE(6,'(//4X,''FIRST DERIVATIVES WILL BE USED IN THE'' 1,'' CALCULATION OF SECOND DERIVATIVES'')') TLAST=TLEFT RESFIL=.FALSE. IF(RESTRT) THEN ISTART = 0 I=0 CALL FORSAV(TOTIME,DELDIP,ISTART,FMATRX, COORD, NVAR,HEAT, 1 EVECS,JSTART,FCONST) KOUNTF=(ISTART*(ISTART+1))/2 ISTART=ISTART+1 JSTART=JSTART+1 TIME2 = SECOND() ELSE KOUNTF=0 TOTIME=0.D0 IF (TSCF.GT.0.D0)TLEFT=TLEFT-TSCF-TDER ISTART=1 ENDIF C CALCULATE FMATRX IF(ISTART.GT.1) THEN ESTIME=(NVAR-ISTART+1)*TOTIME/(ISTART-1.D0) ELSE ESTIME=NVAR*(TSCF+TDER)*2.D0 IF (PRECIS) ESTIME=ESTIME*2.D0 ENDIF IF(TSCF.GT.0) 1WRITE(6,'(/10X,''ESTIMATED TIME TO COMPLETE CALCULATION ='' 2,F9.2,'' SECONDS'')')ESTIME IF(RESTRT) THEN IF(ISTART.LE.NVAR) 1 WRITE(6,'(/10X,''STARTING AGAIN AT LINE'',18X,I4)')ISTART WRITE(6,'(/10X,''TIME USED UP TO RESTART ='',F22.2)')TOTIME ENDIF LU=KOUNTF NUMAT=NVAR/3 DO 40 I=1,NVAR 40 EIGS(I)=0.D0 C C READ IN THE SYMMETRY OPERATIONS, IF PRESENT C IF(GROUP) CALL SYMR ISKIP=0 DO 110 I=ISTART,NVAR IF(GROUP .AND. ((I-1)/3)*3.EQ.I-1)THEN C C START OF A NEW ATOM. DOES A SYMMETRY OPERATION RELATE AN ALREADY C CALCULATED ATOM TO THIS ONE C J=(I+2)/3 CALL SYMPOP(FMATRX, J, ISKIP, DELDIP) ENDIF IF(ISKIP.GT.0) THEN WRITE(6,'('' STEP:'',I4,'' '',9X, '' INTEGRAL = 1'',F10.2,'' TIME LEFT:'',F10.2)')I,TOTIME,TLEFT ISKIP=ISKIP-1 LU=LU+I GOTO 110 ENDIF TIME2 = SECOND() DELTA=1.D0/120.D0 IF(PRECIS)THEN C C DETERMINE A GOOD STEP SIZE C G2OLD(1)=100.D0 COORDL(I)=COORDL(I)+DELTA CALL COMPFG(COORDL, .TRUE., ESCF, .TRUE., G2OLD, .TRUE.) COORDL(I)=COORDL(I)-DELTA DELTA=DELTA*10.D0/SQRT(DOT(G2OLD,G2OLD,NVAR)) C C CONSTRAIN DELTA TO A 'REASONABLE' VALUE C DELTA=MIN(0.05D0,MAX(0.005D0,DELTA)) IF(DEBUG)WRITE(6,'(A,I3,A,F12.5)')' STEP:',I,' DELTA :',DELT 1A G2OLD(1)=100.D0 COORDL(I)=COORDL(I)+DELTA CALL COMPFG(COORDL, .TRUE., ESCF, .TRUE., G2OLD, .TRUE.) IF(DEBUG)WRITE(6,'(A,F12.5)')' GNORM +1.0*DELTA', 1SQRT(DOT(G2OLD,G2OLD,NVAR)) COORDL(I)=COORDL(I)-DELTA*2.D0 G2RAD(1)=100.D0 CALL COMPFG(COORDL, .TRUE., HEATAA, .TRUE., G2RAD, .TRUE.) COORDL(I)=COORDL(I)+DELTA IF(DEBUG)WRITE(6,'(A,F12.5)')' GNORM -1.0*DELTA', 1SQRT(DOT(G2RAD,G2RAD,NVAR)) ELSE IF(DEBUG)WRITE(6,'(A,I3,A,F12.5)')' STEP:',I,' DELTA :',DELT 1A ENDIF COORDL(I)=COORDL(I)+0.5D0*DELTA GROLD(1)=100.D0 CALL COMPFG(COORDL, .TRUE., ESCF, .TRUE., GROLD, .TRUE.) IF(DEBUG)WRITE(6,'(A,F12.5)')' GNORM +0.5*DELTA', 1SQRT(DOT(GROLD,GROLD,NVAR)) CALL CHRGE(P,Q) DO 50 II=1,NUMAT 50 Q(II)=CORE(LABELS(II))-Q(II) SUM = DIPOLE(P,Q,COORDL,DELDIP(1,I),0) COORDL(I)=COORDL(I)-DELTA GRAD(1)=100.D0 CALL COMPFG(COORDL, .TRUE., HEATAA, .TRUE., GRAD, .TRUE.) IF(DEBUG)WRITE(6,'(A,F12.5)')' GNORM -0.5*DELTA', 1SQRT(DOT(GRAD,GRAD,NVAR)) CALL CHRGE(P,Q) DO 60 II=1,NUMAT 60 Q(II)=CORE(LABELS(II))-Q(II) SUM = DIPOLE(P,Q,COORDL,DEL2,0) COORDL(I)=COORDL(I)+DELTA*0.5D0 DELDIP(1,I)=(DELDIP(1,I)-DEL2(1))*0.5D0/DELTA DELDIP(2,I)=(DELDIP(2,I)-DEL2(2))*0.5D0/DELTA DELDIP(3,I)=(DELDIP(3,I)-DEL2(3))*0.5D0/DELTA LL=LU+1 LU=LL+I-1 L=0 IF(PRECIS)THEN DO 70 KOUNTF=LL,LU L=L+1 C C G2OLD = X + 1.0*DELTA C GROLD = X + 0.5*DELTA C GRAD = X - 0.5*DELTA C G2RAD = X - 1.0*DELTA C DUMY(L)= (8.D0*(GROLD(L)-GRAD(L))-(G2OLD(L)-G2RAD(L))) 1 /DELTA*FACT/24.D0 EIGS(L)=(2.D0*(GROLD(L)-GRAD(L))-(G2OLD(L)-G2RAD(L))) 1 /DELTA**3*FACT/56.D0 C C CORRECT FOR 4'TH ORDER CONTAMINATION C C# CORR=MIN(ABS(DUMY(L)),ABS(EIGS(L))*0.0001D0) C# DUMY(L)=DUMY(L)-SIGN(CORR,DUMY(L)) FMATRX(KOUNTF)=FMATRX(KOUNTF)+DUMY(L) 70 CONTINUE L=L-1 DO 80 K=I,NVAR L=L+1 KK=(K*(K-1))/2+I DUMY(L)=(8.D0*(GROLD(L)-GRAD(L))-(G2OLD(L)-G2RAD(L))) 1 /DELTA*FACT/24.D0 EIGS(L)=(2.D0*(GROLD(L)-GRAD(L))-(G2OLD(L)-G2RAD(L))) 1 /DELTA**3*FACT/56.D0 C C CORRECT FOR 4'TH ORDER CONTAMINATION C C# CORR=MIN(ABS(DUMY(L)),ABS(EIGS(L))*0.0001D0) C# DUMY(L)=DUMY(L)-SIGN(CORR,DUMY(L)) FMATRX(KK)=FMATRX(KK)+DUMY(L) 80 CONTINUE ELSE DO 90 KOUNTF=LL,LU L=L+1 DUMY(L)=((GROLD(L)-GRAD(L)))*0.25D0/DELTA*FACT FMATRX(KOUNTF)=FMATRX(KOUNTF)+DUMY(L) 90 CONTINUE L=L-1 DO 100 K=I,NVAR L=L+1 KK=(K*(K-1))/2+I DUMY(L)=((GROLD(L)-GRAD(L)))*0.25D0/DELTA*FACT FMATRX(KK)=FMATRX(KK)+DUMY(L) 100 CONTINUE ENDIF IF(BIG)THEN WRITE(6,'(A)')' CONTRIBUTIONS TO F-MATRIX' WRITE(6,'(A)')' ELEMENT +1.0*DELTA +0.5*DELTA -0.5*DEL' 1//'TA -1.0*DELTA 2''ND ORDER 4TH ORDER' WRITE(6,'(I7,6F12.6)')(L,G2OLD(L),GROLD(L),GRAD(L),G2RAD(L), 1DUMY(L),EIGS(L),L=1,NVAR) ENDIF TIME3 = SECOND() TSTEP=TIME3-TIME2 TLEFT= MAX(0.1D0,TLEFT-TSTEP) IF(TSTEP.GT.1.D6)TSTEP=TSTEP-1.D6 TOTIME= TOTIME+TSTEP IF(RESFIL)THEN WRITE(6,'('' STEP:'',I4,'' RESTART FILE WRITTEN, INTEGRAL =' 1',F10.2,'' TIME LEFT:'',F10.2)')I,TOTIME,TLEFT IF(LOG)WRITE(11,'('' STEP:'',I4,'' RESTART FILE WRITTEN, '', 1''INTEGRAL ='',F10.2,'' TIME LEFT:'',F10.2)')I,TOTIME,TLEFT RESFIL=.FALSE. ELSE WRITE(6,'('' STEP:'',I4,'' TIME ='',F9.2,'' SECS, INTEGRAL = 1'',F10.2,'' TIME LEFT:'',F10.2)')I,TSTEP,TOTIME,TLEFT IF(LOG) WRITE(11,'('' STEP:'',I4,'' TIME ='',F9.2,'' SECS, ' 1',''INTEGRAL ='',F10.2,'' TIME LEFT:'',F10.2)')I,TSTEP,TOTIME,TLEF 2T ENDIF ESTIM = TOTIME/I IF(TLAST-TLEFT.GT.TDUMP)THEN TLAST=TLEFT RESFIL=.TRUE. JSTART=1 II=I CALL FORSAV(TOTIME,DELDIP,II,FMATRX, COORD,NVAR,HEAT, 1 EVECS,JSTART,FCONST) ENDIF IF(I.NE.NVAR.AND.TLEFT-10.D0 .LT. ESTIM) THEN WRITE(6,'(//10X,''- - - - - - - TIME UP - - - - - - -'',//)' 1) WRITE(6,'(/10X,'' POINT REACHED ='',I4)')I WRITE(6,'(/10X,'' RESTART USING KEY-WORD "RESTART"'')') WRITE(6,'(10X,''ESTIMATED TIME FOR THE NEXT STEP ='',F8.2, 1'' SECONDS'')')ESTIM JSTART=1 II=I CALL FORSAV(TOTIME,DELDIP,II,FMATRX, COORD,NVAR,HEAT, 1 EVECS,JSTART,FCONST) WRITE(6,'(//10X,''FORCE MATRIX WRITTEN TO DISK'')') NREAL=-1 RETURN ENDIF 110 CONTINUE DO 120 I=1,NATOMS IF(ATMASS(I).LT.1.D-20.AND.LABELS(I).LT.99)THEN CALL FORSAV(TOTIME,DELDIP,NVAR,FMATRX, COORD,NVAR,HEAT, 1 EVECS,ILOOP,FCONST) WRITE(6,'(A)')' AT LEAST ONE ATOM HAS A ZERO MASS. A RESTART 1' WRITE(6,'(A)')' FILE HAS BEEN WRITTEN AND THE JOB STOPPED' STOP ENDIF 120 CONTINUE IF(ISTART.LE.NVAR .AND. INDEX(KEYWRD,'ISOT') .NE. 0) 1CALL FORSAV(TOTIME,DELDIP,NVAR,FMATRX, COORD,NVAR,HEAT, 2 EVECS,ILOOP,FCONST) RETURN END mopac7-1.15/fortran/mecid.f0000644000175000017500000000323211053302063012443 00000000000000 SUBROUTINE MECID(EIGS,GSE,EIGA,DIAG) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION EIGS(*), EIGA(*), DIAG(*) ************************************************************************ * * MECID CALCULATES THE EFFECT OF REMOVING THE ELECTRONS INVOLVED IN * THE C.I. FROM THE GROUND-STATE CONFIGURATION, AND CALCULATES THE * MICROSTATE ENERGIES OF THE MICROSTATES INVOLVED IN THE C.I. * * THE QUANTITIES NMOS, NELEC, AND LAB, AND THE ARRAYS EIGS, OCCA, * MICROA, AND MICROB ARE USED, BUT UNCHANGED ON EXIT * * ON EXIT, GSE IS THE ELECTRONIC ENERGY OF STABILIZATION DUE TO * REMOVAL OF THE ELECTRONS INVOLVED IN THE C.I. * * EIGA HOLDS THE ONE-ELECTRON ENERGY LEVELS RESULTING FROM * REMOVAL OF THE ELECTRONS INVOLVED IN THE C.I. * * DIAG HOLDS THE MICROSTATE ENERGIES OF ALL STATES INVOLVED * IN THE C.I. THIS CAN BE USED AS THE DIAGONAL OF A C.I. * MATRIX * ************************************************************************ COMMON /BASEOC/ OCCA(NMECI) COMMON /MICROS/ MICROA(NMECI,4*NMECI**2),MICROB(NMECI,4*NMECI**2) COMMON /CIBITS/ NMOS,LAB,NELEC, NBO(3) COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) GSE=0.D0 DO 20 I=1,NMOS X=0.0D0 DO 10 J=1,NMOS 10 X=X+(2.D0*XY(I,I,J,J)-XY(I,J,I,J))*OCCA(J) EIGA(I)=EIGS(I+NELEC)-X GSE=GSE+EIGA(I)*OCCA(I)*2.D0 GSE=GSE+XY(I,I,I,I)*OCCA(I)*OCCA(I) DO 20 J=I+1,NMOS 20 GSE=GSE+2.D0*(2.D0*XY(I,I,J,J) - XY(I,J,I,J))*OCCA(I)*OCCA(J) DO 30 I=1,LAB 30 DIAG(I)=DIAGI(MICROA(1,I),MICROB(1,I),EIGA,XY,NMOS)-GSE RETURN END mopac7-1.15/fortran/diat2.f0000644000175000017500000002105511053302064012371 00000000000000 SUBROUTINE DIAT2(NA,ESA,EPA,R12,NB,ESB,EPB,S) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION S(3,3,3) C*********************************************************************** C C OVERLP CALCULATES OVERLAPS BETWEEN ATOMIC ORBITALS FOR PAIRS OF ATOMS C IT CAN HANDLE THE ORBITALS 1S, 2S, 3S, 2P, AND 3P. C C*********************************************************************** COMMON /SETC/ A(7),B(7),SA,SB,FACTOR,ISP,IPS DIMENSION INMB(17),III(78) SAVE INMB, III DATA INMB/1,0,2,2,3,4,5,6,7,0,8,8,8,9,10,11,12/ C NUMBERING CORRESPONDS TO BOND TYPE MATRIX GIVEN ABOVE C THE CODE IS C C III=1 FIRST - FIRST ROW ELEMENTS C =2 FIRST - SECOND C =3 FIRST - THIRD C =4 SECOND - SECOND C =5 SECOND - THIRD C =6 THIRD - THIRD DATA III/1,2,4, 2,4,4, 2,4,4,4, 2,4,4,4,4, 1 2,4,4,4,4,4, 2,4,4,4,4,4,4, 3,5,5,5,5,5,5,6, 2 3,5,5,5,5,5,5,6,6, 3,5,5,5,5,5,5,6,6,6, 3,5,5,5,5,5,5,6,6,6,6 3, 3,5,5,5,5,5,5,6,6,6,6,6/ C C ASSIGNS BOND NUMBER C JMAX=MAX0(INMB(NA),INMB(NB)) JMIN=MIN0(INMB(NA),INMB(NB)) II=III((JMAX*(JMAX-1))/2+JMIN) DO 10 I=1,3 DO 10 J=1,3 DO 10 K=1,3 10 S(I,J,K)=0.D0 RAB=R12/0.529167D0 GOTO (20,30,40,50,60,70), II C C ------------------------------------------------------------------ C *** THE ORDERING OF THE ELEMENTS WITHIN S IS C *** S(1,1,1)=(S(B)/S(A)) C *** S(1,2,1)=(P-SIGMA(B)/S(A)) C *** S(2,1,1)=(S(B)/P-SIGMA(A)) C *** S(2,2,1)=(P-SIGMA(B)/P-SIGMA(A)) C *** S(2,2,2)=(P-PI(B)/P-PI(A)) C ------------------------------------------------------------------ C *** FIRST ROW - FIRST ROW OVERLAPS C 20 CALL SET (ESA,ESB,NA,NB,RAB,II) S(1,1,1)=.25D00*SQRT((SA*SB*RAB*RAB)**3)*(A(3)*B(1)-B(3)*A(1)) RETURN C C *** FIRST ROW - SECOND ROW OVERLAPS C 30 CALL SET (ESA,ESB,NA,NB,RAB,II) W=SQRT((SA**3)*(SB**5))*(RAB**4)*0.125D00 S(1,1,1) = SQRT(1.D00/3.D00) S(1,1,1)=W*S(1,1,1)*(A(4)*B(1)-B(4)*A(1)+A(3)*B(2)-B(3)*A(2)) IF (NA.GT.1) CALL SET (EPA,ESB,NA,NB,RAB,II) IF (NB.GT.1) CALL SET (ESA,EPB,NA,NB,RAB,II) W=SQRT((SA**3)*(SB**5))*(RAB**4)*0.125D00 S(ISP,IPS,1)=W*(A(3)*B(1)-B(3)*A(1)+A(4)*B(2)-B(4)*A(2)) RETURN C C *** FIRST ROW - THIRD ROW OVERLAPS C 40 CALL SET (ESA,ESB,NA,NB,RAB,II) W=SQRT((SA**3)*(SB**7)/7.5D00)*(RAB**5)*0.0625D00 SROOT3 = SQRT(3.D00) S(1,1,1)=W*(A(5)*B(1)-B(5)*A(1)+ 12.D00*(A(4)*B(2)-B(4)*A(2)))/SROOT3 IF (NA.GT.1) CALL SET (EPA,ESB,NA,NB,RAB,II) IF (NB.GT.1) CALL SET (ESA,EPB,NA,NB,RAB,II) W=SQRT((SA**3)*(SB**7)/7.5D00)*(RAB**5)*0.0625D00 S(ISP,IPS,1)=W*(A(4)*(B(1)+B(3))-B(4)*(A(1)+A(3))+ 1B(2)*(A(3)+A(5))-A(2)*(B(3)+B(5))) RETURN C C *** SECOND ROW - SECOND ROW OVERLAPS C 50 CALL SET (ESA,ESB,NA,NB,RAB,II) W=SQRT((SA*SB)**5)*(RAB**5)*0.0625D00 RT3=1.D00/SQRT(3.D00) S(1,1,1)=W*(A(5)*B(1)+B(5)*A(1)-2.0D00*A(3)*B(3))/3.0D00 CALL SET (ESA,EPB,NA,NB,RAB,II) IF (NA.GT.NB) CALL SET (EPA,ESB,NA,NB,RAB,II) W=SQRT((SA*SB)**5)*(RAB**5)*0.0625D00 D=A(4)*(B(1)-B(3))-A(2)*(B(3)-B(5)) E=B(4)*(A(1)-A(3))-B(2)*(A(3)-A(5)) S(ISP,IPS,1)=W*RT3*(D+E) CALL SET (EPA,ESB,NA,NB,RAB,II) IF (NA.GT.NB) CALL SET (ESA,EPB,NA,NB,RAB,II) W=SQRT((SA*SB)**5)*(RAB**5)*0.0625D00 D=A(4)*(B(1)-B(3))-A(2)*(B(3)-B(5)) E=B(4)*(A(1)-A(3))-B(2)*(A(3)-A(5)) S(IPS,ISP,1)=-W*RT3*(E-D) CALL SET (EPA,EPB,NA,NB,RAB,II) W=SQRT((SA*SB)**5)*(RAB**5)*0.0625D00 S(2,2,1)=-W*(B(3)*(A(5)+A(1))-A(3)*(B(5)+B(1))) HD = .5D00 S(2,2,2)=HD*W*(A(5)*(B(1)-B(3))-B(5)*(A(1)-A(3)) 1-A(3)*B(1)+B(3)*A(1)) RETURN C C *** SECOND ROW - THIRD ROW OVERLAPS C 60 CALL SET (ESA,ESB,NA,NB,RAB,II) W=SQRT((SA**5)*(SB**7)/7.5D00)*(RAB**6)*0.03125D00 RT3 = 1.D00 / SQRT(3.D00) TD = 2.D00 S(1,1,1)=W*(A(6)*B(1)+A(5)*B(2)-TD*(A(4)*B(3)+ 1A(3)*B(4))+A(2)*B(5)+A( 21)*B(6))/3.D00 CALL SET (ESA,EPB,NA,NB,RAB,II) IF (NA.GT.NB) CALL SET (EPA,ESB,NA,NB,RAB,II) W=SQRT((SA**5)*(SB**7)/7.5D00)*(RAB**6)*0.03125D00 TD = 2.D00 S(ISP,IPS,1)=W*RT3*(A(6)*B(2)+A(5)*B(1)-TD*(A(4)*B(4)+A(3)*B(3)) 1+A(2)*B(6)+A(1)*B(5)) CALL SET (EPA,ESB,NA,NB,RAB,II) IF (NA.GT.NB) CALL SET (ESA,EPB,NA,NB,RAB,II) W=SQRT((SA**5)*SB**7/7.5D00)*(RAB**6)*0.03125D00 TD = 2.D00 S(IPS,ISP,1)=-W*RT3*(A(5)*(TD*B(3)-B(1))-B(5)*(TD*A(3)-A(1))-A(2 1)*(B(6)-TD*B(4))+B(2)*(A(6)-TD*A(4))) CALL SET (EPA,EPB,NA,NB,RAB,II) W=SQRT((SA**5)*SB**7/7.5D00)*(RAB**6)*0.03125D00 S(2,2,1)=-W*(B(4)*(A(1)+A(5))-A(4)*(B(1)+B(5)) 1+B(3)*(A(2)+A(6))-A(3)*(B(2)+B(6))) HD = .5D00 S(2,2,2)=HD*W*(A(6)*(B(1)-B(3))-B(6)*(A(1)- 1A(3))+A(5)*(B(2)-B(4))-B(5 2)*(A(2)-A(4))-A(4)*B(1)+B(4)*A(1)-A(3)*B(2)+B(3)*A(2)) RETURN C C *** THIRD ROW - THIRD ROW OVERLAPS C 70 CALL SET (ESA,ESB,NA,NB,RAB,II) W=SQRT((SA*SB*RAB*RAB)**7)/480.D00 RT3 = 1.D00 / SQRT(3.D00) S(1,1,1)=W*(A(7)*B(1)-3.D00*(A(5)*B(3)-A(3)*B(5))-A(1)*B(7))/3.D00 CALL SET (ESA,EPB,NA,NB,RAB,II) IF (NA.GT.NB) CALL SET (EPA,ESB,NA,NB,RAB,II) W=SQRT((SA*SB*RAB*RAB)**7)/480.D00 D=A(6)*(B(1)-B(3))-2.D00*A(4)*(B(3)-B(5))+A(2)*(B(5)-B(7)) E=B(6)*(A(1)-A(3))-2.D00*B(4)*(A(3)-A(5))+B(2)*(A(5)-A(7)) S(ISP,IPS,1)=W*RT3*(D-E) CALL SET (EPA,ESB,NA,NB,RAB,II) IF (NA.GT.NB) CALL SET (ESA,EPB,NA,NB,RAB,II) W=SQRT((SA*SB*RAB*RAB)**7)/480.D00 D=A(6)*(B(1)-B(3))-2.D00*A(4)*(B(3)-B(5))+A(2)*(B(5)-B(7)) E=B(6)*(A(1)-A(3))-2.D00*B(4)*(A(3)-A(5))+B(2)*(A(5)-A(7)) S(IPS,ISP,1)=-W*RT3*(-D-E) CALL SET (EPA,EPB,NA,NB,RAB,II) W=SQRT((SA*SB*RAB*RAB)**7)/480.D00 TD = 2.D00 S(2,2,1)=-W*(A(3)*(B(7)+TD*B(3))-A(5)*(B(1)+ 1TD*B(5))-B(5)*A(1)+A(7)*B(3)) HD = .5D00 S(2,2,2)=HD*W*(A(7)*(B(1)-B(3))+B(7)*(A(1)- 1A(3))+A(5)*(B(5)-B(3)-B(1) 2)+B(5)*(A(5)-A(3)-A(1))+2.D00*A(3)*B(3)) RETURN C END SUBROUTINE SET (S1,S2,NA,NB,RAB,II) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /SETC/ A(7),B(7),SA,SB,FACTOR,ISP,IPS C*********************************************************************** C C SET IS PART OF THE OVERLAP CALCULATION, CALLED BY OVERLP. C IT CALLS AINTGS AND BINTGS C C*********************************************************************** IF (NA.GT.NB) GO TO 10 ISP=1 IPS=2 SA=S1 SB=S2 GOTO 20 10 ISP=2 IPS=1 SA=S2 SB=S1 20 J=II+2 IF (II.GT.3) J=J-1 ALPHA=0.5D00*RAB*(SA+SB) BETA=0.5D00*RAB*(SB-SA) JCALL=J-1 CALL AINTGS (ALPHA,JCALL) CALL BINTGS (BETA,JCALL) RETURN C END SUBROUTINE AINTGS (X,K) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /SETC/ A(7),B(7),SDUM(3),IDUM(2) C*********************************************************************** C C AINTGS FORMS THE "A" INTEGRALS FOR THE OVERLAP CALCULATION. C C*********************************************************************** C=EXP(-X) A(1)=C/X DO 10 I=1,K A(I+1)=(A(I)*I+C)/X 10 CONTINUE RETURN C END SUBROUTINE BINTGS (X,K) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /SETC/ A(7),B(7),SDUM(3),IDUM(2) DIMENSION FACT(17) C********************************************************************** C C BINTGS FORMS THE "B" INTEGRALS FOR THE OVERLAP CALCULATION. C C********************************************************************** SAVE FACT DATA FACT/1.D0,2.D0,6.D0,24.D0,120.D0,720.D0,5040.D0,40320.D0, 1362880.D0,3628800.D0,39916800.D0,479001600.D0,6227020800.D0, 28.71782912D10,1.307674368D12,2.092278989D13,3.556874281D14/ IO=0 ABSX = ABS(X) IF (ABSX.GT.3.D00) GO TO 40 IF (ABSX.LE.2.D00) GO TO 10 IF (K.LE.10) GO TO 40 LAST=15 GO TO 60 10 IF (ABSX.LE.1.D00) GO TO 20 IF (K.LE.7) GO TO 40 LAST=12 GO TO 60 20 IF (ABSX.LE.0.5D00) GO TO 30 IF (K.LE.5) GO TO 40 LAST=7 GO TO 60 30 IF (ABSX.LE.1.D-6) GOTO 90 LAST=6 GO TO 60 40 EXPX=EXP(X) EXPMX=1.D00/EXPX B(1)=(EXPX-EXPMX)/X DO 50 I=1,K 50 B(I+1)=(I*B(I)+(-1.D00)**I*EXPX-EXPMX)/X GO TO 110 60 DO 80 I=IO,K Y=0.0D00 DO 70 M=IO,LAST XF=1.0D00 IF(M.NE.0) XF=FACT(M) 70 Y=Y+(-X)**M*(2*MOD(M+I+1,2))/(XF*(M+I+1)) 80 B(I+1)=Y GO TO 110 90 DO 100 I=IO,K 100 B(I+1)=(2*MOD(I+1,2))/(I+1.D0) 110 CONTINUE RETURN C END mopac7-1.15/fortran/symtrz.f_ALT20000644000175000017500000015401411053302063013521 00000000000000C C C SUBROUTINE SYMTRZ (COORD,C,NORB,NMOS,FLAG,FLAG2) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C************************************************************** C * C DETERMINE POINT GROUP & SYMMETRIZE ORBITALS * C * C************************************************************** INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) C --------------------------------------------------------------- COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, 2 FRACT COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB COMMON/VECTOR/CDUM(MORB2),EIGS(MAXORB),CBDUM(MORB2),EIGB(MAXORB) COMMON /S00002/ NUNUM,NONORB,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON/S00004/SHIFT(3),R(3,3),VECT(2,MXDIM) CHARACTER*4 NAME, NAMO, NAM, ISTA LOGICAL FLAG,FLAG2 DIMENSION RSAV(3,3),COTIM(3,NUMATM) DIMENSION V1(MAXORB),V2(MAXORB),V3(MAXORB),V4(MAXORB) DIMENSION COORD(3,NUMATM),C(MAXORB,MAXORB) DIMENSION IOPSYM(7),IMAGE(NUMATM,7) DATA IOPSYM /1,1,1,1,1,1,1/ NUNUM = NUMAT NONORB = NORBS DO K=1,3 DO L=1,NUMAT COTIM(K,L)=COORD(K,L) ENDDO ENDDO DO I=1,3 DO J=1,3 RSAV(I,J)=R(I,J) ENDDO ENDDO NAM=NAME CALL SYMAN1(NUMAT,2,COORD,NAT,1,MAXORB) IF(FLAG2) CALL SYMAN2(NORBS,NORBS,C,0,1,MAXORB) DO I=1,3 DO J=1,3 R(I,J)=RSAV(I,J) ENDDO ENDDO DO K=1,3 DO L=1,numat COORD(K,L)=COTIM(K,L) ENDDO ENDDO RETURN END C C================================================================ C SUBROUTINE SYMAN1(NUM1,NUM2,ARRAY,LINEAR,JUMP,idim) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C*************************************************************** C * C SYMMETRY PACKAGE FROM UMNDO PROGRAM OF PETER BISCHOF * C WAS REWRITTEN BY DAVID DANOVICH FOR MOPAC SYSTEM * C * C*************************************************************** INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) DIMENSION LINEAR(NUMATM),NUSS(MXDIM),ICOUNT(12),ARRAY(3,NUMATM) COMMON /S00001/T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00020/ NIMM(2,MXDIM),NOCC(2) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) CHARACTER*4 IFRA, NAME, ISTA, NAMO, NIMM COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB DATA IFRA / '????' / WRITE(6,'('' == symtrz.f SYMAN1 =='')') IF(NUM1.LT.2) GOTO 12 IF(NUM2.LT.2) GOTO 12 IF(NUM1.GT.MXDIM) GOTO 12 C ** MOLECULAR SYMMETRY 1 IERROR=0 LCALL=0 IVIB=0 NBASE=0 NUMAT=NUM1 NAME=IFRA ISTA(1)=' ' ISTA(2)=IFRA DO 2 I=1,MXDIM 2 NAMO(I)=IFRA CALL R00001(LINEAR,ARRAY) IF(IERROR.LT.1) CALL R00009(LINEAR,ARRAY) IF(IERROR.LT.1) CALL R00016 DO 3 I=1,NUMAT 3 INDEX(I)=LINEAR(I) RETURN 12 IERROR=1 WRITE(6,600)NUM1,NUM2 RETURN 600 FORMAT(' ILLEGAL SYMA - ARGUMENTS: NUM1 = ',I10,' NUM2 = ',I10) END C C====================================================================== C SUBROUTINE SYMAN2(NUM1,NUM2,ARRAY,LINEAR,JUMP,idim) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) DIMENSION NUSS(MXDIM),ICOUNT(12),array(num1,num1) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00020/ NIMM(2,MXDIM),NOCC(2) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) CHARACTER*4 IFRA, NAME, ISTA, NAMO, NIMM COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB DATA IFRA / '????' / WRITE(6,'('' == symtrz.f SYMAN2 =='')') IF(NUM1.LT.2) GOTO 12 IF(NUM2.LT.2) GOTO 12 IF(NUM1.GT.MXDIM) GOTO 12 C ** ORBITAL SYMMETRY IF(IERROR.GT.0) THEN RETURN ENDIF LCALL=0 IF(LINEAR.GT.0) GOTO 6 IF(LCALL.GT.0) GOTO 8 KORB=0 NQZ=1 DO 5 I=1,NUMAT JJ=1 IF(INDEX(I).GT.1) JJ=4 DO 5 J=1,JJ KORB=KORB+1 NUSS(KORB)=100*I+10*NQZ+J-1 5 CONTINUE GOTO 8 6 DO 7 I=1,NUM1 7 NUSS(I)=LINEAR 8 NORBS=NUM1 NCDIM=NUM2 NCDUM=NUM2 CALL R00010(ARRAY,NUSS,ICOUNT,num1) IF(IERROR.GT.0) RETURN NBASE=0 DO 9 I=1,I1 IF(ICOUNT(I).LT.1) GOTO 9 NBASE=NBASE+1 IBASE(1,NBASE)=ICOUNT(I) IBASE(2,NBASE)=JX(1,I) 9 CONTINUE LCALL=LCALL+1 IF(LCALL.GT.2) LCALL=1 DO 10 I=1,NORBS NIMM(LCALL,I)=NAMO(I) 10 NIMM(2,I)=NAMO(I) RETURN 12 IERROR=1 WRITE(6,600)NUM1,NUM2 RETURN 600 FORMAT(' ILLEGAL SYMA - ARGUMENTS: NUM1 = ',I10,' NUM2 = ',I10) END C C========================================================================== C SUBROUTINE R00001(NAT,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,NAMO,ISTA COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) COMMON /ATMASS/ ATMASS(NUMATM) LOGICAL PLANAR,LINEAR,CUBIC,AXIS DIMENSION NAT(NUMATM),COORD(3,NUMATM),F(6),EW(3),HELP(3) DIMENSION RHELP(3,3) DIMENSION ICYC(6) DATA TOLER,BIG/ 0.1D0,1.D35 / WRITE(6,'('' == symtrz.f R00001 =='')') DO 2 I=1,3 DO 1 J=1,3 1 CUB(I,J)=0.D0 2 CUB(I,I)=1.D0 DO 3 I=1,20 CALL R00006(I,I) 3 IELEM(I)=0 DO 4 I=1,3 4 SHIFT(I)=0.D0 WMOL=0.D0 DO 5 I=1,NUMAT WMOL=WMOL+ATMASS(I) DO 5 K=1,3 5 SHIFT(K)=SHIFT(K)+ATMASS(I)*COORD(K,I) IJ=0 DO 7 I=1,3 SHIFT(I)=SHIFT(I)/WMOL DO 6 K=1,NUMAT 6 COORD(I,K)=COORD(I,K)-SHIFT(I) DO 7 J=1,I IJ=IJ+1 F(IJ)=0.D0 DO 7 K=1,NUMAT TERM=ATMASS(K)*COORD(I,K)*COORD(J,K) 7 F(IJ)=F(IJ)+TERM TRANS=25.98160821D0 + 2.97975D0*DLOG(WMOL) CALL R00015(F,R,EW) R(1,3)=R(2,1)*R(3,2)-R(3,1)*R(2,2) R(2,3)=R(3,1)*R(1,2)-R(1,1)*R(3,2) R(3,3)=R(1,1)*R(2,2)-R(2,1)*R(1,2) PLANAR=(EW(1).LT.TOLER) LINEAR=(EW(2).LT.TOLER) CUBIC=((EW(3)-EW(1)).LT.TOLER) IF(.NOT.LINEAR) GOTO 8 CALL R00005(COORD,1) IELEM(20)=1 GOTO 22 8 IF(CUBIC.OR.((EW(3)-EW(2)).GT.TOLER)) GOTO 10 DO 9 I=1,3 BUFF=-R(I,1) R(I,1)=R(I,3) 9 R(I,3)=BUFF BUFF=EW(1) EW(1)=EW(3) EW(3)=BUFF 10 AXIS=(ABS(EW(1)-EW(2)).LT.TOLER) CALL R00005(COORD,1) IF(CUBIC) CALL R00003(NAT,COORD,1) IF(.NOT.AXIS) GOTO 16 ITURN=7 DO 11 I=8,18 CALL R00007(NAT,COORD,I) IF((IELEM(I).EQ.1).AND.(I.LT.14)) ITURN=I 11 CONTINUE ITURN=ITURN-5 DO 13 I=1,NUMAT DIST=COORD(1,I)**2+COORD(2,I)**2 IF(DIST.LT.TOLER) GOTO 13 BUFF1=BIG JNDEX=0 IPLUS=I+1 DO 12 J=IPLUS,NUMAT BUFF=COORD(1,J)**2+COORD(2,J)**2 IF(ABS(BUFF-DIST).GT.TOLER) GOTO 12 BUFF=(COORD(1,I)-COORD(1,J))**2+(COORD(2,I)-COORD(2,J))**2 IF(BUFF.GT.BUFF1) GOTO 12 JNDEX=J BUFF1=BUFF 12 CONTINUE GOTO 14 13 CONTINUE 14 IF(JNDEX.LT.1) IERROR=1 IF(IERROR.GT.0) GOTO 25 HELP(1)=COORD(1,I)+COORD(1,JNDEX) HELP(2)=COORD(2,I)+COORD(2,JNDEX) DIST=SQRT(HELP(1)**2+HELP(2)**2) SINA=HELP(2)/DIST COSA=HELP(1)/DIST CALL R00002(COORD,SINA,COSA,1,2) CALL R00007(NAT,COORD,5) IF(IELEM(5).EQ.1) GOTO 16 CALL R00007(NAT,COORD,1) IF(IELEM(1).EQ.0) GOTO 16 DIST=1.5707963268D0/FLOAT(ITURN) SINA=SIN(DIST) COSA=COS(DIST) ICHECK=0 15 CALL R00002(COORD,SINA,COSA,1,2) IF(ICHECK.GT.0) GOTO 16 CALL R00007(NAT,COORD,5) IF(IELEM(5).GT.0) GOTO 16 ICHECK=1 SINA=-SINA GOTO 15 16 IF(CUBIC) CALL R00003(NAT,COORD,2) IF(AXIS) GOTO 22 DO 17 I=1,6 CALL R00007(NAT,COORD,I) 17 ICYC(I)=(1+IQUAL)*IELEM(I) NAXES=IELEM(1)+IELEM(2)+IELEM(3) IF(NAXES.GT.1) GOTO 18 IZ=1 IF(IELEM(1).EQ.1) GOTO 19 IZ=2 IF(IELEM(2).EQ.1) GOTO 19 IZ=3 IF(IELEM(3).EQ.1) GOTO 19 IF(ICYC(5).GT.ICYC(4)) IZ=2 IF(ICYC(6).GT.ICYC(7-IZ)) IZ=1 GOTO 19 18 IZ=1 IF(ICYC(2).GT.ICYC(1)) IZ=2 IF(ICYC(3).GT.ICYC(IZ)) IZ=3 19 ICYC(7-IZ)=-1 IX=1 IF(ICYC(5).GT.ICYC(6)) IX=2 IF(ICYC(4).GT.ICYC(7-IX)) IX=3 IY=6-IX-IZ DO 20 I=1,3 RHELP(I,1)=R(I,IX) 20 RHELP(I,2)=R(I,IY) RHELP(1,3)=R(2,IX)*R(3,IY)-R(3,IX)*R(2,IY) RHELP(2,3)=R(3,IX)*R(1,IY)-R(1,IX)*R(3,IY) RHELP(3,3)=R(1,IX)*R(2,IY)-R(2,IX)*R(1,IY) CALL R00005(COORD,-1) DO 21 I=1,3 DO 21 J=1,3 21 R(I,J)=RHELP(I,J) CALL R00005(COORD,1) 22 DO 23 I=1,7 CALL R00007(NAT,COORD,I) 23 CONTINUE NCODE=0 J=1 DO 24 I=1,20 NCODE=NCODE+IELEM(I)*J 24 J=2*J 25 CALL R00005(COORD,-1) TOTAL=EW(1)+EW(2)+EW(3) DO 26 I=1,3 EW(I)=TOTAL-EW(I) DO 26 J=1,NUMAT 26 COORD(I,J)=COORD(I,J)+SHIFT(I) JGROUP = 0 CALL R00008(JGROUP,NCODE) IF(JGROUP.LT.1) IERROR=2 TOTAL=EW(1)*EW(2)*EW(3)/(SIG*SIG) IF(LINEAR) RTR= 6.970686D0 + 1.9865D0*DLOG(EW(1)/SIG) IF(.NOT.LINEAR) RTR=11.592852D0 + 0.98325D0*DLOG(TOTAL) RETURN END C C================================================================== C SUBROUTINE R00002(COORD,SINA,COSA,I,J) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM) WRITE(6,'('' == symtrz.f R00002 =='')') CALL R00005(COORD,-1) DO 1 K=1,3 BUFF=-SINA*R(K,I)+COSA*R(K,J) R(K,I)=COSA*R(K,I)+SINA*R(K,J) 1 R(K,J)=BUFF CALL R00005(COORD,1) RETURN END C C==================================================================== C SUBROUTINE R00003(NAT,COORD,JUMP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM),NAT(NUMATM),WINK(2) DATA BIG,TOLER / 1.D35,0.1/ DATA WINK(1),WINK(2)/ 0.955316618125D0, 0.6523581398D0 / WRITE(6,'('' == symtrz.f R00003 =='')') GOTO (1,5),JUMP 1 IELEM(19)=1 INDEX=0 XMIN=BIG DO 2 I=1,NUMAT DIST=COORD(1,I)**2+COORD(2,I)**2+COORD(3,I)**2 IF(DIST.LT.TOLER) GOTO 2 IF(DIST.GT.XMIN) GOTO 2 INDEX=I XMIN=DIST 2 CONTINUE DIST=SQRT(XMIN) CALL R00005(COORD,-1) R(1,3)=COORD(1,INDEX)/DIST R(2,3)=COORD(2,INDEX)/DIST R(3,3)=COORD(3,INDEX)/DIST BUFF=SQRT(R(1,3)**2+R(2,3)**2) BUFF1=SQRT(R(1,3)**2+R(3,3)**2) IF(BUFF.GT.BUFF1) GOTO 3 R(1,1)= R(3,3)/BUFF1 R(2,1)=0.D0 R(3,1)=-R(1,3)/BUFF1 GOTO 4 3 R(1,1)= R(2,3)/BUFF R(2,1)=-R(1,3)/BUFF R(3,1)=0.D0 4 R(1,2)= R(2,3)*R(3,1)-R(2,1)*R(3,3) R(2,2)= R(3,3)*R(1,1)-R(3,1)*R(1,3) R(3,2)= R(1,3)*R(2,1)-R(1,1)*R(2,3) CALL R00005(COORD,1) RETURN 5 WINK2=0.D0 IF(IELEM(8).LT.1) GOTO 8 DO 6 I=1,2 JOTA=18-4*I WINK2=WINK(I) SINA=SIN(WINK2) COSA=COS(WINK2) CALL R00002(COORD,SINA,COSA,1,3) CALL R00007(NAT,COORD,JOTA) IF(IELEM(JOTA).GT.0) GOTO 7 WINK2=-WINK2 SINB=SIN(2.D0*WINK2) COSB=COS(2.D0*WINK2) CALL R00002(COORD,SINB,COSB,1,3) CALL R00007(NAT,COORD,JOTA) IF(IELEM(JOTA).GT.0) GOTO 7 CALL R00002(COORD,SINA,COSA,1,3) 6 CONTINUE 7 CALL R00007(NAT,COORD,9) IF(IELEM(10).GT.0) CALL R00007(NAT,COORD,17) GOTO 10 8 WINK2=-WINK(1) IF(IELEM(10).GT.0) WINK2=-WINK(2) SINA=-SIN(WINK2) COSA=COS(WINK2) CALL R00002(COORD,SINA,COSA,1,3) CALL R00007(NAT,COORD,8) CALL R00002(COORD,-SINA,COSA,1,3) IF(IELEM(8).GT.0) GOTO 10 IF(IELEM(9).GT.0) GOTO 9 WINK2=-WINK2 GOTO 10 9 CALL R00002(COORD,0.707106781186D0,0.707106781186D0,1,2) 10 CUB(1,1)=COS(WINK2) CUB(3,3)=CUB(1,1) CUB(1,3)=SIN(WINK2) CUB(3,1)=-CUB(1,3) CALL R00004(CUB,8) CALL R00004(CUB,15) CALL R00007(NAT,COORD,8) CALL R00007(NAT,COORD,15) RETURN END C C===================================================================== C SUBROUTINE R00004(FMAT,IPLACE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DIMENSION HELP(3,3),FMAT(3,3) WRITE(6,'('' == symtrz.f R00004 =='')') DO 1 I=1,3 DO 1 J=1,3 HELP(I,J)=0.D0 DO 1 K=1,3 DO 1 L=1,3 1 HELP(I,J)=HELP(I,J)+FMAT(I,L)*FMAT(J,K)*ELEM(L,K,IPLACE) DO 2 I=1,3 DO 2 J=1,3 2 ELEM(I,J,IPLACE)=HELP(I,J) RETURN END C C========================================================================== C SUBROUTINE R00005(COORD,JUMP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM),HELP(3) WRITE(6,'('' == symtrz.f R00005 =='')') IF(JUMP.LT.0) GOTO 3 DO 2 I=1,NUMAT DO 1 J=1,3 1 HELP(J)=COORD(J,I) DO 2 J=1,3 COORD(J,I)=0.D0 DO 2 K=1,3 2 COORD(J,I)=COORD(J,I)+R(K,J)*HELP(K) RETURN 3 DO 5 I=1,NUMAT DO 4 J=1,3 4 HELP(J)=COORD(J,I) DO 5 J=1,3 COORD(J,I)=0.D0 DO 5 K=1,3 5 COORD(J,I)=COORD(J,I)+R(J,K)*HELP(K) RETURN END C C======================================================================== C SUBROUTINE R00006(IOPER,IPLACE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DIMENSION J(3,20) DATA J(1, 1),J(2, 1),J(3, 1) / 1 , -1 , -1 / DATA J(1, 2),J(2, 2),J(3, 2) / -1 , 1 , -1 / DATA J(1, 3),J(2, 3),J(3, 3) / -1 , -1 , 1 / DATA J(1, 4),J(2, 4),J(3, 4) / 1 , 1 , -1 / DATA J(1, 5),J(2, 5),J(3, 5) / 1 , -1 , 1 / DATA J(1, 6),J(2, 6),J(3, 6) / -1 , 1 , 1 / DATA J(1, 7),J(2, 7),J(3, 7) / -1 , -1 , -1 / DATA J(1, 8),J(2, 8),J(3, 8) / 3 , 0 , 1 / DATA J(1, 9),J(2, 9),J(3, 9) / 4 , 0 , 1 / DATA J(1,10),J(2,10),J(3,10) / 5 , 0 , 1 / DATA J(1,11),J(2,11),J(3,11) / 6 , 0 , 1 / DATA J(1,12),J(2,12),J(3,12) / 7 , 0 , 1 / DATA J(1,13),J(2,13),J(3,13) / 8 , 0 , 1 / DATA J(1,14),J(2,14),J(3,14) / 4 , 0 , -1 / DATA J(1,15),J(2,15),J(3,15) / 6 , 0 , -1 / DATA J(1,16),J(2,16),J(3,16) / 8 , 0 , -1 / DATA J(1,17),J(2,17),J(3,17) / 10 , 0 , -1 / DATA J(1,18),J(2,18),J(3,18) / 12 , 0 , -1 / DATA J(1,19),J(2,19),J(3,19) / 5 , 0 , -1 / DATA J(1,20),J(2,20),J(3,20) / 0 , 0 , -1 / DATA TWOPI / 6.283185308D0 / WRITE(6,'('' == symtrz.f R00006 =='')') DO 2 I=1,3 DO 1 K=1,3 1 ELEM(I,K,IPLACE)=0. 2 ELEM(I,I,IPLACE)=J(I,IOPER) IF(IOPER.EQ.20) GOTO 4 IF(J(1,IOPER).LT.2) GOTO 3 ANGLE=TWOPI/FLOAT(J(1,IOPER)) ELEM(1,1,IPLACE)=COS(ANGLE) ELEM(2,2,IPLACE)=ELEM(1,1,IPLACE) ELEM(2,1,IPLACE)=SIN(ANGLE) ELEM(1,2,IPLACE)=-ELEM(2,1,IPLACE) 3 IF((IOPER.EQ.8).OR.(IOPER.EQ.15)) CALL R00004(CUB,IPLACE) RETURN 4 ELEM(1,2,IPLACE)=1.D0 ELEM(2,1,IPLACE)=1.D0 RETURN END C C====================================================================== C SUBROUTINE R00007(NAT,COORD,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION NAT(NUMATM),COORD(3,NUMATM),HELP(3),E(3,3) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DATA TOLER / 0.01 D0/ WRITE(6,'('' == symtrz.f R00007 =='')') IRESUL=1 IQUAL=0 DO 2 I=1,NUMAT HELP(1)=COORD(1,I)*ELEM(1,1,IOPER)+COORD(2,I)*ELEM(1,2,IOPER) . +COORD(3,I)*ELEM(1,3,IOPER) HELP(2)=COORD(1,I)*ELEM(2,1,IOPER)+COORD(2,I)*ELEM(2,2,IOPER) . +COORD(3,I)*ELEM(2,3,IOPER) HELP(3)=COORD(1,I)*ELEM(3,1,IOPER)+COORD(2,I)*ELEM(3,2,IOPER) . +COORD(3,I)*ELEM(3,3,IOPER) DO 1 J=1,NUMAT IF(NAT(I).NE.NAT(J)) GOTO 1 IF(ABS(COORD(1,J)-HELP(1)).GT.TOLER) GOTO 1 IF(ABS(COORD(2,J)-HELP(2)).GT.TOLER) GOTO 1 IF(ABS(COORD(3,J)-HELP(3)).GT.TOLER) GOTO 1 JELEM(IOPER,I)=J IF(I.EQ.J) IQUAL=IQUAL+1 GOTO 2 1 CONTINUE IRESUL=0 2 CONTINUE IELEM(IOPER)=IRESUL RETURN END C C===================================================================== C SUBROUTINE R00008(IGROUP,NCODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) INTEGER C1(3),CS(7),CI(7),C2(7),C3(9),C4(16),C5(19),C6(29), . C7(33),C8(46),D2(21),D3(13),D4(31),D5(21),D6(43), . C2V(21),C3V(13),C4V(31),C5V(21),C6V(43), . C2H(21),C3H(29),C4H(55),C5H(67),C6H(105), . D2H(73),D3H(43),D4H(111),D5H(73),D6H(157), . D2D(31),D3D(43),D4D(57),D5D(73),D6D(91), . S4(16),S6(29),S8(46), . TD(31),OH(111),IH(111),CV(10),DH(25) DIMENSION J(43),JTAB(1844),ISIGMA(43) EQUIVALENCE (JTAB( 1),C1(1)),(JTAB( 4),CS(1)) EQUIVALENCE (JTAB( 11),CI(1)),(JTAB( 18),C2(1)) EQUIVALENCE (JTAB( 25),C3(1)),(JTAB( 34),C4(1)) EQUIVALENCE (JTAB( 50),C5(1)),(JTAB( 69),C6(1)) EQUIVALENCE (JTAB( 98),C7(1)),(JTAB( 131),C8(1)) EQUIVALENCE (JTAB( 177),D2(1)),(JTAB( 198),D3(1)) EQUIVALENCE (JTAB( 211),D4(1)),(JTAB( 242),D5(1)) EQUIVALENCE (JTAB( 263),D6(1)),(JTAB( 306),C2V(1)) EQUIVALENCE (JTAB( 327),C3V(1)),(JTAB( 340),C4V(1)) EQUIVALENCE (JTAB( 371),C5V(1)),(JTAB( 392),C6V(1)) EQUIVALENCE (JTAB( 435),C2H(1)),(JTAB( 456),C3H(1)) EQUIVALENCE (JTAB( 485),C4H(1)),(JTAB( 540),C5H(1)) EQUIVALENCE (JTAB( 607),C6H(1)),(JTAB( 712),D2H(1)) EQUIVALENCE (JTAB( 785),D3H(1)),(JTAB( 828),D4H(1)) EQUIVALENCE (JTAB( 939),D5H(1)),(JTAB(1012),D6H(1)) EQUIVALENCE (JTAB(1169),D2D(1)),(JTAB(1200),D3D(1)) EQUIVALENCE (JTAB(1243),D4D(1)),(JTAB(1300),D5D(1)) EQUIVALENCE (JTAB(1373),D6D(1)),(JTAB(1464),S4(1)) EQUIVALENCE (JTAB(1480),S6(1)),(JTAB(1509),S8(1)) EQUIVALENCE (JTAB(1555),TD(1)),(JTAB(1586),OH(1)) EQUIVALENCE (JTAB(1697),IH(1)) EQUIVALENCE (JTAB(1808),CV(1)),(JTAB(1818),DH(1)) DATA J( 1),J( 2),J( 3),J( 4)/ 1010001, 2020004, 2020011, 2020018 / DATA J( 5),J( 6),J( 7),J( 8)/ 3020025, 4030034, 5030050, 6040069 / DATA J( 9),J(10),J(11),J(12)/ 7040098, 8050131, 4040177, 3030198 / DATA J(13),J(14),J(15),J(16)/ 5050211, 4040242, 6060263, 4040306 / DATA J(17),J(18),J(19),J(20)/ 3030327, 5050340, 4040371, 6060392 / DATA J(21),J(22),J(23),J(24)/ 4040435, 6040456, 8060485,10060540 / DATA J(25),J(26),J(27),J(28)/12080607, 8080712, 6060785,10100828 / DATA J(29),J(30),J(31),J(32)/ 8080939,12121012, 5051169, 6061200 / DATA J(33),J(34),J(35),J(36)/ 7071243, 8081300, 9091373, 4031464 / DATA J(37),J(38),J(39),J(40)/ 6041480, 8051509, 5051555,10101586 / DATA J(41),J(42),J(43) /10101697, 2031808, 3061818 / DATA ISIGMA / 1,1,1,2,3,4,5,6,7,8,4,6,8,10,12,2,3,4,5,6,2,3,4,5,6, . 4,6,8,10,12,4,6,8,10,12,2,3,4,12,24,60,1,2 / DATA C1 ./ 2HC1, .4HA , 0 / DATA CS ./ 2HCS, .4HA , 8 , 20104 , .4HA , 1 , -1 / DATA CI ./ 2HCI, .4HAG , 64 , 10107 , .4HAU , 1 , -1 / DATA C2 ./ 2HC2, .4HA , 4 , 2140103 , .4HB , 1 , -1 / DATA C3 ./ 2HC3, .4HA , 128 , 3140108 , 3240122 , .4HE , 2 , -1 , -1 / DATA C4 ./ 2HC4, .4HA , 260 ,4140109 ,2140103 ,4340123 , .4HB , 1 , -1 , 1 , -1 , .4HE , 2 , 0 , -2 , 0 / DATA C5 ./ 2HC5, .2HA , 512 , 5140110 , 5240122 , 5340123 ,5440124, .2HE1 , 2 , 51 , 52 , 52 , 51 , .2HE2 , 2 , 52 , 51 , 51 , 52 / DATA C6 ./ 2HC6, .2HA , 1156 ,6140111 ,3140108 ,2140103 ,3240133 ,6540125 , .2HB , 1 , -1 , 1 , -1 , 1 , -1 , .2HE1 , 2 , 1 , -1 , -2 , -1 , 1 , .2HE2 , 2 , -1 , -1 , 2 , -1 , -1 / DATA C7 ./ 2HC7, .2HA ,2048,7140112,7240122,7340123,7440124,7540125,7640126, .2HE1 , 2 , 71 , 72 , 73 , 73 , 72 , 71 , .2HE2 , 2 , 72 , 73 , 71 , 71 , 73 , 72 , .2HE3 , 2 , 73 , 71 , 72 , 72 , 71 , 73 / DATA C8 ./ 2HC8, .2HA ,4356,8140113,4140109,2140103,4340134,8340123,8540124,8740125, .2HB , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , .2HE1 , 2 , 81 , 0 , -2 , 0 , 83 , 83 , 81 , .2HE2 , 2 , 0 , -2 , 2 , -2 , 0 , 0 , 0 , .2HE3 , 2 , 83 , 0 , -2 , 0 , 81 , 81 , 83 / DATA D2 ./ 2HD2, .4HA , 7 ,2140103 ,2140102 ,2140101 , .4HB1 , 1 , 1 , -1 , -1 , .4HB2 , 1 , -1 , 1 , -1 , .4HB3 , 1 , -1 , -1 , 1 / DATA D3 ./ 2HD3, .4HA1 , 129 , 3140208 , 2140301 , .4HA2 , 1 , 1 , -1 , .4HE , 2 , -1 , 0 / DATA D4 ./ 2HD4, .2HA1 , 263 , 4140209 , 2140103 ,2140201 ,2140220 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA D5 ./ 2HD5, .4HA1 , 513 ,5140210 ,5240222 , 2140501 , .4HA2 , 1 , 1 , 1 , -1 , .4HE1 , 2 , 51 , 52 , 0 , .4HE2 , 2 , 52 , 51 , 0 / DATA D6 ./ 2HD6, .2HA1 , 1159 ,6140211 ,3140208 ,2140103 ,2140301 ,2140302 , .2HA2 , 1 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , -1 , 1 , .2HE1 , 2 , 1 , -1 , -2 , 0 , 0 , .2HE2 , 2 , -1 , -1 , 2 , 0 , 0 / DATA C2V ./ 3HC2V, .4HA1 , 52 ,2140103 , 20105 , 20106 , .4HA2 , 1 , 1 , -1 , -1 , .4HB1 , 1 , -1 , 1 , -1 , .4HB2 , 1 , -1 , -1 , 1 / DATA C3V ./ 3HC3V, .4HA1 , 144 ,3140208 , 20305 , .4HA2 , 1 , 1 , -1 , .4HE , 2 , -1 , 0 / DATA C4V ./ 3HC4V, .2HA1 , 308 ,4140209 ,2140103 , 20205 ,20224 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA C5V ./ 3HC5V, .4HA1 , 528 , 5140210 , 5240222 , 20505 , .4HA2 , 1 , 1 , 1 , -1 , .4HE1 , 2 , 51 , 52 , 0 , .4HE2 , 2 , 52 , 51 , 0 / DATA C6V ./ 3HC6V, .2HA1 , 1204 , 6140211, 3140208,2140103 , 20305 , 20306 , .2HA2 , 1 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , -1 , 1 , .2HE1 , 2 , 1 , -1 , -2 , 0 , 0 , .2HE2 , 2 , -1 , -1 , 2 , 0 , 0 / DATA C2H ./ 3HC2H, .4HAG , 76 ,2140103 , 10107 , 20104 , .4HBG , 1 , -1 , 1 , -1 , .4HAU , 1 , 1 , -1 , -1 , .4HBU , 1 , -1 , -1 , 1 / DATA C3H ./ 3HC3H, .2HA , 136 , 3140108, 3240122, 20104, 3130124,3530143 , .2HE , 2 , -1 , -1 , 2 , -1 , -1 , .2HA , 1 , 1 , 1 , -1 , -1 , -1 , .2HE , 2 , -1 , -1 , -2 , 1 , 1 / DATA C4H ./ 3HC4H, .2HAG ,8524,4140109,2140103,4340123,10107,4330152,20104,4130114, .2HBG , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HEG , 2 , 0 , -2 , 0 , 2 , 0 , -2 , 0 , .2HAU , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .2HBU , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , .2HEU , 2 , 0 , -2 , 0 , -2 , 0 , 2 , 0 / DATA C5H ./ 3HC5H, .2HA ,520,5140110,5240122,5340123,5440124,20104,5130119,5730163, . 5330164,5930165, .3HE1 , 2 , 51 , 52 ,52 , 51 , 2 , 51 , 52 , 52 , 51 , .3HE2 , 2 , 52 , 51 ,51 , 52 , 2 , 52 , 51 , 51 , 52 , .2HA , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HE1 , 2 , 51 , 52 ,52 , 51 , -2 ,103 ,101 ,101 ,103 , .3HE2 , 2 , 52 , 51 ,51 , 52 , -2 ,101 ,103 ,103 ,101 / DATA C6H ./ 3HC6H, .2HAG ,17612,6140111,3140108,2140103,3240133,6540125,10107,20104, . 3530127,6530137,6130115,3130183, .3HBG , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , .3HE1G, 2 , 1 , -1 , -2 , -1 , 1 , 2 , -2 , 1 , -1 , -1 , 1 , .3HE2G, 2 , -1 , -1 , 2 , -1 , -1 , 2 , 2 , -1 , -1 , -1 , -1 , .3HAU , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , .3HBU , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , .3HE1U, 2 , 1 , -1 , -2 , -1 , 1 , -2 , 2 , -1 , 1 , 1 , -1 , .3HE2U, 2 , -1 , -1 , 2 , -1 , -1 , -2 , -2 , 1 , 1 , 1 , 1 / DATA D2H ./ 3HD2H, .2HAG, 127,2140103,2140102,2140101, 10107, 20104,20105,20106, .3HB1G, 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1, .3HB2G, 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1, .3HB3G, 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1, .3HAU , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1, .3HB1U, 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1, .3HB2U, 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1, .3HB3U, 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1/ DATA D3H ./ 3HD3H, .3HA1 , 153 ,3140208 ,2140301 , 20104 ,3130224 , 20305 , .3HA2 , 1 , 1 , -1 , 1 , 1 , -1 , .3HE , 2 , -1 , 0 , 2 , -1 , 0 , .3HA1 , 1 , 1 , 1 , -1 , -1 , -1 , .3HA2 , 1 , 1 , -1 , -1 , -1 , 1 , .3HE , 2 , -1 , 0 , -2 , 1 , 0 / DATA D4H ./ 3HD4H, .3HA1G ,8575,4140209,2140103,2140201,2140220,10107,4130214,20104, . 20205,20229, .3HA2G , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , .3HB1G , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , .3HB2G , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , .3HEG , 2 , 0 , -2 , 0 , 0 , 2 , 0 , -2 , 0 , 0 , .3HA1U , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , .3HB1U , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , .3HB2U , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , .3HEU , 2 , 0 , -2 , 0 , 0 , -2 , 0 , 2 , 0 , 0 / DATA D5H ./ 3HD5H, .3HA1 ,537, 5140210, 5240222,2140501,20104,5130219, 5330263,20505, .3HA2 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , .3HE1 , 2 , 51 , 52 , 0 , 2 , 51 , 52 , 0 , .3HE2 , 2 , 52 , 51 , 0 , 2 , 52 , 51 , 0 , .3HA1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .3HA2 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , .3HE1 , 2 , 51 , 52 , 0 , -2 , 103 , 101 , 0 , .3HE2 , 2 , 52 , 51 , 0 , -2 , 101 , 103 , 0 / DATA D6H ./ 3HD6H, .3HA1G ,17663,6140211,3140208,2140103,2140301,2140302,10107,20104, . 6130215,3130238,20306,20305, .3HA2G , 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, .3HB1G , 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, .3HB2G , 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, .3HE1G , 2, 1, -1, -2, 0, 0, 2, -2, -1, 1, 0, 0, .3HE2G , 2, -1, -1, 2, 0, 0, 2, 2, -1, -1, 0, 0, .3HA1U , 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, .3HA2U , 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, .3HB1U , 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, .3HB2U , 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, .3HE1U , 2, 1, -1, -2, 0, 0, -2, 2, 1, -1, 0, 0, .3HE2U , 2, -1, -1, 2, 0, 0, -2, -2, 1, 1, 0, 0/ DATA D2D ./ 3HD2D, .2HA1 , 8244 ,4130214 , 2140103 ,2140220 ,20205 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA D3D ./ 3HD3D, .3HA1G,16594 ,3140208 ,2140302 , 10107 ,6130215 , 20305 , .3HA2G, 1 , 1 , -1 , 1 , 1 , -1 , .3HEG , 2 , -1 , 0 , 2 , -1 , 0 , .3HA1U, 1 , 1 , 1 , -1 , -1 , -1 , .3HA2U, 1 , 1 , -1 , -1 , -1 , 1 , .3HEU , 2 , -1 , 0 , -2 , 1 , 0 / DATA D4D ./ 3HD4D, .3HA1 ,33076,8130216 ,4140209, 8330223,2140103,20405,2140426, .3HA2 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , .3HB1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , .3HB2 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , .3HE1 , 2 , 81 , 0 , 83 , -2 , 0 , 0 , .3HE2 , 2 , 0 , -2 , 0 , 2 , 0 , 0 , .3HE3 , 2 , 83 , 0 , 81 , -2 , 0 , 0 / DATA D5D ./ 3HD5D, .3HA1G ,66130,5140210,5240222,2140502,10107,10130217, . 10330226,20505, .3HA2G , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , .3HE1G , 2 , 51 , 52 , 0 , 2 , 52 , 51 , 0 , .3HE2G , 2 , 52 , 51 , 0 , 2 , 51 , 52 , 0 , .3HA1U , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , .3HE1U , 2 , 51 , 52 , 0 , -2 , 101 , 103 , 0 , .3HE2U , 2 , 52 , 51 , 0 , -2 , 103 , 101 , 0 / DATA D6D ./ 3HD6D, .2HA1 ,140468,12130218,6140211,4130214,3140208,12530225,2140103, . 20605,2140620, .3HA2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,-1 ,-1 , .3HB1 , 1 , -1 , 1 ,-1 , 1 , -1 , 1 ,-1 , 1 , .3HB2 , 1 , -1 , 1 ,-1 , 1 , -1 , 1 , 1 ,-1 , .3HE1 , 2 , 121 , 1 , 0 ,-1 , 125 ,-2 , 0 , 0 , .3HE2 , 2 , 1 ,-1 ,-2 ,-1 , 1 , 2 , 0 , 0 , .3HE3 , 2 , 0 ,-2 , 0 , 2 , 0 ,-2 , 0 , 0 , .3HE4 , 2 , -1 ,-1 , 2 ,-1 , -1 , 2 , 0 , 0 , .3HE5 , 2 , 125 , 1 , 0 ,-1 , 121 ,-2 , 0 , 0 / DATA S4 ./ 3HS4 , .4HA , 8196 , 4130114, 2140103, 4330123 , .4HB , 1 , -1 , 1 , -1 , .4HE , 2 , 0 , -2 , 0 / DATA S6 ./ 3HS6 , .3HAG ,16576 ,3140108 ,3240122 , 10107 , 6530124 , 6130115 , .3HEG , 2 , -1 , -1 , 2 , -1 , -1 , .3HAU , 1 , 1 , 1 , -1 , -1 , -1 , .3HEU , 2 , -1 , -1 , -2 , 1 , 1 / DATA S8 ./ 3HS8 , .3HA ,33028,8130116,4140109,8330123,2140103,8530125,4340135, . 8730127, .3HB , 1, -1 , 1, -1 , 1, -1 , 1, -1 , .3HE1 , 2, 81 , 0, 83 ,-2, 83 , 0, 81 , .3HE2 , 2, 0 ,-2, 0 , 2, 0 ,-2, 0 , .3HE3 , 2, 83 , 0, 81 ,-2, 81 , 0, 83 / DATA TD ./ 3HTD , .2HA1 ,270516 , 3140808, 2140303, 4130614, 20605 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HE , 2 , -1 , 2 , 0 , 0 , .2HT1 , 3 , 0 , -1 , 1 , -1 , .2HT2 , 3 , 0 , -1 , -1 , 1 / DATA OH ./ 3HOH , .3HA1G ,287231,3140808,2140601,4140609,2140303,10107,4130614, . 6130815,20304,20605, .3HA2G , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , .3HEG , 2 , -1 , 0 , 0 , 2 , 2 , 0 , -1 , 2 , 0 , .3HT1G , 3 , 0 , -1 , 1 , -1 , 3 , 1 , 0 , -1 , -1 , .3HT2G , 3 , 0 , 1 , -1 , -1 , 3 , -1 , 0 , -1 , 1 , .3HA1U , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , .3HEU , 2 , -1 , 0 , 0 , 2 , -2 , 0 , 1 , -2 , 0 , .3HT1U , 3 , 0 , -1 , 1 , -1 , -3 , -1 , 0 , 1 , 1 , .3HT2U , 3 , 0 , 1 , -1 , -1 , -3 , 1 , 0 , 1 , -1 / DATA IH ./ 3HIH , .3HAG ,344786,5141210,5241222,3142008,2141502,10107,10131217, . 10331227,6132015,21505, .3HT1G,3, 101 , 103 , 0,-1, 3, 103 , 101 , 0 ,-1 , .3HT2G,3, 103 , 101 , 0,-1, 3, 101 , 103 , 0 ,-1 , .3HGG ,4, -1 , -1 , 1, 0, 4, -1 , -1 , 1 , 0 , .3HHG ,5, 0 , 0 ,-1, 1, 5, 0 , 0 ,-1 , 1 , .3HAU ,1, 1 , 1 , 1, 1,-1, -1 , -1 ,-1 ,-1 , .3HT1U,3, 101 , 103 , 0,-1,-3, 51 , 52 , 0 , 1 , .3HT2U,3, 103 , 101 , 0,-1,-3, 52 , 51 , 0 , 1 , .3HGU ,4, -1 , -1 , 1, 0,-4, 1 , 1 ,-1 , 0 , .3HHU ,5, 0 , 0 ,-1, 1,-5, 0 , 0 , 1 ,-1 / DATA CV ./ 3HC*V, .3HSI , 524340 , 4140109 , .3HPI , 2 , 0 , .3HDE , 2 , -2 / DATA DH ./ 3HD*H, .3HSIG , 524415 , 4140109 , 10107 , .3HPIG , 2 , 0 , 2 , .3HDEG , 2 , -2 , 2 , .3HSIU , 1 , 1 , -1 , .3HPIU , 2 , 0 , -2 , .3HDEU , 2 , -2 , -2 / WRITE(6,'('' == symtrz.f R00008 =='')') SIG=1.D0 I=IGROUP IF(NCODE.LT.0) GOTO 2 IGROUP=0 DO 1 I=1,43 ICHECK=J(I)/10000 ICHECK=J(I)-10000*ICHECK+2 ICHECK=JTAB(ICHECK) IF(ICHECK.EQ.NCODE) GOTO 2 1 CONTINUE RETURN 2 IGROUP=I JGROUP=J(IGROUP) J1=JGROUP/1000000 KDIM=JGROUP-1000000*J1 I1=KDIM/10000 JGROUP=KDIM-10000*I1 NAME=JTAB(JGROUP) SIG=ISIGMA(IGROUP) J2=0 DO 4 I=1,I1 JGROUP=JGROUP+1 JX(1,I)=JTAB(JGROUP) DO 4 K=1,J1 JGROUP=JGROUP+1 BUFF=JTAB(JGROUP) IF(I.GT.1) GOTO 3 JX(2,K)=JTAB(JGROUP)/100 JX(3,K)=JTAB(JGROUP)-100*JX(2,K) JX(4,K)=JX(2,K)/100 JX(5,K)=JX(2,K)-100*JX(4,K) JX(2,K)=JX(5,K) JX(5,K)=JX(4,K)/10 JX(4,K)=JX(4,K)-10*JX(5,K) JX(2,1)=1 JX(3,1)=0 J2=J2+JX(2,K) BUFF=1.D0 3 IF(BUFF.LT.10.) GOTO 4 NZZ=JTAB(JGROUP) NZ=NZZ/10 FZ=NZ FN=NZZ-10*NZ BUFF=2.D0*COS(6.283185307179D0*FN/FZ) 4 T(I,K)=BUFF LINA=IGROUP-41 RETURN END C C================================================================ C SUBROUTINE R00009(NAT,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION HELP(3,3),NAT(NUMATM),COORD(3,NUMATM) WRITE(6,'('' == symtrz.f R00009 =='')') DO 1 I=1,3 DO 1 J=1,NUMAT 1 COORD(I,J)=COORD(I,J)-SHIFT(I) CALL R00005(COORD,1) IF(J1.LT.2) RETURN DO 5 I=2,J1 JOTA=JX(3,I) JOT=1 IF(JOTA.LE.20) GOTO 2 JOTB=JOTA/10 JOT=JOTA-10*JOTB JOTA=JX(3,JOTB) 2 CALL R00006(JOTA,I) IF(JOT.EQ.1) GOTO 5 DO 3 J=1,3 DO 3 K=1,3 HELP(J,K)=0.D0 DO 3 L=1,3 3 HELP(J,K)=HELP(J,K)+ELEM(J,L,JOT)*ELEM(L,K,I) DO 4 J=1,3 DO 4 K=1,3 4 ELEM(J,K,I)=HELP(J,K) 5 CONTINUE DO 6 I=2,J1 CALL R00007(NAT,COORD,I) JX(6,I)=IQUAL IF(IELEM(I).LT.1) IERROR=5 6 CONTINUE CALL R00005(COORD,-1) DO 7 I=1,3 DO 7 J=1,NUMAT 7 COORD(I,J)=COORD(I,J)+SHIFT(I) RETURN END C C=================================================================== C SUBROUTINE R00010(COEFF,NTYPE,ICOUNT,NCDUM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) C CHARACTER*4 NAME,ISTA C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; NAME is not used... CHARACTER*4 ISTA, NAMO, NAMES, IFRA, JX COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) DIMENSION NTYPE(MXDIM),COEFF(NCDUM,NCDUM) DIMENSION CHAR(12),ICOUNT(12) DATA TOLER,IFRA / 0.1, '????' / C WRITE(6,'('' == symtrz.f R00010 =='')') NDORBS=0 DO 1 I=1,I1 1 ICOUNT(I)=0 NAMES=IFRA IF(J1.EQ.1) NAMES=JX(1,1) DO 2 I=1,NORBS INDEX(I)=I 2 NAMO(I)=NAMES IF(J1.EQ.1) RETURN IF(IERROR.GT.0) RETURN IFOUND=0 I=0 3 IK=I+1 DO 4 J=1,J1 4 CHAR(J)=0.D0 5 I=I+1 IF(I.GT.NORBS) GOTO 10 DO 6 J=1,J1 CHAR(J)=CHAR(J)+R00011(COEFF,NTYPE,I,J,NCDUM) IF(CHAR(J).GT.10.) GOTO 3 6 CONTINUE DO 9 K=1,I1 DO 7 J=1,J1 CHECK=ABS(CHAR(J)-T(K,J)) IF(CHECK.GT.TOLER) GOTO 9 7 CONTINUE ICOUNT(K)=ICOUNT(K)+1 DO 8 J=IK,I IFOUND=IFOUND+1 INDEX(J)=ICOUNT(K) 8 NAMO(J)=JX(1,K) GOTO 3 9 CONTINUE GOTO 5 10 IF(IFOUND.NE.NORBS) IERROR=99 RETURN END C C====================================================================== C FUNCTION R00011(COEFF,NTYPE,JORB,IOPER,NCDUM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION NTYPE(MXDIM),COEFF(NCDUM,NCDUM),E(3,3,20) DIMENSION H(5),P(3),D(5),IP(2,3),ID(2,5),LOC(2,50) EQUIVALENCE (ELEM(1,1,1),E(1,1,1)) WRITE(6,'('' == symtrz.f R00011 =='')') R00011=1.D0 IF(IOPER.EQ.1) RETURN DO 1 I=1,NORBS VECT(1,I)=0.D0 1 VECT(2,I)=0.D0 DO 13 IATOM=1,NUMAT JATOM=JELEM(IOPER,IATOM) KI=0 KJ=0 DO 3 I=1,NORBS ICHECK=NTYPE(I)/100 IF(ICHECK.NE.IATOM) GOTO 2 KI=KI+1 LOC(1,KI)=I 2 IF(ICHECK.NE.JATOM) GOTO 3 KJ=KJ+1 LOC(2,KJ)=I 3 CONTINUE IBASE=KI DO 4 I=1,IBASE ICHECK=LOC(1,I) ITEST=NTYPE(ICHECK)-10*(NTYPE(ICHECK)/10) IF(ITEST.GT.0) GOTO 4 JCHECK=LOC(2,I) LOC(1,I)=0 KI=KI-1 VECT(1,ICHECK)=COEFF(ICHECK,JORB) VECT(2,JCHECK)=COEFF(ICHECK,JORB) 4 CONTINUE MINUS=100*IATOM 5 IF(KI.LT.3) GOTO 13 DO 6 I=1,3 IP(1,I)=0 6 ID(1,I)=0 ID(1,4)=0 ID(1,5)=0 NQZP=-1 NQZD=-1 DO 9 I=1,IBASE IF(LOC(1,I).LT.1) GOTO 9 ICHECK=LOC(1,I) ITEST=NTYPE(ICHECK) INQZ=(ITEST-MINUS)/10 ILQZ=ITEST-10*(ITEST/10) IF(ILQZ.GT.8) GOTO 8 IF(ILQZ.GT.3) GOTO 7 IF(NQZP.LT.0) NQZP=INQZ IF(INQZ.NE.NQZP) GOTO 9 P(ILQZ)=COEFF(ICHECK,JORB) IP(1,ILQZ)=LOC(1,I) IP(2,ILQZ)=LOC(2,I) GOTO 8 7 IF(NQZD.LT.0) NQZD=INQZ IF(INQZ.NE.NQZD) GOTO 9 ILQZ=ILQZ-3 D(ILQZ)=COEFF(ICHECK,JORB) ID(1,ILQZ)=LOC(1,I) ID(2,ILQZ)=LOC(2,I) 8 LOC(1,I)=0 KI=KI-1 9 CONTINUE IF(NQZP.LT.0) GOTO 11 H(1)=R(1,1)*P(1)+R(2,1)*P(2)+R(3,1)*P(3) H(2)=R(1,2)*P(1)+R(2,2)*P(2)+R(3,2)*P(3) H(3)=R(1,3)*P(1)+R(2,3)*P(2)+R(3,3)*P(3) P(1)=E(1,1,IOPER)*H(1)+E(1,2,IOPER)*H(2)+E(1,3,IOPER)*H(3) P(2)=E(2,1,IOPER)*H(1)+E(2,2,IOPER)*H(2)+E(2,3,IOPER)*H(3) P(3)=E(3,1,IOPER)*H(1)+E(3,2,IOPER)*H(2)+E(3,3,IOPER)*H(3) DO 10 I=1,3 IF(IP(1,I).LT.1) GOTO 16 II=IP(1,I) JJ=IP(2,I) VECT(1,II)=H(I) 10 VECT(2,JJ)=P(I) 11 IF(NQZD.LT.0) GOTO 5 CALL R00012(D,H,IOPER) DO 12 I=1,5 IF(ID(1,I).LT.1) GOTO 16 II=ID(1,I) JJ=ID(2,I) VECT(1,II)=H(I) 12 VECT(2,JJ)=D(I) KI=KI-5 GOTO 5 13 CONTINUE C1=0.D0 C2=0.D0 DO 14 I=1,NORBS C1=C1+VECT(1,I)*VECT(1,I) 14 C2=C2+VECT(1,I)*VECT(2,I) IF(ABS(C1).LT.1.E-5) GOTO 15 R00011=C2/C1 RETURN 15 R00011=100.D0 RETURN 16 IERROR=98 RETURN END C C======================================================================= C SUBROUTINE R00012(D,H,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION D(5),H(5),T1(5,5,12),S(3,3) CHARACTER JX*4 WRITE(6,'('' == symtrz.f R00012 =='')') IF(NDORBS.GT.0) GOTO 4 NDORBS=1 DO 1 I=1,3 DO 1 J=1,3 1 S(I,J)=R(I,J) CALL R00013(S,T1,1) DO 3 K=2,J1 DO 2 I=1,3 DO 2 J=1,3 2 S(I,J)=ELEM(I,J,K) CALL R00013(S,T1,K) 3 CONTINUE 4 DO 5 I=1,5 H(I)=0.D0 DO 5 J=1,5 5 H(I)=H(I)+T1(I,J,1)*D(J) DO 6 I=1,5 D(I)=0.D0 DO 6 J=1,5 6 D(I)=D(I)+T1(I,J,IOPER)*H(J) RETURN END C C================================================================= C SUBROUTINE R00013(R,T,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION R(3,3),T(5,5,12),F(2,4) LOGICAL RIGHT DATA PI,TOL,S12 / 3.1415926536D0 ,0.001D0,3.46410161513D0 / DATA S3,ONE / 1.73205080756D0 , 1.D0 / WRITE(6,'('' == symtrz.f R00013 =='')') R1=R(2,1)*R(3,2)-R(3,1)*R(2,2) R2=R(3,1)*R(1,2)-R(1,1)*R(3,2) R3=R(1,1)*R(2,2)-R(2,1)*R(1,2) CHECK=R1*R(1,3)+R2*R(2,3)+R3*R(3,3) RIGHT=CHECK.GT.0. R(1,3)=R1 R(2,3)=R2 R(3,3)=R3 ARG=R3 IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) B= ACOS(ARG) SINA=SQRT(1.D0-ARG*ARG) IF(SINA.LT.TOL) GOTO 1 ARG=R(3,2)/SINA IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) G= ASIN(ARG) ARG=R(2,3)/SINA IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) A= ASIN(ARG) GOTO 2 1 ARG=R(1,2) IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) G= ASIN(ARG) A=0.D0 2 F(1,1)=A F(1,2)=A F(1,3)=PI-A F(1,4)=PI-A F(2,1)=G F(2,3)=G F(2,2)=PI-G F(2,4)=PI-G DO 3 I=1,4 A=F(1,I) G=F(2,I) CHECK=ABS(SIN(B)*COS(A)+R(1,3)) IF(CHECK.GT.TOL) GOTO 3 CHECK=-SIN(G)*COS(B)*SIN(A)+COS(G)*COS(A) IF(ABS(CHECK-R(2,2)).GT.TOL) GOTO 3 CHECK=SIN(A)*COS(G)+COS(A)*COS(B)*SIN(G) IF(ABS(CHECK-R(1,2)).LE.TOL) GOTO 4 3 CONTINUE 4 G=-G A=-A B=-B E1=COS(B*0.5D0) X1=-SIN(B*0.5D0) E2=E1*E1 E3=E1*E2 E4=E2*E2 X2=X1*X1 X3=X1*X2 X4=X2*X2 TA=2.D0*A TG=2.D0*G T(1,1,IOPER)=E4*COS(TA+TG)+X4*COS(TA-TG) T(1,2,IOPER)=2.D0*E3*X1*COS(A+TG)-2.D0*E1*X3*COS(A-TG) T(1,3,IOPER)=2.D0*S3*E2*X2*COS(TG) T(1,4,IOPER)=2.D0*E3*X1*SIN(A+TG)-2.D0*E1*X3*SIN(A-TG) T(1,5,IOPER)=E4*SIN(TA+TG)+X4*SIN(TA-TG) T(2,1,IOPER)=2.D0*E1*X3*COS(TA-G)-2.D0*E3*X1*COS(TA+G) T(2,2,IOPER)=(E4-3.D0*E2*X2)*COS(A+G)-(3.D0*E2*X2-X4)*COS(A-G) T(2,3,IOPER)=2.D0*S3*(E3*X1-E1*X3)*COS(G) T(2,4,IOPER)=(E4-3.D0*E2*X2)*SIN(A+G)-(3.D0*E2*X2-X4)*SIN(A-G) T(2,5,IOPER)=-2.D0*E3*X1*SIN(TA+G)+2.D0*E1*X3*SIN(TA-G) T(3,1,IOPER)=S12*E2*X2*COS(TA) T(3,2,IOPER)=-S12*(E3*X1-E1*X3)*COS(A) T(3,3,IOPER)=E4-4.D0*E2*X2+X4 T(3,4,IOPER)=-S12*(E3*X1-E1*X3)*SIN(A) T(3,5,IOPER)=S12*E2*X2*SIN(TA) T(4,1,IOPER)=2.D0*E1*X3*SIN(TA-G)+2.D0*E3*X1*SIN(TA+G) T(4,2,IOPER)=-(E4-3.D0*E2*X2)*SIN(A+G)-(3.D0*E2*X2-X4)*SIN(A-G) T(4,3,IOPER)=-2.D0*S3*(E3*X1-E1*X3)*SIN(G) T(4,4,IOPER)=(E4-3.D0*E2*X2)*COS(A+G)+(3.D0*E2*X2-X4)*COS(A-G) T(4,5,IOPER)=-2.D0*E3*X1*COS(TA+G)-2.D0*E1*X3*COS(TA-G) T(5,1,IOPER)=-E4*SIN(TA+TG)+X4*SIN(TA-TG) T(5,2,IOPER)=-2.D0*E3*X1*SIN(A+TG)-2.D0*E1*X3*SIN(A-TG) T(5,3,IOPER)=-2.D0*S3*E2*X2*SIN(TG) T(5,4,IOPER)=2.D0*E3*X1*COS(A+TG)+2.D0*E1*X3*COS(A-TG) T(5,5,IOPER)=E4*COS(TA+TG)-X4*COS(TA-TG) IF(RIGHT) RETURN DO 5 I=1,5 T(2,I,IOPER)=-T(2,I,IOPER) 5 T(4,I,IOPER)=-T(4,I,IOPER) RETURN END C C====================================================================== C SUBROUTINE R00015(F,V,EW) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION F(6),A(3,3),V(3,3),EW(3) DATA TOLER /1.E-6 / WRITE(6,'('' == symtrz.f R00015 =='')') N=3 IJ=0 DO 2 J=1,N DO 1 I=1,J IJ=IJ+1 A(I,J)=F(IJ) A(J,I)=F(IJ) V(I,J)=0.D0 1 V(J,I)=0.D0 2 V(J,J)=1.D0 N1=N-1 ZETA=10.D0 3 SS=0.D0 DO 4 J=1,N1 DO 4 I=J,N1 IRG=I+1 4 SS=SS+ABS(A(IRG,J)) IF(SS-TOLER) 21,21,5 5 TAU=0.D0 DO 20 I=1,N I1=I+1 IF(N-I1) 20,6,6 6 DO 19 J=I1,N IF(ABS(A(J,I)).LT.1.E-30) GOTO 19 THETA=0.5D0*(A(J,J)-A(I,I))/A(J,I) IF(ABS(THETA)-ZETA) 7,7,19 7 T=1.D0 IF(THETA) 8,9,9 8 T=-1.D0 9 T=1.D0/(THETA+T*SQRT(1.D0+THETA*THETA)) C=1.D0/SQRT(1.D0+T*T) S=C*T H=2.D0*A(J,I) HC=S*H*(S*THETA-C) A(I,I)=A(I,I)+HC A(J,J)=A(J,J)-HC A(J,I)=-H*C*(S*THETA-0.5D0*(C-S*S/C)) TAU=TAU+1.D0 IF(I.LT.2) GOTO 11 DO 10 IG=2,I IRS=IG-1 H=C*A(I,IRS)-S*A(J,IRS) A(J,IRS)=S*A(I,IRS)+C*A(J,IRS) 10 A(I,IRS)=H 11 L=J-1 IF(L-I1) 14,12,12 12 DO 13 IG=I1,L H=C*A(IG,I)-S*A(J,IG) A(J,IG)=S*A(IG,I)+C*A(J,IG) 13 A(IG,I)=H 14 IF(N1-J) 17,15,15 15 DO 16 IG=J,N1 ILG=IG+1 H=C*A(ILG,I)-S*A(ILG,J) A(ILG,J)=S*A(ILG,I)+C*A(ILG,J) 16 A(ILG,I)=H 17 DO 18 IG=1,N H=C*V(IG,I)-S*V(IG,J) V(IG,J)=S*V(IG,I)+C*V(IG,J) 18 V(IG,I)=H 19 CONTINUE 20 CONTINUE H=0.5D0*FLOAT(N*(N-1)) ZETA=ZETA**(2.5D0-TAU/H) GOTO 3 21 DO 22 J=1,N 22 EW(J)=A(J,J) N1=N-1 23 NT=0 DO 26 J=1,N1 JRG=J+1 IF(EW(J)-EW(JRG)) 26,26,24 24 BUFFER=EW(J) EW(J)=EW(JRG) EW(JRG)=BUFFER DO 25 I=1,N BUFFER=V(I,JRG) V(I,JRG)=V(I,J) 25 V(I,J)=BUFFER NT=1 26 CONTINUE N1=N1-1 IF(NT) 23,27,23 27 RETURN END C C=================================================================== C SUBROUTINE R00016 IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,NAMO,ISTA COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) DIMENSION CHAR(12),COEFF(12) WRITE(6,'('' == symtrz.f R00016 =='')') IVIBRA=3*NUMAT-6 IF(LINA.GT.0) GOTO 8 CHAR(1)=IVIBRA IVIB=0 IF(J1.LT.2) RETURN DO 5 I=2,J1 JUMP=JX(4,I) GOTO (1,2,3,4),JUMP 1 CHAR(I)=-3*JX(6,I) GOTO 5 2 CHAR(I)=JX(6,I) GOTO 5 3 JP=JX(5,I)/10 JK=JX(5,I)-10*JP ANGLE=2.D0*COS(6.283185308D0*DBLE(JK)/DBLE(JP)) CHAR(I)=DBLE(JX(6,I))*(ANGLE-1.D0) GOTO 5 4 JP=JX(5,I)/10 JK=JX(5,I)-10*JP ANGLE=2.D0*COS(6.283185308D0*DBLE(JK)/DBLE(JP)) CHAR(I)=DBLE(JX(6,I)-2)*(ANGLE+1.D0) 5 CHAR(I)=CHAR(I)*DBLE(JX(2,I)) ORDER=DBLE(J2) DO 7 I=1,I1 COEFF(I)=0.1D0 DO 6 J=1,J1 6 COEFF(I)=COEFF(I)+CHAR(J)*T(I,J)/ORDER IF(COEFF(I).LT.1.) GOTO 7 IDEGEN= T(I,1)+0.1D0 IVIB=IVIB+1 IVIBRO(1,IVIB)= COEFF(I) IF(I1.NE.J1) IVIBRO(1,IVIB)= COEFF(I) /IDEGEN IVIBRO(2,IVIB)=JX(1,I) 7 CONTINUE RETURN 8 IVIBRA=IVIBRA+1 GOTO(9,10),LINA 9 IVIBRO(1,1)=NUMAT-1 IVIBRO(2,1)=JX(1,1) IVIBRO(1,2)=NUMAT-2 IVIBRO(2,2)=JX(1,2) IVIB=2 IF(NUMAT.LT.3) IVIB=1 RETURN 10 ICENT=JX(6,3) IVIBRO(1,1)=(NUMAT-ICENT)/2 IVIBRO(2,1)=JX(1,1) IVIB=2 IVIBRO(1,2)=(NUMAT-2-ICENT)/2 IVIBRO(2,2)=JX(1,2) IF(IVIBRO(1,2).GT.0) IVIB=3 IVIBRO(1,IVIB)=(NUMAT-2+ICENT)/2 IVIBRO(2,IVIB)=JX(1,4) IF(IVIBRO(1,IVIB).GT.0) IVIB=IVIB+1 IVIBRO(1,IVIB)=(NUMAT-2+ICENT)/2 IVIBRO(2,IVIB)=JX(1,5) IF(IVIBRO(1,IVIB).LT.1) IVIB=IVIB-1 RETURN END mopac7-1.15/fortran/dofs.f0000644000175000017500000000605711053302064012326 00000000000000 SUBROUTINE DOFS(EREF,MONO3,N,DD,M,BOTTOM,TOP) IMPLICIT DOUBLE PRECISION(A-H,O-Z) DIMENSION EREF(MONO3,N), DD(M) ************************************************************************ * * * DOFS FORMS A NORMALISED, SLIGHTLY SMOOTHED DENSITY OF STATES FOR A * * 1-D DENSITY OF STATES * * ON INPUT EREF = REFERENCE ENERGY LEVELS * * P = POPULATION OF ENERGY LEVELS (=1 FOR ENERGY D.O.S. * * OR ATOMIC ORBITAL POPULATION FOR PARTIAL D.O.S.) * * N = NUMBER OF ENERGY LEVELS SUPPLIED * * M = SIZE OF D.O.S. VECTOR * * D = ARRAY TO HOLD D.O.S. * * BOTTOM = BOTTOM OF D.O.S. VECTOR * * TOP = TOP OF D.O.S. VECTOR * * * * ON OUTPUT D = DENSITY OF STATES. THIS ANALYSES IS INDEPENDENT OF N* * ROUGHNESS WILL OCCUR IF N < CA. 30. * * * ************************************************************************ C C FIRST, EMPTY THE DENSITY-OF-STATES (DOS) BINS C DO 10 I=1,500 10 DD(I)=0.D0 C C SPREAD OUT THE ENERGIES OVER THE ENERGY SPECTRUM, TOP TO BOTTOM C RANGE=(M+1)/(TOP-BOTTOM) DO 20 J=1,MONO3 DO 20 I=1,N X=EREF(J,I) IF(X.LT.BOTTOM.OR.X.GT.TOP) X=-1.D7 20 EREF(J,I)=(X-BOTTOM)*RANGE DO 40 II=1,MONO3 DO 40 I=2,N B=EREF(II,I-1) IF(B.LT.1) GOTO 40 A=EREF(II,I) IF(A.LT.1) GOTO 40 IF(B .GT. A) THEN X=B B=A A=X ENDIF J=B K=A C C IF J EQUALS K THE INTERVAL FALLS WITHIN ONE BIN C IF(J.EQ.K) THEN DD(K)=DD(K)+1.D0 ELSE SPREAD=1.D0/(A-B+1.D-12) PARTJ=(J+1-B)*SPREAD PARTK=(A-K)*SPREAD DD(J)=DD(J)+PARTJ DD(K)=DD(K)+PARTK C C IF K EQUALS J+1 THE INTERVAL STRADDLES TWO BINS C IF(K .NE. J+1) THEN C C IF K IS GREATER THAN J+1 THE INTERVAL COVERS MORE THAN TWO BINS C J=J+1 K=K-1 DO 30 L=J,K 30 DD(L)=DD(L)+SPREAD ENDIF ENDIF 40 CONTINUE X=M/((N-1)*(TOP-BOTTOM)) DO 50 I=1,M 50 DD(I)=DD(I)*X WRITE(6,'(A)')' NORMALIZED DENSITY OF STATES' C C THE FIRST 'BIN' HAS LOWER BOUND AT BOTTOM AND UPPER BOUND C AT BOTTOM+RANGE, THEREFORE THE FIRST 'BIN' IS FOR BOTTOM+0.5*RANGE C THE LAST 'BIN' HAS BOUNDS TOP-RANGE AND TOP, C THEREFOR THE LAST 'BIN' IS FOR TOP-0.5*RANGE RANGE=M/(TOP-BOTTOM) DO 60 I=1,M 60 WRITE(6,'(F9.2,F12.6)')BOTTOM+(I-0.5D0)/RANGE,DD(I) RETURN END mopac7-1.15/fortran/mopac7f2c.h0000644000175000017500000001112011053302064013141 00000000000000/* f2c.h -- Standard Fortran to C header file */ /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed." - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef unsigned long int uinteger; typedef char *address; typedef short int shortint; typedef float real; typedef double doublereal; typedef struct { real r, i; } complex; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ typedef long long longint; /* system-dependent */ typedef unsigned long long ulongint; /* system-dependent */ #define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a,b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real r; doublereal d; complex c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal)abs(x) #define min(a,b) ((a) <= (b) ? (a) : (b)) #define max(a,b) ((a) >= (b) ? (a) : (b)) #define dmin(a,b) (doublereal)min(a,b) #define dmax(a,b) (doublereal)max(a,b) #define bit_test(a,b) ((a) >> (b) & 1) #define bit_clear(a,b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a,b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif mopac7-1.15/fortran/capcor.f0000644000175000017500000000214711053302063012635 00000000000000 FUNCTION CAPCOR(NAT,NFIRST,NLAST,NUMAT,P,H) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION P(*), H(*), NFIRST(NUMAT), NLAST(NUMAT), NAT(NUMAT) ****************************************************************** * * CORRECTION TO ELECTRONIC ENERGY DUE TO CAPPED BONDS * ****************************************************************** SUM=0.D0 DO 40 I=1,NUMAT NI=NAT(I) IL=NFIRST(I) IU=NLAST(I) IF(NI.EQ.102) THEN C C DO ENTIRE ROW - NO NEED TO CHECK FURTHER. C J=(NLAST(I)*(NLAST(I)+1))/2 II=IU-1 DO 10 K=1,II J=J-1 10 SUM=SUM+P(J)*H(J) ELSE DO 30 J=1,I JL=NFIRST(J) IF(NAT(J).EQ.102)THEN DO 20 K=IL,IU KK=(K*(K-1))/2+JL 20 SUM=SUM+P(KK)*H(KK) ENDIF 30 CONTINUE ENDIF 40 CONTINUE C C DOUBLE SUM SINCE WE ONLY CALCULATED LOWER HALF, AND CAPCOR C WILL APPEAR IN 1/2*P(H+F). ONLY H PART OF F WILL BE USED. CAPCOR=-SUM*2.D0 RETURN END mopac7-1.15/fortran/setupg.f0000644000175000017500000001370411053302063012676 00000000000000 SUBROUTINE SETUPG IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /EXPONT/ ZS(107),ZP(107),ZD(107) COMMON /NATYPE/ NZTYPE(107),MTYPE(30),LTYPE COMMON /TEMP/ CC(60,6),ZZ(60,6) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) C SET-UP THE STEWART'S STO-6G EXPANSIONS C 1S ALLZ(1,1,1) =2.310303149D01 ALLZ(2,1,1) =4.235915534D00 ALLZ(3,1,1) =1.185056519D00 ALLZ(4,1,1) =4.070988982D-01 ALLZ(5,1,1) =1.580884151D-01 ALLZ(6,1,1) =6.510953954D-02 C ALLC(1,1,1) =9.163596280D-03 ALLC(2,1,1) =4.936149294D-02 ALLC(3,1,1) =1.685383049D-01 ALLC(4,1,1) =3.705627997D-01 ALLC(5,1,1) =4.164915298D-01 ALLC(6,1,1) =1.303340841D-01 C 2S ALLZ(1,2,1) =2.768496241D01 ALLZ(2,2,1) =5.077140627D00 ALLZ(3,2,1) =1.426786050D00 ALLZ(4,2,1) =2.040335729D-01 ALLZ(5,2,1) =9.260298399D-02 ALLZ(6,2,1) =4.416183978D-02 C ALLC(1,2,1) =-4.151277819D-03 ALLC(2,2,1) =-2.067024148D-02 ALLC(3,2,1) =-5.150303337D-02 ALLC(4,2,1) =3.346271174D-01 ALLC(5,2,1) =5.621061301D-01 ALLC(6,2,1) =1.712994697D-01 C 2P ALLZ(1,2,2) =5.868285913D00 ALLZ(2,2,2) =1.530329631D00 ALLZ(3,2,2) =5.475665231D-01 ALLZ(4,2,2) =2.288932733D-01 ALLZ(5,2,2) =1.046655969D-01 ALLZ(6,2,2) =4.948220127D-02 C ALLC(1,2,2) =7.924233646D-03 ALLC(2,2,2) =5.144104825D-02 ALLC(3,2,2) =1.898400060D-01 ALLC(4,2,2) =4.049863191D-01 ALLC(5,2,2) =4.012362861D-01 ALLC(6,2,2) =1.051855189D-01 C 3S ALLZ(1,3,1) =3.273031938D00 ALLZ(2,3,1) =9.200611311D-01 ALLZ(3,3,1) =3.593349765D-01 ALLZ(4,3,1) =8.636686991D-02 ALLZ(5,3,1) =4.797373812D-02 ALLZ(6,3,1) =2.724741144D-02 ALLC(1,3,1) =-6.775596947D-03 ALLC(2,3,1) =-5.639325779D-02 ALLC(3,3,1) =-1.587856086D-01 ALLC(4,3,1) =5.534527651D-01 ALLC(5,3,1) =5.015351020D-01 ALLC(6,3,1) =7.223633674D-02 C 3P ALLZ(1,3,2) =5.077973607D00 ALLZ(2,3,2) =1.340786940D00 ALLZ(3,3,2) =2.248434849D-01 ALLZ(4,3,2) =1.131741848D-01 ALLZ(5,3,2) =6.076408893D-02 ALLZ(6,3,2) =3.315424265D-02 ALLC(1,3,2) =-3.329929840D-03 ALLC(2,3,2) =-1.419488340D-02 ALLC(3,3,2) =1.639395770D-01 ALLC(4,3,2) =4.485358256D-01 ALLC(5,3,2) =3.908813050D-01 ALLC(6,3,2) =7.411456232D-02 C 4S ALLZ(1,4,1) = 1.365346 D+00 ALLZ(2,4,1) = 4.393213 D-01 ALLZ(3,4,1) = 1.877069 D-01 ALLZ(4,4,1) = 9.360270 D-02 ALLZ(5,4,1) = 5.052263 D-02 ALLZ(6,4,1) = 2.809354 D-02 ALLC(1,4,1) = 3.775056 D-03 ALLC(2,4,1) =-5.585965 D-02 ALLC(3,4,1) =-3.192946 D-01 ALLC(4,4,1) =-2.764780 D-02 ALLC(5,4,1) = 9.049199 D-01 ALLC(6,4,1) = 3.406258 D-01 C 4P ALLC(1,4,2) =-7.052075 D-03 ALLC(2,4,2) =-5.259505 D-02 ALLC(3,4,2) =-3.773450 D-02 ALLC(4,4,2) = 3.874773 D-01 ALLC(5,4,2) = 5.791672 D-01 ALLC(6,4,2) = 1.221817 D-01 ALLZ(1,4,2) = 1.365346 D+00 ALLZ(2,4,2) = 4.393213 D-01 ALLZ(3,4,2) = 1.877069 D-01 ALLZ(4,4,2) = 9.360270 D-02 ALLZ(5,4,2) = 5.052263 D-02 ALLZ(6,4,2) = 2.809354 D-02 C 5S ALLZ(1,5,1) = 7.701420258D-01 ALLZ(2,5,1) = 2.756268915D-01 ALLZ(3,5,1) = 1.301847480D-01 ALLZ(4,5,1) = 6.953441940D-02 ALLZ(5,5,1) = 4.002545502D-02 ALLZ(6,5,1) = 2.348388309D-02 ALLC(1,5,1) = 1.267447151D-02 ALLC(2,5,1) = 3.266734789D-03 ALLC(3,5,1) =-4.307553999D-01 ALLC(4,5,1) =-3.231998963D-01 ALLC(5,5,1) = 1.104322879D+00 ALLC(6,5,1) = 4.368498703D-01 C 5P ALLZ(1,5,2) = 7.701420258D-01 ALLZ(2,5,2) = 2.756268915D-01 ALLZ(3,5,2) = 1.301847480D-01 ALLZ(4,5,2) = 6.953441940D-02 ALLZ(5,5,2) = 4.002545502D-02 ALLZ(6,5,2) = 2.348388309D-02 ALLC(1,5,2) =-1.105673292D-03 ALLC(2,5,2) =-6.243132446D-02 ALLC(3,5,2) =-1.628476766D-01 ALLC(4,5,2) = 3.210328714D-01 ALLC(5,5,2) = 6.964579592D-01 ALLC(6,5,2) = 1.493146125D-01 C 6S ALLZ(1,6,1) = 5.800292686D-01 ALLZ(2,6,1) = 2.718262251D-01 ALLZ(3,6,1) = 7.938523262D-02 ALLZ(4,6,1) = 4.975088254D-02 ALLZ(5,6,1) = 2.983643556D-02 ALLZ(6,6,1) = 1.886067216D-02 ALLC(1,6,1) = 4.554359511D-03 ALLC(2,6,1) = 5.286443143D-02 ALLC(3,6,1) =-7.561016358D-01 ALLC(4,6,1) =-2.269803820D-01 ALLC(5,6,1) = 1.332494651D+00 ALLC(6,6,1) = 3.622518293D-01 C 6P ALLZ(1,6,2) = 6.696537714D-01 ALLZ(2,6,2) = 1.395089793D-01 ALLZ(3,6,2) = 8.163894960D-02 ALLZ(4,6,2) = 4.586329272D-02 ALLZ(5,6,2) = 2.961305556D-02 ALLZ(6,6,2) = 1.882221321D-02 ALLC(1,6,2) = 2.782723680D-03 ALLC(2,6,2) =-1.282887780D-01 ALLC(3,6,2) =-2.266255943D-01 ALLC(4,6,2) = 4.682259383D-01 ALLC(5,6,2) = 6.752048848D-01 ALLC(6,6,2) = 1.091534212D-01 DO 30 I=1,10 IF(MTYPE(I).EQ.0)GOTO 30 NI=MTYPE(I) XI=ZS(NI) IA=I*4-3 IB=IA+3 IF(NI.LT.2) THEN NQN=1 ELSEIF(NI.LT.10)THEN NQN=2 ELSEIF(NI.LT.18)THEN NQN=3 ELSEIF(NI.LT.36)THEN NQN=4 ELSEIF(NI.LT.54)THEN NQN=5 ELSE NQN=6 ENDIF DO 20 K=IA,IB L=1 IF(K.GT.IA) L=2 IF(K.GT.IA) XI=ZP(NI) DO 10 J=1,6 CC(K,J)=ALLC(J,NQN,L) 10 ZZ(K,J)=ALLZ(J,NQN,L)*XI**2 20 CONTINUE 30 CONTINUE RETURN END mopac7-1.15/fortran/powsq.f0000644000175000017500000002717511053302064012550 00000000000000 SUBROUTINE POWSQ(XPARAM, NVAR, FUNCT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XPARAM(*) COMMON /MESAGE/ IFLEPO,ISCF ********************************************************************** * * POWSQ OPTIMIZES THE GEOMETRY BY MINIMISING THE GRADIENT NORM. * THUS BOTH GROUND AND TRANSITION STATE GEOMETRIES CAN BE * CALCULATED. IT IS ROUGHLY EQUIVALENT TO FLEPO, FLEPO MINIMIZES * THE ENERGY, POWSQ MINIMIZES THE GRADIENT NORM. * * ON ENTRY XPARAM = VALUES OF PARAMETERS TO BE OPTIMIZED. * NVAR = NUMBER OF PARAMETERS TO BE OPTIMIZED. * * ON EXIT XPARAM = OPTIMIZED PARAMETERS. * FUNCT = HEAT OF FORMATION IN KCALS. * ********************************************************************** C ***** ROUTINE PERFORMS A LEAST SQUARES MINIMIZATION ***** C ***** OF A FUNCTION WHICH IS A SUM OF SQUARES. ***** C ***** INITIALLY WRITTEN BY J.W. MCIVER JR. AT SUNY/ ***** C ***** BUFFALO, SUMMER 1971. REWRITTEN AND MODIFIED ***** C ***** BY A.K. AT SUNY BUFFALO AND THE UNIVERSITY OF ***** C ***** TEXAS. DECEMBER 1973 ***** C COMMON /GEOVAR/ NDUM,LOC(2,MAXPAR), IDUMY, XARAM(MAXPAR) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /LAST / LAST COMMON /KEYWRD/ KEYWRD C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /NUMSCF/ NSCF COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON /GRADNT/ GRAD(MAXPAR),GNFINA COMMON /TIMDMP/ TLEFT, TDUMP COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /NUMCAL/ NUMCAL COMMON /SIGMA1/ GNEXT, AMIN, ANEXT COMMON /SIGMA2/ GNEXT1(MAXPAR), GMIN1(MAXPAR) COMMON /NLLCOM/ HESS(MAXPAR,MAXPAR),BMAT(MAXPAR,MAXPAR), 1PMAT(MAXPAR*MAXPAR) COMMON /SCRACH/ PVEC DIMENSION IPOW(9), SIG(MAXPAR), 1 E1(MAXPAR), E2(MAXPAR), 2 P(MAXPAR), WORK(MAXPAR), 3 PVEC(MAXPAR*MAXPAR), EIG(MAXPAR), Q(MAXPAR) LOGICAL DEBUG, RESTRT, TIMES, OKF, SCF1, RESFIL, LOG CHARACTER*241 KEYWRD SAVE ICALCN DATA ICALCN /0/ IF(ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL RESTRT=(INDEX(KEYWRD,'RESTART') .NE. 0) LOG=(INDEX(KEYWRD,'NOLOG') .EQ. 0) SCF1=(INDEX(KEYWRD,'1SCF') .NE. 0) TIME1=SECOND() TIME2=TIME1 ICYC=0 TIMES=(INDEX(KEYWRD,'TIME') .NE. 0) TLAST=TLEFT RESFIL=.FALSE. LAST=0 ILOOP=1 XINC=0.00529167D0 RHO2=1.D-4 TOL2=4.D-1 IF(INDEX(KEYWRD,'PREC') .NE. 0) TOL2=1.D-2 IF(INDEX(KEYWRD,'GNORM') .NE. 0) THEN TOL2=READA(KEYWRD,INDEX(KEYWRD,'GNORM')) IF(TOL2.LT.0.01.AND.INDEX(KEYWRD,' LET').EQ.0)THEN WRITE(6,'(/,A)')' GNORM HAS BEEN SET TOO LOW, RESET TO 0 1.01' TOL2=0.01D0 ENDIF ENDIF DEBUG = (INDEX(KEYWRD,'POWSQ') .NE. 0) IF(RESTRT) THEN C C RESTORE STORED DATA C IPOW(9)=0 CALL POWSAV(HESS,GMIN1,XPARAM,PMAT,ILOOP,BMAT,IPOW) IF(SCF1) GOTO 390 NSCF=IPOW(8) DO 10 I=1,NVAR GRAD(I)=GMIN1(I) 10 GNEXT1(I)=GMIN1(I) WRITE(6,'('' XPARAM'',6F10.6)')(XPARAM(I),I=1,NVAR) IF(ILOOP .GT. 0) THEN C# ILOOP=ILOOP+1 WRITE(6,'(//10X,'' RESTARTING AT POINT'',I3)')ILOOP ELSE WRITE(6,'(//10X,''RESTARTING IN OPTIMISATION'', 1 '' ROUTINES'')') ENDIF ENDIF * * DEFINITIONS: NVAR = NUMBER OF GEOMETRIC VARIABLES = 3*NUMAT-6 * ENDIF NVAR=ABS(NVAR) IF(DEBUG) THEN WRITE(6,'('' XPARAM'')') WRITE(6,'(5(2I3,F10.4))')(LOC(1,I),LOC(2,I),XPARAM(I),I=1,NVAR) ENDIF IF( .NOT. RESTRT) THEN DO 20 I=1,NVAR 20 GRAD(I)=0.D0 CALL COMPFG(XPARAM, .TRUE., FUNCT, .TRUE., GRAD, .TRUE.) ENDIF IF(DEBUG) THEN WRITE(6,'('' STARTING GRADIENTS'')') WRITE(6,'(3X,8F9.4)')(GRAD(I),I=1,NVAR) ENDIF GMIN=SQRT(DOT(GRAD,GRAD,NVAR)) DO 30 I=1,NVAR GNEXT1(I)=GRAD(I) GMIN1(I)=GNEXT1(I) 30 CONTINUE C C NOW TO CALCULATE THE HESSIAN MATRIX. C IF(ILOOP.LT.0) GOTO 140 C C CHECK THAT HESSIAN HAS NOT ALREADY BEEN CALCULATED. C ILPR=ILOOP DO 50 ILOOP=ILPR,NVAR TIME1=SECOND() XPARAM(ILOOP)=XPARAM(ILOOP) + XINC CALL COMPFG(XPARAM, .TRUE., FUNCT, .TRUE., GRAD, .TRUE.) IF(SCF1) GOTO 390 IF(DEBUG)WRITE(6,'(I3,12(8F9.4,/3X))') 1 ILOOP,(GRAD(IF),IF=1,NVAR) GRAD(ILOOP)=GRAD(ILOOP)+1.D-5 XPARAM(ILOOP)=XPARAM(ILOOP) - XINC DO 40 J=1,NVAR 40 HESS(ILOOP,J)=-(GRAD(J)-GNEXT1(J))/XINC TIME2=SECOND() TSTEP=TIME2-TIME1 IF(TIMES)WRITE(6,'('' TIME FOR STEP:'',F8.2,'' LEFT'',F8.2)') 1 TSTEP, TLEFT IF(TLAST-TLEFT.GT.TDUMP)THEN TLAST=TLEFT RESFIL=.TRUE. IPOW(9)=2 I=ILOOP IPOW(8)=NSCF CALL POWSAV(HESS,GMIN1,XPARAM,PMAT,I,BMAT,IPOW) ENDIF IF( TLEFT .LT. TSTEP*2.D0) THEN C C STORE RESULTS TO DATE. C IPOW(9)=1 I=ILOOP IPOW(8)=NSCF CALL POWSAV(HESS,GMIN1,XPARAM,PMAT,I,BMAT,IPOW) STOP ENDIF 50 CONTINUE C ***** SCALE -HESSIAN- MATRIX ***** IF( DEBUG) THEN WRITE(6,'(//10X,''UN-NORMALIZED HESSIAN MATRIX'')') DO 60 I=1,NVAR 60 WRITE(6,'(8F10.4)')(HESS(J,I),J=1,NVAR) ENDIF DO 80 I=1,NVAR SUM = 0.0D0 DO 70 J=1,NVAR 70 SUM = SUM+HESS(I,J)**2 80 WORK(I) = 1.0D0/SQRT(SUM) DO 90 I=1,NVAR DO 90 J=1,NVAR 90 HESS(I,J) = HESS(I,J)*WORK(I) IF( DEBUG) THEN WRITE(6,'(//10X,''HESSIAN MATRIX'')') DO 100 I=1,NVAR 100 WRITE(6,'(8F10.4)')(HESS(J,I),J=1,NVAR) ENDIF C ***** INITIALIZE B MATIRX ***** DO 120 I=1,NVAR DO 110 J=1,NVAR 110 BMAT(I,J) = 0.0D0 120 BMAT(I,I) = WORK(I)*2.D0 ************************************************************************ * * THIS IS THE START OF THE BIG LOOP TO OPTIMIZE THE GEOMETRY * ************************************************************************ ILOOP=-99 TSTEP=TSTEP*4 130 CONTINUE IF(TLAST-TLEFT.GT.TDUMP)THEN TLAST=TLEFT RESFIL=.TRUE. IPOW(9)=2 I=ILOOP IPOW(8)=NSCF CALL POWSAV(HESS,GMIN1,XPARAM,PMAT,I,BMAT,IPOW) ENDIF IF( TLEFT .LT. TSTEP*2.D0) THEN C C STORE RESULTS TO DATE. C IPOW(9)=1 I=ILOOP IPOW(8)=NSCF CALL POWSAV(HESS,GMIN1,XPARAM,PMAT,I,BMAT,IPOW) IFLEPO=-1 RETURN ENDIF 140 CONTINUE C ***** FORM-A- DAGGER-A- IN PA SLONG WITH -P- ***** IJ=0 DO 160 J=1,NVAR DO 160 I=1,J IJ=IJ+1 SUM = 0.0D0 DO 150 K=1,NVAR 150 SUM = SUM + HESS(I,K)*HESS(J,K) 160 PMAT(IJ) = SUM DO 180 I=1,NVAR SUM = 0.0D0 DO 170 K=1,NVAR 170 SUM = SUM-HESS(I,K)*GMIN1(K) 180 P(I) = -SUM L=0 IF(DEBUG) THEN WRITE(6,'(/10X,''P MATRIX IN POWSQ'')') CALL VECPRT(PMAT,NVAR) ENDIF CALL RSP(PMAT,NVAR,NVAR,EIG,PVEC) C ***** CHECK FOR ZERO EIGENVALUE ***** C# WRITE(6,'('' EIGS IN POWSQ:'')') C# WRITE(6,'(6F13.8)')(EIG(I),I=1,NVAR) IF(EIG(1).LT.RHO2) GO TO 240 C ***** IF MATRIX IS NOT SINGULAR FORM INVERSE ***** C ***** BY BACK TRANSFORMING THE EIGENVECTORS ***** IJ=0 DO 200 I=1,NVAR DO 200 J=1,I IJ=IJ+1 SUM = 0.0D0 DO 190 K=1,NVAR 190 SUM = SUM+PVEC((K-1)*NVAR+J)*PVEC((K-1)*NVAR+I)/EIG(K) 200 PMAT(IJ) = SUM C ***** FIND -Q- VECTOR ***** L=0 IL=L+1 L=IL+I-1 DO 230 I=1,NVAR SUM = 0.0D0 DO 210 K=1,I IK=(I*(I-1))/2+K 210 SUM = SUM+PMAT(IK)*P(K) IP1=I+1 DO 220 K=IP1,NVAR IK=(K*(K-1))/2+I 220 SUM=SUM+PMAT(IK)*P(K) 230 Q(I) = SUM GO TO 260 240 CONTINUE C ***** TAKE -Q- VECTOR AS EIGENVECTOR OF ZERO ***** C ***** EIGENVALUE ***** DO 250 I=1,NVAR 250 Q(I) = PVEC(I) 260 CONTINUE C ***** FIND SEARCH DIRECTION ***** DO 270 I=1,NVAR SIG(I) = 0.0D0 DO 270 J=1,NVAR 270 SIG(I) = SIG(I) + Q(J)*BMAT(I,J) C ***** DO A ONE DIMENSIONAL SEARCH ***** IF (DEBUG) THEN WRITE(6,'('' SEARCH VECTOR'')') WRITE(6,'(8F10.5)')(SIG(I),I=1,NVAR) ENDIF CALL SEARCH(XPARAM, ALPHA, SIG, NVAR, GMIN, OKF, FUNCT) IF( NVAR .EQ. 1) GOTO 390 C C FIRST WE ATTEMPT TO OPTIMIZE GEOMETRY USING SEARCH. C IF THIS DOES NOT WORK, THEN SWITCH TO LINMIN, WHICH ALWAYS WORKS, C BUT IS TWICE AS SLOW AS SEARCH. C RMX = 0.0D0 DO 280 K=1,NVAR RT = ABS(GMIN1(K)) IF(RT.GT.RMX)RMX = RT 280 CONTINUE IF(RMX.LT.TOL2) GO TO 390 C ***** TWO STEP ESTIMATION OF DERIVATIVES ***** DO 290 K=1,NVAR 290 E1(K) = (GMIN1(K)-GNEXT1(K))/(AMIN-ANEXT) RMU = DOT(E1,GMIN1,NVAR)/DOT(GMIN1,GMIN1,NVAR) DO 300 K=1,NVAR 300 E2(K) = E1(K) - RMU*GMIN1(K) C ***** SCALE -E2- AND -SIG- ***** SK = 1.0D0/SQRT(DOT(E2,E2,NVAR)) DO 310 K=1,NVAR 310 SIG(K) = SK*SIG(K) DO 320 K=1,NVAR 320 E2(K) = SK*E2(K) C ***** FIND INDEX OF REPLACEMENT DIRECTION ***** PMAX = -1.0D+20 DO 330 I=1,NVAR IF(ABS(P(I)*Q(I)).LE.PMAX) GO TO 330 PMAX = ABS(P(I)*Q(I)) ID = I 330 CONTINUE C ***** REPLACE APPROPRIATE DIRECTION AND DERIVATIVE *** DO 340 K=1,NVAR 340 HESS(ID,K) = -E2(K) C ***** REPLACE STARTING POINT ***** DO 350 K=1,NVAR 350 BMAT(K,ID) = SIG(K)/0.529167D0 DO 360 K=1,NVAR 360 GNEXT1(K) = GMIN1(K) TIME1=TIME2 TIME2=SECOND() TLEFT=TLEFT-TIME2+TIME0 TSTEP=TIME2-TIME1 ICYC=ICYC+1 IF(RESFIL)THEN WRITE(6,370)MIN(TLEFT,9999999.9D0), 1MIN(GMIN,999999.999D0),FUNCT IF(LOG)WRITE(11,370)MIN(TLEFT,9999999.9D0), 1MIN(GMIN,999999.999D0),FUNCT 370 FORMAT(' RESTART FILE WRITTEN, TIME LEFT:',F9.1, 1' GRAD.:',F10.3,' HEAT:',G14.7) RESFIL=.FALSE. ELSE WRITE(6,380)ICYC,MIN(TSTEP,9999.99D0), 1MIN(TLEFT,9999999.9D0),MIN(GMIN,999999.999D0),FUNCT IF(LOG)WRITE(11,380)ICYC,MIN(TSTEP,9999.99D0), 1MIN(TLEFT,9999999.9D0),MIN(GMIN,999999.999D0),FUNCT 380 FORMAT(' CYCLE:',I5,' TIME:',F6.1,' TIME LEFT:',F9.1, 1' GRAD.:',F10.3,' HEAT:',G14.7) ENDIF IF(TIMES)WRITE(6,'('' TIME FOR STEP:'',F8.2,'' LEFT'',F8.2)') 1TSTEP, TLEFT GO TO 130 390 CONTINUE DO 400 I=1,NVAR 400 GRAD(I)=0.D0 LAST=1 CALL COMPFG(XPARAM, .TRUE., FUNCT, .TRUE., GRAD, .TRUE.) DO 410 I=1,NVAR 410 GRAD(I)=GMIN1(I) GNFINA=SQRT(DOT(GRAD,GRAD,NVAR)) IFLEPO=11 IF(SCF1)IFLEPO=13 RETURN END mopac7-1.15/fortran/delri.f0000644000175000017500000001736511053302063012475 00000000000000 SUBROUTINE DELRI(DG,NI,NJ,RR,DEL1) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION DG(22) ************************************************************************ * * * ON INPUT NI = ATOMIC NUMBER OF FIRST ATOM * * NJ = ATOMIC NUMBER OF SECOND ATOM * * RR = INTERATOMIC DISTANCE IN BOHRS * * * ************************************************************************ COMMON /MULTIP/ DD(107),QQ(107),BDD(107,3) COMMON /TWOEL3/ F03(107) COMMON /NATORB/ NATORB(107) COMMON /ALPHA3/ ALP3(153) COMMON /KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL CHARACTER*241 KEYWRD DATA ICALCN/0/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL ENDIF A0=0.529167D0 TERM=(27.21D0*DEL1)/(RR*A0*A0) DA=DD(NI) DB=DD(NJ) QA=QQ(NI) QB=QQ(NJ) C HYDROGEN-HYDROGEN AEE=0.25D0*(1.0D0/BDD(NI,1)+1.0D0/BDD(NJ,1))**2 EE =-RR/(SQRT(RR**2+AEE))**3 DG(1)=TERM*EE IF(NATORB(NI).LE.2.AND.NATORB(NJ).LE.2) RETURN IF(NATORB(NI).LE.2) GO TO 10 C HEAVY ATOM-HYDROGEN ADE=0.25D0*(1.0D0/BDD(NI,2)+1.0D0/BDD(NJ,1))**2 AQE=0.25D0*(1.0D0/BDD(NI,3)+1.0D0/BDD(NJ,1))**2 DZE = (RR+DA)/(SQRT((RR+DA)**2+ADE))**3 1 -(RR-DA)/(SQRT((RR-DA)**2+ADE))**3 QZZE =-(RR+2.0D0*QA)/(SQRT((RR+2.0D0*QA)**2+AQE))**3 1 -(RR-2.0D0*QA)/(SQRT((RR-2.0D0*QA)**2+AQE))**3 2 +(2.0D0*RR)/(SQRT(RR**2+AQE))**3 QXXE =-(2.0D0*RR)/(SQRT(RR**2+4.0D0*QA**2+AQE))**3 1 +(2.0D0*RR)/(SQRT(RR**2+AQE))**3 DG(2)=-(TERM*DZE)/2.0D0 DG(3)=TERM*(EE+QZZE/4.0D0) DG(4)=TERM*(EE+QXXE/4.0D0) IF(NATORB(NJ).LE.2) RETURN C HYDROGEN-HEAVY ATOM 10 AED=0.25D0*(1.0D0/BDD(NI,1)+1.0D0/BDD(NJ,2))**2 AEQ=0.25D0*(1.0D0/BDD(NI,1)+1.0D0/BDD(NJ,3))**2 EDZ = (RR-DB)/(SQRT((RR-DB)**2+AED))**3 1 -(RR+DB)/(SQRT((RR+DB)**2+AED))**3 EQZZ =-(RR-2.0D0*QB)/(SQRT((RR-2.0D0*QB)**2+AEQ))**3 1 -(RR+2.0D0*QB)/(SQRT((RR+2.0D0*QB)**2+AEQ))**3 2 +(2.0D0*RR)/(SQRT(RR**2+AEQ))**3 EQXX =-(2.0D0*RR)/(SQRT(RR**2+4.0D0*QB**2+AEQ))**3 1 +(2.0D0*RR)/(SQRT(RR**2+AEQ))**3 DG(5)=-(TERM*EDZ)/2.0D0 DG(11)=TERM*(EE+EQZZ/4.0D0) DG(12)=TERM*(EE+EQXX/4.0D0) IF(NATORB(NI).LE.2) RETURN C HEAVY ATOM-HEAVY ATOM ADD=0.25D0*(1.D0/BDD(NI,2)+1.D0/BDD(NJ,2))**2 ADQ=0.25D0*(1.D0/BDD(NI,2)+1.D0/BDD(NJ,3))**2 AQD=0.25D0*(1.D0/BDD(NI,3)+1.D0/BDD(NJ,2))**2 AQQ=0.25D0*(1.D0/BDD(NI,3)+1.D0/BDD(NJ,3))**2 DXDX =-(2.D0*RR)/(SQRT(RR**2+(DA-DB)**2+ADD))**3 1 +(2.D0*RR)/(SQRT(RR**2+(DA+DB)**2+ADD))**3 DZDZ =-(RR+DA-DB)/(SQRT((RR+DA-DB)**2+ADD))**3 1 -(RR-DA+DB)/(SQRT((RR-DA+DB)**2+ADD))**3 2 +(RR-DA-DB)/(SQRT((RR-DA-DB)**2+ADD))**3 3 +(RR+DA+DB)/(SQRT((RR+DA+DB)**2+ADD))**3 DZQXX = 2.D0*(RR+DA)/(SQRT((RR+DA)**2+4.D0*QB**2+ADQ))**3 1 -2.D0*(RR-DA)/(SQRT((RR-DA)**2+4.D0*QB**2+ADQ))**3 2 -2.D0*(RR+DA)/(SQRT((RR+DA)**2+ADQ))**3 3 +2.D0*(RR-DA)/(SQRT((RR-DA)**2+ADQ))**3 QXXDZ = 2.D0*(RR-DB)/(SQRT((RR-DB)**2+4.D0*QA**2+AQD))**3 1 -2.D0*(RR+DB)/(SQRT((RR+DB)**2+4.D0*QA**2+AQD))**3 2 -2.D0*(RR-DB)/(SQRT((RR-DB)**2+AQD))**3 3 +2.D0*(RR+DB)/(SQRT((RR+DB)**2+AQD))**3 DZQZZ = (RR+DA-2.D0*QB)/(SQRT((RR+DA-2.D0*QB)**2+ADQ))**3 1 -(RR-DA-2.D0*QB)/(SQRT((RR-DA-2.D0*QB)**2+ADQ))**3 2 +(RR+DA+2.D0*QB)/(SQRT((RR+DA+2.D0*QB)**2+ADQ))**3 3 -(RR-DA+2.D0*QB)/(SQRT((RR-DA+2.D0*QB)**2+ADQ))**3 4 +2.D0*(RR-DA)/(SQRT((RR-DA)**2+ADQ))**3 5 -2.D0*(RR+DA)/(SQRT((RR+DA)**2+ADQ))**3 QZZDZ = (RR+2.D0*QA-DB)/(SQRT((RR+2.D0*QA-DB)**2+AQD))**3 1 -(RR+2.D0*QA+DB)/(SQRT((RR+2.D0*QA+DB)**2+AQD))**3 2 +(RR-2.D0*QA-DB)/(SQRT((RR-2.D0*QA-DB)**2+AQD))**3 3 -(RR-2.D0*QA+DB)/(SQRT((RR-2.D0*QA+DB)**2+AQD))**3 4 -2.D0*(RR-DB)/(SQRT((RR-DB)**2+AQD))**3 5 +2.D0*(RR+DB)/(SQRT((RR+DB)**2+AQD))**3 QXXQXX=-(2.D0*RR)/(SQRT(RR**2+4.D0*(QA-QB)**2+AQQ))**3 1 -(2.D0*RR)/(SQRT(RR**2+4.D0*(QA+QB)**2+AQQ))**3 2 +(4.D0*RR)/(SQRT(RR**2+4.D0*QA**2+AQQ))**3 3 +(4.D0*RR)/(SQRT(RR**2+4.D0*QB**2+AQQ))**3 4 -(4.D0*RR)/(SQRT(RR**2+AQQ))**3 QXXQYY=-(4.D0*RR)/(SQRT(RR**2+4.D0*QA**2+4.D0*QB**2+AQQ))**3 1 +(4.D0*RR)/(SQRT(RR**2+4.D0*QA**2+AQQ))**3 2 +(4.D0*RR)/(SQRT(RR**2+4.D0*QB**2+AQQ))**3 3 -(4.D0*RR)/(SQRT(RR**2+AQQ))**3 QXXQZZ= 1 -2.D0*(RR-2.D0*QB)/(SQRT((RR-2.D0*QB)**2+4.D0*QA**2+AQQ))**3 2 -2.D0*(RR+2.D0*QB)/(SQRT((RR+2.D0*QB)**2+4.D0*QA**2+AQQ))**3 3 +2.D0*(RR-2.D0*QB)/(SQRT((RR-2.D0*QB)**2+AQQ))**3 4 +2.D0*(RR+2.D0*QB)/(SQRT((RR+2.D0*QB)**2+AQQ))**3 5 +(4.D0*RR)/(SQRT(RR**2+4.D0*QA**2+AQQ))**3 6 -(4.D0*RR)/(SQRT(RR**2+AQQ))**3 QZZQXX= 1 -2.D0*(RR+2.D0*QA)/(SQRT((RR+2.D0*QA)**2+4.D0*QB**2+AQQ))**3 2 -2.D0*(RR-2.D0*QA)/(SQRT((RR-2.D0*QA)**2+4.D0*QB**2+AQQ))**3 3 +2.D0*(RR+2.D0*QA)/(SQRT((RR+2.D0*QA)**2+AQQ))**3 4 +2.D0*(RR-2.D0*QA)/(SQRT((RR-2.D0*QA)**2+AQQ))**3 5 +(4.D0*RR)/(SQRT(RR**2+4.D0*QB**2+AQQ))**3 6 -(4.D0*RR)/(SQRT(RR**2+AQQ))**3 QZZQZZ= 1 -(RR+2.D0*QA-2.D0*QB)/(SQRT((RR+2.D0*QA-2.D0*QB)**2+AQQ))**3 2 -(RR+2.D0*QA+2.D0*QB)/(SQRT((RR+2.D0*QA+2.D0*QB)**2+AQQ))**3 3 -(RR-2.D0*QA-2.D0*QB)/(SQRT((RR-2.D0*QA-2.D0*QB)**2+AQQ))**3 4 -(RR-2.D0*QA+2.D0*QB)/(SQRT((RR-2.D0*QA+2.D0*QB)**2+AQQ))**3 5 +2.D0*(RR-2.D0*QA)/(SQRT((RR-2.D0*QA)**2+AQQ))**3 6 +2.D0*(RR+2.D0*QA)/(SQRT((RR+2.D0*QA)**2+AQQ))**3 7 +2.D0*(RR-2.D0*QB)/(SQRT((RR-2.D0*QB)**2+AQQ))**3 8 +2.D0*(RR+2.D0*QB)/(SQRT((RR+2.D0*QB)**2+AQQ))**3 9 -(4.D0*RR)/(SQRT(RR**2+AQQ))**3 DXQXZ = 2.D0*(RR-QB)/(SQRT((RR-QB)**2+(DA-QB)**2+ADQ))**3 1 -2.D0*(RR+QB)/(SQRT((RR+QB)**2+(DA-QB)**2+ADQ))**3 2 -2.D0*(RR-QB)/(SQRT((RR-QB)**2+(DA+QB)**2+ADQ))**3 3 +2.D0*(RR+QB)/(SQRT((RR+QB)**2+(DA+QB)**2+ADQ))**3 QXZDX = 2.D0*(RR+QA)/(SQRT((RR+QA)**2+(QA-DB)**2+AQD))**3 1 -2.D0*(RR-QA)/(SQRT((RR-QA)**2+(QA-DB)**2+AQD))**3 2 -2.D0*(RR+QA)/(SQRT((RR+QA)**2+(QA+DB)**2+AQD))**3 3 +2.D0*(RR-QA)/(SQRT((RR-QA)**2+(QA+DB)**2+AQD))**3 QXZQXZ=-2.D0*(RR+QA-QB)/(SQRT((RR+QA-QB)**2+(QA-QB)**2+AQQ))**3 1 +2.D0*(RR+QA+QB)/(SQRT((RR+QA+QB)**2+(QA-QB)**2+AQQ))**3 2 +2.D0*(RR-QA-QB)/(SQRT((RR-QA-QB)**2+(QA-QB)**2+AQQ))**3 3 -2.D0*(RR-QA+QB)/(SQRT((RR-QA+QB)**2+(QA-QB)**2+AQQ))**3 4 +2.D0*(RR+QA-QB)/(SQRT((RR+QA-QB)**2+(QA+QB)**2+AQQ))**3 5 -2.D0*(RR+QA+QB)/(SQRT((RR+QA+QB)**2+(QA+QB)**2+AQQ))**3 6 -2.D0*(RR-QA-QB)/(SQRT((RR-QA-QB)**2+(QA+QB)**2+AQQ))**3 7 +2.D0*(RR-QA+QB)/(SQRT((RR-QA+QB)**2+(QA+QB)**2+AQQ))**3 DG(6)=(TERM*DZDZ)/4.0D0 DG(7)=(TERM*DXDX)/4.0D0 DG(8)=-TERM*(EDZ/2.0D0+QZZDZ/8.0D0) DG(9)=-TERM*(EDZ/2.0D0+QXXDZ/8.0D0) DG(10)=-(TERM*QXZDX)/8.0D0 DG(13)=-TERM*(DZE/2.0D0+DZQZZ/8.0D0) DG(14)=-TERM*(DZE/2.0D0+DZQXX/8.0D0) DG(15)=-(TERM*DXQXZ)/8.0D0 DG(16)=TERM*(EE+EQZZ/4.0D0+QZZE/4.0D0+QZZQZZ/16.0D0) DG(17)=TERM*(EE+EQZZ/4.0D0+QXXE/4.0D0+QXXQZZ/16.0D0) DG(18)=TERM*(EE+EQXX/4.0D0+QZZE/4.0D0+QZZQXX/16.0D0) DG(19)=TERM*(EE+EQXX/4.0D0+QXXE/4.0D0+QXXQXX/16.0D0) DG(20)=(TERM*QXZQXZ)/16.0D0 DG(21)=TERM*(EE+EQXX/4.0D0+QXXE/4.0D0+QXXQYY/16.0D0) DG(22)=TERM*(QXXQXX-QXXQYY)/32.0D0 RETURN END mopac7-1.15/fortran/h1elec.f0000644000175000017500000000661411053302063012532 00000000000000 SUBROUTINE H1ELEC(NI,NJ,XI,XJ,SMAT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION XI(3),XJ(3),SMAT(9,9), BI(9), BJ(9) C*********************************************************************** C C H1ELEC FORMS THE ONE-ELECTRON MATRIX BETWEEN TWO ATOMS. C C ON INPUT NI = ATOMIC NO. OF FIRST ATOM. C NJ = ATOMIC NO. OF SECOND ATOM. C XI = COORDINATES OF FIRST ATOM. C XJ = COORDINATES OF SECOND ATOM. C C ON OUTPUT SMAT = MATRIX OF ONE-ELECTRON INTERACTIONS. C C*********************************************************************** COMMON /BETAS / BETAS(107),BETAP(107),BETAD(107) COMMON /MOLMEC/ HTYPE(4),NHCO(4,20),NNHCO,ITYPE COMMON /BETA3 / BETA3(153) COMMON /KEYWRD/ KEYWRD COMMON /EULER / TVEC(3,3), ID COMMON /VSIPS / VS(107),VP(107),VD(107) COMMON /NATORB/ NATORB(107) COMMON /NUMCAL/ NUMCAL COMMON /UCELL / L1L,L2L,L3L,L1U,L2U,L3U SAVE SBITS, XJUC DIMENSION SBITS(9,9), LIMS(3,2), XJUC(3) CHARACTER*241 KEYWRD EQUIVALENCE (L1L,LIMS(1,1)) DATA ICALCN/0/ IF(NI.EQ.102.OR.NJ.EQ.102)THEN IF(SQRT((XI(1)-XJ(1))**2+ 1 (XI(2)-XJ(2))**2+ 2 (XI(3)-XJ(3))**2) .GT.1.8)THEN DO 10 I=1,9 DO 10 J=1,9 10 SMAT(I,J)=0.D0 RETURN ENDIF ENDIF IF(ID.EQ.0) THEN IF (ICALCN.NE.NUMCAL) ICALCN=NUMCAL CALL DIAT(NI,NJ,XI,XJ,SMAT) ELSE IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL DO 20 I=1,ID LIMS(I,1)=-1 20 LIMS(I,2)= 1 DO 30 I=ID+1,3 LIMS(I,1)=0 30 LIMS(I,2)=0 ENDIF DO 40 I=1,9 DO 40 J=1,9 40 SMAT(I,J)=0 DO 70 I=L1L,L1U DO 70 J=L2L,L2U DO 70 K=L3L,L3U DO 50 L=1,3 50 XJUC(L)=XJ(L)+TVEC(L,1)*I+TVEC(L,2)*J+TVEC(L,3)*K CALL DIAT(NI,NJ,XI,XJUC,SBITS) DO 60 L=1,9 DO 60 M=1,9 60 SMAT(L,M)=SMAT(L,M)+SBITS(L,M) 70 CONTINUE ENDIF IF(ITYPE.NE.4) GOTO 80 C C START OF MNDO, AM1, OR PM3 OPTION C II=MAX(NI,NJ) NBOND=(II*(II-1))/2+NI+NJ-II IF(NBOND.GT.153)GOTO 90 BI(1)=BETA3(NBOND)*VS(NI) BI(2)=BETA3(NBOND)*VP(NI) BI(3)=BI(2) BI(4)=BI(2) BJ(1)=BETA3(NBOND)*VS(NJ) BJ(2)=BETA3(NBOND)*VP(NJ) BJ(3)=BJ(2) BJ(4)=BJ(2) GOTO 90 80 CONTINUE BI(1)=BETAS(NI)*0.5D0 BI(2)=BETAP(NI)*0.5D0 BI(3)=BI(2) BI(4)=BI(2) BI(5)=BETAD(NI)*0.5D0 BI(6)=BI(5) BI(7)=BI(5) BI(8)=BI(5) BI(9)=BI(5) BJ(1)=BETAS(NJ)*0.5D0 BJ(2)=BETAP(NJ)*0.5D0 BJ(3)=BJ(2) BJ(4)=BJ(2) BJ(5)=BETAD(NJ)*0.5D0 BJ(6)=BJ(5) BJ(7)=BJ(5) BJ(8)=BJ(5) BJ(9)=BJ(5) 90 CONTINUE NORBI=NATORB(NI) NORBJ=NATORB(NJ) IF(NORBI.EQ.9.OR.NORBJ.EQ.9) THEN C C IN THE CALCULATION OF THE ONE-ELECTRON TERMS THE GEOMETRIC MEAN C OF THE TWO BETA VALUES IS BEING USED IF ONE OF THE ATOMS C CONTAINS D-ORBITALS. DO 100 J=1,NORBJ DO 100 I=1,NORBI 100 SMAT(I,J)=-2.0D0*SMAT(I,J)*SQRT(BI(I)*BJ(J)) ELSE DO 110 J=1,NORBJ DO 110 I=1,NORBI 110 SMAT(I,J)=SMAT(I,J)*(BI(I)+BJ(J)) ENDIF RETURN END mopac7-1.15/fortran/mecih.f0000644000175000017500000000334511053302064012455 00000000000000 SUBROUTINE MECIH(DIAG,CIMAT,NMOS,LAB) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION DIAG(*),CIMAT(*) C C BUILD THE C.I. MATRIX 'CIMAT' IN PACKED CANONICAL FORM. C COMMON /SPQR / ISPQR(NMECI**2,NMECI),IS,I,K COMMON /NALMAT/ NALPHA(NMECI**2) COMMON /MICROS/ MICROA(NMECI,4*NMECI**2), MICROB(NMECI,4*NMECI**2) C IK=0 C C OUTER LOOP TO FILL C.I. MATRIX. DO 30 I=1,LAB IS=2 C C INNER LOOP. DO 20 K=1,I IK=IK+1 CIMAT(IK)=0.D0 IX=0 IY=0 DO 10 J=1,NMOS IX=IX+ABS(MICROA(J,I)-MICROA(J,K)) 10 IY=IY+ABS(MICROB(J,I)-MICROB(J,K)) C C CHECK IF MATRIX ELEMENT HAS TO BE ZERO C IF(IX+IY.GT.4 .OR. NALPHA(I).NE.NALPHA(K)) GO TO 20 IF(IX+IY.EQ.4) THEN IF(IX.EQ.0)THEN CIMAT(IK)=BABBCD(MICROA(1,I),MICROB(1,I) 1 ,MICROA(1,K),MICROB(1,K),NMOS) ELSE IF(IX.EQ.2) THEN CIMAT(IK)=AABBCD(MICROA(1,I),MICROB(1,I) 1 ,MICROA(1,K),MICROB(1,K),NMOS) ELSE CIMAT(IK)=AABACD(MICROA(1,I),MICROB(1,I) 1 ,MICROA(1,K),MICROB(1,K),NMOS) ENDIF ELSE IF(IX.EQ.2) THEN CIMAT(IK)=AABABC(MICROA(1,I),MICROB(1,I) 1 ,MICROA(1,K),NMOS) ELSE IF(IY.EQ.2) THEN CIMAT(IK)=BABBBC(MICROA(1,I),MICROB(1,I) 1 ,MICROB(1,K),NMOS) ELSE CIMAT(IK)=DIAG(I) ENDIF 20 CONTINUE 30 ISPQR(I,1)=IS-1 RETURN END mopac7-1.15/fortran/deriv.f0000644000175000017500000002254711053302064012506 00000000000000 SUBROUTINE DERIV(GEO,GRAD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION GRAD(*), GEO(3,*) ************************************************************************ * * DERIV CALCULATES THE DERIVATIVES OF THE ENERGY WITH RESPECT TO THE * INTERNAL COORDINATES. THIS IS DONE BY FINITE DIFFERENCES. * * THE MAIN ARRAYS IN DERIV ARE: * LOC INTEGER ARRAY, LOC(1,I) CONTAINS THE ADDRESS OF THE ATOM * INTERNAL COORDINATE LOC(2,I) IS TO BE USED IN THE * DERIVATIVE CALCULATION. * GEO ARRAY \GEO\ HOLDS THE INTERNAL COORDINATES. * GRAD ON EXIT, CONTAINS THE DERIVATIVES * ************************************************************************ COMMON / EULER/ TVEC(3,3), ID COMMON /OKMANY/ ISOK COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, DUMMY(MAXPAR) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GRAVEC/ COSINE COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1LOCDEP(MAXPAR) COMMON /PATH / LATOM,LPARAM,REACT(200) COMMON /UCELL / L1L,L2L,L3L,L1U,L2U,L3U COMMON /XYZGRA/ DXYZ(9*NUMATM) COMMON /ENUCLR/ ENUCLR COMMON /NUMCAL/ NUMCAL COMMON /HMATRX/ H(MPACK) COMMON /ATHEAT/ ATHEAT COMMON /KEYWRD/ KEYWRD COMMON /ERRFN / ERRFN(MAXPAR), AICORR(MAXPAR) COMMON /WORK3 / WORK2(4*MPACK) COMMON /GENRAL/ COORD(3,NUMATM), COLD(3,NUMATM*3), GOLD(MAXPAR), 1 XPARAM(MAXPAR) CHARACTER*241 KEYWRD, LINE*80, GETNAM*80 DIMENSION CHANGE(3), XJUC(3), AIDREF(MAXPAR) SAVE SCF1, HALFE, IDELTA, SLOW LOGICAL DEBUG, HALFE, SCF1, CI, PRECIS, SLOW, AIC, NOANCI, 1AIFRST, ISOK, GEOOK, INT DATA ICALCN /0/ IF(ICALCN.NE.NUMCAL) THEN AIFRST= (INDEX(KEYWRD,'RESTART').EQ.0) DEBUG = (INDEX(KEYWRD,'DERIV') .NE. 0) PRECIS= (INDEX(KEYWRD,'PREC') .NE. 0) INT = (INDEX(KEYWRD,' XYZ') .EQ. 0) GEOOK = (INDEX(KEYWRD,'GEO-OK') .NE. 0) CI = (INDEX(KEYWRD,'C.I.') .NE. 0) SCF1 = (INDEX(KEYWRD,'1SCF') .NE. 0) AIC=(INDEX(KEYWRD,'AIDER').NE.0) ICAPA=ICHAR('A') ILOWA=ICHAR('a') ILOWZ=ICHAR('z') IF(AIC.AND.AIFRST)THEN OPEN(UNIT=5,FILE=GETNAM('FOR005'),STATUS='OLD',BLANK='ZERO') REWIND 5 C C ISOK IS SET FALSE: ONLY ONE SYSTEM ALLOWED C ISOK=.FALSE. DO 10 I=1,3 10 READ(5,'(A)')LINE DO 30 J=1,1000 READ(5,'(A)',END=40,ERR=40)LINE ************************************************************************ DO 20 I=1,80 ILINE=ICHAR(LINE(I:I)) IF(ILINE.GE.ILOWA.AND.ILINE.LE.ILOWZ) THEN LINE(I:I)=CHAR(ILINE+ICAPA-ILOWA) ENDIF 20 CONTINUE ************************************************************************ 30 IF(INDEX(LINE,'AIDER').NE.0)GOTO 60 40 WRITE(6,'(//,A)')' KEYWORD "AIDER" SPECIFIED, BUT NOT' WRITE(6,'(A)')' PRESENT AFTER Z-MATRIX. JOB STOPPED' STOP 50 WRITE(6,'(//,A)')' FAULT IN READ OF AB INITIO DERIVATIVES' WRITE(6,'(A)')' DERIVATIVES READ IN ARE AS FOLLOWS' WRITE(6,'(6F12.6)')(AIDREF(J),J=1,I) STOP 60 CONTINUE IF(NATOMS.GT.2)THEN J=3*NATOMS-6 ELSE J=1 ENDIF READ(5,*,END=50,ERR=50)(AIDREF(I),I=1,J) WRITE(6,'(/,A,/)') 1' AB-INITIO DERIVATIVES IN KCAL/MOL/(ANGSTROM OR RADIAN)' WRITE(6,'(5F12.6)')(AIDREF(I),I=1,J) DO 70 I=1,NVAR IF(LOC(1,I).GT.3)THEN J=3*LOC(1,I)+LOC(2,I)-9 ELSEIF(LOC(1,I).EQ.3)THEN J=LOC(2,I)+1 ELSE J=1 ENDIF 70 AIDREF(I)=AIDREF(J) WRITE(6,'(/,A,/)') 1' AB-INITIO DERIVATIVES FOR VARIABLES' WRITE(6,'(5F12.6)')(AIDREF(I),I=1,NVAR) IF(NDEP.NE.0)THEN DO 90 I=1,NVAR SUM=AIDREF(I) DO 80 J=1,NDEP IF(LOC(1,I).EQ.LOCPAR(J).AND.(LOC(2,I).EQ.IDEPFN(J) 1.OR.LOC(2,I).EQ.3.AND.IDEPFN(J).EQ.14)) AIDREF(I)=AIDREF(I)+SUM 80 CONTINUE 90 CONTINUE WRITE(6,'(/,A,/)') 1' AB-INITIO DERIVATIVES AFTER SYMMETRY WEIGHTING' WRITE(6,'(5F12.6)')(AIDREF(J),J=1,NVAR) ENDIF ENDIF ICALCN=NUMCAL IF(INDEX(KEYWRD,'RESTART') .EQ. 0) THEN DO 100 I=1,NVAR 100 ERRFN(I)=0.D0 ENDIF GRLIM=0.01D0 IF(PRECIS)GRLIM=0.0001D0 HALFE = (NOPEN.GT.NCLOSE.AND.FRACT.NE.2.D0.AND.FRACT.NE.0.D0 1 .OR. CI) IDELTA=-7 * * IDELTA IS A MACHINE-PRECISION DEPENDANT INTEGER * CHANGE(1)= 10.D0**IDELTA CHANGE(2)= 10.D0**IDELTA CHANGE(3)= 10.D0**IDELTA C C CHANGE(I) IS THE STEP SIZE USED IN CALCULATING THE DERIVATIVES. C FOR "CARTESIAN" DERIVATIVES, CALCULATED USING DCART,AN C INFINITESIMAL STEP, HERE 0.000001, IS ACCEPTABLE. IN THE C HALF-ELECTRON METHOD A QUITE LARGE STEP IS NEEDED AS FULL SCF C CALCULATIONS ARE NEEDED, AND THE DIFFERENCE BETWEEN THE TOTAL C ENERGIES IS USED. THE STEP CANNOT BE VERY LARGE, AS THE SECOND C DERIVITIVE IN FLEPO IS CALCULATED FROM THE DIFFERENCES OF TWO C FIRST DERIVATIVES. CHANGE(1) IS FOR CHANGE IN BOND LENGTH, C (2) FOR ANGLE, AND (3) FOR DIHEDRAL. C ENDIF IF(NVAR.EQ.0) RETURN IF(DEBUG)THEN WRITE(6,'('' GEO AT START OF DERIV'')') WRITE(6,'(F19.5,2F12.5)')((GEO(J,I),J=1,3),I=1,NATOMS) ENDIF GNORM=0.D0 DO 110 I=1,NVAR GOLD(I)=GRAD(I) XPARAM(I)=GEO(LOC(2,I),LOC(1,I)) 110 GNORM=GNORM+GRAD(I)**2 GNORM=SQRT(GNORM) SLOW=.FALSE. NOANCI=.FALSE. IF(HALFE) THEN NOANCI=(INDEX(KEYWRD,'NOANCI').NE.0 .OR. NOPEN.EQ.NORBS) SLOW=(NOANCI.AND.(GNORM .LT. GRLIM .OR. SCF1)) ENDIF IF(NDEP.NE.0) CALL SYMTRY CALL GMETRY(GEO,COORD) C C COORD NOW HOLDS THE CARTESIAN COORDINATES C IF(HALFE.AND..NOT.NOANCI) THEN IF(DEBUG)WRITE(6,*) 'DOING ANALYTICAL C.I. DERIVATIVES' CALL DERNVO(COORD,DXYZ) ELSE IF(DEBUG)WRITE(6,*) 'DOING VARIATIONALLY OPIMIZED DERIVATIVES' CALL DCART(COORD,DXYZ) ENDIF IJ=0 DO 150 II=1,NUMAT DO 140 IL=L1L,L1U DO 140 JL=L2L,L2U DO 140 KL=L3L,L3U C$DOIT ASIS DO 120 LL=1,3 120 XJUC(LL)=COORD(LL,II)+TVEC(LL,1)*IL+TVEC(LL,2)*JL+TVEC 1(LL,3)*KL IJ=IJ+1 C$DOIT ASIS DO 130 KK=1,3 COLD(KK,IJ)=XJUC(KK) 130 CONTINUE 140 CONTINUE 150 CONTINUE STEP=CHANGE(1) CALL JCARIN (COORD,XPARAM,STEP,PRECIS,WORK2,NCOL) CALL MXM (WORK2,NVAR,DXYZ,NCOL,GRAD,1) IF (PRECIS) THEN STEP=0.5D0/STEP ELSE STEP=1.0D0/STEP ENDIF DO 160 I=1,NVAR 160 GRAD(I)=GRAD(I)*STEP C C NOW TO ENSURE THAT INTERNAL DERIVATIVES ACCURATELY REFLECT CARTESIAN C DERIVATIVES C IF(INT.AND. .NOT. GEOOK .AND. NVAR.GE.NUMAT*3-6.AND.ID.EQ.0)THEN C C NUMBER OF VARIABLES LOOKS O.K. C SUM=DOT(GRAD,GRAD,NVAR) IF(SUM.LT.2.D0.AND.DOT(DXYZ,DXYZ,3*NUMAT).GT.MAX(4.D0,SUM*4.D0) 1)THEN C C OOPS, LOOKS LIKE AN ERROR. C DO 170 I=1,NVAR J=XPARAM(I)/3.141D0 IF(LOC(2,I).EQ.2.AND.LOC(1,I).GT.3.AND. 1 ABS(XPARAM(I)-J*3.1415926D0).LT.0.005D0 )THEN C C ERROR LOCATED, BUT CANNOT CORRECT IN THIS RUN C WRITE(6,'(//,3(A,/),I3,A)') 1' INTERNAL COORDINATE DERIVATIVES DO NOT REFLECT', 2' CARTESIAN COORDINATE DERIVATIVES', 3' TO CORRECT ERROR, INCREASE DIHEDRAL OF ATOM',LOC(1,I), 4' BY 90 DEGREES' WRITE(6,'(//,A)')' CURRENT GEOMETRY' CALL GEOUT(6) STOP ENDIF 170 CONTINUE ENDIF ENDIF C C THIS CODE IS ONLY USED IF THE KEYWORD NOANCI IS SPECIFIED IF(SLOW)THEN IF(DEBUG)WRITE(6,*) 'DOING FULL SCF DERIVATIVES' CALL DERITR(ERRFN,GEO) C C THE ARRAY ERRFN HOLDS THE EXACT DERIVATIVES MINUS THE APPROXIMATE C DERIVATIVES DO 180 I=1,NVAR 180 ERRFN(I)=ERRFN(I)-GRAD(I) ENDIF COSINE=DOT(GRAD,GOLD,NVAR)/ 1SQRT(DOT(GRAD,GRAD,NVAR)*DOT(GOLD,GOLD,NVAR)+1.D-20) DO 190 I=1,NVAR 190 GRAD(I)=GRAD(I)+ERRFN(I) IF(AIC)THEN IF(AIFRST)THEN AIFRST=.FALSE. DO 200 I=1,NVAR 200 AICORR(I)=-AIDREF(I)-GRAD(I) ENDIF C# WRITE(6,'('' GRADIENTS BEFORE AI CORRECTION'')') C# WRITE(6,'(10F8.3)')(GRAD(I),I=1,NVAR) DO 210 I=1,NVAR 210 GRAD(I)=GRAD(I)+AICORR(I) ENDIF 220 IF(DEBUG) THEN WRITE(6,'('' GRADIENTS'')') WRITE(6,'(10F8.3)')(GRAD(I),I=1,NVAR) IF(SLOW)THEN WRITE(6,'('' ERROR FUNCTION'')') WRITE(6,'(10F8.3)')(ERRFN(I),I=1,NVAR) ENDIF ENDIF IF(DEBUG) 1WRITE(6,'('' COSINE OF SEARCH DIRECTION ='',F30.6)')COSINE RETURN END mopac7-1.15/fortran/mecip.f0000644000175000017500000000710511053302063012462 00000000000000 SUBROUTINE MECIP(COEFFS,NORBS,DELTAP, DELTA) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COEFFS(NORBS,NORBS), DELTAP(NMOS,NMOS), 1 DELTA(NORBS,NMOS) ************************************************************************ * * MECIP WILL CORRECT THE TOTAL DENSITY MATRIX FOR THE EFFECT OF THE * C.I. * ON INPUT * * COEFFS : ALL M.O.'S (NORBS M.O.S) * NORBS : NUMBER OF MOLECULAR ORBITALS = NUMBER OF A.O.'S * P : TOTAL DENSITY MATRIX * NMOS : NUMBER OF M.O.'S IN ACTIVE SPACE * VECTCI : STATE VECTOR OF LENGTH LAB * MICROA(I,J) : ALPHA OCCUPANCY OF M.O. 'I' IN MICROSTATE 'J' * MICROB(I,J) : BETA OCCUPANCY OF M.O. 'I' IN MICROSTATE 'J' * * NOTE: THIS IS A MODIFICATION OF CODE ORIGINALLY WRITTEN BY * PROF. DANIEL LIOTARD ************************************************************************ COMMON /CIBITS/ NMOS,LAB,NELEC, NBO(3) COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /NALMAT/ NALPHA(NMECI**2) COMMON /BASEOC/ OCCA(NMECI) COMMON /CIVECT/ VECTCI(NMECI**2),CONF(NMECI**4+1) COMMON /MICROS/ MICROA(NMECI,4*NMECI**2), MICROB(NMECI,4*NMECI**2) C INITIALIZE WITH THE OPPOSITE OF THE 'SCF' DENSITY. DO 10 I=1,NMOS DELTAP(I,I)=-OCCA(I)*2.D0 DO 10 J=1,I-1 10 DELTAP(I,J)=0.D0 C C ADD THE C.I. CORRECTION DO 120 ID=1,LAB DO 120 JD=1,ID C CHECK SPIN AGREEMENT IF(NALPHA(ID).NE.NALPHA(JD)) GO TO 120 IX=0 IY=0 DO 20 J=1,NMOS IX=IX+ABS(MICROA(J,ID)-MICROA(J,JD)) 20 IY=IY+ABS(MICROB(J,ID)-MICROB(J,JD)) C CHECK NUMBER OF DIFFERING M.O. IF(IX+IY.GT.2) GO TO 120 IF(IX.EQ.2) THEN C DETERMINANTS ID AND JD DIFFER BY M.O I IN ID AND M.O J IN JD: DO 30 I=1,NMOS 30 IF(MICROA(I,ID).NE.MICROA(I,JD)) GO TO 40 40 IJ=MICROB(I,ID) DO 50 J=I+1,NMOS IF(MICROA(J,ID).NE.MICROA(J,JD)) GO TO 60 50 IJ=IJ+MICROA(J,ID)+MICROB(J,ID) C IJ GIVES THE SIGN OF THE PERMUTATION 60 DELTAP(J,I)=DELTAP(J,I)+VECTCI(ID)*VECTCI(JD)*FLOAT(1-2*M 1OD(IJ,2)) ELSE IF(IY.EQ.2) THEN C DETERMINANTS ID AND JD DIFFER BY M.O J IN ID AND M.O I IN JD: DO 70 I=1,NMOS 70 IF(MICROB(I,ID).NE.MICROB(I,JD)) GO TO 80 80 IJ=0 DO 90 J=I+1,NMOS IF(MICROB(J,ID).NE.MICROB(J,JD)) GO TO 100 90 IJ=IJ+MICROA(J,ID)+MICROB(J,ID) 100 IJ=IJ+MICROA(J,ID) DELTAP(J,I)=DELTAP(J,I)+VECTCI(ID)*VECTCI(JD)*FLOAT(1-2*M 1OD(IJ,2)) ELSE C DETERMINANTS ID AND JD ARE IDENTICAL: DO 110 I=1,NMOS 110 DELTAP(I,I)=DELTAP(I,I)+(MICROA(I,ID)+MICROB(I,ID))*VECTC 1I(ID)**2 ENDIF 120 CONTINUE C C BACK TRANSFORM INTO A.O. BASIS. C ------------------------------- C P(C.I.) = P(SCF) + C * DELTAP * C' DO 130 I=1,NMOS CDIR$ IVDEP DO 130 J=1,I-1 130 DELTAP(J,I)=DELTAP(I,J) C STEP 1: DELTAP = C * DELTAP CALL MXM (COEFFS(1,NELEC+1),NORBS,DELTAP,NMOS,DELTA,NMOS) C STEP 2: P = P + DELTAP * C' IJ=0 DO 150 I=1,NORBS DO 150 J=1,I IJ=IJ+1 SUM=0.D0 DO 140 K=1,NMOS 140 SUM=SUM+DELTA(I,K)*COEFFS(J,NELEC+K) 150 P(IJ)=P(IJ)+SUM C NOTE FROM D.L.: AT THIS POINT THE 'NATURAL ORBITALS' OF THIS STATE C CAN BE OBTAINED STRAIGHTWAY AS EIGENVECTORS OF THE DENSITY MATRIX. RETURN END mopac7-1.15/fortran/dtrsm.f0000644000175000017500000002777111053302064012532 00000000000000 SUBROUTINE DTRSM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, $ B, LDB ) * .. SCALAR ARGUMENTS .. CHARACTER*1 SIDE, UPLO, TRANSA, DIAG INTEGER M, N, LDA, LDB DOUBLE PRECISION ALPHA * .. ARRAY ARGUMENTS .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ) * .. * * PURPOSE * ======= * * DTRSM SOLVES ONE OF THE MATRIX EQUATIONS * * OP( A )*X = ALPHA*B, OR X*OP( A ) = ALPHA*B, * * WHERE ALPHA IS A SCALAR, X AND B ARE M BY N MATRICES, A IS A UNIT, OR * NON-UNIT, UPPER OR LOWER TRIANGULAR MATRIX AND OP( A ) IS ONE OF * * OP( A ) = A OR OP( A ) = A'. * * THE MATRIX X IS OVERWRITTEN ON B. * * PARAMETERS * ========== * * SIDE - CHARACTER*1. * ON ENTRY, SIDE SPECIFIES WHETHER OP( A ) APPEARS ON THE LEFT * OR RIGHT OF X AS FOLLOWS: * * SIDE = 'L' OR 'L' OP( A )*X = ALPHA*B. * * SIDE = 'R' OR 'R' X*OP( A ) = ALPHA*B. * * UNCHANGED ON EXIT. * * UPLO - CHARACTER*1. * ON ENTRY, UPLO SPECIFIES WHETHER THE MATRIX A IS AN UPPER OR * LOWER TRIANGULAR MATRIX AS FOLLOWS: * * UPLO = 'U' OR 'U' A IS AN UPPER TRIANGULAR MATRIX. * * UPLO = 'L' OR 'L' A IS A LOWER TRIANGULAR MATRIX. * * UNCHANGED ON EXIT. * * TRANSA - CHARACTER*1. * ON ENTRY, TRANSA SPECIFIES THE FORM OF OP( A ) TO BE USED IN * THE MATRIX MULTIPLICATION AS FOLLOWS: * * TRANSA = 'N' OR 'N' OP( A ) = A. * * TRANSA = 'T' OR 'T' OP( A ) = A'. * * TRANSA = 'C' OR 'C' OP( A ) = A'. * * UNCHANGED ON EXIT. * * DIAG - CHARACTER*1. * ON ENTRY, DIAG SPECIFIES WHETHER OR NOT A IS UNIT TRIANGULAR * AS FOLLOWS: * * DIAG = 'U' OR 'U' A IS ASSUMED TO BE UNIT TRIANGULAR. * * DIAG = 'N' OR 'N' A IS NOT ASSUMED TO BE UNIT * TRIANGULAR. * * UNCHANGED ON EXIT. * * M - INTEGER. * ON ENTRY, M SPECIFIES THE NUMBER OF ROWS OF B. M MUST BE AT * LEAST ZERO. * UNCHANGED ON EXIT. * * N - INTEGER. * ON ENTRY, N SPECIFIES THE NUMBER OF COLUMNS OF B. N MUST BE * AT LEAST ZERO. * UNCHANGED ON EXIT. * * ALPHA - DOUBLE PRECISION. * ON ENTRY, ALPHA SPECIFIES THE SCALAR ALPHA. WHEN ALPHA IS * ZERO THEN A IS NOT REFERENCED AND B NEED NOT BE SET BEFORE * ENTRY. * UNCHANGED ON EXIT. * * A - DOUBLE PRECISION ARRAY OF DIMENSION ( LDA, K ), WHERE K IS M * WHEN SIDE = 'L' OR 'L' AND IS N WHEN SIDE = 'R' OR 'R'. * BEFORE ENTRY WITH UPLO = 'U' OR 'U', THE LEADING K BY K * UPPER TRIANGULAR PART OF THE ARRAY A MUST CONTAIN THE UPPER * TRIANGULAR MATRIX AND THE STRICTLY LOWER TRIANGULAR PART OF * A IS NOT REFERENCED. * BEFORE ENTRY WITH UPLO = 'L' OR 'L', THE LEADING K BY K * LOWER TRIANGULAR PART OF THE ARRAY A MUST CONTAIN THE LOWER * TRIANGULAR MATRIX AND THE STRICTLY UPPER TRIANGULAR PART OF * A IS NOT REFERENCED. * NOTE THAT WHEN DIAG = 'U' OR 'U', THE DIAGONAL ELEMENTS OF * A ARE NOT REFERENCED EITHER, BUT ARE ASSUMED TO BE UNITY. * UNCHANGED ON EXIT. * * LDA - INTEGER. * ON ENTRY, LDA SPECIFIES THE FIRST DIMENSION OF A AS DECLARED * IN THE CALLING (SUB) PROGRAM. WHEN SIDE = 'L' OR 'L' THEN * LDA MUST BE AT LEAST MAX( 1, M ), WHEN SIDE = 'R' OR 'R' * THEN LDA MUST BE AT LEAST MAX( 1, N ). * UNCHANGED ON EXIT. * * B - DOUBLE PRECISION ARRAY OF DIMENSION ( LDB, N ). * BEFORE ENTRY, THE LEADING M BY N PART OF THE ARRAY B MUST * CONTAIN THE RIGHT-HAND SIDE MATRIX B, AND ON EXIT IS * OVERWRITTEN BY THE SOLUTION MATRIX X. * * LDB - INTEGER. * ON ENTRY, LDB SPECIFIES THE FIRST DIMENSION OF B AS DECLARED * IN THE CALLING (SUB) PROGRAM. LDB MUST BE AT LEAST * MAX( 1, M ). * UNCHANGED ON EXIT. * * * LEVEL 3 BLAS ROUTINE. * * * -- WRITTEN ON 8-FEBRUARY-1989. * JACK DONGARRA, ARGONNE NATIONAL LABORATORY. * IAIN DUFF, AERE HARWELL. * JEREMY DU CROZ, NUMERICAL ALGORITHMS GROUP LTD. * SVEN HAMMARLING, NUMERICAL ALGORITHMS GROUP LTD. * * * .. EXTERNAL FUNCTIONS .. LOGICAL LSAME EXTERNAL LSAME * .. EXTERNAL SUBROUTINES .. EXTERNAL XERBLA * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX * .. LOCAL SCALARS .. LOGICAL LSIDE, NOUNIT, UPPER INTEGER I, INFO, J, K, NROWA DOUBLE PRECISION TEMP * .. PARAMETERS .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * LSIDE = LSAME( SIDE , 'L' ) IF( LSIDE )THEN NROWA = M ELSE NROWA = N END IF NOUNIT = LSAME( DIAG , 'N' ) UPPER = LSAME( UPLO , 'U' ) * INFO = 0 IF( ( .NOT.LSIDE ).AND. $ ( .NOT.LSAME( SIDE , 'R' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.UPPER ).AND. $ ( .NOT.LSAME( UPLO , 'L' ) ) )THEN INFO = 2 ELSE IF( ( .NOT.LSAME( TRANSA, 'N' ) ).AND. $ ( .NOT.LSAME( TRANSA, 'T' ) ).AND. $ ( .NOT.LSAME( TRANSA, 'C' ) ) )THEN INFO = 3 ELSE IF( ( .NOT.LSAME( DIAG , 'U' ) ).AND. $ ( .NOT.LSAME( DIAG , 'N' ) ) )THEN INFO = 4 ELSE IF( M .LT.0 )THEN INFO = 5 ELSE IF( N .LT.0 )THEN INFO = 6 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 9 ELSE IF( LDB.LT.MAX( 1, M ) )THEN INFO = 11 END IF IF( INFO.NE.0 )THEN CALL XERBLA( 'DTRSM ', INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE. * IF( N.EQ.0 ) $ RETURN * * AND WHEN ALPHA.EQ.ZERO. * IF( ALPHA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M B( I, J ) = ZERO 10 CONTINUE 20 CONTINUE RETURN END IF * * START THE OPERATIONS. * IF( LSIDE )THEN IF( LSAME( TRANSA, 'N' ) )THEN * * FORM B := ALPHA*INV( A )*B. * IF( UPPER )THEN DO 60, J = 1, N IF( ALPHA.NE.ONE )THEN DO 30, I = 1, M B( I, J ) = ALPHA*B( I, J ) 30 CONTINUE END IF DO 50, K = M, 1, -1 IF( B( K, J ).NE.ZERO )THEN IF( NOUNIT ) $ B( K, J ) = B( K, J )/A( K, K ) DO 40, I = 1, K - 1 B( I, J ) = B( I, J ) - B( K, J )*A( I, K ) 40 CONTINUE END IF 50 CONTINUE 60 CONTINUE ELSE DO 100, J = 1, N IF( ALPHA.NE.ONE )THEN DO 70, I = 1, M B( I, J ) = ALPHA*B( I, J ) 70 CONTINUE END IF DO 90 K = 1, M IF( B( K, J ).NE.ZERO )THEN IF( NOUNIT ) $ B( K, J ) = B( K, J )/A( K, K ) DO 80, I = K + 1, M B( I, J ) = B( I, J ) - B( K, J )*A( I, K ) 80 CONTINUE END IF 90 CONTINUE 100 CONTINUE END IF ELSE * * FORM B := ALPHA*INV( A' )*B. * IF( UPPER )THEN DO 130, J = 1, N DO 120, I = 1, M TEMP = ALPHA*B( I, J ) DO 110, K = 1, I - 1 TEMP = TEMP - A( K, I )*B( K, J ) 110 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( I, I ) B( I, J ) = TEMP 120 CONTINUE 130 CONTINUE ELSE DO 160, J = 1, N DO 150, I = M, 1, -1 TEMP = ALPHA*B( I, J ) DO 140, K = I + 1, M TEMP = TEMP - A( K, I )*B( K, J ) 140 CONTINUE IF( NOUNIT ) $ TEMP = TEMP/A( I, I ) B( I, J ) = TEMP 150 CONTINUE 160 CONTINUE END IF END IF ELSE IF( LSAME( TRANSA, 'N' ) )THEN * * FORM B := ALPHA*B*INV( A ). * IF( UPPER )THEN DO 210, J = 1, N IF( ALPHA.NE.ONE )THEN DO 170, I = 1, M B( I, J ) = ALPHA*B( I, J ) 170 CONTINUE END IF DO 190, K = 1, J - 1 IF( A( K, J ).NE.ZERO )THEN DO 180, I = 1, M B( I, J ) = B( I, J ) - A( K, J )*B( I, K ) 180 CONTINUE END IF 190 CONTINUE IF( NOUNIT )THEN TEMP = ONE/A( J, J ) DO 200, I = 1, M B( I, J ) = TEMP*B( I, J ) 200 CONTINUE END IF 210 CONTINUE ELSE DO 260, J = N, 1, -1 IF( ALPHA.NE.ONE )THEN DO 220, I = 1, M B( I, J ) = ALPHA*B( I, J ) 220 CONTINUE END IF DO 240, K = J + 1, N IF( A( K, J ).NE.ZERO )THEN DO 230, I = 1, M B( I, J ) = B( I, J ) - A( K, J )*B( I, K ) 230 CONTINUE END IF 240 CONTINUE IF( NOUNIT )THEN TEMP = ONE/A( J, J ) DO 250, I = 1, M B( I, J ) = TEMP*B( I, J ) 250 CONTINUE END IF 260 CONTINUE END IF ELSE * * FORM B := ALPHA*B*INV( A' ). * IF( UPPER )THEN DO 310, K = N, 1, -1 IF( NOUNIT )THEN TEMP = ONE/A( K, K ) DO 270, I = 1, M B( I, K ) = TEMP*B( I, K ) 270 CONTINUE END IF DO 290, J = 1, K - 1 IF( A( J, K ).NE.ZERO )THEN TEMP = A( J, K ) DO 280, I = 1, M B( I, J ) = B( I, J ) - TEMP*B( I, K ) 280 CONTINUE END IF 290 CONTINUE IF( ALPHA.NE.ONE )THEN DO 300, I = 1, M B( I, K ) = ALPHA*B( I, K ) 300 CONTINUE END IF 310 CONTINUE ELSE DO 360, K = 1, N IF( NOUNIT )THEN TEMP = ONE/A( K, K ) DO 320, I = 1, M B( I, K ) = TEMP*B( I, K ) 320 CONTINUE END IF DO 340, J = K + 1, N IF( A( J, K ).NE.ZERO )THEN TEMP = A( J, K ) DO 330, I = 1, M B( I, J ) = B( I, J ) - TEMP*B( I, K ) 330 CONTINUE END IF 340 CONTINUE IF( ALPHA.NE.ONE )THEN DO 350, I = 1, M B( I, K ) = ALPHA*B( I, K ) 350 CONTINUE END IF 360 CONTINUE END IF END IF END IF * RETURN * * END OF DTRSM . * END mopac7-1.15/fortran/ders.f0000644000175000017500000000505711053302064012327 00000000000000 SUBROUTINE DERS(M,N,RR,DEL1,DEL2,DEL3,IS,IOL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ************************************************************************ * * * ON INPUT M = INDEX OF FIRST ATOMIC ORBITAL * * N = INDEX OF SECOND ATOMIC ORBITAL * * RR = SQUARE IF INTERATOMIC DIATANCE (IN BOHR) * * DEL1 = CATERSIAN DISTANCE IN DERIVATIVE DIRECTION * * DEL2 = CARTESIAN DISTANCE IN M A.O.'S DIRECTION * * DEL3 = CARTESIAN DISTANCE IN N A.O.'S DIRECTION * * IS = INDICATES TYPE OF A.O.-A.O. INTERACTION * * = 1 S/S, 2 S/P', 3 S/P, 4 P'/S, 5 P/S, 6 P/P', * * 7 P'/P", 8 P'P', 9 P/P * * IOL = INDEX FOR STORING DERIVATIVES IN DS * * * ************************************************************************ COMMON /DERIVS/ DS(16),DG(22),DR(100),TDX(3),TDY(3),TDZ(3) COMMON /TEMP/ CG(60,6),ZG(60,6) DIMENSION SS(6,6) A0=0.529167D0 DO 110 I=1,6 DO 110 J=1,6 SS(I,J)=0.0D0 APB=ZG(M,I)*ZG(N,J) AMB=ZG(M,I)+ZG(N,J) ADB=APB/AMB ADR=MIN(ADB*RR,35.D0) GO TO (10,20,30,40,50,60,70,80,90),IS 10 ABN=-2.0D0*ADB*DEL1/(A0**2) GO TO 100 20 ABN=-4.0D0*(ADB**2)*DEL1*DEL2/(SQRT(ZG(N,J))*(A0**3)) GO TO 100 30 ABN=(2.0D0*ADB/(SQRT(ZG(N,J))*A0))* 1 (1.0D0-2.0D0*ADB*(DEL1**2)/(A0**2)) GO TO 100 40 ABN=4.0D0*(ADB**2)*DEL1*DEL2/(SQRT(ZG(M,I))*(A0**3)) GO TO 100 50 ABN=-(2.0D0*ADB/(SQRT(ZG(M,I))*A0))* 1 (1.0D0-2.0D0*ADB*(DEL1**2)/(A0**2)) GO TO 100 60 ABN=-(4.0D0*(ADB**2)*DEL2/(SQRT(APB)*(A0**2)))* 1 (1.0D0-2.0D0*ADB*(DEL1**2)/(A0**2)) GO TO 100 70 ABN=8.0D0*(ADB**3)*DEL1*DEL2*DEL3/(SQRT(APB)*(A0**4)) GO TO 100 80 ABN=-(8.0D0*(ADB**2)*DEL1/(SQRT(APB)*(A0**2)))* 1 (0.5D0-ADB*(DEL2**2)/(A0**2)) GO TO 100 90 ABN=-(8.0D0*(ADB**2)*DEL1/(SQRT(APB)*(A0**2)))* 1 (1.5D0-ADB*(DEL1**2)/(A0**2)) 100 SS(I,J)=SQRT((2.0D0*SQRT(APB)/AMB)**3)*EXP(-ADR)*ABN 110 CONTINUE DO 120 I=1,6 DO 120 J=1,6 DS(IOL)=DS(IOL)+SS(I,J)*CG(M,I)*CG(N,J) 120 CONTINUE RETURN END mopac7-1.15/fortran/compfg.f0000644000175000017500000001621711053302063012644 00000000000000 SUBROUTINE COMPFG(XPARAM,INT,ESCF,FULSCF,GRAD,LGRAD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XPARAM(MAXPAR),GRAD(MAXPAR) LOGICAL LGRAD, FULSCF, LIMSCF COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR),IDUMY,DUMY(MAXPAR) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /ATHEAT/ ATHEAT COMMON /WMATRX/ WJ(N2ELEC), WK(N2ELEC) COMMON /ENUCLR/ ENUCLR COMMON /NATYPE/ NZTYPE(107),MTYPE(30),LTYPE COMMON /ELECT / ELECT PARAMETER (MDUMY=MAXPAR**2-MPACK) COMMON /SCRACH/ RXYZ(MPACK), XDUMY(MDUMY) COMMON /HMATRX/ H(MPACK) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM), NB(NUMATM), NC(NUMATM) COMMON /ERRFN / ERRFN(MAXPAR), AICORR(MAXPAR) COMMON /VECTOR/ C(MORB2),EIGS(MAXORB),CBETA(MORB2),EIGB(MAXORB) COMMON /LAST / LAST COMMON /NUMCAL/ NUMCAL COMMON /SCFTYP/ EMIN, LIMSCF COMMON /MOLMEC/ HTYPE(4),NHCO(4,20),NNHCO,ITYPE 1 /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 2 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 3 NCLOSE,NOPEN,NDUMY,FRACT C COSMO change A. Klamt LOGICAL ISEPS, USEPS , UPDA COMMON /ISEPS/ ISEPS, USEPS, UPDA C end of COSMO change C*********************************************************************** C C COMPFG CALCULATES (A) THE HEAT OF FORMATION OF THE SYSTEM, AND C (B) THE GRADIENTS, IF LGRAD IS .TRUE. C C ON INPUT XPARAM = ARRAY OF PARAMETERS TO BE USED IN INTERNAL COORDS C LGRAD = .TRUE. IF GRADIENTS ARE NEEDED, .FALSE. OTHERWISE C INT = .TRUE. IF HEAT OF FORMATION IS TO BE CALCULATED C FULSCF = .TRUE. IF FULL SCF TO BE DONE, .FALSE. OTHERWISE. C C ON OUTPUT ESCF = HEAT OF FORMATION. C GRAD = ARRAY OF GRADIENTS, IF LGRAD = .TRUE. C C*********************************************************************** COMMON /KEYWRD/KEYWRD CHARACTER*241 KEYWRD LOGICAL DEBUG, INT, PRINT, ANALYT, LARGE, USEDCI, 1FORCE, TIMES, AIDER DIMENSION COORD(3,NUMATM), W(N2ELEC), DEGREE(3), XPAREF(MAXPAR) 1,DELTAP(NMECI**2) ,DELTA(NMECI*MAXORB) SAVE DEGREE, PRINT, DEBUG EQUIVALENCE (W,WJ) DATA ICALCN /0/ C MNDO AM1 PM3 MINDO/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL HTYPE(1)=6.1737D0 HTYPE(2)=3.3191D0 HTYPE(3)=7.1853D0 HTYPE(4)=1.7712D0 LTYPE=0 DO 30 I=1,NUMAT IF(NAT(I).LT.99)THEN DO 10 J=1,LTYPE 10 IF(NAT(I).EQ.MTYPE(J)) GOTO 20 LTYPE=LTYPE+1 MTYPE(LTYPE)=NAT(I) NZTYPE(NAT(I))=LTYPE C C LTYPE = NUMBER OF TYPES OF REAL ATOM PRESENT C MTYPE = TYPES OF REAL ATOMS PRESENT J=LTYPE 20 CONTINUE ENDIF 30 CONTINUE AIDER=(INDEX(KEYWRD,'AIDER').NE.0) TIMES=(INDEX(KEYWRD,'TIMES').NE.0) ANALYT=(INDEX(KEYWRD,'ANALYT').NE.0) IF(INT.AND.ANALYT)CALL SETUPG DEGREE(1)=1.D0 IF(INDEX(KEYWRD,' XYZ').NE.0)THEN DEGREE(2)=1.D0 ELSE DEGREE(2)=180.D0/3.141592652589D0 ENDIF DEGREE(3)=DEGREE(2) USEDCI=(NCLOSE.NE.NOPEN.AND.FRACT.NE.2.D0.AND.FRACT.NE.0.D0 1 .OR.(INDEX(KEYWRD,'C.I.').NE.0)) FORCE=(INDEX(KEYWRD,'FORCE').NE.0) LARGE=(INDEX(KEYWRD,'LARGE') .NE. 0) PRINT=(INDEX(KEYWRD,'COMPFG') .NE. 0) DEBUG=(INDEX(KEYWRD,'DEBUG') .NE. 0 .AND. PRINT) EMIN=0.D0 DO 40 I=1,NVAR 40 XPAREF(I)=XPARAM(I) ENDIF C C SET UP COORDINATES FOR CURRENT CALCULATION C C PLACE THE NEW VALUES OF THE VARIABLES IN THE ARRAY GEO. C MAKE CHANGES IN THE GEOMETRY. DO 50 I=1,NVAR K=LOC(1,I) L=LOC(2,I) 50 GEO(L,K)=XPARAM(I) C IMPOSE THE SYMMETRY CONDITIONS + COMPUTE THE DEPENDENT-PARAMETERS IF(NDEP.NE.0) CALL SYMTRY C NOW COMPUTE THE ATOMIC COORDINATES. IF( DEBUG ) THEN IF( LARGE ) THEN K=NATOMS ELSE K=MIN(5,NATOMS) ENDIF WRITE(6,FMT='('' INTERNAL COORDS'',/100(/,3F12.6))') 1 ((GEO(J,I)*DEGREE(J),J=1,3),I=1,K) END IF CALL GMETRY(GEO,COORD) IF( DEBUG ) THEN IF( LARGE ) THEN K=NUMAT ELSE K=MIN(5,NUMAT) ENDIF WRITE(6,FMT='('' CARTESIAN COORDS'',/100(/,3F16.9))') 1 ((COORD(J,I),J=1,3),I=1,K) ENDIF IF(INT.AND.ANALYT)REWIND 2 C COSMO change A. Klamt * IF (.NOT. USEPS) THEN IF (.NOT. ISEPS) THEN C end of COSMO change IF(TIMES)CALL TIMER('BEFORE HCORE') IF(INT)CALL HCORE(COORD, H, W, WJ, WK, ENUCLR) IF(TIMES)CALL TIMER('AFTER HCORE') C C COMPUTE THE HEAT OF FORMATION. C IF(NORBS.GT.0.AND.NELECS.GT.0) THEN IF(TIMES)CALL TIMER('BEFORE ITER') IF(INT) CALL ITER(H, W, WJ, WK, ELECT, FULSCF,.TRUE.) IF(TIMES)CALL TIMER('AFTER ITER') ELSE ELECT=0.D0 ENDIF ESCF=(ELECT+ENUCLR)*23.061D0+ATHEAT IF(ESCF.LT.EMIN.OR.EMIN.EQ.0.D0)EMIN=ESCF DO 60 I=1,NNHCO CALL DIHED(COORD,NHCO(1,I),NHCO(2,I),NHCO(3,I),NHCO(4,I),ANGLE) ESCF=ESCF+HTYPE(ITYPE)*SIN(ANGLE)**2 60 CONTINUE C COSMO change A. Klamt 18.7.91 ENDIF IF (ISEPS) THEN INDEPS=INDEX(KEYWRD,'EPS=') CALL INITSV (INDEPS) C The following routine constructs the dielectric screening surface CALL CONSTS (COORD) C The following routine constructs dielectric response matrix CCMAT CALL BTOC (COORD) C A. Klamt 18.7.91 USEPS = .TRUE. IF(TIMES) CALL TIMER('BEFORE HCORE') IF(INT) CALL HCORE(COORD, H, W, WJ, WK, ENUCLR) IF(TIMES) CALL TIMER('AFTER HCORE') C C COMPUTE THE HEAT OF FORMATION. C IF(NORBS.GT.0.AND.NELECS.GT.0) THEN IF(TIMES) CALL TIMER('BEFORE ITER') IF(INT) CALL ITER(H, W, WJ, WK, ELECT, FULSCF,.TRUE.) IF(TIMES) CALL TIMER('AFTER ITER') ELSE ELECT=0.D0 ENDIF ESCF=(ELECT+ENUCLR)*23.061D0+ATHEAT IF(ESCF.LT.EMIN.OR.EMIN.EQ.0.D0) EMIN=ESCF DO 61 I=1,NNHCO CALL DIHED(COORD,NHCO(1,I),NHCO(2,I),NHCO(3,I),NHCO(4,I),ANGLE) ESCF=ESCF+HTYPE(ITYPE)*SIN(ANGLE)**2 61 CONTINUE ENDIF C end of COSMO change C C FIND DERIVATIVES IF DESIRED C IF(LGRAD) THEN IF(TIMES)CALL TIMER('BEFORE DERIV') CALL DERIV(GEO,GRAD) IF(TIMES)CALL TIMER('AFTER DERIV') ENDIF IF(AIDER)THEN C C ADD IN AB INITIO CORRECTION C DO 70 I=1,NVAR 70 ESCF=ESCF+(XPARAM(I)-XPAREF(I))*AICORR(I) ENDIF IF(INT.AND.PRINT) 1WRITE(6,'(/10X,'' HEAT OF FORMATION'',G30.17)')ESCF IF(PRINT.AND.LGRAD) 1 WRITE(6,FMT='('' GRADIENT '',8F8.2,(/10F8.2))') 2 (GRAD(I),I=1,NVAR) C C REFORM DENSITY MATRIX, IF A C.I. DONE AND EITHER THE LAST SCF OR A C FORCE CALCULATION C IF(USEDCI.AND. (LAST.EQ.1 .OR. FORCE)) 1CALL MECIP(C,NORBS,DELTAP,DELTA) RETURN END mopac7-1.15/fortran/densit.f0000644000175000017500000000346311053302063012656 00000000000000 SUBROUTINE DENSIT( C,MDIM, NORBS,NDUBL, NSINGL, FRACT, P,MODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION P(*), C(MDIM,*) C*********************************************************************** C C DENSIT COMPUTES THE DENSITY MATRIX GIVEN THE EIGENVECTOR MATRIX, AND C INFORMATION ABOUT THE M.O. OCCUPANCY. C C INPUT: C = SQUARE EIGENVECTOR MATRIX, C IS OF SIZE MDIM BY MDIM C AND THE EIGENVECTORS ARE STORED IN THE TOP LEFT-HAND C CORNER. C NORBS = NUMBER OF ORBITALS C NDUBL = NUMBER OF DOUBLY-OCCUPIED M.O.S ( =0 IF UHF) C NSINGL= NUMBER OF SINGLY OR FRACTIONALLY OCCUPIED M.O.S. C MODE = 2 IF POSITRON EQUIVALENT IS NOT TO BE USED C C ON EXIT: P = DENSITY MATRIX C C*********************************************************************** C C SET UP LIMITS FOR SUMS C NL1 = BEGINING OF ONE ELECTRON SUM C NU1 = END OF SAME C NL2 = BEGINING OF TWO ELECTRON SUM C NU2 = END OF SAME C NORBS2=NORBS/2 NSINGL=MAX(NDUBL,NSINGL) IF(NDUBL.NE.0.AND.NSINGL .GT. NORBS2 .AND. MODE.NE.2) THEN C C TAKE POSITRON EQUIVALENT C SIGN=-1.D0 FRAC=2.D0-FRACT CONST=2.D0 NL2=NSINGL+1 NU2=NORBS NL1=NDUBL+1 NU1=NSINGL ELSE C C TAKE ELECTRON EQUIVALENT C SIGN=1.D0 FRAC=FRACT CONST=0.D0 NL2=1 NU2=NDUBL NL1=NDUBL+1 NU1=NSINGL ENDIF L=0 DO 40 I=1,NORBS DO 30 J=1,I L=L+1 SUM2=0.D0 SUM1=0.D0 DO 10 K=NL2,NU2 10 SUM2=SUM2+C(I,K)*C(J,K) SUM2=SUM2*2.D0 DO 20 K=NL1,NU1 20 SUM1=SUM1+C(I,K)*C(J,K) 30 P(L)=(SUM2+SUM1*FRAC)*SIGN 40 P(L)=CONST+P(L) RETURN END mopac7-1.15/fortran/nllsq.f0000644000175000017500000003476711053302063012534 00000000000000 SUBROUTINE NLLSQ(X,N) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /KEYWRD/ KEYWRD CHARACTER*241 KEYWRD DIMENSION X(*) COMMON /MESAGE/ IFLEPO,IITER ************************************************************************ * * NLLSQ IS A NON-DERIVATIVE, NONLINEAR LEAST-SQUARES MINIMIZER. IT USES * BARTEL'S PROCEDURE TO MINIMIZE A FUNCTION WHICH IS A SUM OF * SQUARES. * * ON INPUT N = NUMBER OF UNKNOWNS * X = PARAMETERS OF FUNCTION TO BE MINIMIZED. * * ON EXIT X = OPTIMIZED PARAMETERS. * * THE FUNCTION TO BE MINIMIZED IS "COMPFG". COMPFG MUST HAVE THE * CALLING SEQUENCE * CALL COMPFG(XPARAM,.TRUE.,ESCF,.TRUE.,EFS,.TRUE.) * SSQ=DOT(EFS,EFS,N) * WHERE EFS IS A VECTOR WHICH COMPFG FILLS WITH THE N INDIVIDUAL * COMPONENTS OF THE ERROR FUNCTION AT THE POINT X * SSQ IS THE VALUE OF THE SUM OF THE EFS SQUARED. * IN THIS FORMULATION OF NLLSQ M AND N ARE THE SAME. * THE PRECISE DEFINITIONS OF THESE TWO QUANTITIES IS: * * N = NUMBER OF PARAMETERS TO BE OPTIMIZED. * M = NUMBER OF REFERENCE FUNCTIONS. M MUST BE GREATER THEN, OR * EQUAL TO, N ************************************************************************ C Q = ORTHOGONAL MATRIX (M BY M) C R = RIGHT-TRIANGULAR MATRIX (M BY N) C MXCNT(1) = MAX ALLOW OVERALL FUN EVALS C MXCNT(2) = MAX ALLOW NO OF FNC EVALS PER LIN SEARCH C TOLS1 = RELATIVE TOLERANCE ON X OVERALL C TOLS2 = ABSOLUTE TOLERANCE ON X OVERALL C TOLS5 = RELATIVE TOLERANCE ON X FOR LINEAR SEARCHES C TOLS6 = ABSOLUTE TOLERANCE ON X FOR LINEAR SEARCHES C NRST = NUMBER OF CYCLES BETWEEN SIDESTEPS C ********** C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /NLLSQI/ NCOUNT COMMON /NUMSCF/ NSCF DIMENSION Y(MAXPAR), EFS(MAXPAR), P(MAXPAR) COMMON /LAST / LAST COMMON /TIMDMP/ TLEFT, TDUMP COMMON /NLLCOM/ Q(MAXPAR,MAXPAR),R(MAXPAR,MAXPAR*2) COMMON /NLLCO2/ DDDUM(6),EFSLST(MAXPAR),XLAST(MAXPAR),IIIUM(7) LOGICAL MIDDLE, RESFIL, MINPRT, LOG SAVE IXSO EQUIVALENCE ( IIIUM(2), ICYC),(IIIUM(3), IRST), 1(IIIUM(4),JRST), 2(DDDUM(2),ALF), (DDDUM(3),SSQ),(DDDUM(4), PN) DATA IXSO/0/ MIDDLE=(INDEX(KEYWRD,'RESTART') .NE. 0) LOG=(INDEX(KEYWRD,'NOLOG') .EQ. 0) IFLEPO=10 C* M=N C* TOL2=4.D-1 IF(INDEX(KEYWRD,'GNORM') .NE. 0) THEN TOL2=READA(KEYWRD,INDEX(KEYWRD,'GNORM')) IF(TOL2.LT.0.01D0.AND.INDEX(KEYWRD,' LET').EQ.0)THEN WRITE(6,'(/,A)')' GNORM HAS BEEN SET TOO LOW, RESET TO 0 1.01' TOL2=0.01D0 ENDIF ENDIF LAST=0 TOLS1=1.D-12 TOLS2=1.D-10 TOLS5=1.D-6 TOLS6=1.D-3 NRST=4 TLAST=TLEFT MINPRT=.TRUE. RESFIL=.FALSE. TLEFT=TLEFT-SECOND()+TIME0 C ********** C SET UP COUNTERS AND SWITCHES C ********** NTO=N/6 IFRTL=0 NSST=0 IF(IXSO.EQ.0) IXSO=N NP1 = N+1 NP2 = N+2 ICYC = 0 IRST = 0 JRST = 1 EPS =TOLS5 T = TOLS6 C ********** C GET STARTING-POINT FUNCTION VALUE C SET UP ESTIMATE OF INITIAL LINE STEP C ********** IF(MIDDLE) THEN CALL PARSAV(0,N,M) NSCF=IIIUM(1) CLOSE(13) NCOUNT=IIIUM(5) DO 10 I=1,N 10 X(I)=XLAST(I) TIME1=SECOND() IF(INDEX(KEYWRD,'1SCF') .NE. 0) THEN IFLEPO=13 LAST=1 RETURN ENDIF GOTO 60 ENDIF CALL COMPFG(X,.TRUE.,ESCF,.TRUE.,EFSLST,.TRUE.) SSQ=DOT(EFSLST,EFSLST,N) NCOUNT = 1 20 CONTINUE DO 40 I=1,M DO 30 J=1,N R(I,J) = 0.0D0 IF (I .EQ. J) R(I,J)=1.0D0 30 CONTINUE DO 40 J=I,M Q(I,J) = 0.0D0 Q(J,I) = 0.0D0 IF (I .EQ. J) Q(I,I)=1.0D0 40 CONTINUE TEMP = 0.0D0 DO 50 I=1,N 50 TEMP = TEMP+X(I)**2 ALF = 100.0D0*(EPS*SQRT(TEMP)+T) C ********** C MAIN LOOP C ********** TIME1=SECOND() 60 CONTINUE C ********** C UPDATE COUNTERS AND TEST FOR PRINTING THIS CYCLE C ********** IFRTL=IFRTL+1 ICYC = ICYC+1 IRST = IRST+1 C ********** C SET PRT, THE LEVENBERG-MARQUARDT PARAMETER. C ********** PRT = SQRT(SSQ) C ********** C IF A SIDESTEP IS TO BE TAKEN, GO TO 31 C ********** IF (IRST .GE. NRST) GO TO 210 C ********** C SOLVE THE SYSTEM Q*R*P = -EFSLST IN THE LEAST-SQUARES SENSE C ********** NSST=0 DO 80 I=1,M TEMP = 0.0D0 DO 70 J=1,M 70 TEMP = TEMP-Q(J,I)*EFSLST(J) 80 EFS(I) = TEMP DO 90 J=1,N JJ = NP1-J DO 90 I=1,J II = NP2-I 90 R(II,JJ) = R(I,J) DO 160 I=1,N I1 = I+1 Y(I) = PRT EFSSS=0.0D0 IF (I .GE. N) GO TO 110 DO 100 J=I1,N 100 Y(J) = 0.0D0 110 CONTINUE DO 150 J=I,N II = NP2-J JJ = NP1-J IF (ABS(Y(J)) .LT. ABS(R(II,JJ))) GO TO 120 TEMP = Y(J)*SQRT(1.0D0+(R(II,JJ)/Y(J))**2) GO TO 130 120 TEMP = R(II,JJ)*SQRT(1.0D0+(Y(J)/R(II,JJ))**2) 130 CONTINUE SIN = R(II,JJ)/TEMP COS = Y(J)/TEMP R(II,JJ) = TEMP TEMP = EFS(J) EFS(J)=SIN*TEMP+COS*EFSSS EFSSS=SIN*EFSSS-COS*TEMP IF (J .GE. N) GO TO 160 J1 = J+1 DO 140 K=J1,N JJ = NP1-K TEMP = R(II,JJ) R(II,JJ) = SIN*TEMP+COS*Y(K) 140 Y(K) = SIN*Y(K)-COS*TEMP 150 CONTINUE 160 CONTINUE P(N) = EFS(N)/R(2,1) I = N 170 I = I-1 IF (I) 200,200,180 180 TEMP = EFS(I) K = I+1 II = NP2-I DO 190 J=K,N JJ = NP1-J 190 TEMP = TEMP-R(II,JJ)*P(J) JJ = NP1-I P(I) = TEMP/R(II,JJ) GO TO 170 200 CONTINUE GO TO 230 C ********** C SIDESTEP SECTION C ********** 210 JRST = JRST+1 NSST=NSST+1 IF(NSST.GE.IXSO) GO TO 670 IF (JRST .GT. N) JRST=2 IRST = 0 C ********** C PRODUCTION OF A VECTOR ORTHOGONAL TO THE LAST P-VECTOR C ********** WORK = PN*(ABS(P(1))+PN) TEMP = P(JRST) P(1) = TEMP*(P(1)+SIGN(PN,P(1))) DO 220 I=2,N 220 P(I) = TEMP*P(I) P(JRST) = P(JRST)-WORK C ********** C COMPUTE NORM AND NORM-SQUARE OF THE P-VECTOR C ********** 230 PNLAST = PN PN=0.D0 PN2 = 0.0D0 DO 240 I=1,N PN=PN+ABS(P(I)) 240 PN2 = PN2+P(I)**2 IF(PN.LT.1.D-20) THEN WRITE(6,'('' SYSTEM DOES NOT APPEAR TO BE OPTIMIZABLE.'',/ 1,'' THIS CAN HAPPEN IF (A) IT WAS OPTIMIZED TO BEGIN WITH'',/ 2,'' OR (B) IT IS NEITHER A GROUND NOR A'', 3'' TRANSITION STATE'')') CALL GEOUT(1) STOP ENDIF IF(PN2.LT.1.D-20)PN2=1.D-20 PN = SQRT(PN2) IF(ALF.GT.1.D20)ALF=1.D20 IF(ICYC .GT. 1) THEN ALF=ALF*1.D-20*PNLAST/PN IF(ALF.GT.1.D10) ALF=1.D10 ALF=ALF*1.D20 ENDIF TTMP=ALF*PN IF(TTMP.LT.0.0001D0) ALF=0.001D0/PN C ********** C PRINTING SECTION C ********** C# WRITE(6,501)TLEFT,ICYC,SSQ DO 250 I=1,N EFS(I)=X(I) 250 CONTINUE C ********** C PERFORM LINE-MINIMIZATION FROM POINT X IN DIRECTION P OR -P C ********** SSQLST = SSQ DO 260 I=1,N EFS(I)=0.D0 260 XLAST(I)=X(I) CALL LOCMIN(M,X,N,P,SSQ,ALF,EFS,IERR,ESCF) IF(SSQLST .LT. SSQ ) THEN IF(IERR .EQ. 0) SSQ=SSQLST DO 270 I=1,N 270 X(I)=XLAST(I) IRST=NRST PN=PNLAST TIME2=TIME1 TIME1=SECOND() TCYCLE=TIME1-TIME2 TLEFT=TLEFT-TCYCLE IF(TLEFT .GT. TCYCLE*2) GO TO 60 GOTO 630 ENDIF C ********** C PRODUCE THE VECTOR R*P C ********** DO 290 I=1,N TEMP = 0.0D0 DO 280 J=I,N 280 TEMP = TEMP+R(I,J)*P(J) 290 Y(I) = TEMP C ********** C PRODUCE THE VECTOR ... C Y = (EFS-EFSLST-ALF*Q*R*P)/(ALF*(NORMSQUARE(P)) C COMPUTE NORM OF THIS VECTOR AS WELL C ********** WORK = ALF*PN2 YN = 0.0D0 DO 310 I=1,M TEMP = 0.0D0 DO 300 J=1,N 300 TEMP = TEMP+Q(I,J)*Y(J) TEMP = (EFS(I)-EFSLST(I)-ALF*TEMP) EFSLST(I) = EFS(I) YN = YN+TEMP**2 310 EFS(I) = TEMP/WORK YN = SQRT(YN)/WORK C ********** C THE BROYDEN UPDATE NEW MATRIX = OLD MATRIX + Y*(P-TRANS) C HAS BEEN FORMED. IT IS NOW NECESSARY TO UPDATE THE QR DECOMP. C FIRST LET Y = (Q-TRANS)*Y. C ********** DO 330 I=1,M TEMP = 0.0D0 DO 320 J=1,M 320 TEMP = TEMP+Q(J,I)*EFS(J) 330 Y(I) = TEMP C ********** C REDUCE THE VECTOR Y TO A MULTIPLE OF THE FIRST UNIT VECTOR USING C A HOUSEHOLDER TRANSFORMATION FOR COMPONENTS N+1 THROUGH M AND C ELEMENTARY ROTATIONS FOR THE FIRST N+1 COMPONENTS. APPLY ALL C TRANSFORMATIONS TRANSPOSED ON THE RIGHT TO THE MATRIX Q, AND C APPLY THE ROTATIONS ON THE LEFT TO THE MATRIX R. C THIS GIVES (Q*(V-TRANS))*((V*R) + (V*Y)*(P-TRANS)), WHERE C V IS THE COMPOSITE OF THE TRANSFORMATIONS. THE MATRIX C ((V*R) + (V*Y)*(P-TRANS)) IS UPPER HESSENBERG. C ********** IF (M .LE. NP1) GO TO 390 C C THE NEXT THREE LINES WERE INSERTED TO TRY TO GET ROUND OVERFLOW BUGS. C CONST=1.D-12 DO 340 I=NP1,M 340 CONST=MAX(ABS(Y(NP1)),CONST) YTAIL = 0.0D0 DO 350 I=NP1,M 350 YTAIL = YTAIL+(Y(I)/CONST)**2 YTAIL = SQRT(YTAIL)*CONST BET = (1.0D25/YTAIL)/(YTAIL+ABS(Y(NP1))) Y(NP1) = SIGN (YTAIL+ABS(Y(NP1)),Y(NP1)) DO 380 I=1,M TMP = 0.0D0 DO 360 J=NP1,M 360 TMP = TMP+Q(I,J)*Y(J)*1.D-25 TMP = BET*TMP DO 370 J=NP1,M 370 Q(I,J) = Q(I,J)-TMP*Y(J) 380 CONTINUE Y(NP1) = YTAIL I = NP1 GO TO 400 390 CONTINUE I = M 400 CONTINUE 410 J = I I = I-1 IF (I) 480,480,420 420 IF (Y(J)) 430,410,430 430 IF (ABS(Y(I)) .LT. ABS(Y(J))) GO TO 440 TEMP = ABS(Y(I))*SQRT(1.0D0+(Y(J)/Y(I))**2) GO TO 450 440 TEMP = ABS(Y(J))*SQRT(1.0D0+(Y(I)/Y(J))**2) 450 COS = Y(I)/TEMP SIN = Y(J)/TEMP Y(I) = TEMP DO 460 K=1,M TEMP = COS*Q(K,I)+SIN*Q(K,J) WORK = -SIN*Q(K,I)+COS*Q(K,J) Q(K,I) = TEMP 460 Q(K,J) = WORK IF (I .GT. N) GO TO 410 R(J,I) = -SIN*R(I,I) R(I,I) = COS*R(I,I) IF (J .GT. N) GO TO 410 DO 470 K=J,N TEMP = COS*R(I,K)+SIN*R(J,K) WORK = -SIN*R(I,K)+COS*R(J,K) R(I,K) = TEMP 470 R(J,K) = WORK GO TO 410 480 CONTINUE C ********** C REDUCE THE UPPER-HESSENBERG MATRIX TO UPPER-TRIANGULAR FORM C USING ELEMENTARY ROTATIONS. APPLY THE SAME ROTATIONS, TRANSPOSED, C ON THE RIGHT TO THE MATRIX Q. C ********** DO 490 K=1,N 490 R(1,K) = R(1,K)+YN*P(K) JEND = NP1 IF (M .EQ. N) JEND=N DO 560 J=2,JEND I = J-1 IF (R(J,I)) 500,560,500 500 IF (ABS(R(I,I)) .LT. ABS(R(J,I))) GO TO 510 TEMP = ABS(R(I,I))*SQRT(1.0D0+(R(J,I)/R(I,I))**2) GO TO 520 510 TEMP = ABS(R(J,I))*SQRT(1.0D0+(R(I,I)/R(J,I))**2) 520 COS = R(I,I)/TEMP SIN = R(J,I)/TEMP R(I,I) = TEMP IF (J .GT. N) GO TO 540 DO 530 K=J,N TEMP = COS*R(I,K)+SIN*R(J,K) WORK = -SIN*R(I,K)+COS*R(J,K) R(I,K) = TEMP 530 R(J,K) = WORK 540 DO 550 K=1,M TEMP = COS*Q(K,I)+SIN*Q(K,J) WORK = -SIN*Q(K,I)+COS*Q(K,J) Q(K,I) = TEMP 550 Q(K,J) = WORK 560 CONTINUE C ********** C CHECK THE STOPPING CRITERIA C ********** TEMP = 0.0D0 DO 570 I=1,N 570 TEMP = TEMP+X(I)**2 TOLX = TOLS1*SQRT(TEMP)+TOLS2 IF (SQRT(ALF*PN2) .LE. TOLX) GO TO 650 IF(SSQ.GE.2.D0*N) GO TO 590 DO 580 I=1,N C***** C The stopping criterion is that no individual gradient be C greater than TOL2 C***** IF(ABS(EFSLST(I)).GE.TOL2) GO TO 590 580 CONTINUE C# WRITE(6,730) SSQ GO TO 660 590 CONTINUE TIME2=TIME1 TIME1=SECOND() TCYCLE=TIME1-TIME2 TLEFT=TLEFT-TCYCLE IF(RESFIL)THEN WRITE(6,600)TLEFT,SQRT(SSQ),ESCF 600 FORMAT(' RESTART FILE WRITTEN, TIME LEFT:',F9.1, 1' GRAD.:',F10.3,' HEAT:',G14.7) RESFIL=.FALSE. ELSE IF(MINPRT) WRITE(6,610)ICYC,MIN(TCYCLE,9999.99D0), 1MIN(TLEFT,9999999.9D0),MIN(SQRT(SSQ),999999.999D0),ESCF IF(LOG) WRITE(11,610)ICYC,MIN(TCYCLE,9999.99D0), 1MIN(TLEFT,9999999.9D0),MIN(SQRT(SSQ),999999.999D0),ESCF 610 FORMAT(' CYCLE:',I5,' TIME:',F6.1,' TIME LEFT:',F9.1, 1' GRAD.:',F10.3,' HEAT:',G14.7) ENDIF IF(TLAST-TLEFT.GT.TDUMP)THEN TLAST=TLEFT RESFIL=.TRUE. DO 620 I=1,N 620 XLAST(I)=X(I) IIIUM(1)=NSCF CALL PARSAV(2,N,M) ENDIF IF(TLEFT .GT. TCYCLE*2) GO TO 60 630 IIIUM(5)=NCOUNT DO 640 I=1,N 640 XLAST(I)=X(I) IIIUM(1)=NSCF CALL PARSAV(1,N,M) IFLEPO=-1 RETURN 650 WRITE (6,760) NCOUNT GOTO 870 660 WRITE (6,770) NCOUNT GOTO 870 670 CONTINUE WRITE(6,680) IXSO 680 FORMAT(1H ,5X,'ATTEMPT TO GO DOWNHILL IS UNSUCCESSFUL AFTER',I5,5X 1,'ORTHOGONAL SEARCHES') GOTO 870 C# 730 FORMAT(1H ,'FINAL GRADIENT =',F15.7) 690 FORMAT(1H ,3X,'ALF =',E12.4) 700 FORMAT(1H ,3X,'NCOUNT =',I5) 710 FORMAT(3X,'TIME LEFT:',F7.1,' CYCLE',I5,3X,'GNORM SQUARED IS' 1,F13.5) 720 FORMAT(4(5X,'X(',I2,') = ',E15.8)) 730 FORMAT(4(5X,'P(',I2,') = ',E15.8)) 740 FORMAT(5X,'R-MATRIX DIAGONAL ENTRIES ...') 750 FORMAT(6E13.3) 760 FORMAT('0TEST ON X SATISFIED, NUMBER OF FUNCTION CALLS = ',I5) 770 FORMAT('0TEST ON SSQ SATISFIED, NUMBER OF FUNCTION CALLS = ',I5) 780 FORMAT(' ///// NEXT CYCLE IS A SIDE-STEP ALONG THE ',I2, 1 '-TH NORMAL TO P') 790 FORMAT('0ALLOWED NUMBER OF FUNCTION CALLS EXCEEDED.'/ 1 ' NUMBER OF FUNCTION CALLS WAS ',I5) 800 FORMAT(' L.-M. PARAMETER = ',E15.7, 1 ' SUMSQUARES CHANGE = ',E15.7) 810 FORMAT(1H ) 820 FORMAT(1H ) 830 FORMAT(1H ,3X,'I',7X,I2,9(10X,I2)) 840 FORMAT(1H ,1X,'X(I)',1X,F10.5,2X,9(F10.5,2X)) 850 FORMAT(1H ,1X,'G(I)',1X,F10.5,2X,9(F10.5,2X)) 860 FORMAT(1H ,1X,'P(I)',1X,F10.5,2X,9(F10.5,2X)) 870 LAST=1 RETURN END mopac7-1.15/fortran/deri2.f0000644000175000017500000002535511053302063012401 00000000000000 SUBROUTINE DERI2(C,E,NORBS, MINEAR, F, FD, FCI, NINEAR, 1NVAR,WORK,B,NW2,GRAD,AB,NW3,FB,THROLD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C(NORBS,NORBS),E(NORBS),WORK(NORBS,NORBS) 1 ,F(MINEAR,MPACK/MINEAR) 2 ,FD(NINEAR,(5*MAXPAR+MPACK)/NINEAR) 3 ,FCI(NINEAR,MAXORB/NINEAR) 4 ,B(MINEAR,(6*MPACK-5*MAXPAR)/MINEAR) 5 ,AB(MINEAR,6*MPACK/MINEAR),FB(NVAR,6*MPACK/NVAR) 6 ,GRAD(NVAR) ********************************************************************* * * DERI2 COMPUTE THE RELAXATION PART OF THE DERIVATIVES OF THE * NON-VARIATIONALLY OPTIMIZED ENERGY WITH RESPECT TO TWO * COORDINATES AT A TIME. THIS IS DONE IN THREE STEPS. * * THE M.O DERIVATIVES ARE SOLUTION {X} OF A LINEAR SYSTEM * (D-A) * X = F * WHERE D IS A DIAGONAL SUPER-MATRIX OF FOCK EIGENVALUE DIFFERENCES * AND A IS A SUPER-MATRIX OF 2-ELECTRONS INTEGRALS IN M.O BASIS. * SUCH A SYSTEM IS TOO LARGE TO BE INVERTED DIRECTLY THUS ONE MUST * USES A RELAXATION METHOD TO GET A REASONABLE ESTIMATE OF {X}. * THIS REQUIRES A BASIS SET {B} TO BE GENERATED ITERATIVELY, AFTER * WHICH WE SOLVE BY DIRECT INVERSION THE LINEAR SYSTEM PROJECTED * IN THIS BASIS {B}. IT WORKS QUICKLY BUT DOES REQUIRE A LARGE * CORE MEMORY. * * USE A FORMALISM WITH FOCK OPERATOR THUS AVOIDING THE EXPLICIT * COMPUTATION (AND STORAGE) OF THE SUPER-MATRIX A. * THE SEMIEMPIRICAL METHODS DO NOT INVOLVE LARGE C.I CALCULATIONS. * THEREFORE FOR EACH GRADIENT COMPONENT WE BUILD THE C.I MATRIX * DERIVATIVE FROM THE M.O. INTEGRALS AND FOCK EIGENVALUES * DERIVATIVES, THUS PROVIDING THE RELAXATION CONTRIBUTION TO THE * GRADIENT WITHOUT COMPUTATION AND STORAGE OF THE 2ND ORDER DENSITY * MATRIX. * * STEP 1) * USE THE PREVIOUS B AND THE NEW F VECTORS TO BUILD AN INITIAL * BASIS SET B. * STEP 2) * BECAUSE THE ELECTRONIC HESSIAN (D-A) IS THE SAME FOR EACH * DERIVATIVE, WE ONLY NEED TO ENLARGE ITERATIVELY THE ORTHONORMAL * BASIS SET {B} USED TO INVERT THE PROJECTED HESSIAN. * (DERIVED FROM THE LARGEST RESIDUAL VECTOR ). * THIS SECTION IS CARRIED OUT IN THE DIAGONAL METRIC 'SCALAR'. * STEP 3) ... LOOP ON THE GEOMETRIC VARIABLE : * 3.1 FOR EACH GEOMETRIC VARIABLE, GET THE M.O DERIVATIVES IN A.O. * 3.2 COMPUTE THE FOCK EIGENVALUES AND 2-ELECTRON INTEGRAL RELAXATION. * 3.3 BUILD THE ELECTRONIC RELAXATION CONTRIBUTION TO THE C.I MATRIX * AND GET THE ASSOCIATED EIGENSTATE DERIVATIVE WITH RESPECT TO * THE GEOMETRIC VARIABLE. * * INPUT * C(NORBS,NORBS) : M.O. COEFFICIENTS, IN COLUMN. * E(NORBS) : EIGENVALUES OF THE FOCK MATRIX. * MINEAR : NUMBER OF NON REDUNDANT ROTATION OF THE M.O. * F(MINEAR,NVAR) : NON-RELAXED FOCK MATRICES DERIVATIVES * IN M.O BASIS, OFF-DIAGONAL BLOCKS. * FD(NINEAR,NVAR): IDEM, DIAGONAL BLOCKS, C.I-ACTIVE ONLY. * WORK : WORK ARRAY OF SIZE N*N. * B(MINEAR,NBSIZE) : INITIAL ORTHONORMALIZED BASIS SET {B}. * GRAD(NVAR) : GRADIENT VECTOR BEFORE RELAXATION CORRECTION. * AB(MINEAR,*): STORAGE FOR THE (D-A) * B VECTORS. * FB(NVAR,*) : STORAGE FOR THE MATRIX PRODUCT F' * B. * OUTPUT * GRAD : DERIVATIVE OF THE HEAT OF FORMATION WITH RESPECT TO * THE NVAR OPTIMIZED VARIABLES. * ************************************************************************ COMMON /FOKMAT/ FDUMY(MPACK), SCALAR(MPACK) COMMON /NVOMAT/ DIAG(MPACK/2) 1 /WORK3 / DIJKL(MPACK*4) 2 /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) 3 /CIVECT/ VECTCI(NMECI**2),BABINV(NMECI**3), 4BCOEF(NMECI**4-NMECI**3+1) 5 /KEYWRD/ KEYWRD COMMON /CIBITS/ NMOS,LAB,NELEC,NBO(3) COMMON /WORK2 / BAB(MMCI,MMCI), +DUMY(NMECI**4+2*NMECI**3+NMECI**2-MMCI*MMCI) COMMON /NUMCAL/ NUMCAL DIMENSION LCONV(MMCI) LOGICAL FAIL, LCONV, DEBUG, LBAB CHARACTER KEYWRD*241 DATA ICALCN/0/ C C * * * STEP 1 * * * C BUILD UP THE INITIAL ORTHONORMALIZED BASIS. C IF(ICALCN.NE.NUMCAL) THEN DEBUG=INDEX(KEYWRD,' DERI2').NE.0 ICALCN=NUMCAL MAXITE=MIN(MMCI,INT(SQRT(NMECI**3.D0)),MPACK*2/NVAR) MAXITE=MIN(MAXITE,MIN(NW2,NW3)/MAX(MINEAR,NINEAR)) NFIRST=MIN(NVAR,1+MAXITE/4) ENDIF FAIL=.FALSE. NBSIZE=0 TIME1=SECOND() C C NORMAL CASE. USE F ONLY. C CALL DERI21 (F,NVAR,MINEAR,NFIRST,WORK 1 ,WORK(NVAR*NVAR+1,1),B,NLAST) LBAB=.FALSE. NFIRST=NBSIZE+1 NLAST=NBSIZE+NLAST DO 10 I=1,NVAR 10 LCONV(I)=.FALSE. C C * * * STEP 2 * * * C RELAXATION METHOD WITH OPTIMUM INCREASE OF THE BASIS SET. C --------------------------------------------------------- C C UPDATE AB ,FCI AND BAB. (BAB IS SYMMETRIC) 20 DO 30 J=NFIRST,NLAST CALL DERI22(C,B(1,J),WORK,NORBS,WORK,AB(1,J),MINEAR, 1 FCI(1,J)) CALL MXM(AB(1,J),1,B,MINEAR,BAB(1,J),NLAST) DO 30 I=1,NFIRST-1 30 BAB(J,I)=BAB(I,J) C INVERT BAB, STORE IN BABINV. 40 L=0 DO 50 J=1,NLAST DO 50 I=1,NLAST L=L+1 50 BABINV(L)=BAB(I,J) CALL OSINV (BABINV,NLAST,DETER) IF (DETER.EQ.0) THEN IF(NLAST.NE.1)THEN WRITE(6,'('' THE BAB MATRIX OF ORDER'',I3, 1 '' IS SINGULAR IN DERI2''/ 2 '' THE RELAXATION IS STOPPED AT THIS POINT.'')')NLAST ENDIF LBAB=.TRUE. NLAST=NLAST-1 GO TO 40 ENDIF IF (.NOT.LBAB) THEN C UPDATE F * B' CALL MTXM (F,NVAR,B(1,NFIRST),MINEAR,FB(1,NFIRST),NLAST-NFIRST+ 11) ENDIF C NEW SOLUTIONS IN BASIS B , STORED IN BCOEF(NVAR,*). C BCOEF = BABINV * FB' IF(NLAST.NE.0)CALL MXMT (BABINV,NLAST,FB,NLAST,BCOEF,NVAR) IF(LBAB) GO TO 90 C C SELECT THE NEXT BASIS VECTOR AS THE LARGEST RESIDUAL VECTOR. C AND TEST FOR CONVERGENCE ON THE LARGEST RESIDUE. NRES=0 TEST2=0.D0 DO 70 IVAR=1,NVAR IF(LCONV(IVAR)) GO TO 70 C GET ONE NOT-CONVERGED RESIDUAL VECTOR (# IVAR), C STORED IN WORK. CALL MXM (AB,MINEAR,BCOEF(NLAST*(IVAR-1)+1),NLAST,WORK,1) TEST=0.D0 DO 60 I=1,MINEAR WORK(I,1)=F(I,IVAR)-WORK(I,1) 60 TEST=MAX(ABS(WORK(I,1)),TEST) IF(DEBUG)WRITE(6,*)' TEST:',TEST TEST2=MAX(TEST2,TEST) IF (TEST.LE.THROLD) THEN LCONV(IVAR)=.TRUE. IF(NVAR.EQ.1) GOTO 90 GO TO 70 ELSEIF (NLAST+NRES.EQ.MAXITE-1) THEN C RUNNING OUT OF STORAGE IF (TEST.LE.MAX(0.01D0,THROLD*2)) THEN LCONV(IVAR)=.TRUE. GO TO 70 ENDIF ELSE IF (NLAST+NRES.EQ.MAXITE) THEN C C COMPLETELY OUT OF STORAGE C FAIL=NRES.EQ.0 GO TO 80 ELSE C STORE THE FOLLOWING RESIDUE IN AB(CONTINUED). NRES=NRES+1 CALL SCOPY (MINEAR,WORK,1,AB(1,NLAST+NRES),1) ENDIF 70 CONTINUE 80 IF (NRES.EQ.0) GO TO 90 C FIND OPTIMUM FOLLOWING SUBSET, ADD TO B AND LOOP. NFIRST=NLAST+1 CALL DERI21(AB(1,NFIRST),NRES,MINEAR,NRES,WORK 1 ,WORK(NRES*NRES+1,1),B(1,NFIRST),NADD) NLAST=NLAST+NADD GO TO 20 C C CONVERGENCE ACHIEVED OR HALTED. C ------------------------------- C 90 NBSZE=NBSIZE IF(DEBUG.OR.LBAB) THEN WRITE(6,'('' RELAXATION ENDED IN DERI2 AFTER'',I3, 1 '' CYCLES''/'' REQUIRED CONVERGENCE THRESHOLD ON RESIDUALS ='' 2 ,F12.9/'' HIGHEST RESIDUAL ON'',I3,'' GRADIENT COMPONENTS = '' 3 ,F12.9)')NLAST-NBSZE,THROLD,NVAR,TEST2 IF(NLAST-NBSZE.EQ.0)THEN WRITE(6,'(A)') +' ANALYTIC C.I. DERIVATIVES DO NOT WORK FOR THIS SYSTEM' WRITE(6,'(A)')' ADD KEYWORD ''NOANCI'' AND RESUBMIT' STOP ENDIF TIME2=SECOND() WRITE(6,'('' ELAPSED TIME IN RELAXATION'',F15.3,'' SECOND'') 1 ')TIME2-TIME1 ENDIF IF(FAIL) THEN WRITE(6,'(A)')' ANALYTICAL DERIVATIVES TOO INACCURATE FOR THIS' WRITE(6,'(A)')' WORK. JOB STOPPED HERE. SEE MANUAL FOR IDEAS' STOP ELSE NBSIZE=0 C UNSCALED SOLUTION SUPERVECTORS, STORED IN F. IF(NLAST.NE.0)CALL MXM (B,MINEAR,BCOEF,NLAST,F,NVAR) DO 100 J=1,NVAR DO 100 I=1,MINEAR 100 F(I,J)=F(I,J)*SCALAR(I) C FOCK MATRIX DIAGONAL BLOCKS OVER C.I-ACTIVE M.O. C STORED IN FB. IF(NLAST.NE.0)CALL MXM (FCI,NINEAR,BCOEF,NLAST,FB,NVAR) ENDIF C C * * * STEP 3 * * * C FINAL LOOP (390) ON THE GEOMETRIC VARIABLES. C -------------------------------------------- C DO 130 IVAR=1,NVAR C C C.I-ACTIVE M.O DERIVATIVES INTO THE M.O BASIS, C RETURNED IN AB (N,NELEC+1,...,NELEC+NMOS). C C.I-ACTIVE EIGENVALUES DERIVATIVES, C RETURNED IN BCOEF(NELEC+1,...,NELEC+NMOS). CALL DERI23 (F(1,IVAR),FD(1,IVAR),E 1 ,FB(NINEAR*(IVAR-1)+1,1),AB,BCOEF,NORBS) C C DERIVATIVES OF THE 2-ELECTRONS INTEGRALS OVER C.I-ACTIVE M.O. C STORED IN /XYIJKL/. CALL DIJKL2 (AB(NORBS*NELEC+1,1),NORBS,NMOS,DIJKL,XY,NMECI) IF(DEBUG) THEN WRITE(6,'('' * * * GRADIENT COMPONENT NUMBER'',I4)')IVAR IF(INDEX(KEYWRD,'DEBU').NE.0) THEN WRITE(6,'('' C.I-ACTIVE M.O. DERIVATIVES IN M.O BASIS'', 1 '', IN ROW.'')') L=NORBS*NELEC+1 DO 110 I=NELEC+1,NELEC+NMOS WRITE(6,'(8F10.4)')(AB(K,1),K=L,L+NORBS-1) 110 L=L+NORBS ENDIF WRITE(6,'('' C.I-ACTIVE FOCK EIGENVALUES RELAXATION (E.V.)'' 1 )') WRITE(6,'(8F10.4)')(BCOEF(I),I=NELEC+1,NELEC+NMOS) WRITE(6,'('' 2-ELECTRON INTEGRALS RELAXATION (E.V.)''/ 1'' I J K L d RELAXATION ONLY' 2') 3') DO 120 I=1,NMOS DO 120 J=1,I DO 120 K=1,I LL=K IF(K.EQ.I) LL=J DO 120 L=1,LL 120 WRITE(6,'(4I5,F20.10)') 1 NELEC+I,NELEC+J,NELEC+K,NELEC+L,XY(I,J,K,L) ENDIF C C BUILD THE C.I MATRIX DERIVATIVE, STORED IN AB. CALL MECID (BCOEF,GSE,WORK(LAB+1,1),WORK) CALL MECIH (WORK,AB,NMOS,LAB) C RELAXATION CORRECTION TO THE C.I ENERGY DERIVATIVE. CALL SUPDOT (WORK,AB,VECTCI,LAB,1) GRAD(IVAR)=GRAD(IVAR)+DOT(VECTCI,WORK,LAB)*23.061D0 IF (DEBUG) THEN WRITE(6,'('' RELAXATION OF THE GRADIENT COMPONENT'',F10.4, 1'' KCAL/MOLE'')') DOT(VECTCI,WORK,LAB)*23.061D0 ENDIF C C THE END . 130 CONTINUE IF(DEBUG) 1WRITE(6,'('' ELAPSED TIME IN C.I-ENERGY RELAXATION'',F15.3, 2 '' SECOND'')')SECOND()-TIME2 RETURN END mopac7-1.15/fortran/diis.f0000644000175000017500000002667511053302063012332 00000000000000 SUBROUTINE DIIS(XP, XPARAM, GP, GRAD, HP, HEAT, HS, NVAR, FRST) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XP(NVAR), XPARAM(NVAR), GP(NVAR), 1GRAD(NVAR), HS(NVAR*NVAR) LOGICAL FRST ************************************************************************ * * * DIIS PERFORMS DIRECT INVERSION IN THE ITERATIVE SUBSPACE * * * * THIS INVOLVES SOLVING FOR C IN XPARAM(NEW) = XPARAM' - HG' * * * * WHERE XPARAM' = SUM(C(I)XPARAM(I), THE C COEFFICIENTES COMING FROM * * * * | B 1 | . | C | = | 0 | * * | 1 0 | |-L | | 1 | * * * * WHERE B(I,J) =GRAD(I)H(T)HGRAD(J) GRAD(I) = GRADIENT ON CYCLE I * * H = INVERSE HESSIAN * * * * REFERENCE * * * * P. CSASZAR, P. PULAY, J. MOL. STRUCT. (THEOCHEM), 114, 31 (1984) * * * ************************************************************************ ************************************************************************ * * * GEOMETRY OPTIMIZATION USING THE METHOD OF DIRECT INVERSION IN * * THE ITERATIVE SUBSPACE (GDIIS), COMBINED WITH THE BFGS OPTIMIZER * * (A VARIABLE METRIC METHOD) * * * * WRITTEN BY PETER L. CUMMINS, UNIVERSITY OF SYDNEY, AUSTRALIA * * * * REFERENCE * * * * "COMPUTATIONAL STRATEGIES FOR THE OPTIMIZATION OF EQUILIBRIUM * * GEOMETRIES AND TRANSITION-STATE STRUCTURES AT THE SEMIEMPIRICAL * * LEVEL", PETER L. CUMMINS, JILL E. GREADY, J. COMP. CHEM., 10, * * 939-950 (1989). * * * * MODIFIED BY JJPS TO CONFORM TO EXISTING MOPAC CONVENTIONS * * * ************************************************************************ COMMON /KEYWRD/ KEYWRD PARAMETER (MRESET=15, M2=(MRESET+1)*(MRESET+1)) DIMENSION XSET(MRESET*MAXPAR),GSET(MRESET*MAXPAR), ESET(MRESET) DIMENSION DX(MAXPAR),GSAVE(MAXPAR), 1 ERR(MRESET*MAXPAR),B(M2),BS(M2),BST(M2) LOGICAL DEBUG, PRINT CHARACTER*241 KEYWRD DEBUG=.FALSE. PRINT=(INDEX(KEYWRD,' DIIS').NE.0) IF (PRINT) DEBUG=(INDEX(KEYWRD,'DEBUG').NE.0) IF (PRINT) WRITE(6,'(/,'' ***** BEGIN GDIIS ***** '')') C C SPACE SIMPLY LOADS THE CURRENT VALUES OF XPARAM AND GNORM INTO C THE ARRAYS XSET AND GSET C CALL SPACE(MRESET,MSET,XPARAM, GRAD, HEAT, NVAR, XSET, GSET, ESET 1, FRST) C C INITIALIZE SOME VARIABLES AND CONSTANTS C NDIIS = MSET MPLUS = MSET + 1 MM = MPLUS * MPLUS C C COMPUTE THE APPROXIMATE ERROR VECTORS C INV=-NVAR DO 30 I=1,MSET INV = INV + NVAR DO 30 J=1,NVAR S = 0.D0 KJ=(J*(J-1))/2 DO 10 K=1,J KJ = KJ+1 10 S = S - HS(KJ) * GSET(INV+K) DO 20 K=J+1,NVAR KJ = (K*(K-1))/2+J 20 S = S - HS(KJ) * GSET(INV+K) 30 ERR(INV+J) = S C C CONSTRUCT THE GDIIS MATRIX C DO 40 I=1,MM 40 B(I) = 1.D0 JJ=0 INV=-NVAR DO 50 I=1,MSET INV=INV+NVAR JNV=-NVAR DO 50 J=1,MSET JNV=JNV+NVAR JJ = JJ + 1 B(JJ)=0.D0 DO 50 K=1,NVAR 50 B(JJ) = B(JJ) + ERR(INV+K) * ERR(JNV+K) C DO 60 I=MSET-1,1,-1 DO 60 J=MSET,1,-1 60 B(I*MSET+J+I) = B(I*MSET+J) DO 70 I=1,MPLUS B(MPLUS*I) = 1.D0 70 B(MPLUS*MSET+I) = 1.D0 B(MM) = 0.D0 C C ELIMINATE ERROR VECTORS WITH THE LARGEST NORM C 80 CONTINUE DO 90 I=1,MM 90 BS(I) = B(I) IF (NDIIS .EQ. MSET) GO TO 140 DO 130 II=1,MSET-NDIIS XMAX = -1.D10 ITERA = 0 DO 110 I=1,MSET XNORM = 0.D0 INV = (I-1) * MPLUS DO 100 J=1,MSET 100 XNORM = XNORM + ABS(B(INV + J)) IF (XMAX.LT.XNORM .AND. XNORM.NE.1.0D0) THEN XMAX = XNORM ITERA = I IONE = INV + I ENDIF 110 CONTINUE DO 120 I=1,MPLUS INV = (I-1) * MPLUS DO 120 J=1,MPLUS JNV = (J-1) * MPLUS IF (J.EQ.ITERA) B(INV + J) = 0.D0 B(JNV + I) = B(INV + J) 120 CONTINUE B(IONE) = 1.0D0 130 CONTINUE 140 CONTINUE C IF (DEBUG) THEN C C OUTPUT THE GDIIS MATRIX C WRITE(*,'(/5X,'' GDIIS MATRIX'')') IJ = 0 DO 150 I=1,MPLUS DO 150 J=1,I IJ = IJ + 1 150 BST(IJ) = B( MPLUS * (J-1) + I) CALL VECPRT(BST,MPLUS) ENDIF C C SCALE DIIS MATRIX BEFORE INVERSION C DO 160 I=1,MPLUS II = MPLUS * (I-1) + I 160 GSAVE(I) = 1.D0 / DSQRT(1.D-20+DABS(B(II))) GSAVE(MPLUS) = 1.D0 DO 170 I=1,MPLUS DO 170 J=1,MPLUS IJ = MPLUS * (I-1) + J 170 B(IJ) = B(IJ) * GSAVE(I) * GSAVE(J) C IF (DEBUG) THEN C C OUTPUT SCALED GDIIS MATRIX C WRITE(*,'(/5X,'' GDIIS MATRIX (SCALED)'')') IJ = 0 DO 180 I=1,MPLUS DO 180 J=1,I IJ = IJ + 1 180 BST(IJ) = B( MPLUS * (J-1) + I) CALL VECPRT(BST,MPLUS) ENDIF C C INVERT THE GDIIS MATRIX C CALL MINV(B,MPLUS,DET) C DO 190 I=1,MPLUS DO 190 J=1,MPLUS IJ = MPLUS * (I-1) + J 190 B(IJ) = B(IJ) * GSAVE(I) * GSAVE(J) C C COMPUTE THE INTERMEDIATE INTERPOLATED PARAMETER AND GRADIENT C VECTORS C DO 200 K=1,NVAR XP(K) = 0.D0 GP(K) = 0.D0 DO 200 I=1,MSET INK = (I-1) * NVAR + K XP(K) = XP(K) + B(MPLUS*MSET+I) * XSET(INK) 200 GP(K) = GP(K) + B(MPLUS*MSET+I) * GSET(INK) HP=0.D0 DO 210 I=1,MSET 210 HP=HP+B(MPLUS*MSET+I)*ESET(I) C DO 220 K=1,NVAR 220 DX(K) = XPARAM(K) - XP(K) XNORM = SQRT(DOT(DX,DX,NVAR)) IF (PRINT) THEN WRITE (6,'(/10X,''DEVIATION IN X '',F7.4,8X,''DETERMINANT '', 1 G9.3)') XNORM,DET WRITE(6,'(10X,''GDIIS COEFFICIENTS'')') WRITE(6,'(10X,5F12.5)') (B(MPLUS*MSET+I),I=1,MSET) ENDIF C C THE FOLLOWING TOLERENCES FOR XNORM AND DET ARE SOMEWHAT ARBITRARY! C THRES = MAX(10.D0**(-NVAR), 1.D-25) IF (XNORM.GT.2.D0 .OR. DABS(DET).LT. THRES) THEN IF (PRINT) WRITE(6,'(10X,''THE DIIS MATRIX IS ILL CONDITIONED'' 1, /10X,'' - PROBABLY, VECTORS ARE LINEARLY DEPENDENT - '', 2 /10X,''THE DIIS STEP WILL BE REPEATED WITH A SMALLER SPACE'')') DO 230 K=1,MM 230 B(K) = BS(K) NDIIS = NDIIS - 1 IF (NDIIS .GT. 0) GO TO 80 IF (PRINT) WRITE(*,'(10X,''NEWTON-RAPHSON STEP TAKEN'')') DO 240 K=1,NVAR XP(K) = XPARAM(K) 240 GP(K) = GRAD(K) C ENDIF IF (PRINT) WRITE(6,'(/,'' ***** END GDIIS ***** '',/)') C RETURN END SUBROUTINE SPACE(MRESET, MSET, XPARAM, GRAD, HEAT, NVAR, 1XSET, GSET, ESET, FRST) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XPARAM(NVAR), GRAD(NVAR) DIMENSION XSET(MRESET*NVAR),GSET(MRESET*NVAR), ESET(MRESET) LOGICAL FRST C C UPDATE PARAMETER AND GRADIENT SUBSPACE C IF(FRST)THEN NRESET=MIN(NVAR/2,MRESET) FRST=.FALSE. MSET=0 ENDIF C IF (MSET .EQ. NRESET) THEN DO 10 I=1,MSET-1 MI = NVAR*(I-1) NI = NVAR*I ESET(I)=ESET(I+1) DO 10 K=1,NVAR XSET(MI+K) = XSET(NI+K) 10 GSET(MI+K) = GSET(NI+K) MSET=NRESET-1 ENDIF C C STORE THE CURRENT POINT C DO 20 K=1,NVAR NMK = NVAR*MSET+K XSET(NMK) = XPARAM(K) 20 GSET(NMK) = GRAD(K) MSET=MSET+1 ESET(MSET)=HEAT C RETURN END SUBROUTINE MINV(A,N,D) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION A(*) ********************************************************************** * * INVERT A MATRIX USING GAUSS-JORDAN METHOD. PART OF DIIS * A - INPUT MATRIX (MUST BE A GENERAL MATRIX), DESTROYED IN * COMPUTATION AND REPLACED BY RESULTANT INVERSE. * N - ORDER OF MATRIX A * D - RESULTANT DETERMINANT * ********************************************************************** DIMENSION M(MAXPAR), L(MAXPAR) C C SEARCH FOR LARGEST ELEMENT C D=1.0D0 NK=-N DO 180 K=1,N NK=NK+N L(K)=K M(K)=K KK=NK+K BIGA=A(KK) DO 20 J=K,N IZ=N*(J-1) DO 20 I=K,N IJ=IZ+I 10 IF (ABS(BIGA).LT.ABS(A(IJ)))THEN BIGA=A(IJ) L(K)=I M(K)=J ENDIF 20 CONTINUE C C INTERCHANGE ROWS C J=L(K) IF (J-K) 50,50,30 30 KI=K-N DO 40 I=1,N KI=KI+N HOLD=-A(KI) JI=KI-K+J A(KI)=A(JI) 40 A(JI)=HOLD C C INTERCHANGE COLUMNS C 50 I=M(K) IF (I-K) 80,80,60 60 JP=N*(I-1) DO 70 J=1,N JK=NK+J JI=JP+J HOLD=-A(JK) A(JK)=A(JI) 70 A(JI)=HOLD C C DIVIDE COLUMN BY MINUS PIVOT (VALUE OF PIVOT ELEMENT IS C CONTAINED IN BIGA) C 80 IF (BIGA) 100,90,100 90 D=0.0D0 RETURN 100 DO 120 I=1,N IF (I-K) 110,120,110 110 IK=NK+I A(IK)=A(IK)/(-BIGA) 120 CONTINUE C REDUCE MATRIX DO 150 I=1,N IK=NK+I HOLD=A(IK) IJ=I-N DO 150 J=1,N IJ=IJ+N IF (I-K) 130,150,130 130 IF (J-K) 140,150,140 140 KJ=IJ-I+K A(IJ)=HOLD*A(KJ)+A(IJ) 150 CONTINUE C C DIVIDE ROW BY PIVOT C KJ=K-N DO 170 J=1,N KJ=KJ+N IF (J-K) 160,170,160 160 A(KJ)=A(KJ)/BIGA 170 CONTINUE C C PRODUCT OF PIVOTS C D=MAX(-1.D25,MIN(1.D25,D)) D=D*BIGA C C REPLACE PIVOT BY RECIPROCAL C A(KK)=1.0D0/BIGA 180 CONTINUE C C FINAL ROW AND COLUMN INTERCHANGE C K=N 190 K=(K-1) IF (K) 260,260,200 200 I=L(K) IF (I-K) 230,230,210 210 JQ=N*(K-1) JR=N*(I-1) DO 220 J=1,N JK=JQ+J HOLD=A(JK) JI=JR+J A(JK)=-A(JI) 220 A(JI)=HOLD 230 J=M(K) IF (J-K) 190,190,240 240 KI=K-N DO 250 I=1,N KI=KI+N HOLD=A(KI) JI=KI-K+J A(KI)=-A(JI) 250 A(JI) =HOLD GO TO 190 260 RETURN END mopac7-1.15/fortran/brlzon.f0000644000175000017500000000701611053302064012675 00000000000000 SUBROUTINE BRLZON(FMATRX,FMAT2D,N3,SEC,VEC, B, MONO3, STEP,MODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION FMATRX((N3*(N3+1))/2), FMAT2D(N3,N3), B(MONO3,*) COMPLEX SEC(MONO3,MONO3), VEC(MONO3,MONO3) *********************************************************************** * * IF MODE IS 1 THEN * BRLZON COMPUTES THE PHONON SPECTRUM OF A LINEAR POLYMER GIVEN * THE WEIGHTED HESSIAN MATRIX. * IF MODE IS 2 THEN * BRLZON COMPUTES THE ELECTRONIC ENERGY BAND STRUCTURE OF A LINEAR * POLYMER GIVEN THE FOCK MATRIX. * * ON INPUT * * IF MODE IS 1 THEN * FMATRX IS THE MASS-WEIGHTED HESSIAN MATRIX, PACKED LOWER * HALF TRIANGLE * N3 IS 3*(NUMBER OF ATOMS IN UNIT CELL) = SIZE OF FMATRX * MONO3 IS 3*(NUMBER OF ATOMS IN PRIMITIVE UNIT CELL) * FMAT2D, SEC, VEC ARE SCRATCH ARRAYS * IF MODE IS 2 THEN * FMATRX IS THE FOCK MATRIX, PACKED LOWER HALF TRIANGLE * N3 IS NUMBER OF ATOMIC ORBITALS IN SYSTEM = SIZE OF FMATRX * MONO3 IS NUMBER OF ATOMIC ORBITALS IN FUNDAMENTAL UNIT CELL * FMAT2D, SEC, VEC ARE SCRATCH ARRAYS * *********************************************************************** COMMON /KEYWRD/ KEYWRD CHARACTER KEYWRD*241 REAL EIGS(MAXPAR) COMPLEX PHASE FACT=6.023D23 C=2.998D10 TWOPI=2.D0*ACOS(-1.D0) C C NCELLS IS THE NUMBER OF PRIMITIVE UNIT CELLS IN THE UNIT CELL C NCELLS=N3/MONO3 C C PUT THE ENERGY MATRIX INTO SQUARE MATRIX FORM C K=0 DO 10 I=1,N3 DO 10 J=1,I K=K+1 10 FMAT2D(I,J)=FMATRX(K) C C STEP IS THE STEP SIZE IN THE BRILLOUIN ZONE (BOUNDARIES: 0.0 - 0.5), C THERE ARE M OF THESE. C MONO3 IS THE SIZE OF ONE MER (MONOMERIC UNIT) C M=0.5D0/STEP+1 DO 70 LOOP=1,M DO 20 I=1,MONO3 DO 20 J=1,MONO3 20 SEC(I,J)=0 CAY=(LOOP-1)*STEP DO 40 I=1,N3,MONO3 RI=(I-1)/MONO3 C C IF THE PRIMITIVE UNIT CELL IS MORE THAN HALF WAY ACROSS THE UNIT CELL, C CONSIDER IT AS BEING LESS THAN HALF WAY ACROSS, BUT IN THE OPPOSITE C DIRECTION. C IF(RI.GT.NCELLS/2) RI=RI-NCELLS C C PHASE IS THE COMPLEX PHASE EXP(I.K.R(I)*(2PI)) C PHASE=EXP(SQRT(CMPLX(-1.D0,0.D0))*CAY*RI*TWOPI) DO 30 II=1,MONO3 III=II+I-1 DO 30 JJ=1,II 30 SEC(II,JJ)=SEC(II,JJ)+FMAT2D(III,JJ)*PHASE 40 CONTINUE CALL CDIAG(SEC,EIGS,VEC,MONO3, 0) IF(MODE.EQ.1)THEN C C CONVERT INTO RECIPRICAL CENTIMETERS C DO 50 I=1,MONO3 50 B(I,LOOP)=SIGN(SQRT(FACT*ABS(EIGS(I)*1.D5))/(C*TWOPI), 1 DBLE(EIGS(I))) ELSE DO 60 I=1,MONO3 60 B(I,LOOP)=EIGS(I) ENDIF 70 CONTINUE BOTTOM=1.D6 TOP=-1.D6 DO 80 I=1,MONO3 DO 80 J=1,M BOTTOM=MIN(BOTTOM,B(I,J)) 80 TOP=MAX(TOP,B(I,J)) IF(MODE.EQ.1)THEN WRITE(6,'(//,A,F6.3,/)') 1' FREQUENCIES IN CM(-1) FOR PHONON SPECTRUM ACROSS BRILLOUIN ZONE' DO 90 I=1,MONO3 WRITE(6,'(/,A,I4,/)')' BAND:',I 90 WRITE(6,'(6(F6.3,F7.1))')((J-1)*STEP,B(I,J),J=1,M) STOP ELSE WRITE(6,'(//,A,F6.3,/)') 1' ENERGIES (IN EV) OF ELECTRONIC BANDS IN BAND STRUCTURE' DO 100 I=1,MONO3 WRITE(6,'(A,/,A,I4,/,A)')' .',' CURVE',I,'CURVE DATA ARE' 100 WRITE(6,'(6(F6.3,F7.2))')((J-1)*STEP,B(I,J),J=1,M) ENDIF CALL DOFS(B,MONO3,M,FMAT2D,500,BOTTOM,TOP) RETURN END mopac7-1.15/fortran/getgeg.f0000644000175000017500000002051511053302063012627 00000000000000 SUBROUTINE GETGEG(IREAD,LABELS,GEO,NA,NB,NC,AMS,NATOMS,INT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION GEO(3,*),NA(*),NB(*),NC(*),AMS(*) 1,LABELS(*) COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON /SIMBOL/ SIMBOL(MAXPAR) COMMON /ATMASS/ ATMASS(NUMATM) COMMON /ATOMTX/ LTXT, TXTATM(NUMATM) COMMON /GEOVAR/ NVAR, LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) DIMENSION ISTART(20), LGEO(3,100) CHARACTER LINE*80, TGEO(3,100)*12, TXTATM*8, STRING*80, SIMBOL*10 LOGICAL LEADSP, INT CHARACTER ELEMNT(107)*2, LTXT*1 DATA (ELEMNT(I),I=1,107)/' H','HE', 1 'LI','BE',' B',' C',' N',' O',' F','NE', 2 'NA','MG','AL','SI',' P',' S','CL','AR', 3 'K ','CA','SC','TI',' V','CR','MN','FE','CO','NI','CU', 4 'ZN','GA','GE','AS','SE','BR','KR', 5 'RB','SR',' Y','ZR','NB','MO','TC','RU','RH','PD','AG', 6 'CD','IN','SN','SB','TE',' I','XE', 7 'CS','BA','LA','CE','PR','ND','PM','SM','EU','GD','TB','DY', 8 'HO','ER','TM','YB','LU','HF','TA',' W','RE','OS','IR','PT', 9 'AU','HG','TL','PB','BI','PO','AT','RN', 1 'FR','RA','AC','TH','PA','U','NP','PU','AM','CM','BK','CF','XX', 2 'FM','MD','CB','++',' +','--',' -','TV'/ NERR=0 INT=.TRUE. NUMAT=0 NA(1)=0 NB(1)=0 NC(1)=0 NB(2)=0 NC(2)=0 NC(3)=0 MAXTXT=0 DO 60 NATOMS=1,100 READ(IREAD,'(A)',END=70,ERR=70)LINE IF(LINE.EQ.' ')GOTO 70 C C SEE IF TEXT IS ASSOCIATED WITH THIS ELEMENT C I=INDEX(LINE,'(') IF(I.NE.0)THEN C C YES, ELEMENT IS LABELLED. C K=INDEX(LINE,')') TXTATM(NATOMS)=LINE(I:K) MAXTXT=MAX(MAXTXT,K-I+1) STRING=LINE(1:I-1)//LINE(K+1:) LINE=STRING ELSE TXTATM(NATOMS)=' ' ENDIF ************************************************************************ DO 10 I=1,80 ILINE=ICHAR(LINE(I:I)) IF(ILINE.GE.ICHAR('a').AND.ILINE.LE.ICHAR('z')) THEN LINE(I:I)=CHAR(ILINE+ICHAR('A')-ICHAR('a')) ENDIF 10 CONTINUE ************************************************************************ NVALUE=0 LEADSP=.TRUE. DO 20 I=1,80 IF (LEADSP.AND.LINE(I:I).NE.' ') THEN NVALUE=NVALUE+1 ISTART(NVALUE)=I END IF LEADSP=(LINE(I:I).EQ.' ') 20 CONTINUE DO 30 J=1,107 30 IF(INDEX(' '//LINE(ISTART(1):ISTART(1)+2),ELEMNT(J)//' ').NE.0) 1 GOTO 40 IF(INDEX(' '//LINE(ISTART(1):ISTART(1)+2),' X').NE.0) THEN J=99 GOTO 40 ENDIF WRITE(6,'(2A)')' ELEMENT NOT RECOGNIZED: ', 1LINE(ISTART(1):ISTART(1)+2) NERR=NERR+1 40 LABELS(NATOMS)=J IF(J.NE.99)THEN NUMAT=NUMAT+1 ATMASS(NUMAT)=READA(LINE(1:MAX(ISTART(2)-1,1)),ISTART(1)) IF(ATMASS(NUMAT).GT.1.D-15)THEN WRITE(6,'('' FOR ATOM'',I4,'' ISOTOPIC MASS:'' 1 ,F15.5)')NATOMS, ATMASS(NUMAT) ELSE ATMASS(NUMAT)=AMS(J) ENDIF C# WRITE(6,*)NATOMS,NUMAT,ATMASS(NUMAT) ENDIF TGEO(1,NATOMS)=' ' TGEO(2,NATOMS)=' ' TGEO(3,NATOMS)=' ' IF(NATOMS.EQ.1) GOTO 50 NA(NATOMS)=READA(LINE,ISTART(2)) CALL GETVAL(LINE(ISTART(3):),GEO(1,NATOMS),TGEO(1,NATOMS)) IF(NATOMS.EQ.2) GOTO 50 NB(NATOMS)=READA(LINE,ISTART(4)) CALL GETVAL(LINE(ISTART(5):),GEO(2,NATOMS),TGEO(2,NATOMS)) IF(NATOMS.EQ.3) GOTO 50 NC(NATOMS)=READA(LINE,ISTART(6)) CALL GETVAL(LINE(ISTART(7):),GEO(3,NATOMS),TGEO(3,NATOMS)) 50 CONTINUE 60 CONTINUE 70 NATOMS=NATOMS-1 DO 80 I=1,NATOMS DO 80 J=1,3 80 LGEO(J,I)=-1 IVAR=-1 NVAR=0 NDEP=0 KERR=0 90 READ(IREAD,'(A)',END=180,ERR=180)LINE IF(LINE.EQ.' ')THEN IF(IVAR.EQ.-1)THEN MERR=0 DO 110 I=1,NATOMS DO 100 J=1,3 100 IF(GEO(J,I).LT.-998)MERR=MERR+1 110 CONTINUE C C IF ALL SYMBOLS ARE DEFINED, THEN DO NOT READ 'FIXED' SYMBOLS C IF(MERR.EQ.0) GOTO 180 IVAR=NVAR GOTO 90 ELSE GOTO 180 ENDIF ENDIF ************************************************************************ DO 120 I=1,80 ILINE=ICHAR(LINE(I:I)) IF(ILINE.GE.ICHAR('a').AND.ILINE.LE.ICHAR('z')) THEN LINE(I:I)=CHAR(ILINE+ICHAR('A')-ICHAR('a')) ENDIF 120 CONTINUE ************************************************************************ DO 130 I=1,80 130 IF(LINE(I:I).NE.' ')GOTO 140 140 DO 150 L=I,I+12 150 IF(LINE(L:L).EQ.' ')GOTO 160 160 SUM=READA(LINE,L) N=0 LERR=0 DO 170 J=1,NATOMS DO 170 K=1,3 IF(TGEO(K,J).EQ.LINE(I:L) .OR. 1TGEO(K,J)(2:).EQ.LINE(I:L).AND.TGEO(K,J)(1:1).EQ.'-')THEN IF(LGEO(K,J).NE.-1)LERR=1 LGEO(K,J)=LGEO(K,J)+1 N=N+1 GEO(K,J)=SUM IF(N.EQ.1)THEN NVAR=NVAR+1 LOC(1,NVAR)=J LOC(2,NVAR)=K XPARAM(NVAR)=SUM SIMBOL(NVAR)=TGEO(K,J) IF(SIMBOL(NVAR)(1:1).EQ.'-')THEN WRITE(6,'(A)')' NEGATIVE SYMBOLICS MUST BE PRECEEDED BY ' +//' THE POSITIVE EQUIVALENT' WRITE(6,'(A)')' FAULTY SYMBOLIC: '//SIMBOL(NVAR) STOP ENDIF ENDIF IF(N.GT.1)THEN NDEP=NDEP+1 LOCPAR(NDEP)=LOC(1,NVAR) IDEPFN(NDEP)=LOC(2,NVAR) IF(TGEO(K,J)(1:1).EQ.'-')THEN IDEPFN(NDEP)=14 IF(LOC(2,NVAR).NE.3) THEN KERR=KERR+1 WRITE(6,'(2A)')' ONLY DIHEDRAL SYMBOLICS CAN BE' 1//' PRECEEDED BY A "-" SIGN' ENDIF ENDIF LOCDEP(NDEP)=J ENDIF ENDIF 170 CONTINUE KERR=KERR+LERR IF(LERR.EQ.1)THEN WRITE(6,'(2A)')' THE FOLLOWING SYMBOL HAS BEEN DEFINED MORE'// 1' THAN ONCE:',LINE(I:L) NERR=NERR+1 ENDIF IF(N.EQ.0)THEN WRITE(6,'(2A)')' THE FOLLOWING SYMBOLIC WAS NOT USED:',LINE(I:L 1) NERR=NERR+1 ENDIF GOTO 90 180 CONTINUE MERR=0 DO 200 I=1,NATOMS DO 190 J=1,3 190 IF(GEO(J,I).LT.-998)MERR=MERR+1 C# WRITE(6,'(2X,A,3F12.6,3I4)')ELEMNT(LABELS(I)), C# 1(GEO(J,I),J=1,3), NA(I), NB(I), NC(I) 200 CONTINUE IF(MERR.NE.0)WRITE(6,'(I4,A)')MERR, ' GEOMETRY VARIABLES WERE NOT' 1//' DEFINED' IF(MERR+KERR+NERR.NE.0)THEN WRITE(6,'(A,I3,A)') 1' THE GEOMETRY DATA-SET CONTAINED',MERR+KERR+NERR,' ERRORS' STOP ENDIF C C SORT PARAMETERS TO BE OPTIMIZED INTO INCREASING ORDER OF ATOMS C IF(IVAR.NE.-1)NVAR=IVAR DO 230 I=1,NVAR J=100000 DO 210 L=I,NVAR IF(J.GT.LOC(1,L)*4+LOC(2,L))THEN K=L J=LOC(1,L)*4+LOC(2,L) ENDIF 210 CONTINUE STRING(1:10)=SIMBOL(I) SIMBOL(I)=SIMBOL(K) SIMBOL(K)=STRING SUM=XPARAM(I) XPARAM(I)=XPARAM(K) XPARAM(K)=SUM DO 220 J=1,2 L=LOC(J,I) LOC(J,I)=LOC(J,K) 220 LOC(J,K)=L 230 CONTINUE C# IF(NVAR.NE.0)WRITE(6,'(//,'' PARAMETERS TO BE OPTIMIZED'')') DEGREE=ASIN(1.D0)/90 DO 240 I=1,NVAR C# WRITE(6,'(2I6,F12.6)')LOC(1,I),LOC(2,I),XPARAM(I) 240 IF(LOC(2,I).NE.1)XPARAM(I)=XPARAM(I)*DEGREE C# IF(NDEP.NE.0)WRITE(6,'(//,'' SYMMETRY FUNCTIONS '')') C# DO 28 I=1,NDEP C# 28 WRITE(6,'(3I6)')LOCPAR(I),IDEPFN(I),LOCDEP(I) LTXT=CHAR(MAXTXT) RETURN END SUBROUTINE GETVAL(LINE,X,T) IMPLICIT DOUBLE PRECISION (A-H,O-Z) CHARACTER LINE*80, T*12, CH1*1, CH2*1 CH1=LINE(1:1) CH2=LINE(2:2) IF((ICHAR(CH1).LT.ICHAR('A').OR.ICHAR(CH1).GT.ICHAR('Z')) .AND. 1(ICHAR(CH2).LT.ICHAR('A').OR.ICHAR(CH2).GT.ICHAR('Z')))THEN C C IS A NUMBER C X=READA(LINE,1) T=' ' ELSE I=INDEX(LINE,' ') T=LINE(:I) X=-999.D0 ENDIF RETURN END mopac7-1.15/fortran/enpart.f0000644000175000017500000003704411053302063012663 00000000000000 SUBROUTINE ENPART(UHF,H,ALPHA,BETA,P,Q,COORD) C----------------------------------------------------------* C C NEW SUB. ENPART, MODIFIED BY TSUNEO HIRANO 1986/6/3/ C C---------------------------------------------------------* IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (NATMS2 = (NUMATM*(NUMATM+1))/2) COMMON /ELEMTS/ ELEMNT(107) DIMENSION H(*), ALPHA(*), BETA(*), P(*), Q(*), COORD(3,*) C--- DEFINED HERE, AND TO BE USED FOR ENPART-PRINT ONLY ---* DIMENSION EX(NATMS2,3) C--- END OF DIMENSION DEFINITION ----------------- BY TH --* LOGICAL UHF, MINDO3, AM1 CHARACTER*241 KEYWRD CHARACTER*2 ELEMNT C*********************************************************************** C C *** ENERGY PARTITIONING WITHIN THE UMINDO/3 AND UMNDO SCHEME C ROUTINE WRITTEN BY S.OLIVELLA, BARCELONA NOV. 1979. C EXTENDED TO AM1 AND PM3 BY JJPS. C C ON INPUT UHF = .TRUE. IF A U.H.F. CALCULATION. C H = ONE-ELECTRON MATRIX. C ALPHA = ALPHA ELECTRON DENSITY. C BETA = BETA ELECTRON DENSITY. C P = TOTAL ELECTRON DENSITY. C Q = ATOM ELECTRON DENSITIES. C C NOTHING IS CHANGED ON EXIT. C C*********************************************************************** COMMON /ONELEC/ USS(107), UPP(107), UDD(107) COMMON /CORE / CORE(107) COMMON /IDEAS / FN1(107,10),FN2(107,10),FN3(107,10) COMMON /ALPHA3/ ALP3(153) COMMON /TWOEL3/ F03(107) COMMON /ALPHA / ALP(107) COMMON /TWOELE/ GSS(107),GSP(107),GPP(107),GP2(107),HSP(107) 1 ,GSD(107),GPD(107),GDD(107) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM) 1 ,NLAST(NUMATM),NORBS,NELECS, 2 NALPHA,NBETA,NCLOSE,NOPEN,NDUMY,FRACT COMMON /WMATRX/ W(N2ELEC*2) COMMON /KEYWRD/ KEYWRD PARAMETER (MDUMY=MAXPAR*MAXPAR-NUMATM*3-NATMS2*4) COMMON /SCRACH/ EA(NUMATM,2),EAT(NUMATM), E(NATMS2,4), 1XDUMY(MDUMY) MINDO3=(INDEX(KEYWRD,'MINDO').NE.0) C *** RECALCULATE THE DENSITY MATRICES IN THE UHF SCHEME C LINEAR=NORBS*(NORBS+1)/2 IF( .NOT. UHF) THEN DO 20 I=1,LINEAR 20 BETA(I)=ALPHA(I) ENDIF C C *** ONE-CENTER ENERGIES K=0 DO 40 I=1,NUMAT IA=NFIRST(I) IB=NLAST(I) NI=NAT(I) EA(I,1)=0.0D0 DO 30 J=IA,IB K=K+J T=UPP(NI) IF(J.EQ.IA) T=USS(NI) 30 EA(I,1)=EA(I,1)+P(K)*T ISS=(IA*(IA+1))/2 EA(I,2)=0.5D0*GSS(NI)*P(ISS)*P(ISS) 1 -0.5D0*GSS(NI)*(ALPHA(ISS)*ALPHA(ISS)+BETA(ISS)*BETA(ISS)) IF(IA.EQ.IB) GO TO 40 IA1=IA+1 IA2=IA+2 IXX=IA1*IA2/2 IYY=IA2*IB/2 IZZ=(IB*(IB+1))/2 IXY=IA1+IA2*IA1/2 IXZ=IA1+IB*IA2/2 IYZ=IA2+IB*IA2/2 ISX=IA+IA1*IA/2 ISY=IA+IA2*IA1/2 ISZ=IA+IB*IA2/2 SS1=P(IXX)*P(IXX)+P(IYY)*P(IYY)+P(IZZ)*P(IZZ) SS2=P(ISS)*(P(IXX)+P(IYY)+P(IZZ)) SS3=P(IXX)*P(IYY)+P(IXX)*P(IZZ)+P(IYY)*P(IZZ) SS4=P(ISX)*P(ISX)+P(ISY)*P(ISY)+P(ISZ)*P(ISZ) SS5=P(IXY)*P(IXY)+P(IXZ)*P(IXZ)+P(IYZ)*P(IYZ) TT1=ALPHA(IXX)*ALPHA(IXX)+ALPHA(IYY)*ALPHA(IYY) 1+ALPHA(IZZ)*ALPHA(IZZ)+BETA(IXX)*BETA(IXX) 2+BETA(IYY)*BETA(IYY)+BETA(IZZ)*BETA(IZZ) TT2=ALPHA(ISS)*(ALPHA(IXX)+ALPHA(IYY)+ALPHA(IZZ)) 1 +BETA(ISS)*(BETA(IXX)+BETA(IYY)+BETA(IZZ)) TT3=ALPHA(IXX)*ALPHA(IYY)+ALPHA(IXX)*ALPHA(IZZ) 1+ALPHA(IYY)*ALPHA(IZZ)+BETA(IXX)*BETA(IYY) 2+BETA(IXX)*BETA(IZZ)+BETA(IYY)*BETA(IZZ) TT4=ALPHA(ISX)*ALPHA(ISX)+ALPHA(ISY)*ALPHA(ISY) 1+ALPHA(ISZ)*ALPHA(ISZ)+BETA(ISX)*BETA(ISX) 2+BETA(ISY)*BETA(ISY)+BETA(ISZ)*BETA(ISZ) TT5=ALPHA(IXY)*ALPHA(IXY)+ALPHA(IXZ)*ALPHA(IXZ) 1+ALPHA(IYZ)*ALPHA(IYZ)+BETA(IXY)*BETA(IXY) 2+BETA(IXZ)*BETA(IXZ)+BETA(IYZ)*BETA(IYZ) EA(I,2)=EA(I,2)+0.5D0*GPP(NI)*SS1+GSP(NI)*SS2 1+GP2(NI)*SS3+HSP(NI)*SS4*2.0D0+0.5D0*(GPP(NI)-GP2(NI))*SS5*2.0D0 2 -0.5D0*GPP(NI)*TT1-GSP(NI)*TT4-GP2(NI)*TT5- 3 HSP(NI)*(TT2+TT4)-0.5D0*(GPP(NI)-GP2(NI))*(TT3+TT5) 40 CONTINUE AM1=(INDEX(KEYWRD,'AM1')+INDEX(KEYWRD,'PM3').NE.0) IF(MINDO3) THEN WRITE(6,'(///,10X,''TOTAL ENERGY PARTITIONING IN MINDO/3'')') ELSEIF( INDEX(KEYWRD,'PM3').NE.0 ) THEN WRITE(6,'(///,10X,''TOTAL ENERGY PARTITIONING IN PM3'')') ELSEIF( INDEX(KEYWRD,'AM1').NE.0 ) THEN WRITE(6,'(///,10X,''TOTAL ENERGY PARTITIONING IN AM1'')') ELSE WRITE(6,'(///,10X,''TOTAL ENERGY PARTITIONING IN MNDO'')') ENDIF WRITE(6,'(/10X,''ALL ENERGIES ARE IN ELECTRON VOLTS'')') KL=0 50 K=KL+1 KL=KL+10 KL=MIN0(KL,NUMAT) DO 60 I=K,KL 60 EAT(I)=EA(I,1)+EA(I,2) IF(NUMAT.GT.KL) GO TO 50 70 EAU=0.0D0 EAE=0.0D0 DO 80 I=1,NUMAT EAU=EAU+EA(I,1) 80 EAE=EAE+EA(I,2) TONE=EAU+EAE C *** TWO-CENTER ENERGIES C RESONANCE (E(N,1)) TERMS N=1 DO 100 II=2,NUMAT E(N,1)=0.0D0 IA=NFIRST(II) IB=NLAST(II) IMINUS=II-1 ONEII=1.D0 IF(NAT(II).EQ.102)ONEII=0.D0 DO 90 JJ=1,IMINUS N=N+1 JA=NFIRST(JJ) JB=NLAST(JJ) ONEJJ=1.D0 IF(NAT(JJ).EQ.102)ONEJJ=0.D0 E(N,1)=0.0D0 DO 90 I=IA,IB KA=(I*(I-1))/2 DO 90 K=JA,JB IK=KA+K 90 E(N,1)=E(N,1)+2.0D0*P(IK)*H(IK)*ONEII*ONEJJ 100 N=N+1 C C THE CODE THAT FOLLOWS APPLIES ONLY TO MNDO C IF(.NOT.MINDO3) THEN C CORE-CORE REPULSION (E(N,2)) AND CORE-ELEC. ATTRACTION (E(N,3)). N=1 KK=0 DO 180 II=2,NUMAT E(N,2)=0.0D0 E(N,3)=0.0D0 IA=NFIRST(II) IB=NLAST(II) NI=NAT(II) ISS=(IA*(IA+1))/2 IMINUS=II-1 DO 170 JJ=1,IMINUS N=N+1 JA=NFIRST(JJ) JB=NLAST(JJ) NJ=NAT(JJ) JSS=(JA*(JA+1))/2 KK=KK+1 G=W(KK) R=SQRT((COORD(1,II)-COORD(1,JJ))**2+(COORD(2,II)-COORD(2, 1JJ))**2+ (COORD(3,II)-COORD(3,JJ))**2) SCALE=1.0D0+EXP(-ALP(NI)*R)+EXP(-ALP(NJ)*R) NT=NI+NJ IF(NT.LT.8.OR.NT.GT.9) GO TO 110 IF(NI.EQ.7.OR.NI.EQ.8) SCALE=SCALE+(R-1.0D0)*EXP(-ALP(NI) 1*R) IF(NJ.EQ.7.OR.NJ.EQ.8) SCALE=SCALE+(R-1.0D0)*EXP(-ALP(NJ) 1*R) 110 E(N,2)=CORE(NI)*CORE(NJ)*G*SCALE IF( AM1 )THEN SCALE=0.0D0 DO 120 IG=1,10 IF(ABS(FN1(NI,IG)).GT.0.D0) 1SCALE=SCALE +CORE(NI)*CORE(NJ)/R* 2FN1(NI,IG)*EXP(-FN2(NI,IG)*(R-FN3(NI,IG))**2) IF(ABS(FN1(NJ,IG)).GT.0.D0) 1SCALE=SCALE +CORE(NI)*CORE(NJ)/R* 2FN1(NJ,IG)*EXP(-FN2(NJ,IG)*(R-FN3(NJ,IG))**2) 120 CONTINUE E(N,2)=E(N,2)+SCALE ENDIF E(N,3)=-(P(ISS)*CORE(NJ)+P(JSS)*CORE(NI))*G IF(NJ.LT.3) GO TO 140 KINC=9 JAP1=JA+1 DO 130 K=JAP1,JB KC=(K*(K-1))/2 DO 130 L=JA,K KL=KC+L BB=2.0D0 IF(K.EQ.L) BB=1.0D0 KK=KK+1 130 E(N,3)=E(N,3)-P(KL)*CORE(NI)*BB*W(KK) GO TO 150 140 KINC=0 150 IF(NI.LT.3) GO TO 170 IAP1=IA+1 DO 160 I=IAP1,IB KA=(I*(I-1))/2 DO 160 J=IA,I IJ=KA+J AA=2.0D0 IF(I.EQ.J) AA=1.0D0 KK=KK+1 E(N,3)=E(N,3)-P(IJ)*CORE(NJ)*AA*W(KK) 160 KK=KK+KINC 170 CONTINUE 180 N=N+1 C COULOMB (E(N,4)) AND EXCHANGE (EX(N)) TERMS N=1 KK=0 DO 200 II=2,NUMAT E(N,4)=0.0D0 EX(N,1)=0.0D0 IA=NFIRST(II) IB=NLAST(II) IMINUS=II-1 DO 190 JJ=1,IMINUS JA=NFIRST(JJ) JB=NLAST(JJ) N=N+1 E(N,4)=0.0D0 EX(N,1)=0.0D0 DO 190 I=IA,IB KA=(I*(I-1))/2 DO 190 J=IA,I KB=(J*(J-1))/2 IJ=KA+J AA=2.0D0 IF(I.EQ.J) AA=1.0D0 PIJ=P(IJ) DO 190 K=JA,JB KC=(K*(K-1))/2 IK=KA+K JK=KB+K DO 190 L=JA,K IL=KA+L JL=KB+L KL=KC+L BB=2.0D0 IF(K.EQ.L) BB=1.0D0 KK=KK+1 G=W(KK) E(N,4)=E(N,4)+AA*BB*G*PIJ*P(KL) 190 EX(N,1) = EX(N,1) 1 -0.5D0*AA*BB*G*(ALPHA(IK)*ALPHA(JL)+ALPHA(IL)*ALPHA(JK)+ 2 BETA(IK)*BETA(JL)+BETA(IL)*BETA(JK)) 200 N=N+1 ELSE N=1 DO 260 I=2,NUMAT E(N,2)=0.0D0 E(N,3)=0.0D0 E(N,4)=0.0D0 EX(N,1)=0.0D0 IA=NFIRST(I) IB=NLAST(I) NI=NAT(I) IMINUS=I-1 DO 250 J=1,IMINUS N=N+1 JA=NFIRST(J) JB=NLAST(J) NJ=NAT(J) RIJ=(COORD(1,I)-COORD(1,J))**2+(COORD(2,I)-COORD(2,J))**2 1+ (COORD(3,I)-COORD(3,J))**2 GIJ=14.399D0/SQRT(RIJ+(7.1995D0/F03(NI)+7.1995D0/F03(NJ)) 1**2) PAB2=0.0D0 IJ=MAX(NI,NJ) NBOND=(IJ*(IJ-1))/2+NI+NJ-IJ RIJ=SQRT(RIJ) IF(NBOND.EQ.22 .OR. NBOND .EQ. 29) GO TO 210 GO TO 220 210 SCALE=ALP3(NBOND)*EXP(-RIJ) GO TO 230 220 SCALE=EXP(-ALP3(NBOND)*RIJ) 230 CONTINUE E(N,2)=CORE(NI)*CORE(NJ)*GIJ+ 1 ABS(CORE(NI)*CORE(NJ)*(14.399D0/RIJ-GIJ)*SCALE) E(N,3)=(-Q(I)*CORE(NJ)-Q(J)*CORE(NI))*GIJ E(N,4)=Q(I)*Q(J)*GIJ DO 240 K=IA,IB KK=(K*(K-1))/2 DO 240 L=JA,JB LK=KK+L 240 PAB2=PAB2+ALPHA(LK)*ALPHA(LK)+BETA(LK)*BETA(LK) 250 EX(N,1) = -PAB2*GIJ 260 N=N+1 ENDIF NUMAT1=(NUMAT*(NUMAT+1))/2 DO 270 I=1,4 270 E(NUMAT1,I)=0.0D0 DO 280 I=1,3 280 EX(NUMAT1,I)=0.0D0 C@ --------------------------* C-----PRINT OUT ONE AND TWO CENTER ENERGIES C C E(I,1): RESONANCE ENERGY C E(I,2): NUCLEAR-NUCLEAR REPULSION ENERGY C E(I,3): ELECTRON-NUCLEAR ATTRACTION ENERGY C E(I,4): ELECTRON-ELECTRON REPULSION ENERGY C EX(I,1): EXCHANGE ENERGY C EX(I,2): EXCHANGE + RESONANCE ENERGY C# WRITE(6,'(//,'' ONE AND TWO CENTER ENERGIES (EV) '')') C C# WRITE(6,'(/,'' [RESONANCE TERM] (EV)'')') C# CALL VECPRT(E,NUMAT) C C# WRITE(6,'(/,'' [EXCHANGE TERM] (EV)'')') C# CALL VECPRT(EX,NUMAT) C C# WRITE(6,'(/,'' [RESONANCE + EXCHANGE] (EV)'')') DO 290 N=1,NUMAT1 290 EX(N,2) =E(N,1) + EX(N,1) C C ADD IN MONOCENTRIC EXCHANGE AND COULOMBIC TERM C DO 300 I=1,NUMAT 300 EX((I*(I+1))/2,2)=EA(I,2) C# CALL VECPRT(EX(1,2),NUMAT) C C# WRITE(6,'(/,'' [ELECTRON - ELECTRON REPULSION] (EV)'')') C# CALL VECPRT(E(1,4),NUMAT) C C# WRITE(6,'(/,'' [ELECTRON-NUCLEAR ATTRACTION] (EV)'')') DO 310 I=1,NUMAT 310 E((I*(I+1))/2,3)=EA(I,1) C# CALL VECPRT(E(1,3),NUMAT) C C# WRITE(6,'(/,'' [NUCLEAR-NUCLEAR REPULSION] (EV)'')') C# CALL VECPRT(E(1,2),NUMAT) C DO 320 N=1,NUMAT1 320 EX(N,3) =E(N,4) + E(N,3) + E(N,2) C PRINT OUT OF TOTAL COULOMB TERM C# WRITE(6,'(/,'' [TOTAL COULOMB TERM (E-E, E-N, AND N-N)] (EV)'') C# CALL VECPRT(EX(1,3),NUMAT) C PRINT OUT OF TWO-CENTER SUM(OFF-DIAGONAL) + C ONE-CENTER SUM(DIAGONAL). C# WRITE(6,'(/,'' [TWO-CENTER SUM (OFF-DIAGONAL), AND '', C# 1''ONE-CENTER SUM (DIAGONAL)] (EV)'')') C# DO 340 N=1,NUMAT1 C# 340 EX(N,3)=EX(N,3)+EX(N,2) C# CALL VECPRT(EX(1,3),NUMAT) WRITE(6,'(/,8(10X,A,/))') 1' ONE-CENTER TERMS',' ', 2'E-E: ELECTRON-ELECTRON REPULSION', 3'E-N: ELECTRON-NUCLEAR ATTRACTION' WRITE(6,'(/,'' ATOM E-E E-N (E-E + E-N)'')') DO 330 I=1,NUMAT J=(I*(I+1))/2 WRITE(6,'(2X,A2,I3,1X,2F10.4,F10.4)') 1ELEMNT(NAT(I)),I, EX(J,2), E(J,3), EX(J,2)+E(J,3) 330 CONTINUE WRITE(6,'(/,8(10X,A,/))') 1' TWO-CENTER TERMS',' ', 2'J: RESONANCE ENERGY E-E: ELECTRON-ELECTRON REPULSION', 3'K: EXCHANGE ENERGY E-N: ELECTRON-NUCLEAR ATTRACTION', 4' N-N: NUCLEAR-NUCLEAR REPULSION', 5'C: COULOMBIC INTERACTION = E-E + E-N + N-N', 6'EE: TOTAL OF ELECTRONIC AND NUCLEAR ENERGIES' WRITE(6,'(/,'' ATOM J K E-'', 1''E E-N N-N C EE'')') WRITE(6,'('' PAIR'')') IJ=0 DO 340 I=1,NUMAT DO 340 J=1,I IJ=IJ+1 IF(I.NE.J) THEN WRITE(6,'(1X,A2,I3,1X,A2,I3,1X,2F9.4,F9.4,F10.4,F9.4,F8.4 1,F9.4)')ELEMNT(NAT(I)),I,ELEMNT(NAT(J)),J, E(IJ,1), EX(IJ,1), 2E(IJ,4), E(IJ,3), E(IJ,2), EX(IJ,3), EX(IJ,2)+EX(IJ,3) ELSE IF(I.LT.6.OR.I.EQ.NUMAT)THEN WRITE(6,*) ELSE WRITE(6,'(/,'' ATOM J K E-'', 1''E E-N N-N C EE'')') WRITE(6,'('' PAIR'')') ENDIF ENDIF 340 CONTINUE C C ++++ TOTALS ++++ C EABR=0.0D0 EABX=0.0D0 EABEE=0.0D0 EABEN=0.0D0 EABNN=0.0D0 DO 350 I=1,NUMAT 350 E((I*(I+1))/2,3)=0.D0 DO 360 I=1,NUMAT1 EABR=EABR+E(I,1) EABX=EABX+EX(I,1) EABEE=EABEE+E(I,4) EABEN=EABEN+E(I,3) EABNN=EABNN+E(I,2) 360 CONTINUE EABRX=EABR+EABX EABE=EABEE+EABEN+EABNN TTWO=EABRX+EABE ET=TONE+TTWO C@ *************************************************************** WRITE(6,370) 370 FORMAT(///,'*** SUMMARY OF ENERGY PARTITION ***') WRITE(6,380) 380 FORMAT(1H ,'---------------------------------------') WRITE(6,'('' ONE-CENTER TERMS'')') WRITE(6,390) EAU 390 FORMAT(/,' ELECTRON-NUCLEAR (ONE-ELECTRON) ',F17.4,' EV') WRITE(6,400) EAE 400 FORMAT(' ELECTRON-ELECTRON (TWO-ELECTRON) ',F17.4,' EV') WRITE(6,410) TONE 410 FORMAT(/,' TOTAL OF ONE-CENTER TERMS ',18X,F15.4,' EV') WRITE(6,380) WRITE(6,'('' TWO-CENTER TERMS'')') WRITE(6,420) EABR 420 FORMAT(/,' RESONANCE ENERGY',8X,F15.4,' EV') WRITE(6,430) EABX 430 FORMAT(' EXCHANGE ENERGY ',8X,F15.4,' EV') WRITE(6,440) EABRX 440 FORMAT(/,' EXCHANGE + RESONANCE ENERGY: ',F15.4,' EV') WRITE(6,450) EABEE 450 FORMAT(/,' ELECTRON-ELECTRON REPULSION',F12.4,' EV') WRITE(6,460) EABEN 460 FORMAT( ' ELECTRON-NUCLEAR ATTRACTION',F12.4,' EV') WRITE(6,470) EABNN 470 FORMAT( ' NUCLEAR-NUCLEAR REPULSION ',F12.4,' EV') WRITE(6,480) EABE 480 FORMAT(/,' TOTAL ELECTROSTATIC INTERACTION ',F15.4,' EV',/) WRITE(6,490) TTWO 490 FORMAT(' GRAND TOTAL OF TWO-CENTER TERMS ',17X,F15.4,' EV') WRITE(6,380) WRITE(6,500) ET 500 FORMAT(' ETOT (EONE + ETWO) ',30X,F15.4,' EV'//) RETURN END mopac7-1.15/fortran/repp.f0000644000175000017500000003022011053302064012326 00000000000000 SUBROUTINE REPP(NI,NJ,RIJ,RI,CORE) C*********************************************************************** C C..VECTOR VERSION WRITTEN BY ERNEST R. DAVIDSON, INDIANA UNIVERSITY C C C REPP CALCULATES THE TWO-ELECTRON REPULSION INTEGRALS AND THE C NUCLEAR ATTRACTION INTEGRALS. C C ON INPUT RIJ = INTERATOMIC DISTANCE C NI = ATOM NUMBER OF FIRST ATOM C NJ = ATOM NUMBER OF SECOND ATOM C (REF) ADD = ARRAY OF GAMMA, OR TWO-ELECTRON ONE-CENTER, C INTEGRALS. C (REF) TORE = ARRAY OF NUCLEAR CHARGES OF THE ELEMENTS C (REF) DD = ARRAY OF DIPOLE CHARGE SEPARATIONS C (REF) QQ = ARRAY OF QUADRUPOLE CHARGE SEPARATIONS C C THE COMMON BLOCKS ARE INITIALIZED IN BLOCK-DATA, AND NEVER CHANGED C C ON OUTPUT RI = ARRAY OF TWO-ELECTRON REPULSION INTEGRALS C CORE = 4 X 2 ARRAY OF ELECTRON-CORE ATTRACTION C INTEGRALS C C C *** THIS ROUTINE COMPUTES THE TWO-CENTRE REPULSION INTEGRALS AND THE C *** NUCLEAR ATTRACTION INTEGRALS. C *** THE TWO-CENTRE REPULSION INTEGRALS (OVER LOCAL COORDINATES) ARE C *** STORED AS FOLLOWS (WHERE P-SIGMA = O, AND P-PI = P AND P* ) C (SS/SS)=1, (SO/SS)=2, (OO/SS)=3, (PP/SS)=4, (SS/OS)=5, C (SO/SO)=6, (SP/SP)=7, (OO/SO)=8, (PP/SO)=9, (PO/SP)=10, C (SS/OO)=11, (SS/PP)=12, (SO/OO)=13, (SO/PP)=14, (SP/OP)=15, C (OO/OO)=16, (PP/OO)=17, (OO/PP)=18, (PP/PP)=19, (PO/PO)=20, C (PP/P*P*)=21, (P*P/P*P)=22. C *** THE STORAGE OF THE NUCLEAR ATTRACTION INTEGRALS CORE(KL/IJ) IS C (SS/)=1, (SO/)=2, (OO/)=3, (PP/)=4 C WHERE IJ=1 IF THE ORBITALS CENTRED ON ATOM I, =2 IF ON ATOM J. C *** NI AND NJ ARE THE ATOMIC NUMBERS OF THE TWO ELEMENTS. C C*********************************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) LOGICAL SI,SJ COMMON /MULTIP/ DD(107),QQ(107),ADD(107,3) COMMON /CORE/ TORE(107) COMMON /NATORB/ NATORB(107) DIMENSION RI(22),CORE(4,2) DIMENSION ARG(72),SQR(72) DATA TD/2.D00/ DATA PP/0.5D00/ DATA A0/0.529167D0/ ,EV/27.21D0/, EV1/13.605D0/, EV2/6.8025D0/, 1 EV3/3.40125D0/, EV4/1.700625D0/ C C ATOMIC UNITS ARE USED IN THE CALCULATION, C FINAL RESULTS ARE CONVERTED TO EV C R=RIJ/A0 C SI = (NATORB(NI).GE.3) SJ = (NATORB(NJ).GE.3) C IF ((.NOT.SI) .AND. (.NOT.SJ)) THEN C C HYDROGEN - HYDROGEN (SS/SS) C AEE = PP/ADD(NI,1) + PP/ADD(NJ,1) AEE = AEE * AEE RI(1) = EV/SQRT(R*R+AEE) CORE(1,1 )= TORE(NJ)*RI(1) CORE(1,2) = TORE(NI)*RI(1) C ELSE IF (SI .AND. (.NOT.SJ)) THEN C C HEAVY ATOM - HYDROGEN C AEE = PP/ADD(NI,1) + PP/ADD(NJ,1) AEE = AEE * AEE DA=DD(NI) QA=QQ(NI) * TD ADE = PP/ADD(NI,2) + PP/ADD(NJ,1) ADE = ADE * ADE AQE = PP/ADD(NI,3) + PP/ADD(NJ,1) AQE = AQE * AQE RSQ = R*R ARG(1) = RSQ + AEE XXX = R+DA ARG(2) = XXX*XXX + ADE XXX = R-DA ARG(3) = XXX*XXX + ADE XXX = R+QA ARG(4) = XXX*XXX + AQE XXX = R-QA ARG(5) = XXX*XXX + AQE ARG(6) = RSQ + AQE ARG(7) = ARG(6) + QA*QA C$DOIT ASIS DO 10 I = 1,7 SQR(I) = SQRT(ARG(I)) 10 CONTINUE EE = EV/SQR(1) RI(1) = EE RI(2) = EV1/SQR(2) - EV1/SQR(3) RI(3) = EE + EV2/SQR(4) + EV2/SQR(5) - EV1/SQR(6) RI(4) = EE + EV1/SQR(7) - EV1/SQR(6) CORE(1,1) = TORE(NJ)*RI(1) CORE(1,2) = TORE(NI)*RI(1) CORE(2,1) = TORE(NJ)*RI(2) CORE(3,1) = TORE(NJ)*RI(3) CORE(4,1) = TORE(NJ)*RI(4) C ELSE IF ((.NOT.SI).AND.SJ) THEN C C HYDROGEN - HEAVY ATOM C AEE = PP/ADD(NI,1) + PP/ADD(NJ,1) AEE = AEE * AEE DB=DD(NJ) QB=QQ(NJ) * TD AED = PP/ADD(NI,1) + PP/ADD(NJ,2) AED = AED * AED AEQ = PP/ADD(NI,1) + PP/ADD(NJ,3) AEQ = AEQ * AEQ RSQ = R*R ARG(1) = RSQ + AEE XXX = R-DB ARG(2) = XXX*XXX + AED XXX = R+DB ARG(3) = XXX*XXX + AED XXX = R-QB ARG(4) = XXX*XXX + AEQ XXX = R+QB ARG(5) = XXX*XXX + AEQ ARG(6) = RSQ + AEQ ARG(7) = ARG(6) + QB*QB C$DOIT ASIS DO 20 I = 1,7 SQR(I) = SQRT(ARG(I)) 20 CONTINUE EE = EV/SQR(1) RI(1) = EE RI(5) = EV1/SQR(2) - EV1/SQR(3) RI(11) = EE + EV2/SQR(4) + EV2/SQR(5) - EV1/SQR(6) RI(12) = EE + EV1/SQR(7) - EV1/SQR(6) CORE(1,1) = TORE(NJ)*RI(1) CORE(1,2) = TORE(NI)*RI(1) CORE(2,2) = TORE(NI)*RI(5) CORE(3,2) = TORE(NI)*RI(11) CORE(4,2) = TORE(NI)*RI(12) C ELSE C C HEAVY ATOM - HEAVY ATOM C C DEFINE CHARGE SEPARATIONS. DA=DD(NI) DB=DD(NJ) QA=QQ(NI) * TD QB=QQ(NJ) * TD C AEE = PP/ADD(NI,1) + PP/ADD(NJ,1) AEE = AEE * AEE C ADE = PP/ADD(NI,2) + PP/ADD(NJ,1) ADE = ADE * ADE AQE = PP/ADD(NI,3) + PP/ADD(NJ,1) AQE = AQE * AQE AED = PP/ADD(NI,1) + PP/ADD(NJ,2) AED = AED * AED AEQ = PP/ADD(NI,1) + PP/ADD(NJ,3) AEQ = AEQ * AEQ AXX = PP/ADD(NI,2) + PP/ADD(NJ,2) AXX = AXX * AXX ADQ = PP/ADD(NI,2) + PP/ADD(NJ,3) ADQ = ADQ * ADQ AQD = PP/ADD(NI,3) + PP/ADD(NJ,2) AQD = AQD * AQD AQQ = PP/ADD(NI,3) + PP/ADD(NJ,3) AQQ = AQQ * AQQ RSQ = R * R ARG(1) = RSQ + AEE XXX = R + DA ARG(2) = XXX * XXX + ADE XXX = R - DA ARG(3) = XXX*XXX + ADE XXX = R - QA ARG(4) = XXX*XXX + AQE XXX = R + QA ARG(5) = XXX*XXX + AQE ARG(6) = RSQ + AQE ARG(7) = ARG(6) + QA*QA XXX = R-DB ARG(8) = XXX*XXX + AED XXX = R+DB ARG(9) = XXX*XXX + AED XXX = R - QB ARG(10) = XXX*XXX + AEQ XXX = R + QB ARG(11) = XXX*XXX + AEQ ARG(12) = RSQ + AEQ ARG(13) = ARG(12) + QB*QB XXX = DA-DB ARG(14) = RSQ + AXX + XXX*XXX XXX = DA+DB ARG(15) = RSQ + AXX + XXX*XXX XXX = R + DA - DB ARG(16) = XXX*XXX + AXX XXX = R - DA + DB ARG(17) = XXX*XXX + AXX XXX = R - DA - DB ARG(18) = XXX*XXX + AXX XXX = R + DA + DB ARG(19) = XXX*XXX + AXX XXX = R + DA ARG(20) = XXX*XXX + ADQ ARG(21) = ARG(20) + QB*QB XXX = R - DA ARG(22) = XXX*XXX + ADQ ARG(23) = ARG(22) + QB*QB XXX = R - DB ARG(24) = XXX*XXX + AQD ARG(25) = ARG(24) + QA*QA XXX = R + DB ARG(26) = XXX*XXX + AQD ARG(27) = ARG(26) + QA*QA XXX = R + DA - QB ARG(28) = XXX*XXX + ADQ XXX = R - DA - QB ARG(29) = XXX*XXX + ADQ XXX = R + DA + QB ARG(30) = XXX*XXX + ADQ XXX = R - DA + QB ARG(31) = XXX*XXX + ADQ XXX = R + QA - DB ARG(32) = XXX*XXX + AQD XXX = R + QA + DB ARG(33) = XXX*XXX + AQD XXX = R - QA - DB ARG(34) = XXX*XXX + AQD XXX = R - QA + DB ARG(35) = XXX*XXX + AQD ARG(36) = RSQ + AQQ XXX = QA - QB ARG(37) = ARG(36) + XXX*XXX XXX = QA + QB ARG(38) = ARG(36) + XXX*XXX ARG(39) = ARG(36) + QA*QA ARG(40) = ARG(36) + QB*QB ARG(41) = ARG(39) + QB*QB XXX = R - QB ARG(42) = XXX*XXX + AQQ ARG(43) = ARG(42) + QA*QA XXX = R + QB ARG(44) = XXX*XXX + AQQ ARG(45) = ARG(44) + QA*QA XXX = R + QA ARG(46) = XXX*XXX + AQQ ARG(47) = ARG(46) + QB*QB XXX = R - QA ARG(48) = XXX*XXX + AQQ ARG(49) = ARG(48) + QB*QB XXX = R + QA - QB ARG(50) = XXX*XXX + AQQ XXX = R + QA + QB ARG(51) = XXX*XXX + AQQ XXX = R - QA - QB ARG(52) = XXX*XXX + AQQ XXX = R - QA + QB ARG(53) = XXX*XXX + AQQ QA=QQ(NI) QB=QQ(NJ) XXX = DA - QB XXX = XXX*XXX YYY = R - QB YYY = YYY*YYY ZZZ = DA + QB ZZZ = ZZZ*ZZZ WWW = R + QB WWW = WWW*WWW ARG(54) = XXX + YYY + ADQ ARG(55) = XXX + WWW + ADQ ARG(56) = ZZZ + YYY + ADQ ARG(57) = ZZZ + WWW + ADQ XXX = QA - DB XXX = XXX*XXX YYY = QA + DB YYY = YYY*YYY ZZZ = R + QA ZZZ = ZZZ*ZZZ WWW = R - QA WWW = WWW*WWW ARG(58) = ZZZ + XXX + AQD ARG(59) = WWW + XXX + AQD ARG(60) = ZZZ + YYY + AQD ARG(61) = WWW + YYY + AQD XXX = QA - QB XXX = XXX*XXX ARG(62) = ARG(36) + TD*XXX YYY = QA + QB YYY = YYY*YYY ARG(63) = ARG(36) + TD*YYY ARG(64) = ARG(36) + TD*(QA*QA+QB*QB) ZZZ = R + QA - QB ZZZ = ZZZ*ZZZ ARG(65) = ZZZ + XXX + AQQ ARG(66) = ZZZ + YYY + AQQ ZZZ = R + QA + QB ZZZ = ZZZ*ZZZ ARG(67) = ZZZ + XXX + AQQ ARG(68) = ZZZ + YYY + AQQ ZZZ = R - QA - QB ZZZ = ZZZ*ZZZ ARG(69) = ZZZ + XXX + AQQ ARG(70) = ZZZ + YYY + AQQ ZZZ = R - QA + QB ZZZ = ZZZ*ZZZ ARG(71) = ZZZ + XXX + AQQ ARG(72) = ZZZ + YYY + AQQ DO 30 I = 1,72 SQR(I) = SQRT(ARG(I)) 30 CONTINUE EE = EV/SQR(1) DZE = -EV1/SQR(2) + EV1/SQR(3) QZZE = EV2/SQR(4) + EV2/SQR(5) - EV1/SQR(6) QXXE = EV1/SQR(7) - EV1/SQR(6) EDZ = - EV1/SQR(8) + EV1/SQR(9) EQZZ = EV2/SQR(10) + EV2/SQR(11) - EV1/SQR(12) EQXX = EV1/SQR(13) - EV1/SQR(12) DXDX = EV1/SQR(14) - EV1/SQR(15) DZDZ = EV2/SQR(16) + EV2/SQR(17) - EV2/SQR(18) - EV2/SQR(19) DZQXX = EV2/SQR(20) - EV2/SQR(21) - EV2/SQR(22) + EV2/SQR(23) QXXDZ = EV2/SQR(24) - EV2/SQR(25) - EV2/SQR(26) + EV2/SQR(27) DZQZZ = -EV3/SQR(28) + EV3/SQR(29) - EV3/SQR(30) + EV3/SQR(31) 1 - EV2/SQR(22) + EV2/SQR(20) QZZDZ = -EV3/SQR(32) + EV3/SQR(33) - EV3/SQR(34) + EV3/SQR(35) 1 + EV2/SQR(24) - EV2/SQR(26) QXXQXX = EV3/SQR(37) + EV3/SQR(38) - EV2/SQR(39) - EV2/SQR(40) 1 + EV2/SQR(36) QXXQYY = EV2/SQR(41) - EV2/SQR(39) - EV2/SQR(40) + EV2/SQR(36) QXXQZZ = EV3/SQR(43) + EV3/SQR(45) - EV3/SQR(42) - EV3/SQR(44) 1 - EV2/SQR(39) + EV2/SQR(36) QZZQXX = EV3/SQR(47) + EV3/SQR(49) - EV3/SQR(46) - EV3/SQR(48) 1 - EV2/SQR(40) + EV2/SQR(36) QZZQZZ = EV4/SQR(50) + EV4/SQR(51) + EV4/SQR(52) + EV4/SQR(53) 1 - EV3/SQR(48) - EV3/SQR(46) - EV3/SQR(42) - EV3/SQR(44) 2 + EV2/SQR(36) DXQXZ = -EV2/SQR(54) + EV2/SQR(55) + EV2/SQR(56) - EV2/SQR(57) QXZDX = -EV2/SQR(58) + EV2/SQR(59) + EV2/SQR(60) - EV2/SQR(61) QXZQXZ = EV3/SQR(65) - EV3/SQR(67) - EV3/SQR(69) + EV3/SQR(71) 1 - EV3/SQR(66) + EV3/SQR(68) + EV3/SQR(70) - EV3/SQR(72) RI(1) = EE RI(2) = -DZE RI(3) = EE + QZZE RI(4) = EE + QXXE RI(5) = -EDZ RI(6) = DZDZ RI(7) = DXDX RI(8) = -EDZ -QZZDZ RI(9) = -EDZ -QXXDZ RI(10) = -QXZDX RI(11) = EE + EQZZ RI(12) = EE + EQXX RI(13) = -DZE -DZQZZ RI(14) = -DZE -DZQXX RI(15) = -DXQXZ RI(16) = EE +EQZZ +QZZE +QZZQZZ RI(17) = EE +EQZZ +QXXE +QXXQZZ RI(18) = EE +EQXX +QZZE +QZZQXX RI(19) = EE +EQXX +QXXE +QXXQXX RI(20) = QXZQXZ RI(21) = EE +EQXX +QXXE +QXXQYY RI(22) = PP * (QXXQXX -QXXQYY) C C CALCULATE CORE-ELECTRON ATTRACTIONS. C CORE(1,1) = TORE(NJ)*RI(1) CORE(2,1) = TORE(NJ)*RI(2) CORE(3,1) = TORE(NJ)*RI(3) CORE(4,1) = TORE(NJ)*RI(4) CORE(1,2) = TORE(NI)*RI(1) CORE(2,2) = TORE(NI)*RI(5) CORE(3,2) = TORE(NI)*RI(11) CORE(4,2) = TORE(NI)*RI(12) C END IF C RETURN C END mopac7-1.15/fortran/cnvg.f0000644000175000017500000000533311053302063012323 00000000000000 SUBROUTINE CNVG(PNEW, P, P1,NORBS, NITER, PL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION P1(*), P(*), PNEW(*) LOGICAL EXTRAP C*********************************************************************** C C CNVG IS A TWO-POINT INTERPOLATION ROUTINE FOR SPEEDING CONVERGENCE C OF THE DENSITY MATRIX. C C ON OUTPUT P = NEW DENSITY MATRIX C P1 = DIAGONAL OF OLD DENSITY MATRIX C PL = LARGEST DIFFERENCE BETWEEN OLD AND NEW DENSITY C MATRIX DIAGONAL ELEMENTS C*********************************************************************** COMMON/KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL SAVE RHFUHF CHARACTER*241 KEYWRD DATA ICALCN/0/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL IF(INDEX(KEYWRD,'UHF').NE.0)THEN RHFUHF=1.D0 ELSE RHFUHF=2.D0 ENDIF ENDIF PL=0.0D00 FACA=0.0D00 DAMP=1.D10 IF(NITER.GT.3)DAMP=0.05D0 FACB=0.0D00 FAC=0.0D00 II=MOD(NITER,3) EXTRAP=II.NE.0 SUM1=0.D0 K=0 DO 20 I=1,NORBS K=K+I A=PNEW(K) SUM1=SUM1+A SA=ABS(A-P(K)) IF (SA.GT.PL) PL=SA IF (EXTRAP) GO TO 10 FACA=FACA+SA**2 FACB=FACB+(A-2.D00*P(K)+P1(I))**2 10 P1(I)=P(K) 20 P(K)=A IF (FACB.LE.0.0D00) GO TO 30 IF (FACA.LT.(100.D00*FACB)) FAC=SQRT(FACA/FACB) 30 IE=0 SUM2=0.D0 DO 50 I=1,NORBS II=I-1 DO 40 J=1,II IE=IE+1 A=PNEW(IE) P(IE)=A+FAC*(A-P(IE)) PNEW(IE)=P(IE) 40 CONTINUE IE=IE+1 IF(ABS(P(IE)-P1(I)) .GT. DAMP) THEN P(IE)=P1(I)+SIGN(DAMP,P(IE)-P1(I)) ELSE P(IE)=P(IE)+FAC*(P(IE)-P1(I)) ENDIF P(IE)=MIN(RHFUHF,MAX(P(IE),0.D0)) SUM2=SUM2+P(IE) 50 PNEW(IE)=P(IE) C C RE-NORMALIZE IF ANY DENSITY MATRIX ELEMENTS HAVE BEEN TRUNCATED C SUM0=SUM1 60 IF(SUM2.GT.1.D-3)THEN SUM=SUM1/SUM2 ELSE SUM=0.D0 ENDIF SUM1=SUM0 IF(SUM2.GT.1.D-3.AND.ABS(SUM-1.D0).GT.1.D-5)THEN C# WRITE(6,'(6F12.6)')(P((I*(I+1))/2),I=1,NORBS) SUM2=0.D0 DO 70 I=1,NORBS J=(I*(I+1))/2 C C ADD ON A SMALL NUMBER IN CASE AN OCCUPANCY IS EXACTLY ZERO C P(J)=P(J)*SUM+1.D-20 P(J)=MAX(P(J),0.D0) C C SET UP RENORMALIZATION OVER PARTLY OCCUPIED M.O.'S ONLY. FULL M.O.'S C CAN'T BE FILLED ANY MORE C IF(P(J).GT.RHFUHF)THEN P(J)=RHFUHF SUM1=SUM1-RHFUHF ELSE SUM2=SUM2+P(J) ENDIF 70 PNEW(J)=P(J) GOTO 60 ENDIF RETURN END mopac7-1.15/fortran/addhcr.f0000644000175000017500000000256711053302063012621 00000000000000 SUBROUTINE ADDHCR (H) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 BH(LENABC) 4 /SOLVI/ IATSP(LENABC+1),NAR(LENABC), NN(2,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /CORE / CORE(107) DIMENSION H(*) IDEN=0 I0=NPS2+NDEN*NPS DO 40 I=1,NUMAT IA=NFIRST(I) IDEL=NLAST(I)-IA IM=(IA*(IA+1))/2-1 DO 30 IC=0,IDEL DO 20 ID=0,IC IM=IM+1 IDEN=IDEN+1 HIM=0.D0 JDEN=1 DO 10 J=1,NUMAT JA=NFIRST(J) JDEL=NLAST(J)-JA C# JDEN=JDEN+1 KDEN=MAX(IDEN,JDEN) I1=(KDEN*(KDEN-3))/2+IDEN+JDEN+I0 HIM = HIM - ABCMAT(I1) * CORE(NAT(J)) JDEN=JDEN+JDEL**2+1 10 CONTINUE H(IM) = H(IM) + HIM 20 CONTINUE H(IM) = H(IM) + HIM IM=IM+IA-1 30 CONTINUE 40 CONTINUE RETURN END mopac7-1.15/fortran/haddon.f0000644000175000017500000000313711053302063012623 00000000000000 SUBROUTINE HADDON (W,L,M,LOC,A) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION A(3,*) C********************************************************************** C C HADDON CALCULATES THE VALUE OF A SYMMETRY-DEPENDENT VARIABLE C C ON INPUT: M = NUMBER SPECIFYING THE SYMMETRY OPERATION C LOC = ADDRESS OF REFERENCE ATOM C A = ARRAY OF INTERNAL COORDINATES C ON OUTPUT W = VALUE OF DEPENDENT FUNCTION C L = 1 (FOR BOND LENGTH), 2 (ANGLE), OR 3 (DIHEDRAL) C********************************************************************** PI = 3.1415926536D00 IF (M.GT.18 .OR. M.LT.1) THEN WRITE(6,'(///10X,''UNDEFINED SYMMETRY FUNCTION USED'')') STOP ENDIF I=LOC GO TO 1(140,160,10,20,30,40,50,60,70,80,90,100,110,120,150,170,180,190), 2M 10 W=A(3,I) GO TO 130 20 W=(PI/2.0D00)-A(3,I) GO TO 130 30 W=(PI/2.0D00)+A(3,I) GO TO 130 40 W=(2.0D00*PI/3.0D00)-A(3,I) GO TO 130 50 W=(2.0D00*PI/3.0D00)+A(3,I) GO TO 130 60 W=(PI)-A(3,I) GO TO 130 70 W=(PI)+A(3,I) GO TO 130 80 W=(4.0D00*PI/3.0D00)-A(3,I) GO TO 130 90 W=(4.0D00*PI/3.0D00)+A(3,I) GO TO 130 100 W=(3.0D00*PI/2.0D00)-A(3,I) GO TO 130 110 W=(3.0D00*PI/2.0D00)+A(3,I) GO TO 130 120 W=-A(3,I) 130 L=3 RETURN 140 L=1 W=A(1,I) RETURN 150 L=1 W=A(1,I)/2.0D00 RETURN 160 L=2 W=A(2,I) RETURN 170 L=2 W=A(2,I)/2.0D00 RETURN 180 L=2 W=PI-A(2,I) RETURN 190 CALL DEPVAR (A,I,W,L) RETURN C END mopac7-1.15/fortran/dtrmm.f0000644000175000017500000002632511053302063012515 00000000000000 SUBROUTINE DTRMM ( SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, $ B, LDB ) * .. SCALAR ARGUMENTS .. CHARACTER*1 SIDE, UPLO, TRANSA, DIAG INTEGER M, N, LDA, LDB DOUBLE PRECISION ALPHA * .. ARRAY ARGUMENTS .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ) * .. * * PURPOSE * ======= * * DTRMM PERFORMS ONE OF THE MATRIX-MATRIX OPERATIONS * * B := ALPHA*OP( A )*B, OR B := ALPHA*B*OP( A ), * * WHERE ALPHA IS A SCALAR, B IS AN M BY N MATRIX, A IS A UNIT, OR * NON-UNIT, UPPER OR LOWER TRIANGULAR MATRIX AND OP( A ) IS ONE OF * * OP( A ) = A OR OP( A ) = A'. * * PARAMETERS * ========== * * SIDE - CHARACTER*1. * ON ENTRY, SIDE SPECIFIES WHETHER OP( A ) MULTIPLIES B FROM * THE LEFT OR RIGHT AS FOLLOWS: * * SIDE = 'L' OR 'L' B := ALPHA*OP( A )*B. * * SIDE = 'R' OR 'R' B := ALPHA*B*OP( A ). * * UNCHANGED ON EXIT. * * UPLO - CHARACTER*1. * ON ENTRY, UPLO SPECIFIES WHETHER THE MATRIX A IS AN UPPER OR * LOWER TRIANGULAR MATRIX AS FOLLOWS: * * UPLO = 'U' OR 'U' A IS AN UPPER TRIANGULAR MATRIX. * * UPLO = 'L' OR 'L' A IS A LOWER TRIANGULAR MATRIX. * * UNCHANGED ON EXIT. * * TRANSA - CHARACTER*1. * ON ENTRY, TRANSA SPECIFIES THE FORM OF OP( A ) TO BE USED IN * THE MATRIX MULTIPLICATION AS FOLLOWS: * * TRANSA = 'N' OR 'N' OP( A ) = A. * * TRANSA = 'T' OR 'T' OP( A ) = A'. * * TRANSA = 'C' OR 'C' OP( A ) = A'. * * UNCHANGED ON EXIT. * * DIAG - CHARACTER*1. * ON ENTRY, DIAG SPECIFIES WHETHER OR NOT A IS UNIT TRIANGULAR * AS FOLLOWS: * * DIAG = 'U' OR 'U' A IS ASSUMED TO BE UNIT TRIANGULAR. * * DIAG = 'N' OR 'N' A IS NOT ASSUMED TO BE UNIT * TRIANGULAR. * * UNCHANGED ON EXIT. * * M - INTEGER. * ON ENTRY, M SPECIFIES THE NUMBER OF ROWS OF B. M MUST BE AT * LEAST ZERO. * UNCHANGED ON EXIT. * * N - INTEGER. * ON ENTRY, N SPECIFIES THE NUMBER OF COLUMNS OF B. N MUST BE * AT LEAST ZERO. * UNCHANGED ON EXIT. * * ALPHA - DOUBLE PRECISION. * ON ENTRY, ALPHA SPECIFIES THE SCALAR ALPHA. WHEN ALPHA IS * ZERO THEN A IS NOT REFERENCED AND B NEED NOT BE SET BEFORE * ENTRY. * UNCHANGED ON EXIT. * * A - DOUBLE PRECISION ARRAY OF DIMENSION ( LDA, K ), WHERE K IS M * WHEN SIDE = 'L' OR 'L' AND IS N WHEN SIDE = 'R' OR 'R'. * BEFORE ENTRY WITH UPLO = 'U' OR 'U', THE LEADING K BY K * UPPER TRIANGULAR PART OF THE ARRAY A MUST CONTAIN THE UPPER * TRIANGULAR MATRIX AND THE STRICTLY LOWER TRIANGULAR PART OF * A IS NOT REFERENCED. * BEFORE ENTRY WITH UPLO = 'L' OR 'L', THE LEADING K BY K * LOWER TRIANGULAR PART OF THE ARRAY A MUST CONTAIN THE LOWER * TRIANGULAR MATRIX AND THE STRICTLY UPPER TRIANGULAR PART OF * A IS NOT REFERENCED. * NOTE THAT WHEN DIAG = 'U' OR 'U', THE DIAGONAL ELEMENTS OF * A ARE NOT REFERENCED EITHER, BUT ARE ASSUMED TO BE UNITY. * UNCHANGED ON EXIT. * * LDA - INTEGER. * ON ENTRY, LDA SPECIFIES THE FIRST DIMENSION OF A AS DECLARED * IN THE CALLING (SUB) PROGRAM. WHEN SIDE = 'L' OR 'L' THEN * LDA MUST BE AT LEAST MAX( 1, M ), WHEN SIDE = 'R' OR 'R' * THEN LDA MUST BE AT LEAST MAX( 1, N ). * UNCHANGED ON EXIT. * * B - DOUBLE PRECISION ARRAY OF DIMENSION ( LDB, N ). * BEFORE ENTRY, THE LEADING M BY N PART OF THE ARRAY B MUST * CONTAIN THE MATRIX B, AND ON EXIT IS OVERWRITTEN BY THE * TRANSFORMED MATRIX. * * LDB - INTEGER. * ON ENTRY, LDB SPECIFIES THE FIRST DIMENSION OF B AS DECLARED * IN THE CALLING (SUB) PROGRAM. LDB MUST BE AT LEAST * MAX( 1, M ). * UNCHANGED ON EXIT. * * * LEVEL 3 BLAS ROUTINE. * * -- WRITTEN ON 8-FEBRUARY-1989. * JACK DONGARRA, ARGONNE NATIONAL LABORATORY. * IAIN DUFF, AERE HARWELL. * JEREMY DU CROZ, NUMERICAL ALGORITHMS GROUP LTD. * SVEN HAMMARLING, NUMERICAL ALGORITHMS GROUP LTD. * * * .. EXTERNAL FUNCTIONS .. LOGICAL LSAME EXTERNAL LSAME * .. EXTERNAL SUBROUTINES .. EXTERNAL XERBLA * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX * .. LOCAL SCALARS .. LOGICAL LSIDE, NOUNIT, UPPER INTEGER I, INFO, J, K, NROWA DOUBLE PRECISION TEMP * .. PARAMETERS .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * LSIDE = LSAME( SIDE , 'L' ) IF( LSIDE )THEN NROWA = M ELSE NROWA = N END IF NOUNIT = LSAME( DIAG , 'N' ) UPPER = LSAME( UPLO , 'U' ) * INFO = 0 IF( ( .NOT.LSIDE ).AND. $ ( .NOT.LSAME( SIDE , 'R' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.UPPER ).AND. $ ( .NOT.LSAME( UPLO , 'L' ) ) )THEN INFO = 2 ELSE IF( ( .NOT.LSAME( TRANSA, 'N' ) ).AND. $ ( .NOT.LSAME( TRANSA, 'T' ) ).AND. $ ( .NOT.LSAME( TRANSA, 'C' ) ) )THEN INFO = 3 ELSE IF( ( .NOT.LSAME( DIAG , 'U' ) ).AND. $ ( .NOT.LSAME( DIAG , 'N' ) ) )THEN INFO = 4 ELSE IF( M .LT.0 )THEN INFO = 5 ELSE IF( N .LT.0 )THEN INFO = 6 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 9 ELSE IF( LDB.LT.MAX( 1, M ) )THEN INFO = 11 END IF IF( INFO.NE.0 )THEN CALL XERBLA( 'DTRMM ', INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE. * IF( N.EQ.0 ) $ RETURN * * AND WHEN ALPHA.EQ.ZERO. * IF( ALPHA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M B( I, J ) = ZERO 10 CONTINUE 20 CONTINUE RETURN END IF * * START THE OPERATIONS. * IF( LSIDE )THEN IF( LSAME( TRANSA, 'N' ) )THEN * * FORM B := ALPHA*A*B. * IF( UPPER )THEN DO 50, J = 1, N DO 40, K = 1, M IF( B( K, J ).NE.ZERO )THEN TEMP = ALPHA*B( K, J ) DO 30, I = 1, K - 1 B( I, J ) = B( I, J ) + TEMP*A( I, K ) 30 CONTINUE IF( NOUNIT ) $ TEMP = TEMP*A( K, K ) B( K, J ) = TEMP END IF 40 CONTINUE 50 CONTINUE ELSE DO 80, J = 1, N DO 70 K = M, 1, -1 IF( B( K, J ).NE.ZERO )THEN TEMP = ALPHA*B( K, J ) B( K, J ) = TEMP IF( NOUNIT ) $ B( K, J ) = B( K, J )*A( K, K ) DO 60, I = K + 1, M B( I, J ) = B( I, J ) + TEMP*A( I, K ) 60 CONTINUE END IF 70 CONTINUE 80 CONTINUE END IF ELSE * * FORM B := ALPHA*B*A'. * IF( UPPER )THEN DO 110, J = 1, N DO 100, I = M, 1, -1 TEMP = B( I, J ) IF( NOUNIT ) $ TEMP = TEMP*A( I, I ) DO 90, K = 1, I - 1 TEMP = TEMP + A( K, I )*B( K, J ) 90 CONTINUE B( I, J ) = ALPHA*TEMP 100 CONTINUE 110 CONTINUE ELSE DO 140, J = 1, N DO 130, I = 1, M TEMP = B( I, J ) IF( NOUNIT ) $ TEMP = TEMP*A( I, I ) DO 120, K = I + 1, M TEMP = TEMP + A( K, I )*B( K, J ) 120 CONTINUE B( I, J ) = ALPHA*TEMP 130 CONTINUE 140 CONTINUE END IF END IF ELSE IF( LSAME( TRANSA, 'N' ) )THEN * * FORM B := ALPHA*B*A. * IF( UPPER )THEN DO 180, J = N, 1, -1 TEMP = ALPHA IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 150, I = 1, M B( I, J ) = TEMP*B( I, J ) 150 CONTINUE DO 170, K = 1, J - 1 IF( A( K, J ).NE.ZERO )THEN TEMP = ALPHA*A( K, J ) DO 160, I = 1, M B( I, J ) = B( I, J ) + TEMP*B( I, K ) 160 CONTINUE END IF 170 CONTINUE 180 CONTINUE ELSE DO 220, J = 1, N TEMP = ALPHA IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 190, I = 1, M B( I, J ) = TEMP*B( I, J ) 190 CONTINUE DO 210, K = J + 1, N IF( A( K, J ).NE.ZERO )THEN TEMP = ALPHA*A( K, J ) DO 200, I = 1, M B( I, J ) = B( I, J ) + TEMP*B( I, K ) 200 CONTINUE END IF 210 CONTINUE 220 CONTINUE END IF ELSE * * FORM B := ALPHA*B*A'. * IF( UPPER )THEN DO 260, K = 1, N DO 240, J = 1, K - 1 IF( A( J, K ).NE.ZERO )THEN TEMP = ALPHA*A( J, K ) DO 230, I = 1, M B( I, J ) = B( I, J ) + TEMP*B( I, K ) 230 CONTINUE END IF 240 CONTINUE TEMP = ALPHA IF( NOUNIT ) $ TEMP = TEMP*A( K, K ) IF( TEMP.NE.ONE )THEN DO 250, I = 1, M B( I, K ) = TEMP*B( I, K ) 250 CONTINUE END IF 260 CONTINUE ELSE DO 300, K = N, 1, -1 DO 280, J = K + 1, N IF( A( J, K ).NE.ZERO )THEN TEMP = ALPHA*A( J, K ) DO 270, I = 1, M B( I, J ) = B( I, J ) + TEMP*B( I, K ) 270 CONTINUE END IF 280 CONTINUE TEMP = ALPHA IF( NOUNIT ) $ TEMP = TEMP*A( K, K ) IF( TEMP.NE.ONE )THEN DO 290, I = 1, M B( I, K ) = TEMP*B( I, K ) 290 CONTINUE END IF 300 CONTINUE END IF END IF END IF * RETURN * * END OF DTRMM . * END mopac7-1.15/fortran/dielen.f0000644000175000017500000000112511053302063012621 00000000000000 SUBROUTINE DIELEN (EDIE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 BH(LENABC) CALL CQDEN() EDIE=0.D0 I0=NPS2+NDEN*NPS DO 20 I=1,NDEN QI=QDEN(I) DO 10 J=1,I-1 I0=I0+1 10 EDIE=EDIE+2*QI*ABCMAT(I0)*QDEN(J) I0=I0+1 EDIE=EDIE+QI*ABCMAT(I0)*QI 20 CONTINUE RETURN END mopac7-1.15/fortran/pathk.f0000644000175000017500000000623411053302063012476 00000000000000 SUBROUTINE PATHK IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' ************************************************************************ * * Written by Manyin Yi, Aug 1989. * Restartable reaction_path calulation. * The number of path_step and step value are read in through * keyword POINT and STEP. * The reaction profile is archived. * ************************************************************************ COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /GRAVEC/ COSINE COMMON /PATH / LATOM, LPARAM, REACT(200) COMMON /PPARAM/ CURRT COMMON /KLOOP / KLOOP C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /PROFIL/ PROFIL COMMON /PROFIC/ PROFIL C ***************************** at 1994-05-25 ***** COMMON /KEYWRD/ KEYWRD DIMENSION GD(MAXPAR),XLAST(MAXPAR),MDFP(20),XDFP(20) DIMENSION PROFIL(200) CHARACTER KEYWRD*241, GETNAM*80 STEP=READA(KEYWRD,INDEX(KEYWRD,'STEP')+5) NPTS=READA(KEYWRD,INDEX(KEYWRD,'POINT')+6) C C THE SMALLEST VALUE IN THE PATH IS C REACT(1) DEGREE OR GEO(LPARAM,LATOM) RADIANS C DEGREE=180.D0/3.14159265359D0 IF(LPARAM.NE.1)STEP=STEP/DEGREE C C NOW TO SWEEP THROUGH THE PATH C IF(LPARAM.NE.1) THEN C1=DEGREE ELSE C1=1.D0 ENDIF C KLOOP=1 CPUTOT=0.0D0 CURRT=GEO(LPARAM,LATOM) PROFIL(1)=0.D0 IF (INDEX(KEYWRD,'RESTART').NE.0) THEN MDFP(9)=0 CALL DFPSAV(CPUTOT,XPARAM,GD,XLAST,ESCF,MDFP,XDFP) WRITE(6,'(//10X,'' RESTARTING AT POINT '',I3)') KLOOP ENDIF C GEO(LPARAM,LATOM)=CURRT DO 10 ILOOP=KLOOP,NPTS CPU1=SECOND() CURRT=GEO(LPARAM,LATOM) CALL FLEPO(XPARAM, NVAR, ESCF) KLOOP=KLOOP+1 CPU2=SECOND() CPU3=CPU2-CPU1 CPUTOT=CPUTOT+CPU3 PROFIL(ILOOP)=ESCF WRITE(6,'(/'' VARIABLE FUNCTION'')') WRITE(6,'('' :'',F16.5,F16.6)')GEO(LPARAM,LATOM)*C1,ESCF CALL GEOUT(6) GEO(LPARAM,LATOM)=GEO(LPARAM,LATOM)+STEP 10 CONTINUE DO 20 I=2,NPTS 20 REACT(I)=REACT(I-1)+STEP*C1 WRITE(6,'(/16X,''POINTS ON REACTION PATH '', 1 /16X,''AND CORRESPONDING HEATS'',//)') OPEN(UNIT=12,FILE=GETNAM('FOR012'),STATUS='UNKNOWN') WRITE(12,30) CALL WRTTXT(12) 30 FORMAT(' ARCHIVE FILE FOR PATH CALCULATION'/ 1 'A PROFIL OF COORDINATES - HEATS'/) WRITE(12,'(/'' TOTAL CPU TIME IN FLEPO : '',F10.3/)') CPUTOT C L=NPTS/8 M=NPTS - L*8 IF (L.LT.1) GO TO 50 DO 40 K=0,L-1 WRITE(6,'(8F7.2)') (REACT(I),I=K*8+1,K*8+8) WRITE(6,'(8F7.2,/)') (PROFIL(I),I=K*8+1,K*8+8) WRITE(12,'(8F7.2)') (REACT(I),I=K*8+1,K*8+8) 40 WRITE(12,'(8F7.2,/)') (PROFIL(I),I=K*8+1,K*8+8) 50 IF (M.GT.0) THEN WRITE(6,'(8F7.2)') (REACT(I),I=L*8+1,L*8+M) WRITE(6,'(8F7.2,/)') (PROFIL(I),I=L*8+1,L*8+M) WRITE(12,'(8F7.2)') (REACT(I),I=L*8+1,L*8+M) WRITE(12,'(8F7.2,/)') (PROFIL(I),I=L*8+1,L*8+M) ENDIF RETURN END mopac7-1.15/fortran/interp.f0000644000175000017500000005316311053302063012673 00000000000000 SUBROUTINE INTERP(N,NP,NQ,MODE,E,FP,CP,VEC,FOCK,P,H,VECL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION FP(MPACK), CP(N,N) DIMENSION VEC(N,N), FOCK(N,N), 1 P(N,N), H(N*N), VECL(N*N) ********************************************************************** * * INTERP: AN INTERPOLATION PROCEDURE FOR FORCING SCF CONVERGANCE * ORIGINAL THEORY AND FORTRAN WRITTEN BY R.N. CAMP AND * H.F. KING, J. CHEM. PHYS. 75, 268 (1981) ********************************************************************** * * ON INPUT N = NUMBER OF ORBITALS * NP = NUMBER OF FILLED LEVELS * NQ = NUMBER OF EMPTY LEVELS * MODE = 1, DO NOT RESET. * E = ENERGY * FP = FOCK MATRIX, AS LOWER HALF TRIANGLE, PACKED * CP = EIGENVECTORS OF FOCK MATRIX OF ITERATION -1 * AS PACKED ARRAY OF N*N COEFFICIENTS * * ON OUTPUT CP = BEST GUESSED SET OF EIGENVECTORS * MODE = 2 OR 3 - USED BY CALLING PROGRAM ********************************************************************** DIMENSION THETA(MAXORB) COMMON /KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL COMMON/FIT/NPNTS,IDUM2,XLOW,XHIGH,XMIN,EMIN,DEMIN,X(12),F(12), 1 DF(12) LOGICAL DEBUG CHARACTER*241 KEYWRD SAVE ZERO, FF, RADMAX, ICALCN, DEBUG DATA ICALCN/0/ DATA ZERO,FF,RADMAX/0.0D0,0.9D0,1.5708D0/ IF(ICALCN.NE.NUMCAL)THEN DEBUG=(INDEX(KEYWRD,'INTERP').NE.0) ICALCN=NUMCAL ENDIF C C RADMAX=MAXIMUM ROTATION ANGLE (RADIANS). 1.5708 = 90 DEGREES. C FF=FACTOR FOR CONVERGENCE TEST FOR 1D SEARCH. C MINPQ=MIN0(NP,NQ) NP1=NP+1 NP2=MAX0(1,NP/2) IF(MODE.EQ.2) GO TO 110 C C (MODE=1 OR 3 ENTRY) C TRANSFORM FOCK MATRIX TO CURRENT MO BASIS. C ONLY THE OFF DIAGONAL OCC-VIRT BLOCK IS COMPUTED. C STORE IN FOCK ARRAY C II=0 DO 50 I=1,N I1=I+1 DO 40 J=1,NQ DUM=ZERO DO 20 K=1,I 20 DUM=DUM+FP(II+K)*CP(K,J+NP) IF(I.EQ.N) GO TO 40 IK=II+I+I DO 30 K=I1,N DUM=DUM+FP(IK)*CP(K,J+NP) 30 IK=IK+K 40 P(I,J)=DUM 50 II=II+I DO 80 I=1,NP DO 70 J=1,NQ DUM=ZERO DO 60 K=1,N 60 DUM=DUM+CP(K,I)*P(K,J) FOCK(I,J)=DUM 70 CONTINUE 80 CONTINUE IF(MODE.EQ.3) GO TO 100 C C CURRENT POINT BECOMES OLD POINT (MODE=1 ENTRY) C DO 90 I=1,N DO 90 J=1,N 90 VEC(I,J)=CP(I,J) EOLD=E XOLD=1.0D0 MODE=2 RETURN C C (MODE=3 ENTRY) C FOCK CORRESPONDS TO CURRENT POINT IN CORRESPONDING REPRESENTATION. C VEC DOES NOT HOLD CURRENT VECTORS. VEC SET IN LAST MODE=2 ENTRY. C 100 NPNTS=NPNTS+1 IF(DEBUG)WRITE(6,'('' INTERPOLATED ENERGY:'',F13.6)')E*23.061D0 IPOINT=NPNTS GO TO 500 C C (MODE=2 ENTRY) CALCULATE THETA, AND U, V, W MATRICES. C U ROTATES CURRENT INTO OLD MO. C V ROTATES CURRENT INTO CORRESPONDING CURRENT MO. C W ROTATES OLD INTO CORRESPONDING OLD MO. C 110 J1=1 DO 140 I=1,N IF(I.EQ.NP1) J1=NP1 DO 130 J=J1,N P(I,J)=ZERO DO 120 K=1,N 120 P(I,J)=P(I,J)+CP(K,I)*VEC(K,J) 130 CONTINUE 140 CONTINUE C C U = CP(DAGGER)*VEC IS NOW IN P ARRAY. C VEC IS NOW AVAILABLE FOR TEMPORARY STORAGE. C IJ=0 DO 170 I=1,NP DO 160 J=1,I IJ=IJ+1 H(IJ)=0.D0 DO 150 K=NP1,N 150 H(IJ)=H(IJ)+P(I,K)*P(J,K) 160 CONTINUE 170 CONTINUE CALL HQRII(H,NP,NP,THETA,VECL) DO 180 I=NP,1,-1 IL=I*NP-NP DO 180 J=NP,1,-1 180 VEC(J,I)=VECL(J+IL) DO 200 I=1,NP2 DUM=THETA(NP1-I) THETA(NP1-I)=THETA(I) THETA(I)=DUM DO 190 J=1,NP DUM=VEC(J,NP1-I) VEC(J,NP1-I)=VEC(J,I) 190 VEC(J,I)=DUM 200 CONTINUE DO 210 I=1,MINPQ THETA(I)=MAX(THETA(I),ZERO) THETA(I)=MIN(THETA(I),1.D0) 210 THETA(I)=ASIN(SQRT(THETA(I))) C C THETA MATRIX HAS NOW BEEN CALCULATED, ALSO UNITARY VP MATRIX C HAS BEEN CALCULATED AND STORED IN FIRST NP COLUMNS OF VEC MATRIX. C NOW COMPUTE WQ C DO 240 I=1,NQ DO 230 J=1,MINPQ VEC(I,NP+J)=ZERO DO 220 K=1,NP 220 VEC(I,NP+J)=VEC(I,NP+J)+P(K,NP+I)*VEC(K,J) 230 CONTINUE 240 CONTINUE CALL SCHMIT(VEC(1,NP1),NQ,N) C C UNITARY WQ MATRIX NOW IN LAST NQ COLUMNS OF VEC MATRIX. C TRANSPOSE NP BY NP BLOCK OF U STORED IN P C DO 260 I=1,NP DO 250 J=1,I DUM=P(I,J) P(I,J)=P(J,I) 250 P(J,I)=DUM 260 CONTINUE C C CALCULATE WP MATRIX AND HOLD IN FIRST NP COLUMNS OF P C DO 300 I=1,NP DO 270 K=1,NP 270 H(K)=P(I,K) DO 290 J=1,NP P(I,J)=ZERO DO 280 K=1,NP 280 P(I,J)=P(I,J)+H(K)*VEC(K,J) 290 CONTINUE 300 CONTINUE CALL SCHMIB(P,NP,N) C C CALCULATE VQ MATRIX AND HOLD IN LAST NQ COLUMNS OF P MATRIX. C DO 340 I=1,NQ DO 310 K=1,NQ 310 H(K)=P(NP+I,NP+K) DO 330 J=NP1,N P(I,J)=ZERO DO 320 K=1,NQ 320 P(I,J)=P(I,J)+H(K)*VEC(K,J) 330 CONTINUE 340 CONTINUE CALL SCHMIB(P(1,NP1),NQ,N) C C CALCULATE (DE/DX) AT OLD POINT C DEDX=ZERO DO 370 I=1,NP DO 360 J=1,NQ DUM=ZERO DO 350 K=1,MINPQ 350 DUM=DUM+THETA(K)*P(I,K)*VEC(J,NP+K) 360 DEDX=DEDX+DUM*FOCK(I,J) 370 CONTINUE C C STORE OLD POINT INFORMATION FOR SPLINE FIT C DEOLD=-4.0D0*DEDX X(2)=XOLD F(2)=EOLD DF(2)=DEOLD C C MOVE VP OUT OF VEC ARRAY INTO FIRST NP COLUMNS OF P MATRIX. C DO 380 I=1,NP DO 380 J=1,NP 380 P(I,J)=VEC(I,J) K1=0 K2=NP DO 410 J=1,N IF(J.EQ.NP1) K1=NP IF(J.EQ.NP1) K2=NQ DO 400 I=1,N DUM=ZERO DO 390 K=1,K2 390 DUM=DUM+CP(I,K1+K)*P(K,J) 400 VEC(I,J)=DUM 410 CONTINUE C C CORRESPONDING CURRENT MO VECTORS NOW HELD IN VEC. C COMPUTE VEC(DAGGER)*FP*VEC C STORE OFF-DIAGONAL BLOCK IN FOCK ARRAY. C 420 II=0 DO 460 I=1,N I1=I+1 DO 450 J=1,NQ DUM=ZERO DO 430 K=1,I 430 DUM=DUM+FP(II+K)*VEC(K,J+NP) IF(I.EQ.N) GO TO 450 IK=II+I+I DO 440 K=I1,N DUM=DUM+FP(IK)*VEC(K,J+NP) 440 IK=IK+K 450 P(I,J)=DUM 460 II=II+I DO 490 I=1,NP DO 480 J=1,NQ DUM=ZERO DO 470 K=1,N 470 DUM=DUM+VEC(K,I)*P(K,J) FOCK(I,J)=DUM 480 CONTINUE 490 CONTINUE C C SET LIMITS ON RANGE OF 1-D SEARCH C NPNTS=2 IPOINT=1 XNOW=ZERO XHIGH=RADMAX/THETA(1) XLOW=-0.5D0*XHIGH C C CALCULATE (DE/DX) AT CURRENT POINT AND C STORE INFORMATION FOR SPLINE FIT C ***** JUMP POINT FOR MODE=3 ENTRY ***** C 500 DEDX=ZERO DO 510 K=1,MINPQ 510 DEDX=DEDX+THETA(K)*FOCK(K,K) DENOW=-4.0D0*DEDX ENOW=E IF(IPOINT.LE.12) GO TO 530 520 FORMAT(//,'EXCESSIVE DATA PNTS FOR SPLINE.',/ 1,'IPOINT =',I3,'MAXIMUM IS 12.') C C PERFORM 1-D SEARCH AND DETERMINE EXIT MODE. C 530 X(IPOINT)=XNOW F(IPOINT)=ENOW DF(IPOINT)=DENOW CALL SPLINE IF((EOLD-ENOW).GT.FF*(EOLD-EMIN).OR.IPOINT.GT.10) GO TO 560 C C (MODE=3 EXIT) RECOMPUTE CP VECTORS AT PREDICTED MINIMUM. C XNOW=XMIN DO 550 K=1,MINPQ CK=COS(XNOW*THETA(K)) SK=SIN(XNOW*THETA(K)) IF(DEBUG)WRITE(6,'('' ROTATION ANGLE:'',F12.4)')SK*57.29578D0 DO 540 I=1,N CP(I,K) =CK*VEC(I,K)-SK*VEC(I,NP+K) 540 CP(I,NP+K)=SK*VEC(I,K)+CK*VEC(I,NP+K) 550 CONTINUE MODE=3 RETURN C C (MODE=2 EXIT) CURRENT VECTORS GIVE SATISFACTORY ENERGY IMPROVEMENT C CURRENT POINT BECOMES OLD POINT FOR THE NEXT 1-D SEARCH. C 560 IF(MODE.EQ.2) GO TO 580 DO 570 I=1,N DO 570 J=1,N 570 VEC(I,J)=CP(I,J) MODE=2 580 ROLD=XOLD*THETA(1)*57.29578D0 RNOW=XNOW*THETA(1)*57.29578D0 RMIN=XMIN*THETA(1)*57.29578D0 IF(DEBUG)WRITE(6,600) XOLD,EOLD*23.061D0,DEOLD,ROLD 1, XNOW,ENOW*23.061D0,DENOW,RNOW 2, XMIN,EMIN*23.061D0,DEMIN,RMIN EOLD=ENOW IF(NPNTS.LE.200) RETURN WRITE(6,610) DO 590 K=1,NPNTS 590 WRITE(6,620) K,X(K),F(K),DF(K) WRITE(6,630) RETURN 600 FORMAT( 1/14X,3H X ,10X,6H F(X) ,9X,7H DF/DX ,21H ROTATION (DEGREES), 2/10H OLD ,F10.5,3F15.10, 3/10H CURRENT ,F10.5,3F15.10, 4/10H PREDICTED,F10.5,3F15.10/) 610 FORMAT(3H K,10H X(K) ,15H F(K) ,10H DF(K)) 620 FORMAT(I3,F10.5,2F15.10) 630 FORMAT(10X) END SUBROUTINE SPLINE IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' LOGICAL SKIP1,SKIP2 C C FIT F(X) BY A CUBIC SPLINE GIVEN VALUES OF THE FUNCTION C AND ITS FIRST DERIVATIVE AT N PNTS. C SUBROUTINE RETURNS VALUES OF XMIN,FMIN, AND DFMIN C AND MAY REORDER THE DATA. C CALLING PROGRAM SUPPLIES ALL OTHER VALUES IN THE C COMMON BLOCK. C XLOW AND XHIGH SET LIMITS ON THE INTERVAL WITHIN WHICH C TO SEARCH. SUBROUTINE MAY FURTHER REDUCE THIS INTERVAL. C COMMON/FIT/N,IDUM2,XLOW,XHIGH,XMIN,FMIN,DFMIN,X(12),F(12),DF(12) SAVE CLOSE, BIG, HUGE, USTEP, DSTEP DATA CLOSE, BIG, HUGE, USTEP, DSTEP/1.0E-8,500.0,1.0E+10,1.0,2.0/ C C SUBROUTINE ASSUMES THAT THE FIRST N-1 DATA PNTS HAVE BEEN C PREVIOUSLY ORDERED, X(I).LT.X(I+1) FOR I=1,2,...,N-2 C NOW MOVE NTH POINT TO ITS PROPER PLACE. C XMIN=X(N) FMIN=F(N) DFMIN=DF(N) N1=N-1 K=N1 10 IF(X(K).LT.XMIN) GO TO 20 X(K+1)=X(K) F(K+1)=F(K) DF(K+1)=DF(K) K=K-1 IF(K.GT.0) GO TO 10 20 X(K+1)=XMIN F(K+1)=FMIN DF(K+1)=DFMIN C C DEFINE THE INTERVAL WITHIN WHICH WE TRUST THE SPLINE FIT. C USTEP = UP HILL STEP SIZE FACTOR C DSTEP = DOWN HILL STEP SIZE FACTOR C IF(DF(1).GT.0.0) STEP=DSTEP IF(DF(1).LE.0.0) STEP=USTEP XSTART=X(1)-STEP*(X(2)-X(1)) XSTART=MAX(XSTART,XLOW) IF(DF(N).GT.0.0) STEP=USTEP IF(DF(N).LE.0.0) STEP=DSTEP XSTOP=X(N)+STEP*(X(N)-X(N1)) XSTOP=MIN(XSTOP,XHIGH) C C SEARCH FOR MINIMUM C DO 110 K=1,N1 SKIP1=K.NE.1 SKIP2=K.NE.N1 IF(F(K).GE.FMIN) GO TO 30 XMIN=X(K) FMIN=F(K) DFMIN=DF(K) 30 DX=X(K+1)-X(K) C C SKIP INTERVAL IF PNTS ARE TOO CLOSE TOGETHER C IF(DX.LE.CLOSE) GO TO 110 X1=0.0D0 IF(K.EQ.1) X1=XSTART-X(1) X2=DX IF(K.EQ.N1) X2=XSTOP-X(N1) C C (A,B,C)=COEF OF (CUBIC,QUADRATIC,LINEAR) TERMS C DUM=(F(K+1)-F(K))/DX A=(DF(K)+DF(K+1)-DUM-DUM)/(DX*DX) B=(DUM+DUM+DUM-DF(K)-DF(K)-DF(K+1))/DX C=DF(K) C C XK = X-X(K) AT THE MINIMUM WITHIN THE KTH SUBINTERVAL C TEST FOR PATHOLOGICAL CASES. C BB=B*B AC3=(A+A+A)*C IF(BB.LT.AC3) GO TO 90 IF( B.GT.0.0) GO TO 40 IF(ABS(B).GT.HUGE*ABS(A)) GO TO 90 GO TO 50 40 IF(BB.GT.BIG*ABS(AC3)) GO TO 60 C C WELL BEHAVED CUBIC C 50 XK=(-B+SQRT(BB-AC3))/(A+A+A) GO TO 70 C C CUBIC IS DOMINATED BY QUADRATIC TERM C 60 R=AC3/BB XK=-(((0.039063D0*R+0.0625D0)*R+0.125D0)*R+0.5D0)*C/B 70 IF(XK.LT.X1.OR.XK.GT.X2) GO TO 90 80 FM=((A*XK+B)*XK+C)*XK+F(K) IF(FM.GT.FMIN) GO TO 90 XMIN=XK+X(K) FMIN=FM DFMIN=((A+A+A)*XK+B+B)*XK+C C C EXTRAPOLATE TO END OF INTERVAL IF K=1 AND/OR K=N1 C 90 IF(SKIP1) GO TO 100 SKIP1=.TRUE. XK=X1 GO TO 80 100 IF(SKIP2) GO TO 110 SKIP2=.TRUE. XK=X2 GO TO 80 110 CONTINUE RETURN END SUBROUTINE SCHMIT(U,N,NDIM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION U(NDIM,NDIM) SAVE ZERO, SMALL, ONE DATA ZERO,SMALL,ONE/0.0,0.01,1.0/ II=0 DO 110 K=1,N K1=K-1 C C NORMALIZE KTH COLUMN VECTOR C DOT = ZERO DO 10 I=1,N 10 DOT=DOT+U(I,K)*U(I,K) IF(DOT.EQ.ZERO) GO TO 100 SCALE=ONE/SQRT(DOT) DO 20 I=1,N 20 U(I,K)=SCALE*U(I,K) 30 IF(K1.EQ.0) GO TO 110 NPASS=0 C C PROJECT OUT K-1 PREVIOUS ORTHONORMAL VECTORS FROM KTH VECTOR C 40 NPASS=NPASS+1 DO 70 J=1,K1 DOT=ZERO DO 50 I=1,N 50 DOT=DOT+U(I,J)*U(I,K) DO 60 I=1,N 60 U(I,K)=U(I,K)-DOT*U(I,J) 70 CONTINUE C C SECOND NORMALIZATION (AFTER PROJECTION) C IF KTH VECTOR IS SMALL BUT NOT ZERO THEN NORMALIZE C AND PROJECT AGAIN TO CONTROL ROUND-OFF ERRORS. C DOT=ZERO DO 80 I=1,N 80 DOT=DOT+U(I,K)*U(I,K) IF(DOT.EQ.ZERO) GO TO 100 IF(DOT.LT.SMALL.AND.NPASS.GT.2) GO TO 100 SCALE=ONE/SQRT(DOT) DO 90 I=1,N 90 U(I,K)=SCALE*U(I,K) IF(DOT.LT.SMALL) GO TO 40 GO TO 110 C C REPLACE LINEARLY DEPENDENT KTH VECTOR BY A UNIT VECTOR. C 100 II=II+1 C IF(II.GT.N) STOP U(II,K)=ONE GO TO 30 110 CONTINUE RETURN END SUBROUTINE SCHMIB(U,N,NDIM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C C SAME AS SCHMIDT BUT WORKS FROM RIGHT TO LEFT. C DIMENSION U(NDIM,NDIM) SAVE ZERO, SMALL, ONE DATA ZERO,SMALL,ONE/0.0,0.01,1.0/ N1=N+1 II=0 DO 110 K=1,N K1=K-1 C C NORMALIZE KTH COLUMN VECTOR C DOT = ZERO DO 10 I=1,N 10 DOT=DOT+U(I,N1-K)*U(I,N1-K) IF(DOT.EQ.ZERO) GO TO 100 SCALE=ONE/SQRT(DOT) DO 20 I=1,N 20 U(I,N1-K)=SCALE*U(I,N1-K) 30 IF(K1.EQ.0) GO TO 110 NPASS=0 C C PROJECT OUT K-1 PREVIOUS ORTHONORMAL VECTORS FROM KTH VECTOR C 40 NPASS=NPASS+1 DO 70 J=1,K1 DOT=ZERO DO 50 I=1,N 50 DOT=DOT+U(I,N1-J)*U(I,N1-K) DO 60 I=1,N 60 U(I,N1-K)=U(I,N1-K)-DOT*U(I,N1-J) 70 CONTINUE C C SECOND NORMALIZATION (AFTER PROJECTION) C IF KTH VECTOR IS SMALL BUT NOT ZERO THEN NORMALIZE C AND PROJECT AGAIN TO CONTROL ROUND-OFF ERRORS. C DOT=ZERO DO 80 I=1,N 80 DOT=DOT+U(I,N1-K)*U(I,N1-K) IF(DOT.EQ.ZERO) GO TO 100 IF(DOT.LT.SMALL.AND.NPASS.GT.2) GO TO 100 SCALE=ONE/SQRT(DOT) DO 90 I=1,N 90 U(I,N1-K)=SCALE*U(I,N1-K) IF(DOT.LT.SMALL) GO TO 40 GO TO 110 C C REPLACE LINEARLY DEPENDENT KTH VECTOR BY A UNIT VECTOR. C 100 II=II+1 C IF(II.GT.N) STOP U(II,N1-K)=ONE GO TO 30 110 CONTINUE RETURN END SUBROUTINE PULAY(F,P,N,FPPF,FOCK,EMAT,LFOCK,NFOCK,MSIZE,START,PL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION F(*), P(*), FPPF(*), FOCK(*) LOGICAL START ************************************************************************ * * PULAY USES DR. PETER PULAY'S METHOD FOR CONVERGENCE. * A MATHEMATICAL DESCRIPTION CAN BE FOUND IN * "P. PULAY, J. COMP. CHEM. 3, 556 (1982). * * ARGUMENTS:- * ON INPUT F = FOCK MATRIX, PACKED, LOWER HALF TRIANGLE. * P = DENSITY MATRIX, PACKED, LOWER HALF TRIANGLE. * N = NUMBER OF ORBITALS. * FPPF = WORKSTORE OF SIZE MSIZE, CONTENTS WILL BE * OVERWRITTEN. * FOCK = " " " " * EMAT = WORKSTORE OF AT LEAST 15**2 ELEMENTS. * START = LOGICAL, = TRUE TO START PULAY. * PL = UNDEFINED ELEMENT. * ON OUTPUT F = "BEST" FOCK MATRIX, = LINEAR COMBINATION * OF KNOWN FOCK MATRICES. * START = FALSE * PL = MEASURE OF NON-SELF-CONSISTENCY * = [F*P] = F*P - P*F. * ************************************************************************ COMMON /KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL DIMENSION EMAT(20,20), EVEC(1000), COEFFS(20) CHARACTER*241 KEYWRD LOGICAL DEBUG DATA ICALCN/0/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL MAXLIM=6 DEBUG=(INDEX(KEYWRD,'DEBUGPULAY') .NE.0) ENDIF IF(START) THEN LINEAR=(N*(N+1))/2 MFOCK=MSIZE/LINEAR IF(MFOCK.GT.MAXLIM)MFOCK=MAXLIM IF(DEBUG) 1 WRITE(6,'('' MAXIMUM SIZE:'',I5)')MFOCK NFOCK=1 LFOCK=1 START=.FALSE. ELSE IF(NFOCK.LT.MFOCK) NFOCK=NFOCK+1 IF(LFOCK.NE.MFOCK)THEN LFOCK=LFOCK+1 ELSE LFOCK=1 ENDIF ENDIF LBASE=(LFOCK-1)*LINEAR * * FIRST, STORE FOCK MATRIX FOR FUTURE REFERENCE. * DO 10 I=1,LINEAR 10 FOCK((I-1)*MFOCK+LFOCK)=F(I) * * NOW FORM /FOCK*DENSITY-DENSITY*FOCK/, AND STORE THIS IN FPPF * CALL MAMULT(P,F,FPPF(LBASE+1),N,0.D0) CALL MAMULT(F,P,FPPF(LBASE+1),N,-1.D0) * * FPPF NOW CONTAINS THE RESULT OF FP - PF. * NFOCK1=NFOCK+1 DO 20 I=1,NFOCK EMAT(NFOCK1,I)=-1.D0 EMAT(I,NFOCK1)=-1.D0 EMAT(LFOCK,I)=DOT(FPPF((I-1)*LINEAR+1),FPPF(LBASE+1),LINEAR) 20 EMAT(I,LFOCK)=EMAT(LFOCK,I) PL=EMAT(LFOCK,LFOCK)/LINEAR EMAT(NFOCK1,NFOCK1)=0.D0 CONST=1.D0/EMAT(LFOCK,LFOCK) DO 30 I=1,NFOCK DO 30 J=1,NFOCK 30 EMAT(I,J)=EMAT(I,J)*CONST IF(DEBUG) THEN WRITE(6,'('' EMAT'')') DO 40 I=1,NFOCK1 40 WRITE(6,'(6E13.6)')(EMAT(J,I),J=1,NFOCK1) ENDIF L=0 DO 50 I=1,NFOCK1 DO 50 J=1,NFOCK1 L=L+1 50 EVEC(L)=EMAT(I,J) CONST=1.D0/CONST DO 60 I=1,NFOCK DO 60 J=1,NFOCK 60 EMAT(I,J)=EMAT(I,J)*CONST ********************************************************************* * THE MATRIX EMAT SHOULD HAVE FORM * * | ... -1.0| * | ... -1.0| * | ... -1.0| * | ... -1.0| * | . . ... . | * | -1.0 -1.0 ... 0. | * * WHERE IS THE SCALAR PRODUCT OF [F*P] FOR ITERATION I * TIMES [F*P] FOR ITERATION J. * ********************************************************************* CALL OSINV(EVEC,NFOCK1,D) IF(ABS(D).LT.1.D-6)THEN START=.TRUE. RETURN ENDIF IF(NFOCK.LT.2) RETURN IL=NFOCK*NFOCK1 DO 70 I=1,NFOCK 70 COEFFS(I)=-EVEC(I+IL) IF(DEBUG) THEN WRITE(6,'('' EVEC'')') WRITE(6,'(6F12.6)')(COEFFS(I),I=1,NFOCK) WRITE(6,'('' LAGRANGIAN MULTIPLIER (ERROR) ='' 1 ,F13.6)')EVEC(NFOCK1*NFOCK1) ENDIF DO 90 I=1,LINEAR SUM=0 L=0 II=(I-1)*MFOCK DO 80 J=1,NFOCK 80 SUM=SUM+COEFFS(J)*FOCK(J+II) 90 F(I)=SUM RETURN END SUBROUTINE OSINV (A,N,D) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION A(*) ************************************************************************ * * OSINV INVERTS A GENERAL SQUARE MATRIX OF ORDER UP TO MAXORB. SEE * DIMENSION STATEMENTS BELOW. * * ON INPUT A = GENERAL SQUARE MATRIX STORED LINEARLY. * N = DIMENSION OF MATRIX A. * D = VARIABLE, NOT DEFINED ON INPUT. * * ON OUTPUT A = INVERSE OF ORIGINAL A. * D = DETERMINANT OF ORIGINAL A, UNLESS A WAS SINGULAR, * IN WHICH CASE D = 0.0 * ************************************************************************ DIMENSION L(MAXORB), M(MAXORB) ************************************************************************ * * IF THE VALUE OF TOL GIVEN HERE IS UNSUITABLE, IT CAN BE CHANGED. TOL=1.D-8 * * ************************************************************************ D=1.0D0 NK=-N DO 180 K=1,N NK=NK+N L(K)=K M(K)=K KK=NK+K BIGA=A(KK) DO 20 J=K,N IZ=N*(J-1) DO 20 I=K,N IJ=IZ+I C C 10 FOLLOWS C IF (ABS(BIGA)-ABS(A(IJ))) 10,20,20 10 BIGA=A(IJ) L(K)=I M(K)=J 20 CONTINUE J=L(K) IF (J-K) 50,50,30 30 KI=K-N DO 40 I=1,N KI=KI+N HOLO=-A(KI) JI=KI-K+J A(KI)=A(JI) 40 A(JI)=HOLO 50 I=M(K) IF (I-K) 80,80,60 60 JP=N*(I-1) DO 70 J=1,N JK=NK+J JI=JP+J HOLO=-A(JK) A(JK)=A(JI) 70 A(JI)=HOLO 80 IF (ABS(BIGA)-TOL) 90,100,100 90 D=0.0D0 RETURN 100 DO 120 I=1,N IF (I-K) 110,120,110 110 IK=NK+I A(IK)=A(IK)/(-BIGA) 120 CONTINUE DO 150 I=1,N IK=NK+I IJ=I-N DO 150 J=1,N IJ=IJ+N IF (I-K) 130,150,130 130 IF (J-K) 140,150,140 140 KJ=IJ-I+K A(IJ)=A(IK)*A(KJ)+A(IJ) 150 CONTINUE KJ=K-N DO 170 J=1,N KJ=KJ+N IF (J-K) 160,170,160 160 A(KJ)=A(KJ)/BIGA 170 CONTINUE D=MIN(D*BIGA,1.D10) A(KK)=1.0D0/BIGA 180 CONTINUE K=N 190 K=K-1 IF (K) 260,260,200 200 I=L(K) IF (I-K) 230,230,210 210 JQ=N*(K-1) JR=N*(I-1) DO 220 J=1,N JK=JQ+J HOLO=A(JK) JI=JR+J A(JK)=-A(JI) 220 A(JI)=HOLO 230 J=M(K) IF (J-K) 190,190,240 240 KI=K-N DO 250 I=1,N KI=KI+N HOLO=A(KI) JI=KI+J-K A(KI)=-A(JI) 250 A(JI)=HOLO GO TO 190 260 RETURN C END mopac7-1.15/fortran/wrttxt.f0000644000175000017500000000220611053302064012737 00000000000000 SUBROUTINE WRTTXT(IPRT) COMMON /KEYWRD/ KEYWRD COMMON /TITLES/ KOMENT,TITLE CHARACTER KEYWRD*241, KOMENT*81, TITLE*81 DO 10 I=81,2,-1 10 IF(KEYWRD(I:I).NE.' ')GOTO 20 20 WRITE(IPRT,'(A)')KEYWRD(:I) IF(INDEX(KEYWRD(1:81),' +')+INDEX(KEYWRD(1:81),'&')+ 1INDEX(KEYWRD,'SETUP').NE.0) THEN DO 30 I=161,82,-1 30 IF(KEYWRD(I:I).NE.' ')GOTO 40 40 IF(KEYWRD(81:81).NE.' ')THEN WRITE(IPRT,'(1X,A)')KEYWRD(81:I) ELSE WRITE(IPRT,'(A)')KEYWRD(81:I) ENDIF ENDIF IF(INDEX(KEYWRD(81:241),' +')+INDEX(KEYWRD(81:241),'&') + 1INDEX(KEYWRD,'SETUP').NE.0) THEN DO 50 I=241,161,-1 50 IF(KEYWRD(I:I).NE.' ')GOTO 60 60 IF(KEYWRD(161:161).NE.' ')THEN WRITE(IPRT,'(1X,A)')KEYWRD(161:I) ELSE WRITE(IPRT,'(A)')KEYWRD(161:I) ENDIF ENDIF DO 70 I=81,2,-1 70 IF(KOMENT(I:I).NE.' ')GOTO 80 80 IF(INDEX(KOMENT,' NULL ').EQ.0)WRITE(IPRT,'(A)')KOMENT(:I) DO 90 I=81,2,-1 90 IF(TITLE(I:I).NE.' ')GOTO 100 100 IF(INDEX(TITLE,' NULL ').EQ.0)WRITE(IPRT,'(A)')TITLE(:I) END mopac7-1.15/fortran/SIZES0000644000175000017500000000616111053302063012037 00000000000000*COMDECK SIZES ************************************************************************ * THIS FILE CONTAINS ALL THE ARRAY SIZES FOR USE IN MOPAC. * * THERE ARE ONLY 5 PARAMETERS THAT THE PROGRAMMER NEED SET: * MAXHEV = MAXIMUM NUMBER OF HEAVY ATOMS (HEAVY: NON-HYDROGEN ATOMS) * MAXLIT = MAXIMUM NUMBER OF HYDROGEN ATOMS. * MAXTIM = DEFAULT TIME FOR A JOB. (SECONDS) * MAXDMP = DEFAULT TIME FOR AUTOMATIC RESTART FILE GENERATION (SECS) * ISYBYL = 1 IF MOPAC IS TO BE USED IN THE SYBYL PACKAGE, =0 OTHERWISE * SEE ALSO NMECI, NPULAY AND MESP AT THE END OF THIS FILE * PARAMETER (MAXHEV=60, MAXLIT=60) PARAMETER (MAXTIM=3600, MAXDMP=3600) PARAMETER (ISYBYL=0) * ************************************************************************ * * THE FOLLOWING CODE DOES NOT NEED TO BE ALTERED BY THE PROGRAMMER * ************************************************************************ * * ALL OTHER PARAMETERS ARE DERIVED FUNCTIONS OF THESE TWO PARAMETERS * * NAME DEFINITION * NUMATM MAXIMUM NUMBER OF ATOMS ALLOWED. * MAXORB MAXIMUM NUMBER OF ORBITALS ALLOWED. * MAXPAR MAXIMUM NUMBER OF PARAMETERS FOR OPTIMISATION. * N2ELEC MAXIMUM NUMBER OF TWO ELECTRON INTEGRALS ALLOWED. * MPACK AREA OF LOWER HALF TRIANGLE OF DENSITY MATRIX. * MORB2 SQUARE OF THE MAXIMUM NUMBER OF ORBITALS ALLOWED. * MAXHES AREA OF HESSIAN MATRIX * MAXALL LARGER THAN MAXORB OR MAXPAR. ************************************************************************ PARAMETER (VERSON=7.01D0) PARAMETER (NUMATM=MAXHEV+MAXLIT) PARAMETER (MAXORB=4*MAXHEV+MAXLIT) PARAMETER (MAXPAR=3*NUMATM) PARAMETER (MAXBIG=MAXORB*MAXORB*2) PARAMETER (N2ELEC=(50*MAXHEV*(MAXHEV-1)+10*MAXHEV*MAXLIT + +(MAXLIT*(MAXLIT-1))/2)) PARAMETER (MAXHES=(MAXPAR*(MAXPAR+1))/2,MORB2=MAXORB**2) PARAMETER (MPACK=(MAXORB*(MAXORB+1))/2) PARAMETER (MAXPR=6*MAXORB) PARAMETER (MAXALL=4*MAXHEV+3*MAXLIT) PARAMETER (NMECI=8, NPULAY=MPACK, MMCI=60) PARAMETER (MESP=50000) PARAMETER (LENABC=400) PARAMETER (LENAB2=LENABC*(LENABC+5)) PARAMETER (NPPA = 1082, MAXNSS = 500) PARAMETER (MAXDEN=10*MAXHEV+MAXLIT) * PARAMETER (IGREEN=600000) ************************************************************************ *DECK MOPAC mopac7-1.15/fortran/deri22.f0000644000175000017500000001370311053302063012455 00000000000000 SUBROUTINE DERI22 (C,B,WORK,NORBS,FOC2,AB,MINEAR,FCI) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C(NORBS,NORBS), B(*), WORK(NORBS,NORBS), FOC2(*), 1AB(*), FCI(*) ************************************************************************ * 1) BUILD THE 2-ELECTRON FOCK MATRIX DEPENDING ON B AS FOLLOWS : * DP = C * SCALE*B * C' ... DP DENSITY MATRIX 'DERIVATIVE', * FOC2 = 0.5 * TRACE ( DP * (2-) ) DONE IN FOCK2 & FOCK1. * 2) HALF-TRANSFORM ONTO M.O. BASIS : DPT = FOC2 * C * AND COMPUTE DIAGONAL BLOCKS ELEMENTS OF C' * FOC2, EXTRACTING * IN FCI ELEMENTS OVER C.I-ACTIVE M.O ONLY. * 3) COMPUTE SUPERVECTOR AB = (DIAG + A) * B DEFINED BY THE MATRIX : * AB(I,J)= ( DIAG(I,J)*B(I,J)+DPT(I,J) )*SCALAR(I,J) WITH I.GT.J, * DIAG(I,J)=(EIGS(I)-EIGS(J))/(O(J)-O(I)) >0, O OCCUPANCY NUMBERS, * EIGS EIGENVALUES OF FOCK OPERATOR WITH EIGENVECTORS C IN A.O. * * INPUT * C(NORBS,NORBS) : M.O. EIGENVECTORS (COLUMNWISE). * B(*) : B SUPERVECTOR PACKED BY OFF-DIAGONAL BLOCKS, SCALED * WORK(*) : WORK AREA OF SIZE N*N. * NORBS : NUMBER OF M.O.S * NELEC,NMOS : LAST FROZEN CORE M.O. , C.I-ACTIVE BAND LENGTH. * IN COMMON * DIAG,SCALAR AS DEFINED IN 'DERI0'. * OUTPUT * FOC2(*) : 2-ELECTRON FOCK MATRIX, PACKED CANONICAL. * AB(*) : ANTISYMMETRIC MATRIX PACKED IN SUPERVECTOR FORM WITH * THE CONSECUTIVE FOLLOWING BLOCKS: * 1) OPEN-CLOSED I.E. B(IJ)=B(I,J) WITH I OPEN & J CLOSED * AND I RUNNING FASTER THAN J, * 2) VIRTUAL-CLOSED SAME RULE OF ORDERING, * 3) VIRTUAL-OPEN SAME RULE OF ORDERING. * FCI(*) : FOCK DIAGONAL BLOCKS ELEMENTS OVER C.I-ACTIVE M.O. * FOC2 CAN BE EQUIVALENCED WITH WORK IN THE CALLING SEQUENCE. ************************************************************************ C C NOTE: NORBS AND NORD ARE THE SAME ADDRESS. THE NAME NORBD IS NOT C USED HERE. COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM) 1 ,NLAST(NUMATM),NORBD,NELECS,NALPHA,NBETA 2 ,NCLOSE,NOPEN,NDUMY,FRACT 3 /WMATRX/ WJ(N2ELEC),WK(N2ELEC) COMMON /DENSTY/ PDUMY(MPACK*2), DPA(MPACK) COMMON /FOKMAT/ FDUMY(MPACK), SCALAR(MPACK) COMMON /NVOMAT/ DIAG(MPACK/2) COMMON /WORK1 / FDUMY2(15*NPULAY), DP(6*NPULAY) COMMON /CIBITS/ NMOS,LAB,NELEC,NBO(3) DIMENSION W(N2ELEC) EQUIVALENCE (W,WJ) C LINEAR=(NORBS*(NORBS+1))/2 C C DERIVATIVE OF THE DENSITY MATRIX IN DP (PACKED,CANONICAL). C ---------------------------------------------------------- C DP = C * B * C' . C C STEP 0 : UNSCALE VECTOR B. DO 10 I=1,MINEAR 10 B(I)=B(I)*SCALAR(I) C C STEP 1 : WORK = C * B . DP TEMPORARY ARRAY. L=1 IF(NBO(2).NE.0 .AND. NBO(1).NE.0) THEN C OPEN-CLOSED CALL MXM(C(1,NBO(1)+1),NORBS,B(L),NBO(2),WORK,NBO(1)) C CLOSED-OPEN CALL MXMT (C,NORBS,B(L),NBO(1),WORK(1,NBO(1)+1),NBO(2)) L=L+NBO(2)*NBO(1) ENDIF IF(NBO(3).NE.0 .AND. NBO(1).NE.0) THEN C VIRTUAL-CLOSED IF(L.GT.1) THEN CALL MXM(C(1,NOPEN+1),NORBS,B(L),NBO(3),DP,NBO(1)) DO 20 I=1,NORBS*NBO(1) 20 WORK(I,1)=WORK(I,1)+DP(I) ELSE CALL MXM(C(1,NOPEN+1),NORBS,B(L),NBO(3),WORK,NBO(1)) ENDIF C CLOSED-VIRTUAL CALL MXMT(C,NORBS,B(L),NBO(1),WORK(1,NOPEN+1),NBO(3)) L=L+NBO(3)*NBO(1) ENDIF IF(NBO(3).NE.0 .AND. NBO(2).NE.0) THEN C VIRTUAL-OPEN CALL MXM(C(1,NOPEN+1),NORBS,B(L),NBO(3),DP,NBO(2)) J=NORBS*NBO(1) DO 30 I=1,NORBS*NBO(2) 30 WORK(J+I,1)=WORK(J+I,1)+DP(I) C OPEN-VIRTUAL CALL MXMT (C(1,NBO(1)+1),NORBS,B(L),NBO(2),DP,NBO(3)) J=NORBS*NOPEN DO 40 I=1,NORBS*NBO(3) 40 WORK(J+I,1)=WORK(J+I,1)+DP(I) ENDIF C C STEP 2 : DP= WORK * C' WITH DP PACKED,CANONICAL. L=0 DO 50 I=1,NORBS DO 50 J=1,I L=L+1 50 DP(L)=SDOT(NORBS,WORK(I,1),NORBS,C(J,1),NORBS) C C 2-ELECTRON FOCK MATRIX BUILD WITH THE DENSITY MATRIX DERIVATIVE. C ---------------------------------------------------------------- C RETURNED IN FOC2 (PACKED CANONICAL). DO 60 I=1,LINEAR FOC2(I)=0.D0 60 DPA(I)=0.5D0*DP(I) CALL FOCK2 (FOC2,DP,DPA,W,WJ,WK,NUMAT,NAT,NFIRST,NMIDLE,NLAST) CALL FOCK1 (FOC2,DP,DPA,DPA) C C BUILD DP AND EXTRACT FCI. C -------------------------- C C DP(NORBS,NEND) = FOC2(NORBS,NORBS) * C(NORBS,NEND). NEND=MAX(NOPEN,NELEC+NMOS) L=1 DO 70 I=1,NOPEN CALL SUPDOT (DP(L),FOC2,C(1,I),NORBS,1) 70 L=L+NORBS C EXTRACT FCI L=1 NEND=0 DO 90 LOOP=1,3 NINIT=NEND+1 NEND =NEND+NBO(LOOP) N1=MAX(NINIT,NELEC+1 ) N2=MIN(NEND ,NELEC+NMOS) IF(N2.LT.N1) GO TO 90 DO 80 I=N1,N2 IF(I.GT.NINIT) THEN CALL MXM (C(1,I),1,DP(NORBS*(NINIT-1)+1),NORBS,FCI(L),I-N 1INIT) L=L+I-NINIT ENDIF 80 CONTINUE 90 CONTINUE DO 100 I=NELEC+1,NELEC+NMOS FCI(L)=-DOT(C(1,I),DP(NORBS*(I-1)+1),NORBS) 100 L=L+1 C C NEW SUPERVECTOR AB = (DIAG + C'* FOC2 * C) * B , SCALED. C -------------------------------------------------------- C C PART 1 : AB(I,J) = (C' * DP)(I,J) DONE BY BLOCKS. L=1 IF(NBO(2).NE.0 .AND. NBO(1).NE.0) THEN CALL MTXM (C(1,NBO(1)+1),NBO(2),DP,NORBS,AB(L),NBO(1)) L=L+NBO(2)*NBO(1) ENDIF IF(NBO(3).NE.0 .AND. NBO(1).NE.0) THEN CALL MTXM (C(1,NOPEN+1),NBO(3),DP,NORBS,AB(L),NBO(1)) L=L+NBO(3)*NBO(1) ENDIF IF(NBO(3).NE.0 .AND. NBO(2).NE.0) 1CALL MTXM(C(1,NOPEN+1),NBO(3),DP(NORBS*NBO(1)+1), 2NORBS,AB(L),NBO(2)) C C PART 2 : AB = SCALE * (D * B + AB) AND RESCALE BASIS VECTOR B. DO 110 I=1,MINEAR AB(I)=(DIAG(I)*B(I)+AB(I))*SCALAR(I) 110 B(I)=B(I)/SCALAR(I) RETURN END mopac7-1.15/fortran/force.f0000644000175000017500000003326411053302063012470 00000000000000 SUBROUTINE FORCE IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR),IDUMY,DUMY(MAXPAR) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /FMATRX/ FMATRX(MAXPAR**2+MAXPAR*3+1),IDUMY2(4) COMMON /KEYWRD/ KEYWRD COMMON /GRADNT/ GRAD(MAXPAR),GNORM PARAMETER (IPADD=2*MORB2+2*MAXORB-MAXPAR-MAXPAR*MAXPAR) COMMON /VECTOR/ CNORML(MAXPAR*MAXPAR),FREQ(MAXPAR),DUMMY(IPADD) COMMON /ELEMTS/ ELEMNT(107) COMMON /LAST / LAST COMMON /MESAGE/ IFLEPO,ISCF COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT COMMON /SIMBOL/ SIMBOL(MAXPAR) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /COORD / COORD(3,NUMATM) *********************************************************************** * * FORCE CALCULATES THE FORCE CONSTANTS FOR THE MOLECULE, AND THE * VIBRATIONAL FREQUENCIES. ISOTOPIC SUBSTITUTION IS ALLOWED. * *********************************************************************** COMMON /EULER / TVEC(3,3), ID COMMON /SCFTYP/ EMIN, LIMSCF COMMON /SCRACH/ STORE(MAXPAR**2) DIMENSION XPARAM(MAXPAR), GR(3,NUMATM), 1DELDIP(3,MAXPAR), TRDIP(3,MAXPAR),LOCOLD(2,MAXPAR) 2,REDMAS(MAXPAR), SHIFT(6), DIPT(MAXPAR), TRAVEL(MAXPAR) 3, ROT(3,3), GEOREF(3,NUMATM), NAR(NUMATM), NBR(NUMATM),NCR(NUMATM) CHARACTER KEYWRD*241, KEYS(241)*1, ELEMNT*2, SIMBOL*10 LOGICAL RESTRT, LINEAR, DEBUG, BARTEL, PRNT, LARGE, LIMSCF EQUIVALENCE (GRAD(1), GR(1,1)), (KEYWRD,KEYS(1)) C C TEST GEOMETRY TO SEE IF IT IS OPTIMIZED TIME2=-1.D9 CALL GMETRY(GEO,COORD) NVAOLD=NVAR DO 10 I=1,NVAR LOCOLD(1,I)=LOC(1,I) 10 LOCOLD(2,I)=LOC(2,I) NVAR=0 NDEOLD=NDEP NDEP=0 NUMAT=0 IF(LABELS(1) .NE. 99) NUMAT=1 DO 30 I=2,NATOMS IF(LABELS(I).EQ.99) GOTO 30 IF(I.EQ.2)ILIM=1 IF(I.EQ.3)ILIM=2 IF(I.GT.3)ILIM=3 C C IS IT A POLYMER? C IF(LABELS(I).EQ.107) THEN ILIM=1 ELSE NUMAT=NUMAT+1 ENDIF C$DOIT ASIS DO 20 J=1,ILIM NVAR=NVAR+1 LOC(1,NVAR)=I LOC(2,NVAR)=J 20 XPARAM(NVAR)=GEO(J,I) 30 CONTINUE C C IF A RESTART, THEN TSCF AND TDER WILL BE FAULTY, THEREFORE SET TO -1 C TSCF=-1.D0 TDER=-1.D0 PRNT=(INDEX(KEYWRD,'RC=') .EQ. 0) DEBUG=(INDEX(KEYWRD,'DFORCE') .NE. 0) LARGE=(INDEX(KEYWRD,'LARGE') .NE. 0) BARTEL=(INDEX(KEYWRD,'NLLSQ') .NE. 0) RESTRT=(INDEX(KEYWRD,'RESTART') .NE. 0) TIME1=SECOND() IF (RESTRT) THEN C C CHECK TO SEE IF CALCULATION IS IN NLLSQ OR FORCE. C IF(BARTEL)GOTO 50 C C CALCULATION IS IN FORCE C GOTO 90 ENDIF CALL COMPFG( XPARAM, .TRUE., ESCF, .TRUE., GRAD, .FALSE.) IF(PRNT)WRITE(6,'(//10X,''HEAT OF FORMATION ='',F12.6, 1'' KCALS/MOLE'')')ESCF TIME2=SECOND() TSCF=TIME2-TIME1 CALL COMPFG( XPARAM, .TRUE., ESCF1, .FALSE., GRAD, .TRUE.) TIME3=SECOND() TDER=TIME3-TIME2 IF(PRNT)WRITE(6,'(//10X,''INTERNAL COORDINATE DERIVATIVES'',//3X, 1''NUMBER ATOM'',2X,''BOND'',9X,'' ANGLE'',10X,''DIHEDRAL'',/)') L=0 IU=0 DO 40 I=1,NATOMS IF(LABELS(I).EQ.99) GOTO 40 L=L+1 IL=IU+1 IF(I .EQ. 1) IU=IL-1 IF(I .EQ. 2) IU=IL IF(I .EQ. 3) IU=IL+1 IF(I .GT. 3) IU=IL+2 IF(LABELS(I).EQ.107)IU=IL IF(PRNT)WRITE(6,'(I6,4X,A2,F13.6,2F13.6)') 1L,ELEMNT(LABELS(I)),(GRAD(J),J=IL,IU) 40 CONTINUE C TEST SUM OF GRADIENTS GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) IF(PRNT)WRITE(6,'(//10X,''GRADIENT NORM ='',F10.5)') GNORM IF(GNORM.LT.10.D0) GOTO 70 IF(INDEX(KEYWRD,' LET ') .NE. 0) THEN WRITE(6,'(///1X,''** GRADIENT IS VERY LARGE, BUT SINCE "LET"'', 1'' IS USED, CALCULATION WILL CONTINUE'')') GOTO 90 ENDIF WRITE(6,'(///1X,''** GRADIENT IS TOO LARGE TO ALLOW '', 1 ''FORCE MATRIX TO BE CALCULATED, (LIMIT=10) **'',//)') 50 CONTINUE DO 60 I=1,NVAR 60 SIMBOL(I)='---' WRITE(6,'(//10X,'' GEOMETRY WILL BE OPTIMIZED FIRST'')') IF(BARTEL) THEN WRITE(6,'(15X,''USING NLLSQ'')') CALL NLLSQ(XPARAM,NVAR) ELSE WRITE(6,'(15X,''USING FLEPO'')') CALL FLEPO(XPARAM,NVAR,ESCF) C C DID FLEPO USE ALL THE TIME ALLOWED? C IF(IFLEPO.EQ.-1) RETURN ENDIF LIMSCF=.FALSE. CALL COMPFG( XPARAM, .TRUE., ESCF, .TRUE., GRAD, .TRUE.) CALL WRITMO(TIME1,ESCF) WRITE(6,'(//10X,''GRADIENT NORM ='',F10.7)') GNORM CALL GMETRY(GEO,COORD) 70 CONTINUE DO 80 J=1,NATOMS NAR(J)=NA(J) NBR(J)=NB(J) NCR(J)=NC(J) DO 80 I=1,3 80 GEOREF(I,J)=GEO(I,J) C C NOW TO CALCULATE THE FORCE MATRIX C C CHECK OUT SYMMETRY 90 CONTINUE C C NEED TO ENSURE THAT XYZINT WILL WORK CORRECTLY BEFORE CALL C TO DRC. C L=0 DO 100 I=1,NATOMS IF(LABELS(I).NE.99)THEN L=L+1 LABELS(L)=LABELS(I) ENDIF 100 CONTINUE NATOMS=NUMAT CALL XYZINT(COORD,NUMAT,NA,NB,NC,1.D0,GEO) CALL GMETRY(GEO,COORD) IF(INDEX(KEYWRD,'THERMO').NE.0 .AND.GNORM.GT.1.D0) THEN WRITE(6,'(//30X,''**** WARNING ****'',// 110X,'' GRADIENT IS VERY LARGE FOR A THERMO CALCULATION'',/ 210X,'' RESULTS ARE LIKELY TO BE INACCURATE IF THERE ARE'')') WRITE(6,'(10X,'' ANY LOW-LYING VIBRATIONS (LESS THAN ABOUT '' 1,''400CM-1)'')') WRITE(6,'(10X,'' GRADIENT NORM SHOULD BE LESS THAN ABOUT '', 1''0.2 FOR THERMO'',/10X,'' TO GIVE ACCURATE RESULTS'')') ENDIF IF(TSCF.GT.0.D0) THEN WRITE(6,'(//10X,''TIME FOR SCF CALCULATION ='',F8.2)')TSCF WRITE(6,'(//10X,''TIME FOR DERIVATIVES ='',F8.2)')TDER ENDIF IF(NDEP.GT.0) THEN WRITE(6,'(//10X,''SYMMETRY WAS SPECIFIED, BUT '', 1''CANNOT BE USED HERE'')') NDEP=0 ENDIF IF(PRNT)CALL AXIS(COORD,NUMAT,A,B,C,WTMOL,2,ROT) NVIB=3*NUMAT-6 IF(ABS(C).LT.1.D-20)NVIB=NVIB+1 IF(ID.NE.0)NVIB=3*NUMAT-3 IF(PRNT) THEN WRITE(6,'(/9X,''ORIENTATION OF MOLECULE IN FORCE CALCULATION'') 1') WRITE(6,'(/,4X,''NO.'',7X,''ATOM'',9X,''X'', 19X,''Y'',9X,''Z'',/)') ENDIF L=0 DO 110 I=1,NATOMS IF(LABELS(I) .EQ. 99) GOTO 110 L=L+1 IF(PRNT)WRITE(6,'(I6,7X,I3,4X,3F10.4)') 1 L,LABELS(I),(COORD(J,L),J=1,3) 110 CONTINUE CALL FMAT(FMATRX, NVIB, TSCF, TDER, DELDIP,ESCF) NA(1)=0 DO 120 J=1,NATOMS NA(J)=NAR(J) NB(J)=NBR(J) NC(J)=NCR(J) DO 120 I=1,3 120 GEO(I,J)=GEOREF(I,J) IF(NVIB.LT.0)THEN NDEP=NDEOLD NVAR=0 RETURN ENDIF C C THE FORCE MATRIX IS PRINTED AS AN ATOM-ATOM MATRIX RATHER THAN C AS A 3N*3N MATRIX, AS THE 3N MATRIX IS VERY CONFUSING! C IJ=0 IU=0 DO 150 I=1,NUMAT IL=IU+1 IU=IL+2 IM1=I-1 JU=0 DO 140 J=1,IM1 JL=JU+1 JU=JL+2 SUM=0.D0 C$DOIT ASIS DO 130 II=IL,IU C$DOIT ASIS DO 130 JJ=JL,JU 130 SUM=SUM+FMATRX((II*(II-1))/2+JJ)**2 IJ=IJ+1 140 STORE(IJ)=SQRT(SUM) IJ=IJ+1 150 STORE(IJ)=SQRT( 1FMATRX(((IL+0)*(IL+1))/2)**2+ 2FMATRX(((IL+1)*(IL+2))/2)**2+ 3FMATRX(((IL+2)*(IL+3))/2)**2+2.D0*( 4FMATRX(((IL+1)*(IL+2))/2-1)**2+ 5FMATRX(((IL+2)*(IL+3))/2-2)**2+ 6FMATRX(((IL+2)*(IL+3))/2-1)**2)) IF(DEBUG) THEN WRITE(6,'(//10X,'' FULL FORCE MATRIX, INVOKED BY "DFORCE"'')') I=-NVAR CALL VECPRT(FMATRX,I) ENDIF IF(PRNT)THEN WRITE(6,'(//10X,'' FORCE MATRIX IN MILLIDYNES/ANGSTROM'')') CALL VECPRT(STORE,NUMAT) ENDIF L=(NVAR*(NVAR+1))/2 DO 160 I=1,L 160 STORE(I)=FMATRX(I) IF(PRNT) CALL AXIS(COORD,NUMAT,A,B,C,SUM,0,ROT) IF(PRNT)WRITE(6,'(//10X,''HEAT OF FORMATION ='',F12.6, 1'' KCALS/MOLE'')')ESCF IF(LARGE)THEN CALL FRAME(STORE,NUMAT,0, SHIFT) CALL RSP(STORE,NVAR,NVAR,FREQ,CNORML) DO 170 I=NVIB+1,NVAR J=(FREQ(I)+50.D0)*0.01D0 170 FREQ(I)=FREQ(I)-J*100 IF(PRNT)THEN WRITE(6,'(//10X,''TRIVIAL VIBRATIONS, SHOULD BE ZERO'')') WRITE(6,'(/, F9.4,''=TX'',F9.4,''=TY'',F9.4,''=TZ'', 1 F9.4,''=RX'',F9.4,''=RY'',F9.4,''=RZ'')') 2(FREQ(I),I=NVIB+1,NVAR) WRITE(6,'(//10X,''FORCE CONSTANTS IN MILLIDYNES/ANGSTROM'' 1,'' (= 10**5 DYNES/CM)'',/)') WRITE(6,'(8F10.5)')(FREQ(I),I=1,NVIB) C CONVERT TO WEIGHTED FMAT WRITE(6,'(//10X,'' ASSOCIATED EIGENVECTORS'')') I=-NVAR CALL MATOUT(CNORML,FREQ,NVIB,I,NVAR) ENDIF ENDIF CALL FREQCY(FMATRX,FREQ,CNORML,REDMAS,TRAVEL,.TRUE.,DELDIP) C C CALCULATE ZERO POINT ENERGY C C C THESE CONSTANTS TAKEN FROM HANDBOOK OF CHEMISTRY AND PHYSICS 62ND ED. C N AVOGADRO'S NUMBER = 6.022045*10**23 C H PLANCK'S CONSTANT = 6.626176*10**(-34)JHZ C C SPEED OF LIGHT = 2.99792458*10**10 CM/SEC C CONST=0.5*N*H*C/(1000*4.184) CONST=1.4295718D-3 SUM=0.D0 DO 180 I=1,NVAR 180 SUM=SUM+FREQ(I) SUM=SUM*CONST IF(PRNT) 1WRITE(6,'(//10X,'' ZERO POINT ENERGY'' 2, F12.3,'' KILOCALORIES PER MOLE'')')SUM SUMM=0.D0 DO 230 I=1,NVAR SUM1=1.D-20 C$DOIT VBEST DO 190 J=1,NVAR 190 SUM1=SUM1+CNORML(J+(I-1)*NVAR)**2 SUM1=1.D0/SQRT(SUM1) C$DOIT ASIS DO 200 K=1,3 200 GRAD(K)=0.D0 C$DOIT ASIS DO 220 K=1,3 SUM=0.D0 C$DOIT VBEST DO 210 J=1,NVAR 210 SUM=SUM+CNORML(J+(I-1)*NVAR)*DELDIP(K,J) SUMM=SUMM+ABS(SUM) 220 TRDIP(K,I)=SUM*SUM1 DIPT(I)=SQRT(TRDIP(1,I)**2+TRDIP(2,I)**2+TRDIP(3,I)**2) 230 CONTINUE IF(PRNT)THEN WRITE(6,'(//3X,'' THE LAST'',I2,'' VIBRATIONS ARE THE'', 1'' TRANSLATION AND ROTATION MODES'')')NVAR-NVIB WRITE(6,'(3X,'' THE FIRST THREE OF THESE BEING TRANSLATIONS'', 1'' IN X, Y, AND Z, RESPECTIVELY'')') ENDIF IF(PRNT.AND.LARGE)THEN WRITE(6,'(//10X,'' FREQUENCIES, REDUCED MASSES AND '', 1''VIBRATIONAL DIPOLES''/)') NTO6=NVAR/6 NREM6=NVAR-NTO6*6 IINC1=-5 IF (NTO6.LT.1) GO TO 250 DO 240 I=1,NTO6 WRITE (6,'(/)') IINC1=IINC1+6 IINC2=IINC1+5 WRITE (6,'(3X,''I'',10I10)') (J,J=IINC1,IINC2) WRITE (6,'('' FREQ(I)'',6F10.4,/)') (FREQ(J),J=IINC1,IINC2) WRITE (6,'('' MASS(I)'',6F10.5,/)') (REDMAS(J),J=IINC1,IINC2 1) WRITE (6,'('' DIPX(I)'',6F10.5)') (TRDIP(1,J),J=IINC1,IINC2) WRITE (6,'('' DIPY(I)'',6F10.5)') (TRDIP(2,J),J=IINC1,IINC2) WRITE (6,'('' DIPZ(I)'',6F10.5,/)') (TRDIP(3,J),J=IINC1,IINC 12) WRITE (6,'('' DIPT(I)'',6F10.5)') 1 (DIPT(J),J=IINC1,IINC2) 240 CONTINUE 250 CONTINUE IF (NREM6.LT.1) GO TO 260 WRITE (6,'(/)') IINC1=IINC1+6 IINC2=IINC1+(NREM6-1) WRITE (6,'(3X,''I'',10I10)') (J,J=IINC1,IINC2) WRITE (6,'('' FREQ(I)'',6F10.4)') (FREQ(J),J=IINC1,IINC2) WRITE (6,'(/,'' MASS(I)'',6F10.5)') (REDMAS(J),J=IINC1,IINC2) WRITE (6,'(/,'' DIPX(I)'',6F10.5)') (TRDIP(1,J),J=IINC1,IINC2) WRITE (6,'('' DIPY(I)'',6F10.5)') (TRDIP(2,J),J=IINC1,IINC2) WRITE (6,'('' DIPZ(I)'',6F10.5)') (TRDIP(3,J),J=IINC1,IINC2) WRITE (6,'(/,'' DIPT(I)'',6F10.5)') 1 (DIPT(J),J=IINC1,IINC2) 260 CONTINUE ENDIF IF(PRNT)THEN WRITE(6,'(//10X,'' NORMAL COORDINATE ANALYSIS'')') I=-NVAR CALL MATOUT(CNORML,FREQ,NVAR,I,NVAR) ENDIF C C CARRY OUT IRC IF REQUESTED. C IF(INDEX(KEYWRD,'IRC')+INDEX(KEYWRD,'DRC').eq.677)THEN DO 270 I=1,NVAR LOC(1,I)=0 270 LOC(2,I)=0 NVAR=NVAOLD DO 280 I=1,NVAR LOC(1,I)=LOCOLD(1,I) 280 LOC(2,I)=LOCOLD(2,I) CALL XYZINT(COORD,NUMAT,NA,NB,NC,1.D0,GEO) LAST=1 CALL DRC(CNORML,FREQ) NA(1)=0 NDEP=NDEOLD NVAR=0 DO 290 I=1,3 DO 290 J=1,NATOMS 290 GEO(I,J)=GEOREF(I,J) RETURN ENDIF CALL FREQCY(FMATRX,FREQ,CNORML,DELDIP,DELDIP,.FALSE.,DELDIP) WRITE(6,'(//10X,'' MASS-WEIGHTED COORDINATE ANALYSIS'')') I=-NVAR CALL MATOUT(CNORML,FREQ,NVAR,I,NVAR) CALL ANAVIB(COORD,FREQ,DIPT,NVAR,CNORML,STORE, 1FMATRX,TRAVEL,REDMAS) IF(INDEX(KEYWRD,'THERMO').NE.0) THEN CALL GMETRY(GEO,COORD) I=INDEX(KEYWRD,' ROT') IF(I.NE.0) THEN SYM=READA(KEYWRD,I) ELSE SYM=1 ENDIF LINEAR=(ABS(A*B*C) .LT. 1.D-10) I=INDEX(KEYWRD,' TRANS') C C "I" IS GOING TO MARK THE BEGINNING OF THE GENUINE VIBRATIONS. C IF(I.NE.0)THEN I=INDEX(KEYWRD,' TRANS=') IF(I.NE.0)THEN I=1+READA(KEYWRD,I) J=NVIB-I+1 WRITE(6,'(//1X,''THE LOWEST'',I3,'' VIBRATIONS ARE NOT'', 1/,'' TO BE USED IN THE THERMO CALCULATION'')')I-1 ELSE WRITE(6,'(//10X,''SYSTEM IS A TRANSITION STATE'')') I=2 J=NVIB-1 ENDIF ELSE WRITE(6,'(//10X,''SYSTEM IS A GROUND STATE'')') I=1 J=NVIB ENDIF CALL THERMO(A,B,C,LINEAR,SYM,WTMOL,FREQ(I),J,ESCF) ENDIF NA(1)=0 NVAR=0 NDEP=NDEOLD DO 300 I=1,3 DO 300 J=1,NATOMS 300 GEO(I,J)=GEOREF(I,J) RETURN END mopac7-1.15/fortran/dernvo.f0000644000175000017500000002167511053302064012673 00000000000000 SUBROUTINE DERNVO(COORD,DXYZ) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COORD(3,*), DXYZ(*) *********************************************************************** * * IMPLEMENTATION OF ANALYTICAL FORMULATION FOR OPEN SHELL OR CI, * VARIABLES FINITE DIFFERENCE METHODS, * STATISTICAL ESTIMATE OF THE ERRORS, * BY D. LIOTARD * LABORATOIRE DE CHIMIE STRUCTURALE * UNIVERSITE DE PAU ET DES PAYS DE L'ADOUR * AVENUE DE L'UNIVERSITE, 64000, PAU (FRANCE) * * * MODIFIED BY JJPS TO CONFORM TO MOPAC CONVENTIONS * (NOTE BY JJPS: PROF. LIOTARD'S TECHNIQUE WORKS. IF THIS * IMPLEMENTATION DOES NOT WORK, THE REASON IS A FAULT INTRODUCED * BY JJPS, AND DOES NOT REFLECT ON PROF. LIOTARD'S ABILITY) * * * AS THE WAVE FUNCTION IS NOT VARIATIONALLY OPTIMIZED, I.E. * HALF-ELECTRON OR CI, THE DERIVATIVES OF THE 1 AND 2-ELECTRON * INTEGRALS IN A.O. BASIS ARE EVALUATED IN CARTESIAN COORDINATES * BY A 1 OR 2 POINTS FINITE DIFFERENCE FORMULA AND STORED. * THUS ONE GETS THE NON-RELAXED (I.E. FROZEN ELECTRONIC CLOUD) * CONTRIBUTION TO THE FOCK EIGENVALUES AND 2-ELECTRON INTEGRALS IN * AN M.O. BASIS. THE NON-RELAXED GRADIENT COMES FROM THE * NON-RELAXED C.I. MATRIX DERIVATIVE (SUBROUTINE DERI1). * THE DERIVATIVES OF THE M.O. COEFFICIENTS ARE THEN WORKED OUT * ITERATIVELY (OK FOR BOTH CLOSED SHELLS AND HALF-ELECTRON CASES) * AND STORED. THUS ONE GETS THE ELECTRONIC RELAXATION CONTRIBUTION TO * THE FOCK EIGENVALUES AND 2-ELECTRON INTEGRALS IN M.O. BASIS. * FINALLY THE RELAXATION CONTRIBUTION TO THE C.I. MATRIX DERIVATIVE * GIVES THE RELAXATION CONTRIBUTION TO THE GRADIENT (ROUTINE DERI2). * * * COORD HOLDS THE CARTESIAN COORDINATES. * INPUT * DXYZ NOT DEFINED. * EXIT * DXYZ DERIVATIVES OF ENERGY W.R.T CARTESIAN COORDINATES, * IN KCAL/MOL/ANGSTROM (3 * NUMAT OF THESE) * *********************************************************************** C C NW2 and NW3 should be set to *something*, probably sizes of WORK2 C and WORK3 arrays? Since the code works with NW2 and NW3 set to zero C by implicit initialization, we can as well do it explicitly.... -P.S. C PARAMETER (NW2=0,NW3=0) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM) 1 ,NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA 2 ,NCLOSE,NOPEN,NDUMY,FRACT COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /CIBITS/ NMOS,LAB,NELEC,NBO(3) COMMON /NUMCAL/ NUMCAL 1 /KEYWRD/ KEYWRD 2 /VECTOR/ C(MORB2),EIGS(MAXORB),CBETA(MORB2) 3,EIGB(MAXORB) COMMON /FOKMAT/ FDUMY(MPACK), SCALAR(MPACK) COMMON /NVOMAT/ DIAG(MPACK/2) COMMON /WORK1 / FMOOFF(NPULAY*4), FMOON(NPULAY*4), 1WORK2(9*NPULAY), WORK3(4*NPULAY) DIMENSION FBWO(5*MAXPAR) CHARACTER KEYWRD*241, BLANK*60 DIMENSION DXYZR(MAXPAR), EIGBB(6*MAXPAR) LOGICAL DEBUG, DCAR, LARGE, RELAXD, FORCE DATA ICALCN /0/ C C SELECT THE REQUIRED OPTION AND READ KEYWORDS C -------------------------------------------- C IF(ICALCN.NE.NUMCAL) THEN THROLD=0.08D0 DEBUG = (INDEX(KEYWRD,'DERNVO') .NE. 0) LARGE = (INDEX(KEYWRD,'LARGE') .NE. 0) FORCE = (INDEX(KEYWRD,'FORC') .NE. 0) DCAR = (INDEX(KEYWRD,'FORC') + INDEX(KEYWRD,'PREC') .NE. 0) IF(DCAR)THROLD=0.004D0 DO 11 I=1,NVAX 11 DXYZR(I)=0.D0 C ACTUAL SIZES FOR C.I. GRADIENT CALCULATION. NBO(1)=NCLOSE NBO(2)=NOPEN-NCLOSE NBO(3)=NORBS-NOPEN MINEAR=NBO(2)*NBO(1)+NBO(3)*NOPEN NINEAR=(NMOS*(NMOS+1))/2+1 ICALCN = NUMCAL ENDIF C SCALING ROW FACTORS TO SPEED CV OF RELAXATION PROCEDURE. C# CALL TIMER('BEFORE DERI0') CALL DERI0 (EIGS,NORBS,SCALAR,DIAG,FRACT,NBO) C# CALL TIMER('AFTER DERI0') NVAX=3*NUMAT C C BECAUSE DERI2 IS CPU INTENSIVE, AND THE CONTRIBUTION TO THE C DERVIATIVE DUE TO RELAXATION OF THE ELECTRON CLOUD IS RELATIVELY C INSENSITIVE TO CHANGES IN GEOMETRY, WHERE POSSIBLE ONLY CALCULATE C THE DERIVATIVE EVERY 2 CALLS TO DERNVO C SUM=0.D0 IF(DCAR)THEN DO 10 I=1,NVAX 10 DXYZR(I)=0.D0 RELAXD=.FALSE. ENDIF DO 20 I=1,NVAX 20 SUM=SUM+ABS(DXYZR(I)) RELAXD=(SUM.GT.1.D-7) C C IF DXYZR CONTAINS DATA, USE IT AND FLUSH AFTER USE. C ILAST=0 30 IFIRST=ILAST+1 J=2 IF(MIN(NW2,NW3)/MAX(MINEAR,NINEAR).LT.10)J=1 ILAST=MIN(NVAX,ILAST+J) J=1-MINEAR K=1-NINEAR DO 40 I=IFIRST,ILAST K=K+NINEAR J=J+MINEAR C C NON-RELAXED CONTRIBUTION (FROZEN ELECTRONIC CLOUD) IN DXYZ C AND NON-RELAXED FOCK MATRICES IN FMOOFF AND FMOON. C CONTENTS OF F-MO-OFF: OPEN-CLOSED, VIRTUAL-CLOSED, AND VIRTUAL-OPEN C CONTENTS OF F-MO-ON: CLOSED-CLOSED, OPEN-OPEN AND VIRTUAL-VIRTUAL C OVER M.O. INDICES C C# CALL TIMER('BEFORE DERI1') CALL DERI1(C,NORBS,COORD,I,CBETA,DXYZ(I),FMOOFF(J),MINEAR 1 ,FMOON(K),WORK2,WORK2(6*MPACK),WORK3) C# CALL TIMER('AFTER DERI1') 40 CONTINUE IF(DEBUG)THEN IF(IFIRST.EQ.1.AND.LARGE)THEN WRITE(6,*)' CONTENTS OF FMOOFF ' WRITE(6,*)' OPEN-CLOSED' WRITE(6,'(7X,I3,5I12)')(J,J=NCLOSE+1,NOPEN) DO 50 I=1,NCLOSE 50 WRITE(6,'(I3,6F12.6)')I,(FMOOFF(J),J=(I-1)*NBO(2)+1,I*NBO(2) 1) C C WRITE(6,*)' VIRTUAL-CLOSED' K=NCLOSE*NBO(2) WRITE(6,'(7X,I3,5I12)')(J,J=NOPEN+1,MIN(NOPEN+6,NORBS)) DO 60 I=1,NCLOSE 60 WRITE(6,'(I3,6F12.6)')I, 1 (FMOOFF(J+K),J=(I-1)*NBO(3)+1,MIN(6+(I-1)*NBO(3),I*NBO(3))) K=NCLOSE*NBO(2)+NBO(3)*NCLOSE C C WRITE(6,*)' VIRTUAL-OPEN' WRITE(6,'(7X,I3,4I12)')(J,J=NCLOSE+1,NOPEN) DO 70 I=1,MIN(6,NBO(3)) 70 WRITE(6,'(I3,6F12.6)')I+NOPEN, 1 (FMOOFF(J+K),J=(I-1)*NBO(2)+1,MIN((I-1)*NBO(2)+6,I*NBO(2))) WRITE(6,*)' CONTENTS OF FMOON (ACTIVE-SPACE -- ACTIVE SPACE) 1' K=(NMOS*(NMOS-1))/2 LL=1 BLANK=' ' DO 80 I=1,NMOS L=LL+NMOS-I-1 WRITE(6,'(A,5F12.6)')BLANK(:12*I),(FMOON(J),J=LL,L),FMOON 1(K+I) 80 LL=L+1 ENDIF ENDIF C COMPUTE THE ELECTRONIC RELAXATION CONTRIBUTION. C C DERNVO PROVIDES THE FOLLOWING SCRATCH AREAS TO DERI2: EIGB, WORK2, C WORK3, FBWO, CBETA. THESE ARE DIMENSIONED ON ENTRY TO DERI2 C WHICH IS WHY THEY ARE NOT DECLARED THERE. THEY ARE NOT USED C AT ALL IN DERNVO. C C# CALL TIMER('BEFORE DERI2') IF(.NOT.RELAXD) 1 CALL DERI2 (C,EIGS,NORBS,MINEAR,FMOOFF 2 ,FMOON,EIGBB, NINEAR,ILAST-IFIRST+1 3 ,CBETA,WORK2,NW2,DXYZR(IFIRST) 4 ,WORK3,NW3,FBWO,THROLD) C# CALL TIMER('AFTER DERI2') IF (ILAST.LT.NVAX) GO TO 30 IF(DEBUG)THEN SUMX=0.D0 SUMY=0.D0 SUMZ=0.D0 DO 90 I=1,NUMAT SUMX=SUMX+DXYZ(I*3-2) SUMY=SUMY+DXYZ(I*3-1) 90 SUMZ=SUMZ+DXYZ(I*3) WRITE(6,*)' CARTESIAN DERIVATIVES DUE TO FROZEN CORE' WRITE(6,'('' ATOM X Y Z'')') DO 100 I=1,NUMAT 100 WRITE(6,'(I4,3F12.7)')I,DXYZ(I*3-2),DXYZ(I*3-1),DXYZ(I*3) WRITE(6,'(/10X,''RESIDUAL ERROR'')') WRITE(6,'(4X,3F12.7)')SUMX,SUMY,SUMZ WRITE(6,*) SUMX=0.D0 SUMY=0.D0 SUMZ=0.D0 DO 110 I=1,NUMAT SUMX=SUMX+DXYZR(I*3-2) SUMY=SUMY+DXYZR(I*3-1) 110 SUMZ=SUMZ+DXYZR(I*3) WRITE(6,*)' CARTESIAN DERIVATIVES DUE TO RELAXING CORE' WRITE(6,'('' ATOM X Y Z'')') DO 120 I=1,NUMAT 120 WRITE(6,'(I4,3F12.7)')I,DXYZR(I*3-2),DXYZR(I*3-1),DXYZR(I*3) WRITE(6,'(/10X,''RESIDUAL ERROR'')') WRITE(6,'(4X,3F12.7)')SUMX,SUMY,SUMZ WRITE(6,*) ENDIF DO 130 I=1,NVAX 130 DXYZ(I)=DXYZ(I)+DXYZR(I) IF(RELAXD)THEN DO 140 I=1,NVAX 140 DXYZR(I)=0.D0 ENDIF SUMX=0.D0 SUMY=0.D0 SUMZ=0.D0 DO 150 I=1,NUMAT SUMX=SUMX+DXYZ(I*3-2) SUMY=SUMY+DXYZ(I*3-1) 150 SUMZ=SUMZ+DXYZ(I*3) SUM=MAX(1.D-10,ABS(SUMX)+ABS(SUMY)+ABS(SUMZ)) C C HERE IS A ROUGH BUT SIMPLE METHOD FOR DEFINING THROLD FOR DERI2 C IT MAY NEED MORE WORK C IF(.NOT. FORCE .AND. GNORM .GT. 0.001D0) 1 THROLD=THROLD*SQRT(GNORM/(SUM*100.D0)) THROLD=MIN(2.D0,MAX(0.002D0,THROLD)) IF(DEBUG)THEN WRITE(6,*)'CARTESIAN DERIVATIVES FROM ANALYTICAL C.I. CALCULATI 1ON' WRITE(6,'('' ATOM X Y Z'')') DO 160 I=1,NUMAT 160 WRITE(6,'(I4,3F12.7)')I,DXYZ(I*3-2),DXYZ(I*3-1),DXYZ(I*3) WRITE(6,'(/10X,''RESIDUAL ERROR'')') WRITE(6,'(4X,3F12.7)')SUMX,SUMY,SUMZ WRITE(6,*) ENDIF RETURN END mopac7-1.15/fortran/writmo.f0000644000175000017500000005453411053302063012716 00000000000000 SUBROUTINE WRITMO(TIME0,FUNCT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' CHARACTER KEYWRD*241 DOUBLE PRECISION MECI COMPLEX SEC, VEC COMMON /KEYWRD/ KEYWRD COMMON /ELEMTS/ ELEMNT(107) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /HMATRX/ H(MPACK) COMMON /FOKMAT/ F(MPACK), FB(MPACK) COMMON /VECTOR/ C(MORB2),EIGS(MAXORB),CBETA(MORB2),EIGB(MAXORB) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON / EULER/ TVEC(3,3), ID COMMON /RJKS / RJKAB(NMECI,NMECI), RJKAA(NMECI,NMECI) COMMON /ERRFN / ERRFN(MAXPAR), AICORR(MAXPAR) COMMON /WORK1 / FMAT2D(NPULAY*4), SEC(NPULAY*2), VEC(NPULAY*2), 1 ALBAND(NPULAY*13) COMMON /PATH / LATOM,LPARAM,REACT(200) COMMON /NUMCAL/ NUMCAL COMMON /NUMSCF/ NSCF COMMON /WMATRX/ WJ(N2ELEC), WK(N2ELEC) COMMON /ATHEAT/ ATHEAT PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDX(MXDIM),ISTA(2) COMMON /CORE / CORE(107) COMMON /LAST / LAST COMMON /SCRACH/ RXYZ(MPACK), XDUMY(MAXPAR**2-MPACK) COMMON /CIMATS/ ENGYCI(3),VECTCI(9),ECI(6) COMMON /MESAGE/ IFLEPO,IITER COMMON /ATMASS/ ATMASS(NUMATM) COMMON /ENUCLR/ ENUCLR COMMON /ELECT / ELECT COMMON /XYZGRA/ DXYZ(9*NUMATM) COMMON /GRADNT/ GRAD(MAXPAR), GNORM COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /GEOVAR/ NVAR, LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) C COSMO change LOGICAL ISEPS, USEPS, UPDA COMMON /ISEPS/ ISEPS, USEPS, UPDA C end of COSMO change ************************************************************************ * * WRITE PRINTS OUT MOST OF THE RESULTS. * IT SHOULD NOT ALTER ANY PARAMETERS, SO THAT IT CAN BE CALLED * AT ANY CONVENIENT TIME. * ************************************************************************ DIMENSION Q(MAXORB), Q2(MAXORB), COORD(3,NUMATM) 1,IEL1(107), NELEMT(107), IEL2(107) DIMENSION W(N2ELEC), DUMY(3) DIMENSION GCOORD(1) LOGICAL UHF, CI, SINGLT, TRIPLT, EXCITD, PRTGRA, STILL CHARACTER TYPE(3)*11, IDATE*24, CALCN(2)*5, GTYPE*13, GRTYPE*14, 1 FLEPO(16)*58, ITER(2)*58, NUMBRS(11)*1, GETNAM*80 CHARACTER*2 ELEMNT, IELEMT(20), CALTYP*7, NAMFIL*80, NAME*4 CHARACTER NAMO*4, ISTA*4 SAVE ICALCN, NUMBRS, CALCN, TYPE, FLEPO, ITER EQUIVALENCE (W,WJ) DOUBLE PRECISION WJ, WK DATA ICALCN/0/ DATA TYPE/'BOND ','ANGLE ','DIHEDRAL '/ DATA CALCN /' ','ALPHA'/ DATA NUMBRS /'0','1','2','3','4','5','6','7','8','9',' '/ DATA FLEPO(1),FLEPO(2),FLEPO(3)/ 1' 1SCF WAS SPECIFIED, SO BFGS WAS NOT USED ', 2' GRADIENTS WERE INITIALLY ACCEPTABLY SMALL ', 3' HERBERTS TEST WAS SATISFIED IN BFGS '/ DATA FLEPO(4),FLEPO(5),FLEPO(6)/ 1' THE LINE MINIMIZATION FAILED TWICE IN A ROW. TAKE CARE!', 2' BFGS FAILED DUE TO COUNTS EXCEEDED. TAKE CARE! ', 3' PETERS TEST WAS SATISFIED IN BFGS OPTIMIZATION '/ DATA FLEPO(7),FLEPO(8),FLEPO(9)/ 1' THIS MESSAGE SHOULD NEVER APPEAR, CONSULT A PROGRAMMER!! ', 2' GRADIENT TEST NOT PASSED, BUT FURTHER WORK NOT JUSTIFIED ', 3' A FAILURE HAS OCCURRED, TREAT RESULTS WITH CAUTION!! '/ DATA FLEPO(10),FLEPO(11),FLEPO(12)/ 1' GEOMETRY OPTIMIZED USING NLLSQ. GRADIENT NORM MINIMIZED ', 2' GEOMETRY OPTIMIZED USING POWSQ. GRADIENT NORM MINIMIZED ', 3' CYCLES EXCEEDED, GRADIENT NOT FULLY MINIMIZED IN NLLSQ '/ DATA FLEPO(13),FLEPO(14),FLEPO(15)/ 1' 1SCF RUN AFTER RESTART. GEOMETRY MIGHT NOT BE OPTIMIZED ', 2' HEAT OF FORMATION MINIMIZED IN ONE LINE SEARCH ', 3' GEOMETRY OPTIMISED USING EIGENVECTOR FOLLOWING (EF). '/ DATA FLEPO(16)/ 1' EF-OPTIMIZED GEOMETRY. NUMBER OF -VE ROOTS INCORRECT '/ DATA ITER/ 1' SCF FIELD WAS ACHIEVED ', 2' ++++----**** FAILED TO ACHIEVE SCF. ****----++++ '/ C C SUMMARY OF RESULTS (NOTE: THIS IS IN A SUBROUTINE SO IT C CAN BE USED BY THE PATH OPTION) IF(ICALCN.EQ.0)NAMFIL='**NULL**' IDATE=' ' IF(IFLEPO.EQ.0) IFLEPO=7 IUHF=MIN(INDEX(KEYWRD,' UHF'),1)+1 PRTGRA=(INDEX(KEYWRD,' GRAD').NE.0.AND.NVAR.GT.0) LINEAR=(NORBS*(NORBS+1))/2 SINGLT=(INDEX(KEYWRD,' SING') .NE. 0) TRIPLT=(INDEX(KEYWRD,' TRIP') .NE. 0) EXCITD=(INDEX(KEYWRD,' EXCI') .NE. 0) CI=(INDEX(KEYWRD,' C.I.') .NE. 0) IF(INDEX(KEYWRD,' MINDO') .NE. 0) THEN CALTYP='MINDO/3' ELSEIF(INDEX(KEYWRD,' AM1') .NE. 0) THEN CALTYP=' AM1 ' ELSEIF(INDEX(KEYWRD,' PM3') .NE. 0) THEN CALTYP=' PM3 ' ELSE CALTYP=' MNDO ' ENDIF UHF=(IUHF.EQ.2) CALL fdate(IDATE) DEGREE=57.29577951D0 IF(NA(1).EQ.99)THEN DEGREE=1.D0 TYPE(1)='CARTESIAN X' TYPE(2)='CARTESIAN Y' TYPE(3)='CARTESIAN Z' ENDIF GNORM=0.D0 IF(NVAR.NE.0)GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) WRITE(6,'(/,'' ----'',15(''-----''))') CALL WRTTXT(6) WRITE(6,'(//4X,A58)')FLEPO(IFLEPO) IITER=MAX(1,IITER) WRITE(6,'(4X,A58)')ITER(IITER) WRITE(6,'(//30X,A7,'' CALCULATION'')')CALTYP WRITE(6,'(55X,''VERSION '',F5.2)')VERSON WRITE(6,'(55X,A24)')IDATE IF(IITER.EQ.2)THEN C C RESULTS ARE MEANINGLESS. DON'T PRINT ANYTHING! C WRITE(6,'(//,'' FOR SOME REASON THE SCF CALCULATION FAILED.'',/ 1,'' THE RESULTS WOULD BE MEANINGLESS, SO WILL NOT BE PRINTED.'')') WRITE(6,'('' TRY TO FIND THE REASON FOR THE FAILURE BY USING '' 1,''"PL".'',/, 2'' CHECK YOUR GEOMETRY AND ALSO TRY USING SHIFT OR PULAY. '')') CALL GEOUT(1) STOP ENDIF WRITE(6,'(////10X,''FINAL HEAT OF FORMATION ='',F17.5,'' KCAL'' 1)')FUNCT IF(LATOM.EQ.0) WRITE(6,'(/)') WRITE(6,'( 10X,''TOTAL ENERGY ='',F17.5,'' EV'' 1)')ELECT+ENUCLR WRITE(6,'( 10X,''ELECTRONIC ENERGY ='',F17.5,'' EV'' 1)')ELECT WRITE(6,'( 10X,''CORE-CORE REPULSION ='',F17.5,'' EV'' 1)')ENUCLR C COSMO change IF (ISEPS) THEN CALL DIELEN(EDIE) IW = 6 WRITE(IW,'( 10X,''DIELECTRIC ENERGY ='',F17.5,'' EV'' 1 )')EDIE ENDIF C end of COSMO change IF(LATOM.EQ.0) WRITE(6,'(1X)') PRTGRA=(PRTGRA .OR. GNORM .GT. 2.D0) IF(PRTGRA) 1WRITE(6,'( 10X,''GRADIENT NORM ='',F17.5)')GNORM STILL=.TRUE. IF(LATOM.EQ.0) THEN IF(INDEX(KEYWRD,' AIDER').NE.0) GOTO 45 IF(INDEX(KEYWRD,'1SCF').NE.0.AND.INDEX(KEYWRD,'GRAD').EQ.0)GOTO 45 C C CHECK THAT THE CARTESIAN COORDINATE GRADIENT IS ALSO SMALL C IF(DOT(DXYZ,DXYZ,3*NUMAT).GT.MAX(16.D0,4*GNORM**2) 1.AND.GNORM.LT.2.D0.AND.NCLOSE.EQ.NOPEN.AND.ID.EQ.0) THEN WRITE(6,'(A)')' WARNING -- GEOMETRY IS NOT AT A STATIONAR 1Y POINT' STILL=.FALSE. ENDIF 45 CONTINUE ELSE C C WE NEED TO CALCULATE THE REACTION COORDINATE GRADIENT. C MVAR=NVAR LOC11=LOC(1,1) LOC21=LOC(2,1) NVAR=1 LOC(1,1)=LATOM LOC(2,1)=LPARAM XREACT=GEO(LPARAM,LATOM) CALL DERIV(GEO,GCOORD) NVAR=MVAR LOC(1,1)=LOC11 LOC(2,1)=LOC21 GRTYPE=' KCAL/ANGSTROM' IF(LPARAM.EQ.1)THEN WRITE(6,'( 10X,''FOR REACTION COORDINATE ='',F17.5 1 ,'' ANGSTROMS'')')XREACT ELSE IF(NA(1).NE.99)GRTYPE=' KCAL/RADIAN ' WRITE(6,'( 10X,''FOR REACTION COORDINATE ='',F17.5 1 ,'' DEGREES'')')XREACT*DEGREE ENDIF WRITE(6,'( 10X,''REACTION GRADIENT ='',F17.5,A14 1 )')GCOORD(1),GRTYPE ENDIF IF(NALPHA.GT.0)THEN EIONIS=-MAX(EIGS(NALPHA), EIGB(NBETA)) ELSEIF(NELECS.EQ.1)THEN EIONIS=-EIGS(1) ELSEIF(NELECS.GT.1) THEN EIONIS=-MAX(EIGS(NCLOSE), EIGS(NOPEN)) ELSE EIONIS=0.D0 ENDIF NOPN=NOPEN-NCLOSE C CORRECTION TO I.P. OF DOUBLETS IF(NOPN.EQ.1)THEN I=NCLOSE*NORBS+1 EIONIS=EIONIS+0.5D0*RJKAB(1,1) ENDIF IF(ABS(EIONIS).GT.1.D-5) 1WRITE(6,'( 10X,''IONIZATION POTENTIAL ='',F17.5)')EIONIS IF( UHF ) THEN WRITE(6,'( 10X,''NO. OF ALPHA ELECTRONS ='',I11)')NALPHA WRITE(6,'( 10X,''NO. OF BETA ELECTRONS ='',I11)')NBETA ELSE WRITE(6,'( 10X,''NO. OF FILLED LEVELS ='',I11)')NCLOSE IF(NOPN.NE.0) THEN WRITE(6,'( 10X,''AND NO. OF OPEN LEVELS ='',I11)')NOPN ENDIF ENDIF SUMW=0 DO 10 I=1,NUMAT 10 SUMW=SUMW+ATMASS(I) IF(SUMW.GT.0.1D0) 1WRITE(6,'( 10X,''MOLECULAR WEIGHT ='',F11.3)')SUMW IF(LATOM.EQ.0) WRITE(6,'(/)') WRITE(6,'(10X,''SCF CALCULATIONS = '',I14 )') NSCF TIM=SECOND()-TIME0 I=TIM*0.000001D0 TIM=TIM-I*1000000 CALL TIMOUT(6,TIM) IF( NDEP .NE. 0 )CALL SYMTRY DO 20 I=1,NVAR 20 XPARAM(I)=GEO(LOC(2,I),LOC(1,I)) CALL GMETRY(GEO,COORD) IF(PRTGRA)THEN WRITE(6,'(///7X,''FINAL POINT AND DERIVATIVES'',/)') WRITE(6,'('' PARAMETER ATOM TYPE '' 1 ,'' VALUE GRADIENT'')') ENDIF SUM=0.5D0 DO 30 I=1,NUMAT 30 SUM=SUM+CORE(NAT(I)) I=SUM KCHRGE=I-NCLOSE-NOPEN-NALPHA-NBETA C C WRITE OUT THE GEOMETRIC VARIABLES C IF(PRTGRA) THEN DO 40 I=1,NVAR J=LOC(2,I) K=LOC(1,I) L=LABELS(K) XI=XPARAM(I) IF(J.NE.1) XI=XI*DEGREE IF(J.EQ.1.OR.NA(1).EQ.99)THEN GTYPE='KCAL/ANGSTROM' ELSE GTYPE='KCAL/RADIAN ' ENDIF 40 WRITE(6,'(I7,I11,1X,A2,4X,A11,F13.6,F13.6,2X,A13)') 1I,K,ELEMNT(L),TYPE(J),XI,GRAD(I),GTYPE ENDIF C C WRITE OUT THE GEOMETRY C WRITE(6,'(///)') CALL GEOUT(1) IF (INDEX(KEYWRD,' NOINTER') .EQ. 0) THEN C C WRITE OUT THE INTERATOMIC DISTANCES C L=0 DO 50 I=1,NUMAT DO 50 J=1,I L=L+1 50 RXYZ(L)=SQRT((COORD(1,I)-COORD(1,J))**2+ 1 (COORD(2,I)-COORD(2,J))**2+ 2 (COORD(3,I)-COORD(3,J))**2) WRITE(6,'(//10X,'' INTERATOMIC DISTANCES'')') CALL VECPRT(RXYZ,NUMAT) ENDIF DO 60 I=1,NORBS 60 IF(EIGS(I).LT.-999.D0.OR.EIGS(I).GT.1000.D0)EIGS(I)=0.D0 DO 70 I=1,NORBS 70 IF(EIGB(I).LT.-999.D0.OR.EIGB(I).GT.1000.D0)EIGS(I)=0.D0 IF(ISYBYL.EQ.1) THEN C C THE FOLLOWING OPEN STATEMENTS ARE NON-STANDARD. IF THIS CAUSES C DIFFICULTY REPLACE THEM WITH OPEN(UNIT=16,FILE=GETNAM('FOR016'),STATUS='NEW',ERR=31) GOTO 32 31 OPEN(UNIT=16,FILE=GETNAM('FOR016'),STATUS='OLD') WRITE(6,'(A)') 'Error opening SYBYL MOPAC output' 32 CONTINUE C# OPEN(UNIT=16,FILE=GETNAM('FOR016'),CARRIAGECONTROL='LIST', C# +STATUS='NEW',ERR=31) C# GOTO 32 C# 31 OPEN(UNIT=16,FILE=GETNAM('FOR016'),CARRIAGECONTROL='LIST', C# +STATUS='OLD') C# WRITE(6,'(A)') 'Error opening SYBYL MOPAC output' C# 32 CONTINUE ENDIF IF(NORBS.GT.0)THEN CALL SYMTRZ(COORD,C,NORBS,NORBS,.FALSE.,.TRUE.) WRITE(6,'(//'' MOLECULAR POINT GROUP : '',A4)')NAME IF (INDEX(KEYWRD,'VECT') .NE. 0) THEN WRITE(6,'(//10X,A5,'' EIGENVECTORS '')')CALCN(IUHF) CALL MATOU1 (C,EIGS,NORBS,NORBS,MAXORB,2) IF(UHF) THEN WRITE(6,'(//10X,'' BETA EIGENVECTORS '')') CALL MATOU1 (CBETA,EIGB,NORBS,NORBS,MAXORB,2) ENDIF ELSE WRITE(6,'(//10X,A5,'' EIGENVALUES'',/)')CALCN(IUHF) WRITE(6,'(8F10.5)')(EIGS(I),I=1,NORBS) IF(UHF) THEN WRITE(6,'(//10X,'' BETA EIGENVALUES '')') WRITE(6,'(8F10.5)')(EIGB(I),I=1,NORBS) ENDIF ENDIF ENDIF WRITE(6,'(//13X,'' NET ATOMIC CHARGES AND DIPOLE '', 1''CONTRIBUTIONS'',/)') WRITE(6,'(8X,'' ATOM NO. TYPE CHARGE ATOM'' 1,'' ELECTRON DENSITY'')') CALL CHRGE(P,Q) DO 80 I=1,NUMAT L=NAT(I) Q2(I)=CORE(L) - Q(I) 80 WRITE(6,'(I12,9X,A2,4X,F13.4,F16.4)') 1I,ELEMNT(L),Q2(I),Q(I) DIP= DIPOLE(P,Q2,COORD,DUMY,1) IF (INDEX(KEYWRD,' NOXYZ') .EQ. 0) THEN WRITE(6,'(//10X,''CARTESIAN COORDINATES '',/)') WRITE(6,'(4X,''NO.'',7X,''ATOM'',15X,''X'', 1 9X,''Y'',9X,''Z'',/)') WRITE(6,'(I6,8X,A2,14X,3F10.4)') 1 (I,ELEMNT(NAT(I)),(COORD(J,I),J=1,3),I=1,NUMAT) ENDIF IF(NORBS.GT.0) THEN IF (INDEX(KEYWRD,' K=') .NE. 0)THEN C C GO INTO BRILLOUIN ZONE MODE C I=INDEX(KEYWRD,' K=') STEP=READA(KEYWRD,I) MONO3=NLAST(NINT(READA(KEYWRD(I:),INDEX(KEYWRD(I:),',')))) IF(UHF)WRITE(6,'(A)')' ALPHA BANDS' CALL BRLZON(F, FMAT2D, NORBS, SEC, VEC, ALBAND,MONO3,STEP,2) IF(UHF)THEN WRITE(6,'(A)')' BETA BANDS' CALL BRLZON(FB, FMAT2D, NORBS, SEC, VEC, ALBAND,MONO3,STEP,2) ENDIF ENDIF IF(ISYBYL.EQ.1)THEN NFILLD=MAX(NCLOSE,NALPHA,NBETA) CALL MPCSYB(NUMAT,COORD,Q2,1,EIGS,NFILLD,FUNCT,EIONIS 1 ,KCHRGE,DIP) ENDIF IF (INDEX(KEYWRD,' FOCK') .NE. 0) THEN WRITE(6,'('' FOCK MATRIX IS '')') CALL VECPRT(F,NORBS) ENDIF IF (INDEX(KEYWRD,' DENS') .NE. 0) THEN WRITE(6,'(//,20X,'' DENSITY MATRIX IS '')') CALL VECPRT(P,NORBS) ELSE WRITE(6,'(//10X,''ATOMIC ORBITAL ELECTRON POPULATIONS'',/)') WRITE(6,'(8F10.5)')(P((I*(I+1))/2),I=1,NORBS) ENDIF IF(INDEX(KEYWRD,' PI') .NE. 0) THEN WRITE(6,'(//10X,''SIGMA-PI BOND-ORDER MATRIX'')') CALL DENROT ENDIF IF(UHF) THEN SZ=ABS(NALPHA-NBETA)*0.5D0 SS2=SZ*SZ L=0 DO 100 I=1,NORBS DO 90 J=1,I L=L+1 PA(L)=PA(L)-PB(L) 90 SS2=SS2+PA(L)**2 100 SS2=SS2-0.5D0*PA(L)**2 WRITE(6,'(//20X,''(SZ) ='',F10.6)')SZ WRITE(6,'( 20X,''(S**2) ='',F10.6)')SS2 IF(INDEX(KEYWRD,' SPIN') .NE. 0) THEN WRITE(6,'(//10X,''SPIN DENSITY MATRIX'')') CALL VECPRT(PA,NORBS) ELSE WRITE(6,'(//10X,''ATOMIC ORBITAL SPIN POPULATIONS'',/)') WRITE(6,'(8F10.5)')(PA((I*(I+1))/2),I=1,NORBS) ENDIF IF(INDEX(KEYWRD,' HYPERFINE') .NE. 0) THEN C C WORK OUT THE HYPERFINE COUPLING CONSTANTS. C WRITE(6,'(//10X,'' HYPERFINE COUPLING COEFFICIENTS'',/ 1)') J=(NALPHA-1)*NORBS DO 110 K=1,NUMAT I=NFIRST(K) C# WRITE(6,'('' PA:'',F13.6,'' C('',I2,''+'',I3,''):'', C# +F13.5)')PA((I*(I+1))/2),I,J,C(I+J) 110 Q(K)=PA((I*(I+1))/2)*0.3333333D0+C(I+J)**2*0.66666666D0 WRITE(6,'(5(2X,A2,I2,F9.5,1X))') 1 (ELEMNT(NAT(I)),I,Q(I),I=1,NUMAT) ENDIF DO 120 I=1,LINEAR 120 PA(I)=P(I)-PB(I) ENDIF IF (INDEX(KEYWRD,' BONDS') .NE. 0) THEN IF(NBETA.EQ.0)THEN WRITE(6,'(/10X,''BONDING CONTRIBUTION OF EACH M.O.'',/)') CALL MOLVAL(C,P,NORBS,2.D0) ELSE WRITE(6,'(/10X,''BONDING CONTRIBUTION OF EACH ALPHA M.O.' 1',/)') CALL MOLVAL(C,P,NORBS,1.D0) WRITE(6,'(/10X,''BONDING CONTRIBUTION OF EACH BETA M.O.' 1',/)') CALL MOLVAL(C,P,NORBS,1.D0) ENDIF CALL BONDS(P) ENDIF I=NCLOSE+NALPHA IF (INDEX(KEYWRD,' LOCAL') .NE. 0) THEN CALL LOCAL(C,NORBS,I,EIGS) IF(NBETA.NE.0)THEN WRITE(6,'(//10X,'' LOCALIZED BETA MOLECULAR ORBITALS'')') CALL LOCAL(CBETA,NORBS,NBETA,EIGB) ENDIF ENDIF IF (INDEX(KEYWRD,' 1ELE') .NE. 0) THEN WRITE(6,'('' FINAL ONE-ELECTRON MATRIX '')') CALL VECPRT(H,NORBS) ENDIF IF(INDEX(KEYWRD,' ENPART') .NE. 0) 1CALL ENPART(UHF,H,PA,PB,P,Q,COORD) ENDIF DO 130 I=1,107 130 NELEMT(I)=0 DO 140 I=1,NUMAT IGO=NAT(I) IF (IGO.GT.107) GO TO 140 NELEMT(IGO)=NELEMT(IGO)+1 140 CONTINUE ICHFOR=0 IF (NELEMT(6).EQ.0) GO TO 150 ICHFOR=1 IELEMT(1)=ELEMNT(6) NZS=NELEMT(6) IF (NZS.LT.10) THEN IF (NZS.EQ.1) THEN IEL1(1)=11 ELSE IEL1(1)=NZS+1 ENDIF IEL2(1)=11 ELSE KFRST=NZS/10 KSEC=NZS-(10*KFRST) IEL1(1)=KFRST+1 IEL2(1)=KSEC+1 ENDIF 150 NELEMT(6)=0 DO 160 I=1,107 IF (NELEMT(I).EQ.0) GO TO 160 ICHFOR=ICHFOR+1 IELEMT(ICHFOR)=ELEMNT(I) NZS=NELEMT(I) IF (NZS.LT.10) THEN IF (NZS.EQ.1) THEN IEL1(ICHFOR)=11 ELSE IEL1(ICHFOR)=NZS+1 ENDIF IEL2(ICHFOR)=11 ELSE KFRST=NZS/10 KSEC=NZS-(10*KFRST) IEL1(ICHFOR)=KFRST+1 IEL2(ICHFOR)=KSEC+1 ENDIF 160 CONTINUE IF(INDEX(KEYWRD,' DENOUT') .NE. 0) THEN OPEN(UNIT=10,FILE=GETNAM('FOR010'), +STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 10 WRITE(10)(PA(I),I=1,LINEAR) IF(UHF)WRITE(10)(PB(I),I=1,LINEAR) CLOSE (10) ENDIF IF((CI.OR.NOPEN.NE.NCLOSE.AND.FRACT.NE.2.D0.AND.FRACT.NE.0.D0 1 .OR.INDEX(KEYWRD,' SIZE').NE.0) 2 .AND. INDEX(KEYWRD,' MECI')+INDEX(KEYWRD,' ESR').NE.0)THEN WRITE(6,'(//10X, 1''MULTI-ELECTRON CONFIGURATION INTERACTION CALCULATION'',//)') LAST=3 X=MECI(EIGS,C) ENDIF IF (INDEX(KEYWRD,' MULLIK') +INDEX(KEYWRD,' GRAPH') .NE. 0) THEN IF (INDEX(KEYWRD,' MULLIK') .NE. 0) 1 WRITE(6,'(/10X,'' MULLIKEN POPULATION ANALYSIS'')') DO 172 I=1,NORBS 172 Q(I) = P((I*(I+1))/2) CALL MULLIK(C,H,F,NORBS,P,RXYZ) 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 C C NOTE THAT THE DENSITY, H AND F MATRICES ARE CORRUPTED BY A C CALL TO MULLIK. IF(ISYBYL.EQ.1) THEN IF (INDEX(KEYWRD,'MULLIK').EQ.0) THEN CALL MPCPOP(C,0) ELSE CALL MPCPOP(C,1) ENDIF CLOSE(16) ENDIF IF(ICALCN.NE.NUMCAL)THEN IF(NAMFIL.EQ.'**NULL**') THEN NAMFIL=GETNAM('FOR012') INAM=ICHAR('a') JNAM=INAM JEND=INDEX(NAMFIL,' ') IEND=JEND+1 ENDIF 162 CLOSE (12) OPEN(UNIT=12,FILE=NAMFIL,STATUS='NEW',ERR=163) GOTO 164 163 NAMFIL(IEND:IEND)=CHAR(INAM) NAMFIL(JEND:JEND)=CHAR(JNAM) IF(INAM.EQ.ICHAR('z'))THEN INAM=INAM-26 JNAM=JNAM+1 ENDIF INAM=INAM+1 GOTO 162 164 REWIND 12 ICALCN=NUMCAL ENDIF IF(INDEX(KEYWRD,'GREENF') .NE. 0) CALL GREENF IWRITE=12 170 WRITE(IWRITE,'(//20X,'' SUMMARY OF '',A7, 1'' CALCULATION'',/)')CALTYP WRITE(IWRITE,'(60X,''VERSION '',F5.2)')VERSON WRITE (IWRITE,180) (IELEMT(I),NUMBRS(IEL1(I)),NUMBRS(IEL2(I)) 1,I=1,ICHFOR) 180 FORMAT (//,1X,17(A2,A1,A1)) WRITE(IWRITE,'(55X,A24)')IDATE CALL WRTTXT(IWRITE) WRITE(IWRITE,'(//4X,A58)')FLEPO(IFLEPO) WRITE(IWRITE,'(4X,A58)')ITER(IITER) WRITE(IWRITE,'(//10X,''HEAT OF FORMATION ='' 1,F17.6,'' KCAL'')')FUNCT WRITE(IWRITE,'( 10X,''ELECTRONIC ENERGY ='' 1,F17.6,'' EV'')')ELECT WRITE(IWRITE,'( 10X,''CORE-CORE REPULSION ='' 1,F17.6,'' EV'')')ENUCLR IF(PRTGRA) 1WRITE(IWRITE,'( 10X,''GRADIENT NORM ='' 2,F17.6)')GNORM IF(LATOM.EQ.0) THEN IF(.NOT.STILL) WRITE(IWRITE,'(A)') 1' WARNING -- GEOMETRY IS NOT AT A STATIONARY POINT' ELSE GRTYPE=' KCAL/ANGSTROM' IF(LPARAM.EQ.1)THEN WRITE(IWRITE,'( 10X,''FOR REACTION COORDINATE ='',F17.4 1 ,'' ANGSTROMS'')')XREACT ELSE IF(NA(1).NE.99)GRTYPE=' KCAL/RADIAN ' WRITE(IWRITE,'( 10X,''FOR REACTION COORDINATE ='',F17.4 1 ,'' DEGREES'')')XREACT*DEGREE ENDIF WRITE(IWRITE,'( 10X,''REACTION GRADIENT ='',F17.6,A14 1 )')GCOORD(1),GRTYPE ENDIF WRITE(IWRITE,'( 10X,''DIPOLE ='' 1,F16.5, '' DEBYE'')')DIP IF(UHF) THEN WRITE(IWRITE,'( 10X,''(SZ) ='',F17.6)')SZ WRITE(IWRITE,'( 10X,''(S**2) ='',F17.6)')SS2 WRITE(IWRITE,'( 10X,''NO. OF ALPHA ELECTRONS ='',I10)')NALPHA WRITE(IWRITE,'( 10X,''NO. OF BETA ELECTRONS ='',I10)')NBETA ELSE WRITE(IWRITE,'( 10X,''NO. OF FILLED LEVELS ='',I10)')NCLOSE NOPN=NOPEN-NCLOSE IF(NOPN.NE.0) 1WRITE(IWRITE,'( 10X,''AND NO. OF OPEN LEVELS ='',I10)')NOPN ENDIF IF(CI) 1WRITE(IWRITE,'( 10X,''CONFIGURATION INTERACTION WAS USED'')') IF(KCHRGE.NE.0) 1WRITE(IWRITE,'( 10X,''CHARGE ON SYSTEM ='',I10)')KCHRGE WRITE(IWRITE,'( 10X,''IONIZATION POTENTIAL ='' 1,F17.6,'' EV'')')EIONIS WRITE(IWRITE,'( 10X,''MOLECULAR WEIGHT ='',F14.3)')SUMW WRITE(IWRITE,'( 10X,''SCF CALCULATIONS ='' 1,I10)') NSCF TIM=SECOND()-TIME0 CALL TIMOUT(IWRITE,TIM) WRITE(IWRITE,'(//10X,''FINAL GEOMETRY OBTAINED'',36X,''CHARGE'')') CALL GEOUT(IWRITE) IF(INDEX(KEYWRD,' AIGOUT').NE.0)THEN WRITE(IWRITE,'(//,A)')' GEOMETRY IN GAUSSIAN Z-MATRIX STYLE' CALL WRTTXT(IWRITE) CALL GEOUTG(IWRITE) ENDIF IF(IWRITE.NE.11.AND.INDEX(KEYWRD,' NOLOG').EQ.0)THEN IWRITE=11 GOTO 170 ENDIF NSCF=0 RETURN END mopac7-1.15/fortran/getgeo.f0000644000175000017500000003053511053302063012642 00000000000000 SUBROUTINE GETGEO(IREAD,LABELS,GEO,LOPT,NA,NB,NC,AMS,NATOMS,INT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION GEO(3,*),NA(*),NB(*),NC(*),AMS(*), LOPT(3,*) 1,LABELS(*) LOGICAL INT ************************************************************************ * * GETGEO READS IN THE GEOMETRY. THE ELEMENT IS SPECIFIED BY IT'S * CHEMICAL SYMBOL, OR, OPTIONALLY, BY IT'S ATOMIC NUMBER. * * ON INPUT IREAD = CHANNEL NUMBER FOR READ, NORMALLY 5 * AMS = DEFAULT ATOMIC MASSES. * * ON OUTPUT LABELS = ATOMIC NUMBERS OF ALL ATOMS, INCLUDING DUMMIES. * GEO = INTERNAL COORDINATES, IN ANGSTROMS, AND DEGREES. * LOPT = INTEGER ARRAY, A '1' MEANS OPTIMIZE THIS PARAMETER, * '0' MEANS DO NOT OPTIMIZE, AND A '-1' LABELS THE * REACTION COORDINATE. * NA = INTEGER ARRAY OF ATOMS (SEE DATA INPUT) * NB = INTEGER ARRAY OF ATOMS (SEE DATA INPUT) * NC = INTEGER ARRAY OF ATOMS (SEE DATA INPUT) * ATMASS = ATOMIC MASSES OF ATOMS. ************************************************************************ COMMON /PATH / IDUM(2),REACT(3,66), DUMM1,DUMM2 COMMON /SIMBOL/ SIMBOL(MAXPAR) COMMON /ATMASS/ ATMASS(NUMATM) COMMON /ATOMTX/ LTXT, TXTATM(NUMATM) COMMON /KEYWRD/ KEYWRD DIMENSION ISTART(40), XYZ(3,NUMATM), VALUE(40) LOGICAL LEADSP, IRCDRC CHARACTER KEYWRD*241, TXTATM*8, SIMBOL*10, LTXT*1 CHARACTER ELEMNT(107)*2, LINE*80, SPACE*1, NINE*1,ZERO*1, 1TAB*1, COMMA*1, STRING*80, ELE*2, TURN*1 SAVE ELEMNT, COMMA, SPACE, NINE, ZERO DATA (ELEMNT(I),I=1,107)/'H','HE', 1 'LI','BE','B','C','N','O','F','NE', 2 'NA','MG','AL','SI','P','S','CL','AR', 3 'K','CA','SC','TI','V','CR','MN','FE','CO','NI','CU', 4 'ZN','GA','GE','AS','SE','BR','KR', 5 'RB','SR','Y','ZR','NB','MO','TC','RU','RH','PD','AG', 6 'CD','IN','SN','SB','TE','I','XE', 7 'CS','BA','LA','CE','PR','ND','PM','SM','EU','GD','TB','DY', 8 'HO','ER','TM','YB','LU','HF','TA','W','RE','OS','IR','PT', 9 'AU','HG','TL','PB','BI','PO','AT','RN', 1 'FR','RA','AC','TH','PA','U','NP','PU','AM','CM','BK','CF','XX', 2 'FM','MD','CB','++','+','--','-','TV'/ DATA COMMA,SPACE,NINE,ZERO/',',' ','9','0'/ TAB=CHAR(9) IRCDRC=(INDEX(KEYWRD,'IRC')+INDEX(KEYWRD,'DRC') .NE.0) ILOWA = ICHAR('a') ILOWZ = ICHAR('z') ICAPA = ICHAR('A') ICAPZ = ICHAR('Z') MAXTXT=0 NATOMS=0 NUMAT=0 ISERR=0 DO 10 I=1,MAXPAR 10 SIMBOL(I)= '---' 20 READ(IREAD,'(A)',END=130,ERR=230)LINE IF(LINE.EQ.' ') GO TO 130 NATOMS=NATOMS+1 C C SEE IF TEXT IS ASSOCIATED WITH THIS ELEMENT C I=INDEX(LINE,'(') IF(I.NE.0)THEN C C YES, ELEMENT IS LABELLED. C K=INDEX(LINE,')') TXTATM(NATOMS)=LINE(I:K) MAXTXT=MAX(MAXTXT,K-I+1) STRING=LINE(1:I-1)//LINE(K+1:) LINE=STRING ELSE TXTATM(NATOMS)=' ' ENDIF * CLEAN THE INPUT DATA ************************************************************************ DO 30 I=1,80 ILINE=ICHAR(LINE(I:I)) IF(ILINE.GE.ILOWA.AND.ILINE.LE.ILOWZ) THEN LINE(I:I)=CHAR(ILINE+ICAPA-ILOWA) ENDIF 30 CONTINUE ************************************************************************ ICOMMA=ICHAR(COMMA) ITAB=ICHAR(TAB) DO 40 I=1,80 KHAR=ICHAR(LINE(I:I)) IF(KHAR.EQ.ICOMMA.OR.KHAR.EQ.ITAB)LINE(I:I)=SPACE 40 CONTINUE * * INITIALIZE ISTART TO INTERPRET BLANKS AS ZERO'S DO 50 I=1,10 50 ISTART(I)=80 * * FIND INITIAL DIGIT OF ALL NUMBERS, CHECK FOR LEADING SPACES FOLLOWED * BY A CHARACTER AND STORE IN ISTART LEADSP=.TRUE. NVALUE=0 DO 60 I=1,80 IF (LEADSP.AND.LINE(I:I).NE.SPACE) THEN NVALUE=NVALUE+1 ISTART(NVALUE)=I END IF LEADSP=(LINE(I:I).EQ.SPACE) 60 CONTINUE * * ESTABLISH THE ELEMENT'S NAME AND ISOTOPE, CHECK FOR ERRORS OR E.O.DATA * WEIGHT=0.D0 STRING=LINE(ISTART(1):ISTART(2)-1) IF( STRING(1:1) .GE. ZERO .AND. STRING(1:1) .LE. NINE) THEN * ATOMIC NUMBER USED: NO ISOTOPE ALLOWED LABEL=READA(STRING,1) IF (LABEL.EQ.0) GO TO 120 IF (LABEL.LT.0.OR.LABEL.GT.107) THEN WRITE(6,'('' ILLEGAL ATOMIC NUMBER'')') GO TO 240 END IF GO TO 80 END IF * ATOMIC SYMBOL USED REAL=ABS(READA(STRING,1)) IF (REAL.LT.1.D-15) THEN * NO ISOTOPE ELE=STRING(1:2) ELSE WEIGHT=REAL IF( STRING(2:2) .GE. ZERO .AND. STRING(2:2) .LE. NINE) THEN ELE=STRING(1:1) ELSE ELE=STRING(1:2) END IF END IF * CHECK FOR ERROR IN ATOMIC SYMBOL IF(ELE(1:1).EQ.'-'.AND.ELE(2:2).NE.'-')ELE(2:2)=' ' DO 70 I=1,107 IF(ELE.EQ.ELEMNT(I)) THEN LABEL=I GO TO 80 END IF 70 CONTINUE IF(ELE(1:1).EQ.'X')THEN LABEL=99 GOTO 80 ENDIF WRITE(6,'('' UNRECOGNIZED ELEMENT NAME: ('',A,'')'')')ELE GOTO 240 * * ALL O.K. * 80 IF (LABEL.NE.99) NUMAT=NUMAT+1 IF(WEIGHT.NE.0.D0)THEN WRITE(6,'('' FOR ATOM'',I4,'' ISOTOPIC MASS:'' 1 ,F15.5)')NATOMS, WEIGHT ATMASS(NUMAT)=WEIGHT ELSE IF(LABEL .NE. 99) ATMASS(NUMAT)=AMS(LABEL) ENDIF IF(NATOMS.GT.NUMATM)THEN WRITE(6,'(//10X,''**** MAX. NUMBER OF ATOMS ALLOWED:'',I4)') 1NUMATM STOP ENDIF LABELS(NATOMS) =LABEL GEO(1,NATOMS) =READA(LINE,ISTART(2)) GEO(2,NATOMS) =READA(LINE,ISTART(4)) GEO(3,NATOMS) =READA(LINE,ISTART(6)) IF(IRCDRC)THEN TURN=LINE(ISTART(3):ISTART(3)) IF(TURN.EQ.'T')THEN LOPT(1,NATOMS)=1 IF(NATOMS.EQ.1)WRITE(6,'(A)')' IN DRC MONITOR POTENTIAL ENER 1GY'//' TURNING POINTS' ELSE LOPT(1,NATOMS)=0 ENDIF TURN=LINE(ISTART(5):ISTART(5)) IF(TURN.EQ.'T')THEN LOPT(2,NATOMS)=1 ELSE LOPT(2,NATOMS)=0 ENDIF TURN=LINE(ISTART(7):ISTART(7)) IF(TURN.EQ.'T')THEN LOPT(3,NATOMS)=1 ELSE LOPT(3,NATOMS)=0 ENDIF ELSE LOPT(1,NATOMS) =READA(LINE,ISTART(3)) LOPT(2,NATOMS) =READA(LINE,ISTART(5)) LOPT(3,NATOMS) =READA(LINE,ISTART(7)) DO 90 I=3,7,2 IF(ICHAR(LINE(ISTART(I):ISTART(I))).GE.ICAPA.AND. 1ICHAR(LINE(ISTART(I):ISTART(I))).LE.ICAPZ)ISERR=1 90 CONTINUE ENDIF NA(NATOMS) =READA(LINE,ISTART(8)) NB(NATOMS) =READA(LINE,ISTART(9)) NC(NATOMS) =READA(LINE,ISTART(10)) C C SPECIAL CASE OF USERS FORGETTING TO ADD DIHEDRAL DATA FOR ATOM 3 C IF(NATOMS.EQ.3)THEN IF(LOPT(3,3).EQ.2)THEN NA(3)=1 NB(3)=2 GEO(3,3)=0.D0 LOPT(3,3)=0 ELSEIF(LOPT(3,3).EQ.1.AND.ABS(GEO(3,3)-2.D0).LT.1.D-4)THEN NA(3)=2 NB(3)=1 GEO(3,3)=0.D0 LOPT(3,3)=0 ENDIF ENDIF IF(LOPT(1,NATOMS).GT.1.OR.LOPT(2,NATOMS).GT.1.OR. 1LOPT(3,NATOMS).GT.1)ISERR=1 IF(ISERR.EQ.1) THEN C C MUST BE GAUSSIAN GEOMETRY INPUT C DO 110 I=2,NATOMS DO 110 K=1,3 J=GEO(K,I)+0.4D0 IF(ABS(GEO(K,I)-J).GT.1.D-5)THEN C C GEOMETRY CANNOT BE GAUSSIAN C WRITE(6,'(A)')' GEOMETRY IS FAULTY. GEOMETRY READ IN 1IS' CONST=3.141592653598D0/180.D0 DO 100 L=1,NATOMS GEO(2,L)=GEO(2,L)*CONST 100 GEO(3,L)=GEO(3,L)*CONST CALL GEOUT(6) STOP ENDIF 110 CONTINUE NATOMS=-1 RETURN ENDIF GOTO 20 * * ALL DATA READ IN, CLEAN UP AND RETURN * 120 NATOMS=NATOMS-1 130 NA(2)=1 LTXT=CHAR(MAXTXT) IF(NATOMS.GT.3)THEN INT=(NA(4).NE.0) ELSE IF(GEO(2,3).LT.10.AND.NATOMS.EQ.3) 1WRITE(6,'(//10X,'' WARNING: INTERNAL COORDINATES ARE ASSUMED -'',/ 210X,'' FOR THREE-ATOM SYSTEMS '',//)') INT=.TRUE. ENDIF IF(INT)GEO(2,2)=0 C C READ IN VELOCITY VECTOR, IF PRESENT C IF(INDEX(KEYWRD,'VELO').GT.0)THEN IF(INT)THEN WRITE(6,'(A)')' COORDINATES MUST BE CARTESIAN WHEN VELOCITY' 1//' VECTOR IS USED.' STOP ENDIF C# WRITE(6,'(/10X,A)')'INITIAL VELOCITY VECTOR FOR DRC' DO 150 I=1,NATOMS READ(5,'(A)') LINE CALL NUCHAR(LINE,VALUE,NDMY) IF(NDMY.NE.3)THEN WRITE(6,'(/10X,A)') 1' THERE MUST BE EXACTLY THREE VELOCITY DATA PER LINE' STOP ENDIF DO 140 J=1,3 140 REACT(J,I+2)=VALUE(J) C# WRITE(6,'(2X,A2,2X,3F13.5)')ELEMNT(LABELS(I)),(VALUE(J),J=1,3) 150 CONTINUE DO 160 I=1,3 DO 160 J=1,2 160 REACT(I,J)=GEO(I,J+1)-GEO(I,1) C C NOW TO ROTATE VELOCITY VECTOR TO SUIT INTERNAL COORDINATE DEFINITION C C C ROTATE AROUND THE 1-2 X-AXIS TO AS TO ELIMINATE REACT(3,2) C (PUT ATOM 2 IN X-Y PLANE) SA=REACT(3,1)/SQRT(REACT(2,1)**2+REACT(3,1)**2+1.D-20) CA=SIGN(SQRT(1.D0-SA**2),REACT(2,1)) C# LABELS(NATOMS+1)=1 C# LABELS(NATOMS+2)=1 C# WRITE(6,*)' FIRST ROTATION, ABOUT 1-2 X-AXIS' DO 170 I=1,NATOMS+2 TEMP1= REACT(2,I)*CA+REACT(3,I)*SA TEMP2=-REACT(2,I)*SA+REACT(3,I)*CA REACT(2,I)=TEMP1 REACT(3,I)=TEMP2 C# WRITE(6,'(2X,A2,2X,3F13.5)')ELEMNT(LABELS(I)),(REACT(J,I),J=1,3) 170 CONTINUE C ROTATE AROUND THE 1-2 Z-AXIS TO AS TO ELIMINATE REACT(2,2) C (PUT ATOM 2 ON X AXIS) CA=REACT(1,1)/SQRT(REACT(2,1)**2+REACT(1,1)**2+1.D-20) SA=SIGN(SQRT(1.D0-CA**2),REACT(2,1)) C# WRITE(6,*)' SECOND ROTATION, ABOUT 1-2 Z-AXIS' DO 180 I=1,NATOMS+2 TEMP1= REACT(1,I)*CA+REACT(2,I)*SA TEMP2=-REACT(1,I)*SA+REACT(2,I)*CA REACT(1,I)=TEMP1 REACT(2,I)=TEMP2 C# WRITE(6,'(2X,A2,2X,3F13.5)')ELEMNT(LABELS(I)),(REACT(J,I),J=1,3) 180 CONTINUE C ROTATE AROUND THE 2-3 X-AXIS TO AS TO ELIMINATE REACT(3,3) C (PUT ATOM 3 ON X-Y PLANE) SA=REACT(3,2)/SQRT(REACT(2,2)**2+REACT(3,2)**2+1.D-20) CA=SIGN(SQRT(1.D0-SA**2),REACT(2,2)) C# WRITE(6,*)' THIRD ROTATION, ABOUT 2-3 X-AXIS' DO 190 I=1,NATOMS+2 TEMP1= REACT(2,I)*CA+REACT(3,I)*SA TEMP2=-REACT(2,I)*SA+REACT(3,I)*CA REACT(2,I)=TEMP1 REACT(3,I)=TEMP2 C# WRITE(6,'(2X,A2,2X,3F13.5)')ELEMNT(LABELS(I)),(REACT(J,I),J=1,3) 190 CONTINUE C C STRIP OFF FIRST TWO COORDINATES; THESE WERE THE COORDINATE AXIS C DEFINITIONS C DO 200 I=1,NATOMS DO 200 J=1,3 200 REACT(J,I)=REACT(J,I+2) ENDIF IF( .NOT. INT ) THEN DO 210 I=1,NATOMS DO 210 J=1,3 210 XYZ(J,I)=GEO(J,I) DEGREE=90.D0/ASIN(1.D0) CALL XYZINT(XYZ,NATOMS,NA,NB,NC,DEGREE,GEO) IF(INDEX(KEYWRD,' XYZ').EQ.0)THEN C C UNCONDITIONALLY SET FLAGS FOR INTERNAL COORDINATES C DO 220 I=1,3 DO 220 J=I,3 220 LOPT(J,I)=0 ENDIF IF(ABS(GEO(2,3)-180.D0).LT.1.D-4.OR.ABS(GEO(2,3)).LT.1.D-4) 1THEN WRITE(6,'(A)')' DUE TO PROGRAM BUG, THE FIRST THREE ATOMS MU 1ST NOT LIE IN A STRAIGHT LINE.' STOP ENDIF ELSEIF (.NOT.IRCDRC) THEN LOPT(2,2)=0 IF(LOPT(1,1)+LOPT(2,1)+LOPT(3,1)+LOPT(3,2)+ 1 LOPT(3,3) .GT. 0)THEN LOPT(1,1)=0 LOPT(2,1)=0 LOPT(3,1)=0 LOPT(3,2)=0 LOPT(3,3)=0 WRITE(6,'(//10X,'' AN UNOPTIMIZABLE GEOMETRIC PARAMETER HAS' 1',/10X,'' BEEN MARKED FOR OPTIMIZATION. THIS IS A NON-FATAL '' 2,''ERROR'')') ENDIF ENDIF IF(NA(3).EQ.0) THEN NB(3)=1 NA(3)=2 ENDIF RETURN * ERROR CONDITIONS 230 IF(IREAD.EQ.5) THEN WRITE(6,'( '' ERROR DURING READ AT ATOM NUMBER '', I3 )')NATOMS ELSE NATOMS=0 RETURN ENDIF 240 J=NATOMS-1 WRITE(6,'('' DATA CURRENTLY READ IN ARE '')') DO 250 K=1,J 250 WRITE(6,260)LABELS(K),(GEO(JJ,K),LOPT(JJ,K),JJ=1,3), 1NA(K),NB(K),NC(K) 260 FORMAT(I4,2X,3(F10.5,2X,I2,2X),3(I2,1X)) STOP END mopac7-1.15/fortran/flepo.f0000644000175000017500000006212211053302063012472 00000000000000 SUBROUTINE FLEPO (XPARAM,NVAR,FUNCT1) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XPARAM(*) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /KEYWRD/ KEYWRD COMMON /NUMSCF/ NSCF COMMON /LAST / LAST COMMON /GRAVEC/ COSINE COMMON /PATH / LATOM,LPARAM,REACT(200) COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /MESAGE/ IFLEPO,ISCF C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /FMATRX/ HESINV(MAXPAR**2+MAXPAR*3+1), IDUMY(4) COMMON /SCFTYP/ EMIN, LIMSCF COMMON /TIMDMP/ TLEFT, TDUMP COMMON /NUMCAL/ NUMCAL CHARACTER*241 KEYWRD C C C * C THIS SUBROUTINE ATTEMPTS TO MINIMIZE A REAL-VALUED FUNCTION OF C THE N-COMPONENT REAL VECTOR XPARAM ACCORDING TO THE C BFGS FORMULA. RELEVANT REFERENCES ARE C C BROYDEN, C.G., JOURNAL OF THE INSTITUTE FOR MATHEMATICS AND C APPLICATIONS, VOL. 6 PP 222-231, 1970. C FLETCHER, R., COMPUTER JOURNAL, VOL. 13, PP 317-322, 1970. C C GOLDFARB, D. MATHEMATICS OF COMPUTATION, VOL. 24, PP 23-26, 1970. C C SHANNO, D.F. MATHEMATICS OF COMPUTATION, VOL. 24, PP 647-656 C 1970. C C SEE ALSO SUMMARY IN C C HEAD, J.D.; AND ZERNER, M.C., CHEMICAL PHYSICS LETTERS, VOL. 122, C 264 (1985). C SHANNO, D.F., J. OF OPTIMIZATION THEORY AND APPLICATIONS C VOL.46, NO 1 PP 87-94 1985. C * C THE FUNCTION CAN ALSO BE MINIMIZED USING THE C DAVIDON-FLETCHER-POWELL ALGORITHM (COMPUTER JOURNAL, VOL. 6, C P. 163). C C THE USER MUST SUPPLY THE SUBROUTINE C COMPFG(XPARAM,.TRUE.,FUNCT,.TRUE.,GRAD,LGRAD) C WHICH COMPUTES FUNCTION VALUES FUNCT AT GIVEN VALUES FOR THE C VARIABLES XPARAM, AND THE GRADIENT GRAD IF LGRAD=.TRUE. C THE MINIMIZATION PROCEEDS BY A SEQUENCE OF ONE-DIMENSIONAL C MINIMIZATIONS. THESE ARE CARRIED OUT WITHOUT GRADIENT COMPUTATION C BY THE SUBROUTINE LINMIN, WHICH SOLVES THE SUBPROBLEM OF C MINIMIZING THE FUNCTION FUNCT ALONG THE LINE XPARAM+ALPHA*PVECT, C WHERE XPARAM C IS THE VECTOR OF CURRENT VARIABLE VALUES, ALPHA IS A SCALAR C VARIABLE, AND PVECT IS A SEARCH-DIRECTION VECTOR PROVIDED BY THE C BFGS OR DAVIDON-FLETCHER-POWELL ALGORITHM. EACH ITERATION STEP CA C OUT BY FLEPO PROCEEDS BY LETTING LINMIN FIND A VALUE FOR ALPHA C WHICH MINIMIZES FUNCT ALONG XPARAM+ALPHA*PVECT, BY C UPDATING THE VECTOR XPARAM BY THE AMOUNT ALPHA*PVECT, AND C FINALLY BY GENERATING A NEW VECTOR PVECT. UNDER C CERTAIN RESTRICTIONS (POWELL, J.INST.MATHS.APPLICS.(1971), C V.7,21-36) A SEQUENCE OF FUNCT VALUES CONVERGING TO SOME C LOCAL MINIMUM VALUE AND A SEQUENCE OF C XPARAM VECTORS CONVERGING TO THE CORRESPONDING MINIMUM POINT C ARE PRODUCED. C CONVERGENCE TESTS. C C HERBERTS TEST: THE ESTIMATED DISTANCE FROM THE CURRENT POINT C POINT TO THE MINIMUM IS LESS THAN TOLERA. C C "HERBERTS TEST SATISFIED - GEOMETRY OPTIMIZED" C C GRADIENT TEST: THE GRADIENT NORM HAS BECOME LESS THAN TOLERG C TIMES THE SQUARE ROOT OF THE NUMBER OF VARIABLES. C C "TEST ON GRADIENT SATISFIED". C C XPARAM TEST: THE RELATIVE CHANGE IN XPARAM, MEASURED BY ITS NORM, C OVER ANY TWO SUCCESSIVE ITERATION STEPS DROPS BELOW C TOLERX. C C "TEST ON XPARAM SATISFIED". C C FUNCTION TEST: THE CALCULATED VALUE OF THE HEAT OF FORMATION C BETWEEN ANY TWO CYCLES IS WITHIN TOLERF OF C EACH OTHER. C C "HEAT OF FORMATION TEST SATISFIED" C C FOR THE GRADIENT, FUNCTION, AND XPARAM TESTS A FURTHER CONDITION, C THAT NO INDIVIDUAL COMPONENT OF THE GRADIENT IS GREATER C THAN TOLERG, MUST BE SATISFIED, IN WHICH CASE THE C CALCULATION EXITS WITH THE MESSAGE C C "PETERS TEST SATISFIED" C C WILL BE PRINTED, AND FUNCT AND XPARAM WILL CONTAIN THE LAST C FUNCTION VALUE CUM VARIABLE VALUES REACHED. C C C THE BROYDEN-FLETCHER-GOLDFARB-SHANNO AND DAVIDON-FLETCHER-POWELL C ALGORITHMS CHOOSE SEARCH DIRECTIONS C ON THE BASIS OF LOCAL PROPERTIES OF THE FUNCTION. A MATRIX H, C WHICH IN FLEPO IS PRESET WITH THE IDENTITY, IS MAINTAINED AND C UPDATED AT EACH ITERATION STEP. THE MATRIX DESCRIBES A LOCAL C METRIC ON THE SURFACE OF FUNCTION VALUES ABOVE THE POINT XPARAM. C THE SEARCH-DIRECTION VECTOR PVECT IS SIMPLY A TRANSFORMATION C OF THE GRADIENT GRAD BY THE MATRIX H. C DIMENSION XVAR(MAXPAR), GVAR(MAXPAR), XD(MAXPAR), GD(MAXPAR), 1GLAST(MAXPAR), XLAST(MAXPAR), GG(MAXPAR), PVECT(MAXPAR) DIMENSION MDFP(9),XDFP(9), XTEMP(MAXPAR), GTEMP(MAXPAR) SAVE ICALCN SAVE RST, TDEL, SFACT, DELL, EINC, IGG1, DEL SAVE RESTRT, GEOOK, DFP, CONST SAVE SADDLE, MINPRT, ROOTV, PRINT, DELHOF, TOLERF, TOLERG SAVE TOLERX, DROP, FREPF, IHDIM, CNCADD, ABSMIN, ITRY1 SAVE OKF, JCYC, LNSTOP, IREPET, ALPHA, PNORM, JNRST, CYCMX SAVE COS, NCOUNT, RESFIL, MDFP, TX1, TX2, TLAST SAVE TOTIME LOGICAL OKF, PRINT, RESTRT, MINPRT, SADDLE, GEOOK, LOG 1 ,RESFIL, LGRAD, DFP, LDIIS, THIEL, DIISOK, FRST, 2 LIMSCF EQUIVALENCE (MDFP(1),JCYC ),(MDFP(2),JNRST),(MDFP(3),NCOUNT), 1 (MDFP(4),LNSTOP),(XDFP(1),ALPHA),(XDFP(2),COS ), 2 (XDFP(3),PNORM ),(XDFP(4),DROP ),(XDFP(5),DEL ), 3 (XDFP(6),FREPF ),(XDFP(7),CYCMX),(XDFP(8),TOTIME) DATA ICALCN /0/ C C START OF ONCE-ONLY SECTION C EMIN=0.D0 IF (ICALCN.NE.NUMCAL) THEN C C THE FOLLOWING CONSTANTS SHOULD BE SET BY THE USER. C RST = 0.05D0 IPRT = 6 TDEL = 0.06D0 NRST = 30 SFACT = 1.5D0 DELL = 0.01D0 EINC = 0.3D0 IGG1 = 3 DEL=DELL C C THESE CONSTANTS SHOULD BE SET BY THE PROGRAM. C RESTRT = INDEX(KEYWRD,'RESTAR').NE.0 THIEL = INDEX(KEYWRD,'NOTHIE').EQ.0 GEOOK = INDEX(KEYWRD,'GEO-OK').NE.0 LOG = INDEX(KEYWRD,'NOLOG').EQ.0 LDIIS = INDEX(KEYWRD,'NODIIS').EQ.0 SADDLE = INDEX(KEYWRD,'SADDLE').NE.0 MINPRT = .NOT.SADDLE CONST=1.D0 C C THE DAVIDON-FLETCHER-POWELL METHOD IS NOT RECOMMENDED C BUT CAN BE INVOKED BY USING THE KEYWORD 'DFP' C DFP=INDEX(KEYWRD,'DFP').NE.0 C C ORDER OF PRECISION: 'GNORM' TAKES PRECEDENCE OVER 'FORCE', WHICH C TAKES PRECEDENCE OVER 'PRECISE'. TOLERG=1.0D0 IF(INDEX(KEYWRD,'PREC') .NE. 0) TOLERG=0.2D0 IF (INDEX(KEYWRD,'FORCE') .NE. 0) TOLERG = 0.1D0 C C READ IN THE GRADIENT-NORM LIMIT, IF SPECIFIED C IF(INDEX(KEYWRD,'GNORM=').NE.0) THEN ROOTV=1.D0 CONST=1.D-20 TOLERG=READA(KEYWRD,INDEX(KEYWRD,'GNORM=')) IF(INDEX(KEYWRD,' LET').EQ.0.AND.TOLERG.LT.1.D-2)THEN WRITE(6,'(/,A)')' GNORM HAS BEEN SET TOO LOW, RESET TO 0 1.01' TOLERG=1.D-2 ENDIF ELSE ROOTV=SQRT(NVAR+1.D-5) ENDIF TOLERX = 0.0001D0*CONST DELHOF = 0.0010D0*CONST TOLERF = 0.002D0*CONST TOLRG = TOLERG C C MINOR BOOK-KEEPING C TLAST=TLEFT TX2=SECOND() TLEFT=TLEFT-TX2+TIME0 PRINT = (INDEX(KEYWRD,'FLEPO').NE.0) C C THE FOLLOWING CONSTANTS SHOULD BE SET TO SOME ARBITARY LARGE VALUE. C DROP = 1.D15 FREPF = 1.D15 C C AND FINALLY, THE FOLLOWING CONSTANTS ARE CALCULATED. C IHDIM=(NVAR*(NVAR+1))/2 CNCADD=1.0D00/ROOTV IF (CNCADD.GT.0.15D00) CNCADD=0.15D00 ICALCN=NUMCAL IF (RESTRT) THEN JNRST=1 MDFP(9)=0 CALL DFPSAV(TOTIME,XPARAM,GD,XLAST,FUNCT1,MDFP,XDFP) I=TOTIME/1000000.D0 TOTIME=TOTIME-I*1000000.D0 TIME0=TIME0-TOTIME NSCF=MDFP(5) WRITE(IPRT,'(//10X,''TOTAL TIME USED SO FAR:'', 1 F13.2,'' SECONDS'')')TOTIME IF(INDEX(KEYWRD,'1SCF') .NE. 0) THEN LAST=1 LGRAD= INDEX(KEYWRD,'GRAD').NE.0 CALL COMPFG (XPARAM,.TRUE.,FUNCT1,.TRUE.,GRAD,LGRAD) IFLEPO=13 EMIN=0.D0 RETURN ENDIF ENDIF C C END OF ONCE-ONLY SETUP C ENDIF C C FIRST, WE INITIALIZE THE VARIABLES. C DIISOK=.FALSE. IRESET=0 ABSMIN=1.D6 FRST=.TRUE. ITRY1=0 JCYC=0 LNSTOP=1 IREPET=1 LIMSCF=.TRUE. ALPHA = 1.0D00 PNORM=1.0D00 JNRST=0 CYCMX=0.D0 COS=0.0D00 TOTIME=0.D0 NCOUNT=1 IF( SADDLE) THEN * * WE DON'T NEED HIGH PRECISION DURING A SADDLE-POINT CALCULATION. * IF(NVAR.GT.0)GNORM=SQRT(DOT(GRAD,GRAD,NVAR))-3.D0 IF(GNORM.GT.10.D0)GNORM =10.D0 IF(GNORM.GT.1.D0) TOLERG=TOLRG*GNORM WRITE(IPRT,'('' GRADIENT CRITERION IN FLEPO ='',F12.5)')TOLE 1RG ENDIF IF(NVAR.EQ.1) THEN PVECT(1)=0.01D0 ALPHA=1.D0 GOTO 300 ENDIF TOTIME=0.D0 C C CALCULATE THE VALUE OF THE FUNCTION -> FUNCT1, AND GRADIENTS -> GRAD. C NORMAL SET-UP OF FUNCT1 AND GRAD, DONE ONCE ONLY. C CALL COMPFG (XPARAM,.TRUE.,FUNCT1,.TRUE.,GRAD,.TRUE.) CALL SCOPY (NVAR,GRAD,1,GD,1) IF (NVAR.NE.0) THEN GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) GNORMR=GNORM IF (LNSTOP.NE.1.AND.COS.GT.RST.AND.(JNRST.LT.NRST.OR..NOT.DFP) 1 .AND.RESTRT)THEN CALL SCOPY (NVAR,GD,1,GLAST,1) ELSE CALL SCOPY (NVAR,GRAD,1,GLAST,1) ENDIF ENDIF IF(GNORM.LT.TOLERG.OR.NVAR.EQ.0) THEN IFLEPO=2 IF(RESTRT) THEN CALL COMPFG (XPARAM,.TRUE.,FUNCT1,.TRUE.,GRAD,.TRUE.) ELSE CALL COMPFG (XPARAM,.TRUE.,FUNCT1,.TRUE.,GRAD,.FALSE.) ENDIF EMIN=0.D0 RETURN ENDIF TX1 = SECOND() TLEFT=TLEFT-TX1+TX2 C * C START OF EACH ITERATION CYCLE ... C * C GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) IF(GNORMR.LT.1.D-10)GNORMR=GNORM GOTO 30 10 CONTINUE IF(COS .LT. RST) THEN DO 20 I=1,NVAR 20 GD(I)=0.5D0 ENDIF 30 CONTINUE JCYC=JCYC+1 JNRST=JNRST+1 I80=0 40 CONTINUE IF (I80.EQ.1.OR. 1LNSTOP.EQ.1.OR.COS.LE.RST.OR.(JNRST.GE.NRST.AND.DFP))THEN C C * C RESTART SECTION C * C DO 50 I=1,NVAR C C MAKE THE FIRST STEP A WEAK FUNCTION OF THE GRADIENT C STEP=ABS(GRAD(I))*0.0002D0 STEP=MAX(0.01D0,MIN(0.04D0,STEP)) C# XD(I)=XPARAM(I)-SIGN(STEP,GRAD(I)) XD(I)=XPARAM(I)-SIGN(DEL,GRAD(I)) 50 CONTINUE C# WRITE(6,'(10F8.3)')(XD(I)-XPARAM(I),I=1,NVAR) C C THIS CALL OF COMPFG IS USED TO CALCULATE THE SECOND-ORDER MATRIX IN H C IF THE NEW POINT HAPPENS TO IMPROVE THE RESULT, THEN IT IS KEPT. C OTHERWISE IT IS SCRAPPED, BUT STILL THE SECOND-ORDER MATRIX IS O.K. C C# WRITE(6,*)' RESET HESSIAN' CALL COMPFG (XD,.TRUE.,FUNCT2,.TRUE.,GD,.TRUE.) IF(.NOT. GEOOK .AND. SQRT(DOT(GD,GD,NVAR))/GNORM.GT.10. 1 AND.GNORM.GT.20.AND.JCYC.GT.2)THEN C C THE GEOMETRY IS BADLY SPECIFIED IN THAT MINOR CHANGES IN INTERNAL C COORDINATES LEAD TO LARGE CHANGES IN CARTESIAN COORDINATES, AND THESE C LARGE CHANGES ARE BETWEEN PAIRS OF ATOMS THAT ARE CHEMICALLY BONDED C TOGETHER. WRITE(IPRT,'('' GRADIENTS OF OLD GEOMETRY, GNORM='',F13.6)') 1 GNORM WRITE(IPRT,'(6F12.6)')(GRAD(I),I=1,NVAR) GDNORM=SQRT(DOT(GD,GD,NVAR)) WRITE(IPRT,'('' GRADIENTS OF NEW GEOMETRY, GNORM='',F13.6)') 1 GDNORM WRITE(IPRT,'(6F12.6)')(GD(I),I=1,NVAR) WRITE(IPRT,'(///20X,''CALCULATION ABANDONED AT THIS POINT!'' 1)') WRITE(IPRT,'(//10X,'' SMALL CHANGES IN INTERNAL COORDINATES 1ARE '',/10X,'' CAUSING A LARGE CHANGE IN THE DISTANCE BETWEEN'', 2/ 10X,'' CHEMICALLY-BOUND ATOMS. THE GEOMETRY OPTIMIZATION'',/ 3 10X,'' PROCEDURE WOULD LIKELY PRODUCE INCORRECT RESULTS'')') CALL GEOUT(1) STOP ENDIF NCOUNT=NCOUNT+1 DO 60 I=1,IHDIM 60 HESINV(I)=0.0D00 II=0 DO 90 I=1,NVAR II=II+I DELTAG=GRAD(I)-GD(I) DELTAX=XPARAM(I)-XD(I) IF (ABS(DELTAG).LT.1.D-12) GO TO 70 GGD=ABS(GRAD(I)) IF (FUNCT2.LT.FUNCT1) GGD=ABS(GD(I)) HESINV(II)=DELTAX/DELTAG IF (HESINV(II).LT.0.0D00.AND.GGD.LT.1.D-12) GO TO 70 IF (HESINV(II).LT.0.0D00) HESINV(II)=TDEL/GGD GO TO 80 70 HESINV(II)=0.01D00 80 CONTINUE IF (GGD.LT.1.D-12) GGD=1.D-12 PMSTEP=ABS(0.1D0/GGD) IF (HESINV(II).GT.PMSTEP) HESINV(II)=PMSTEP 90 CONTINUE JNRST=0 IF(JCYC.LT.2)COSINE=1.D0 IF(FUNCT2 .GE. FUNCT1) THEN IF(PRINT)WRITE (IPRT,100) FUNCT1,FUNCT2 100 FORMAT (' FUNCTION VALUE=',F13.7, 1 ' WILL NOT BE REPLACED BY VALUE=',F13.7,/10X, 2 'CALCULATED BY RESTART PROCEDURE',/) COSINE=1.D0 ELSE IF( PRINT ) WRITE (IPRT,110) FUNCT1,FUNCT2 110 FORMAT (' FUNCTION VALUE=',F13.7, 1 ' IS BEING REPLACED BY VALUE=',F13.7,/10X, 2 ' FOUND IN RESTART PROCEDURE',/,6X,'THE CORRESPONDING', 3 ' X VALUES AND GRADIENTS ARE ALSO BEING REPLACED',/) FUNCT1=FUNCT2 CALL SCOPY (NVAR,XD,1,XPARAM,1) CALL SCOPY (NVAR,GD,1,GRAD ,1) GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) IF(GNORMR.LT.1.D-10)GNORMR=GNORM ENDIF ELSE C C * C UPDATE VARIABLE-METRIC MATRIX C * C DO 120 I=1,NVAR XVAR(I)=XPARAM(I)-XLAST(I) 120 GVAR(I)=GRAD(I)-GLAST(I) CALL SUPDOT(GG,HESINV,GVAR,NVAR,1) YHY=DOT(GG,GVAR,NVAR) SY =DOT(XVAR,GVAR,NVAR) K=0 C C UPDATE ACCORDING TO DAVIDON-FLETCHER-POWELL C IF(DFP)THEN DO 130 I=1,NVAR XVARI=XVAR(I)/SY GGI=GG(I)/YHY DO 130 J=1,I K=K+1 130 HESINV(K)=HESINV(K)+XVAR(J)*XVARI-GG(J)*GGI C C UPDATE USING THE BFGS FORMALISM C ELSE YHY=1.0D0 + YHY/SY DO 140 I=1,NVAR XVARI=XVAR(I)/SY GGI=GG(I)/SY DO 140 J=1,I K=K+1 140 HESINV(K)=HESINV(K)-GG(J)*XVARI-XVAR(J)*GGI + YHY*XVAR(J)*XV 1ARI ENDIF ENDIF C# DO 191 I=1,IHDIM C# 191 HTEMP(I)=HESINV(I) C# CALL HQRII(HTEMP, NVAR, NVAR, XTEMP, VECTS) C# J=0 C# DO 193 I=1,NVAR C# IF(XTEMP(I).LT.0.0D0)THEN C# J=J+1 C# XTEMP(I)=0.00002D0 C# ENDIF C# 193 CONTINUE C# IF(J.NE.0)THEN C# DO 194 I=1,IHDIM C# 194 HTEMP(I)=HESINV(I) C# CALL HREFM(NVAR,VECTS,XTEMP,HESINV) C# WRITE(6,*)' ORIGINAL HESSIAN' C# CALL VECPRT(HTEMP,NVAR) C# WRITE(6,*)' REFORMED HESSIAN' C# CALL VECPRT(HESINV,NVAR) C# ENDIF C# WRITE(6,*)' EIGENVALUES OF HESSIAN MATRIX' C# WRITE(6,'(1X,5G12.6)')(6.951D-3/XTEMP(I),I=1,NVAR) C C * C ESTABLISH NEW SEARCH DIRECTION C * PNLAST=PNORM C# call vecprt(hesinv,nvar) CALL SUPDOT(PVECT,HESINV,GRAD,NVAR,1) PNORM=SQRT(DOT(PVECT,PVECT,NVAR)) IF(PNORM.GT.1.5D0*PNLAST)THEN C C TRIM PVECT BACK C DO 150 I=1,NVAR 150 PVECT(I)=PVECT(I)*1.5D0*PNLAST/PNORM PNORM=1.5D0*PNLAST ENDIF DOTT=-DOT(PVECT,GRAD,NVAR) DO 160 I=1,NVAR 160 PVECT(I)=-PVECT(I) COS=-DOTT/(PNORM*GNORM) IF (JNRST.EQ.0) GO TO 190 IF (COS.LE.CNCADD.AND.DROP.GT.1.0D00) GO TO 170 IF (COS.LE.RST) GO TO 170 GO TO 190 170 CONTINUE C# K=0 C# DO 222 I=1,NVAR C# DO 223 J=1,I-1 C# K=K+1 C# 223 HESINV(K)=HESINV(K)*0.75D0 C# K=K+1 C# 222 HESINV(K)=HESINV(K)+0.005D0 C# GOTO 241 PNORM=PNLAST IF( PRINT )WRITE (IPRT,180) COS 180 FORMAT (//,5X, 'SINCE COS=',F9.3,5X,'THE PROGRAM WILL GO TO RE', 1'START SECTION',/) I80=1 GO TO 40 190 CONTINUE IF ( PRINT ) WRITE (IPRT,200) JCYC,FUNCT1 200 FORMAT (1H , 'AT THE BEGINNING OF CYCLE',I5, ' THE FUNCTION VA 1LUE IS ',F13.6/, ' THE CURRENT POINT IS ...') IF(PRINT)WRITE (IPRT,210) GNORM,COS 210 FORMAT ( ' GRADIENT NORM = ',F10.4/,' ANGLE COSINE =',F10.4) IF( PRINT )THEN WRITE (6,220) 220 FORMAT (' THE CURRENT POINT IS ...') NTO6=(NVAR-1)/6+1 IINC1=-5 DO 270 I=1,NTO6 WRITE (6,'(/)') IINC1=IINC1+6 IINC2=MIN(IINC1+5,NVAR) WRITE (6,230) (J,J=IINC1,IINC2) WRITE (6,240) (XPARAM(J),J=IINC1,IINC2) WRITE (6,250) (GRAD(J),J=IINC1,IINC2) WRITE (6,260) (PVECT(J),J=IINC1,IINC2) 230 FORMAT (1H ,3X, 1HI,9X,I3,9(8X,I3)) 240 FORMAT (1H ,1X, 'XPARAM(I)',1X,F9.4,2X,9(F9.4,2X)) 250 FORMAT (1H ,1X, 'GRAD (I)',F10.4,1X,9(F10.4,1X)) 260 FORMAT (1H ,1X, 'PVECT (I)',2X,F10.6,1X,9(F10.6,1X)) 270 CONTINUE ENDIF LNSTOP=0 ALPHA=ALPHA*PNLAST/PNORM CALL SCOPY (NVAR,GRAD, 1,GLAST,1) CALL SCOPY (NVAR,XPARAM,1,XLAST,1) IF (JNRST.EQ.0) ALPHA=1.0D00 DROP=ABS(ALPHA*DOTT) IF(PRINT)WRITE (IPRT,280) DROP 280 FORMAT (1H , 13H -ALPHA.P.G =,F18.6,/) IF (JNRST.NE.0.AND.DROP.LT.DELHOF)THEN C C HERBERT'S TEST: THE PREDICTED DROP IN ENERGY IS LESS THAN DELHOF C IF PASSED, CALL COMPFG TO GET A GOOD SET OF EIGENVECTORS, THEN EXIT C IF(MINPRT)WRITE (IPRT,290) 290 FORMAT(//,10X,'HERBERTS TEST SATISFIED - GEOMETRY OPTIMIZED') C C FLEPO IS ENDING PROPERLY. THIS IS IMMEDIATELY BEFORE THE RETURN. C LAST=1 CALL COMPFG (XPARAM,.TRUE.,FUNCT,.TRUE.,GRAD,.FALSE.) IFLEPO=3 TIME0=TIME0-TOTIME EMIN=0.D0 RETURN ENDIF BETA =ALPHA SMVAL=FUNCT1 DROPN=-ABS(DROP/ALPHA) C C UPDATE GEOMETRY USING THE G-DIIS PROCEDURE C IF(DIISOK) THEN OKF=.TRUE. IC=1 ELSE OKF=.FALSE. IC=2 ENDIF 300 CALL LINMIN(XPARAM,ALPHA,PVECT,NVAR,FUNCT1,OKF,IC,DROPN) IF(NVAR.EQ.1)THEN WRITE(6,'('' ONLY ONE VARIABLE, THEREFORE ENERGY A MINIMUM'')') LAST=1 LGRAD=(INDEX(KEYWRD,'GRAD').NE.0) CALL COMPFG (XPARAM,.TRUE.,FUNCT,.TRUE.,GRAD,LGRAD) IFLEPO=14 EMIN=0.D0 RETURN ENDIF C WE WANT ACCURATE DERIVATIVES AT THIS POINT C C LINMIN DOES NOT GENERATE ANY DERIVATIVES, THEREFORE COMPFG MUST BE C CALLED TO END THE LINE SEARCH C C IF THE DERIVATIVES ARE TO BE CALCULATED USING FULL SCF'S, THEN CHECK C WHETHER TO DO FULL SCF'S (CRITERION FROM FLEPO: GRAD IS NULL). C IF(IRESET.GT.10.OR.GNORM.LT.40.D0.AND.GNORM/GNORMR.LT.0.33D0)THEN IRESET=0 GNORMR=0.D0 DO 310 I=1,NVAR 310 GRAD(I)=0.D0 ENDIF IRESET=IRESET+1 C C C RESTORE TO STANDARD VALUE BEFORE COMPUTING THE GRADIENT IF(THIEL)THEN CALL COMPFG (XPARAM, IC.NE.1, SCRAP, .TRUE. ,GRAD,.TRUE.) ELSE CALL COMPFG (XPARAM, .TRUE., FUNCT1, .TRUE. ,GRAD,.TRUE.) ENDIF IF(LDIIS) THEN C C UPDATE GEOMETRY AND GRADIENT AFTER MAKING A STEP USING LINMIN C DO 320 I=1,NVAR XTEMP(I)=XPARAM(I) 320 GTEMP(I)=GRAD(I) CALL DIIS(XTEMP, XPARAM, GTEMP, GRAD, HDIIS, FUNCT1,HESINV, NVA 1R, FRST) IF(HDIIS.LT.FUNCT1.AND. 1SQRT(DOT(GTEMP,GTEMP,NVAR)) .LT. SQRT(DOT(GRAD,GRAD,NVAR)))THEN DO 330 I=1,NVAR XPARAM(I)=XTEMP(I) 330 GRAD(I)=GTEMP(I) DIISOK=.TRUE. ELSE DIISOK=.FALSE. ENDIF ENDIF GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) IF(GNORMR.LT.1.D-10)GNORMR=GNORM NCOUNT=NCOUNT+1 IF ( .NOT. OKF) THEN LNSTOP = 1 IF(MINPRT)WRITE (IPRT,'(/,20X, ''NO POINT LOWER IN ENERGY '', 1 ''THAN THE STARTING POINT '',/,20X,''COULD BE FOUND '', 2 ''IN THE LINE MINIMIZATION'')') FUNCT1=SMVAL ALPHA=BETA CALL SCOPY (NVAR,GLAST,1,GRAD ,1) CALL SCOPY (NVAR,XLAST,1,XPARAM,1) IF (JNRST.EQ.0)THEN WRITE (IPRT,340) 340 FORMAT (1H ,//,20X, 'SINCE COS WAS JUST RESET,THE SEARCH', 1 ' IS BEING ENDED') C C FLEPO IS ENDING BADLY. THIS IS IMMEDIATELY BEFORE THE RETURN C LAST=1 CALL COMPFG (XPARAM, .TRUE., FUNCT, .TRUE. ,GRAD,.TRUE.) IFLEPO=4 TIME0=TIME0-TOTIME EMIN=0.D0 RETURN ENDIF IF(PRINT)WRITE (IPRT,350) 350 FORMAT (1H ,20X, 'COS WILL BE RESET AND ANOTHER ' 1 ,'ATTEMPT MADE') COS=0.0D00 GO TO 470 ENDIF XN=SQRT(DOT(XPARAM,XPARAM,NVAR)) TX=ABS(ALPHA*PNORM) IF (XN.NE.0.0D00) TX=TX/XN TF=ABS(SMVAL-FUNCT1) IF(ABSMIN-SMVAL.LT.1.D-7)THEN ITRY1=ITRY1+1 IF(ITRY1.GT.10)THEN WRITE(6,'(//,'' HEAT OF FORMATION IS ESSENTIALLY STATIONARY' 1')') GOTO 460 ENDIF ELSE ITRY1=0 ABSMIN=SMVAL ENDIF IF (PRINT) WRITE (6,360) NCOUNT,COS,TX*XN,ALPHA,-DROP,-TF,GNORM 360 FORMAT (/,' NUMBER OF COUNTS =',I6, 1' COS =',F11.4,/, 2 ' ABSOLUTE CHANGE IN X =',F13.6, 3' ALPHA =',F11.4,/, 4 ' PREDICTED CHANGE IN F = ',G11.4, 5' ACTUAL = ',G11.4,/, 6 ' GRADIENT NORM = ',G11.4,//) IF (TX.LE.TOLERX) THEN IF(MINPRT) WRITE (IPRT,370) 370 FORMAT (' TEST ON X SATISFIED') GOTO 400 ENDIF IF (TF.LE.TOLERF) THEN C# WRITE(6,*)TF,TOLERF IF(MINPRT) WRITE (IPRT,380) 380 FORMAT (' HEAT OF FORMATION TEST SATISFIED') GOTO 400 ENDIF IF (GNORM.LE.TOLERG*ROOTV) THEN IF(MINPRT) WRITE (IPRT,390) 390 FORMAT (' TEST ON GRADIENT SATISFIED') GOTO 400 ENDIF GO TO 470 400 DO 440 I=1,NVAR IF (ABS(GRAD(I)).GT.TOLERG)THEN IREPET=IREPET+1 IF (IREPET.GT.1) GO TO 410 FREPF=FUNCT1 COS=0.0D00 410 IF(MINPRT) WRITE (IPRT,420)TOLERG 420 FORMAT (20X,'HOWEVER, A COMPONENT OF GRADIENT IS ', 1 'LARGER THAN',F6.2 ,/) IF (ABS(FUNCT1-FREPF).GT.EINC) IREPET=0 IF (IREPET.GT.IGG1) THEN WRITE (IPRT,430)IGG1,EINC 430 FORMAT (10X,' THERE HAVE BEEN',I2,' ATTEMPTS TO REDUCE TH 1E ',' GRADIENT.',/10X,' DURING THESE ATTEMPTS THE ENERGY DROPPED', 2' BY LESS THAN',F4.1,' KCAL/MOLE',/ 310X,' FURTHER CALCULATION IS NOT JUSTIFIED AT THIS TIME.',/ 410X,' TO CONTINUE, START AGAIN WITH THE WORD "PRECISE"' ) LAST=1 CALL COMPFG (XPARAM,.TRUE.,FUNCT,.TRUE.,GRAD,.FALSE.) IFLEPO=8 TIME0=TIME0-TOTIME EMIN=0.D0 RETURN ELSE GOTO 470 ENDIF ENDIF 440 CONTINUE IF(MINPRT) WRITE (IPRT,450) 450 FORMAT ( 23H PETERS TEST SATISFIED ) 460 LAST=1 CALL COMPFG (XPARAM,.TRUE.,FUNCT,.TRUE.,GRAD,.FALSE.) IFLEPO=6 TIME0=TIME0-TOTIME EMIN=0.D0 RETURN C C ALL TESTS HAVE FAILED, WE NEED TO DO ANOTHER CYCLE. C 470 CONTINUE BSMVF=ABS(SMVAL-FUNCT1) IF (BSMVF.GT.10.D00) COS = 0.0D00 DEL=0.002D00 IF (BSMVF.GT.1.0D00) DEL=DELL/2.0D00 IF (BSMVF.GT.5.0D00) DEL=DELL TX2 = SECOND () TCYCLE=TX2-TX1 TX1=TX2 C C END OF ITERATION LOOP, EVERYTHING IS STILL O.K. SO GO TO C NEXT ITERATION, IF THERE IS ENOUGH TIME LEFT. C IF(TCYCLE.LT.100000.D0)CYCMX=MAX(CYCMX,TCYCLE) TLEFT=TLEFT-TCYCLE IF(TLEFT.LT.0)TLEFT=-0.1D0 IF(TCYCLE.GT.1.D5)TCYCLE=0.D0 IF(TLAST-TLEFT.GT.TDUMP)THEN TOTIM=TOTIME + SECOND()-TIME0 TLAST=TLEFT MDFP(9)=2 RESFIL=.TRUE. MDFP(5)=NSCF CALL DFPSAV(TOTIM,XPARAM,GD,XLAST,FUNCT1,MDFP,XDFP) ENDIF IF(RESFIL)THEN IF(MINPRT) WRITE(6,480)MIN(TLEFT,9999999.9D0), 1MIN(GNORM,999999.999D0),FUNCT1 480 FORMAT(' RESTART FILE WRITTEN, TIME LEFT:',F9.1, 1' GRAD.:',F10.3,' HEAT:',G13.7) RESFIL=.FALSE. ELSE IF(MINPRT) WRITE(6,490)JCYC,MIN(TCYCLE,9999.99D0), 1MIN(TLEFT,9999999.9D0),MIN(GNORM,999999.999D0),FUNCT1 IF(LOG) WRITE(11,490)JCYC,MIN(TCYCLE,9999.99D0), 1MIN(TLEFT,9999999.9D0),MIN(GNORM,999999.999D0),FUNCT1 490 FORMAT(' CYCLE:',I4,' TIME:',F7.2,' TIME LEFT:',F9.1, 1' GRAD.:',F10.3,' HEAT:',G13.7) ENDIF IF (TLEFT.GT.SFACT*CYCMX) GO TO 10 WRITE(IPRT,500) 500 FORMAT (20X, 42HTHERE IS NOT ENOUGH TIME FOR ANOTHER CYCLE,/,30X, 118HNOW GOING TO FINAL) TOTIM=TOTIME + SECOND()-TIME0 MDFP(9)=1 MDFP(5)=NSCF CALL DFPSAV(TOTIM,XPARAM,GD,XLAST,FUNCT1,MDFP,XDFP) IFLEPO=-1 RETURN C C END mopac7-1.15/fortran/etime.c0000644000175000017500000000144211053302063012463 00000000000000/* NAME etime - return elapsed execution time SYNOPSIS real function etime (tarray) real tarray(2) DESCRIPTION These routine return elapsed runtime in seconds for the calling process. The argument array returns user time in the first element and system time in the second element. The function value is the sum of user and system time. LAST MODIFICATION January 24, 2000, I. Cserny (cserny@atomki.hu) */ #include #include #include float etime_(float *a) { struct rusage t; getrusage(RUSAGE_SELF,&t); a[0] = (double)(t.ru_utime.tv_sec); a[0] = a[0] + (double)(t.ru_utime.tv_usec) / CLOCKS_PER_SEC; a[1] = (double)(t.ru_stime.tv_sec); a[1] = a[1] + (double)(t.ru_stime.tv_usec) / CLOCKS_PER_SEC; } mopac7-1.15/fortran/gettxt.f0000644000175000017500000001002111053302063012673 00000000000000 SUBROUTINE GETTXT COMMON /KEYWRD/ KEYWRD COMMON /TITLES/ KOMENT,TITLE DIMENSION IS(3) CHARACTER KEYWRD*241, KOMENT*81, TITLE*81, CH*1, CH2*1, FILEN*50 +,GETNAM*80, OLDKEY*80 IS(1)=161 IS(2)=81 IS(3)=1 KEYWRD=' ' KOMENT=' NULL ' TITLE =' NULL ' READ(5,'(A)',END=100,ERR=90)KEYWRD(:80) OLDKEY=KEYWRD CALL UPCASE(KEYWRD(1:80)) IF(INDEX(KEYWRD,'SETUP').NE.0)THEN I=INDEX(KEYWRD,'SETUP=') IF(I.NE.0)THEN J=INDEX(KEYWRD(I:),' ') FILEN=OLDKEY(I+6:I+J-1) ELSE FILEN='SETUP' ENDIF OPEN(UNIT=4,FILE=GETNAM(FILEN), + STATUS='UNKNOWN',FORM='FORMATTED') REWIND 4 READ(4,'(A)',END=40,ERR=40)KEYWRD(81:160) CALL UPCASE(KEYWRD(81:160)) READ(4,'(A)',END=10,ERR=10)KEYWRD(161:240) CALL UPCASE(KEYWRD(161:240)) 10 CONTINUE READ(5,'(A)',END=100,ERR=90)KOMENT,TITLE ELSEIF(INDEX(KEYWRD(1:80),' +') .NE.0)THEN C C READ SECOND KEYWORD LINE C READ(5,'(A)',END=100,ERR=90)KEYWRD(81:160) OLDKEY=KEYWRD(81:160) CALL UPCASE(KEYWRD(81:160)) IF(INDEX(KEYWRD(81:160),'SETUP').NE.0)THEN I=INDEX(KEYWRD,'SETUP=') IF(I.NE.0)THEN J=INDEX(KEYWRD(I:),' ') FILEN=OLDKEY(I-74:I+J-80) ELSE FILEN='SETUP' ENDIF OPEN(UNIT=4,FILE=GETNAM(FILEN) + ,STATUS='UNKNOWN',FORM='FORMATTED') REWIND 4 READ(4,'(A)',END=20,ERR=20)KEYWRD(161:240) CALL UPCASE(KEYWRD(161:240)) 20 CONTINUE ELSEIF(INDEX(KEYWRD(81:160),' +') .NE.0)THEN C C READ THIRD KEYWORD LINE C READ(5,'(A)',END=100,ERR=90)KEYWRD(161:240) CALL UPCASE(KEYWRD(161:240)) ENDIF C C READ TITLE LINE C READ(5,'(A)',END=100,ERR=90)KOMENT,TITLE ELSEIF(INDEX(KEYWRD(:80),'&').NE.0)THEN READ(5,'(A)',END=100,ERR=90)KEYWRD(81:160) OLDKEY=KEYWRD(81:160) CALL UPCASE(KEYWRD(81:160)) IF(INDEX(KEYWRD(81:160),'SETUP').NE.0)THEN I=INDEX(KEYWRD,'SETUP=') IF(I.NE.0)THEN J=INDEX(KEYWRD(I:),' ') FILEN=OLDKEY(I-74:I+J-80) C write(*,*)' <'//FILEN//'>' C stop ELSE FILEN='SETUP' ENDIF OPEN(UNIT=4,FILE=GETNAM(FILEN), + STATUS='UNKNOWN',FORM='FORMATTED') REWIND 4 READ(4,'(A)',END=30,ERR=30)KEYWRD(161:240) CALL UPCASE(KEYWRD(161:240)) READ(5,'(A)',END=100,ERR=90)TITLE 30 CONTINUE ELSEIF(INDEX(KEYWRD(81:160),'&').NE.0)THEN READ(5,'(A)',END=100,ERR=90)KEYWRD(161:240) ELSE READ(5,'(A)',END=100,ERR=90)TITLE ENDIF ELSE READ(5,'(A)',END=100,ERR=90)KOMENT,TITLE ENDIF GOTO 50 40 WRITE(6,'(A)')' SETUP FILE MISSING OR CORRUPT' 50 DO 80 J=1,3 IF(KEYWRD(IS(J):IS(J)) .NE. ' ') THEN CH=KEYWRD(IS(J):IS(J)) KEYWRD(IS(J):IS(J))=' ' DO 60 I=IS(J)+1,239 CH2=KEYWRD(I:I) KEYWRD(I:I)=CH CH=CH2 IF(KEYWRD(I+1:I+2) .EQ. ' ') THEN KEYWRD(I+1:I+1)=CH GOTO 70 ENDIF 60 CONTINUE WRITE(6,'(A,I2,A)')' LINE',J,' OF KEYWORDS DOES NOT HAVE ENO 1UGH' WRITE(6,'(A)')' SPACES FOR PARSING. PLEASE CORRECT LINE.' STOP 70 CONTINUE ENDIF 80 CONTINUE RETURN 90 WRITE(6,'(A)')' ERROR IN READ OF FIRST THREE LINES' 100 STOP END SUBROUTINE UPCASE(KEYWRD) CHARACTER*80 KEYWRD ICAPA=ICHAR('A') ILOWA=ICHAR('a') ILOWZ=ICHAR('z') DO 10 I=1,80 ILINE=ICHAR(KEYWRD(I:I)) IF(ILINE.GE.ILOWA.AND.ILINE.LE.ILOWZ) THEN KEYWRD(I:I)=CHAR(ILINE+ICAPA-ILOWA) ENDIF 10 CONTINUE RETURN END mopac7-1.15/fortran/symtrz.f0000644000175000017500000015412311053302063012740 00000000000000C C C SUBROUTINE SYMTRZ (COORD,C,NORB,NMOS,FLAG,FLAG2) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C************************************************************** C * C DETERMINE POINT GROUP & SYMMETRIZE ORBITALS * C * C************************************************************** INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) C --------------------------------------------------------------- COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, 2 FRACT COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB COMMON/VECTOR/CDUM(MORB2),EIGS(MAXORB),CBDUM(MORB2),EIGB(MAXORB) COMMON /S00002/ NUNUM,NONORB,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON/S00004/SHIFT(3),R(3,3),VECT(2,MXDIM) CHARACTER*4 NAME, NAMO, NAM, ISTA LOGICAL FLAG,FLAG2 DIMENSION RSAV(3,3),COTIM(3,NUMATM) DIMENSION V1(MAXORB),V2(MAXORB),V3(MAXORB),V4(MAXORB) DIMENSION COORD(3,NUMATM),C(MAXORB,MAXORB) DIMENSION IOPSYM(7),IMAGE(NUMATM,7) DATA IOPSYM /1,1,1,1,1,1,1/ NUNUM = NUMAT NONORB = NORBS DO K=1,3 DO L=1,NUMAT COTIM(K,L)=COORD(K,L) ENDDO ENDDO DO I=1,3 DO J=1,3 RSAV(I,J)=R(I,J) ENDDO ENDDO NAM=NAME CALL SYMAN1(NUMAT,2,COORD,NAT,1,MAXORB) IF(FLAG2) CALL SYMAN2(NORBS,NORBS,C,0,1,MAXORB) DO I=1,3 DO J=1,3 R(I,J)=RSAV(I,J) ENDDO ENDDO DO K=1,3 DO L=1,numat COORD(K,L)=COTIM(K,L) ENDDO ENDDO RETURN END C C================================================================ C SUBROUTINE SYMAN1(NUM1,NUM2,ARRAY,LINEAR,JUMP,idim) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C*************************************************************** C * C SYMMETRY PACKAGE FROM UMNDO PROGRAM OF PETER BISCHOF * C WAS REWRITTEN BY DAVID DANOVICH FOR MOPAC SYSTEM * C * C*************************************************************** INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) DIMENSION LINEAR(NUMATM),NUSS(MXDIM),ICOUNT(12),ARRAY(3,NUMATM) COMMON /S00001/T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00020/ NIMM(2,MXDIM),NOCC(2) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) CHARACTER*4 IFRA, NAME, ISTA, NAMO, NIMM COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB DATA IFRA / '????' / WRITE(6,'('' == symtrz.f SYMAN1 =='')') IF(NUM1.LT.2) GOTO 12 IF(NUM2.LT.2) GOTO 12 IF(NUM1.GT.MXDIM) GOTO 12 C ** MOLECULAR SYMMETRY 1 IERROR=0 LCALL=0 IVIB=0 NBASE=0 NUMAT=NUM1 NAME=IFRA ISTA(1)=' ' ISTA(2)=IFRA DO 2 I=1,MXDIM 2 NAMO(I)=IFRA CALL R00001(LINEAR,ARRAY) IF(IERROR.LT.1) CALL R00009(LINEAR,ARRAY) IF(IERROR.LT.1) CALL R00016 DO 3 I=1,NUMAT 3 INDEX(I)=LINEAR(I) RETURN 12 IERROR=1 WRITE(6,600)NUM1,NUM2 RETURN 600 FORMAT(' ILLEGAL SYMA - ARGUMENTS: NUM1 = ',I10,' NUM2 = ',I10) END C C====================================================================== C SUBROUTINE SYMAN2(NUM1,NUM2,ARRAY,LINEAR,JUMP,idim) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) DIMENSION NUSS(MXDIM),ICOUNT(12),array(num1,num1) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00020/ NIMM(2,MXDIM),NOCC(2) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) CHARACTER*4 IFRA, NAME, ISTA, NAMO, NIMM COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB DATA IFRA / '????' / WRITE(6,'('' == symtrz.f SYMAN2 =='')') IF(NUM1.LT.2) GOTO 12 IF(NUM2.LT.2) GOTO 12 IF(NUM1.GT.MXDIM) GOTO 12 C ** ORBITAL SYMMETRY IF(IERROR.GT.0) THEN RETURN ENDIF LCALL=0 IF(LINEAR.GT.0) GOTO 6 IF(LCALL.GT.0) GOTO 8 KORB=0 NQZ=1 DO 5 I=1,NUMAT JJ=1 IF(INDEX(I).GT.1) JJ=4 DO 5 J=1,JJ KORB=KORB+1 NUSS(KORB)=100*I+10*NQZ+J-1 5 CONTINUE GOTO 8 6 DO 7 I=1,NUM1 7 NUSS(I)=LINEAR 8 NORBS=NUM1 NCDIM=NUM2 NCDUM=NUM2 CALL R00010(ARRAY,NUSS,ICOUNT,num1) IF(IERROR.GT.0) RETURN NBASE=0 DO 9 I=1,I1 IF(ICOUNT(I).LT.1) GOTO 9 NBASE=NBASE+1 IBASE(1,NBASE)=ICOUNT(I) IBASE(2,NBASE)=JX(1,I) 9 CONTINUE LCALL=LCALL+1 IF(LCALL.GT.2) LCALL=1 DO 10 I=1,NORBS NIMM(LCALL,I)=NAMO(I) 10 NIMM(2,I)=NAMO(I) RETURN 12 IERROR=1 WRITE(6,600)NUM1,NUM2 RETURN 600 FORMAT(' ILLEGAL SYMA - ARGUMENTS: NUM1 = ',I10,' NUM2 = ',I10) END C C========================================================================== C SUBROUTINE R00001(NAT,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,NAMO,ISTA COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) COMMON /ATMASS/ ATMASS(NUMATM) LOGICAL PLANAR,LINEAR,CUBIC,AXIS DIMENSION NAT(NUMATM),COORD(3,NUMATM),F(6),EW(3),HELP(3) DIMENSION RHELP(3,3) DIMENSION ICYC(6) DATA TOLER,BIG/ 0.1D0,1.D35 / WRITE(6,'('' == symtrz.f R00001 =='')') DO 2 I=1,3 DO 1 J=1,3 1 CUB(I,J)=0.D0 2 CUB(I,I)=1.D0 DO 3 I=1,20 CALL R00006(I,I) 3 IELEM(I)=0 DO 4 I=1,3 4 SHIFT(I)=0.D0 WMOL=0.D0 DO 5 I=1,NUMAT WMOL=WMOL+ATMASS(I) DO 5 K=1,3 5 SHIFT(K)=SHIFT(K)+ATMASS(I)*COORD(K,I) IJ=0 DO 7 I=1,3 SHIFT(I)=SHIFT(I)/WMOL DO 6 K=1,NUMAT 6 COORD(I,K)=COORD(I,K)-SHIFT(I) DO 7 J=1,I IJ=IJ+1 F(IJ)=0.D0 DO 7 K=1,NUMAT TERM=ATMASS(K)*COORD(I,K)*COORD(J,K) 7 F(IJ)=F(IJ)+TERM TRANS=25.98160821D0 + 2.97975D0*DLOG(WMOL) CALL R00015(F,R,EW) R(1,3)=R(2,1)*R(3,2)-R(3,1)*R(2,2) R(2,3)=R(3,1)*R(1,2)-R(1,1)*R(3,2) R(3,3)=R(1,1)*R(2,2)-R(2,1)*R(1,2) PLANAR=(EW(1).LT.TOLER) LINEAR=(EW(2).LT.TOLER) CUBIC=((EW(3)-EW(1)).LT.TOLER) IF(.NOT.LINEAR) GOTO 8 CALL R00005(COORD,1) IELEM(20)=1 GOTO 22 8 IF(CUBIC.OR.((EW(3)-EW(2)).GT.TOLER)) GOTO 10 DO 9 I=1,3 BUFF=-R(I,1) R(I,1)=R(I,3) 9 R(I,3)=BUFF BUFF=EW(1) EW(1)=EW(3) EW(3)=BUFF 10 AXIS=(ABS(EW(1)-EW(2)).LT.TOLER) CALL R00005(COORD,1) IF(CUBIC) CALL R00003(NAT,COORD,1) IF(.NOT.AXIS) GOTO 16 ITURN=7 DO 11 I=8,18 CALL R00007(NAT,COORD,I) IF((IELEM(I).EQ.1).AND.(I.LT.14)) ITURN=I 11 CONTINUE ITURN=ITURN-5 DO 13 I=1,NUMAT DIST=COORD(1,I)**2+COORD(2,I)**2 IF(DIST.LT.TOLER) GOTO 13 BUFF1=BIG JNDEX=0 IPLUS=I+1 DO 12 J=IPLUS,NUMAT BUFF=COORD(1,J)**2+COORD(2,J)**2 IF(ABS(BUFF-DIST).GT.TOLER) GOTO 12 BUFF=(COORD(1,I)-COORD(1,J))**2+(COORD(2,I)-COORD(2,J))**2 IF(BUFF.GT.BUFF1) GOTO 12 JNDEX=J BUFF1=BUFF 12 CONTINUE GOTO 14 13 CONTINUE 14 IF(JNDEX.LT.1) IERROR=1 IF(IERROR.GT.0) GOTO 25 HELP(1)=COORD(1,I)+COORD(1,JNDEX) HELP(2)=COORD(2,I)+COORD(2,JNDEX) DIST=SQRT(HELP(1)**2+HELP(2)**2) SINA=HELP(2)/DIST COSA=HELP(1)/DIST CALL R00002(COORD,SINA,COSA,1,2) CALL R00007(NAT,COORD,5) IF(IELEM(5).EQ.1) GOTO 16 CALL R00007(NAT,COORD,1) IF(IELEM(1).EQ.0) GOTO 16 DIST=1.5707963268D0/FLOAT(ITURN) SINA=SIN(DIST) COSA=COS(DIST) ICHECK=0 15 CALL R00002(COORD,SINA,COSA,1,2) IF(ICHECK.GT.0) GOTO 16 CALL R00007(NAT,COORD,5) IF(IELEM(5).GT.0) GOTO 16 ICHECK=1 SINA=-SINA GOTO 15 16 IF(CUBIC) CALL R00003(NAT,COORD,2) IF(AXIS) GOTO 22 DO 17 I=1,6 CALL R00007(NAT,COORD,I) 17 ICYC(I)=(1+IQUAL)*IELEM(I) NAXES=IELEM(1)+IELEM(2)+IELEM(3) IF(NAXES.GT.1) GOTO 18 IZ=1 IF(IELEM(1).EQ.1) GOTO 19 IZ=2 IF(IELEM(2).EQ.1) GOTO 19 IZ=3 IF(IELEM(3).EQ.1) GOTO 19 IF(ICYC(5).GT.ICYC(4)) IZ=2 IF(ICYC(6).GT.ICYC(7-IZ)) IZ=1 GOTO 19 18 IZ=1 IF(ICYC(2).GT.ICYC(1)) IZ=2 IF(ICYC(3).GT.ICYC(IZ)) IZ=3 19 ICYC(7-IZ)=-1 IX=1 IF(ICYC(5).GT.ICYC(6)) IX=2 IF(ICYC(4).GT.ICYC(7-IX)) IX=3 IY=6-IX-IZ DO 20 I=1,3 RHELP(I,1)=R(I,IX) 20 RHELP(I,2)=R(I,IY) RHELP(1,3)=R(2,IX)*R(3,IY)-R(3,IX)*R(2,IY) RHELP(2,3)=R(3,IX)*R(1,IY)-R(1,IX)*R(3,IY) RHELP(3,3)=R(1,IX)*R(2,IY)-R(2,IX)*R(1,IY) CALL R00005(COORD,-1) DO 21 I=1,3 DO 21 J=1,3 21 R(I,J)=RHELP(I,J) CALL R00005(COORD,1) 22 DO 23 I=1,7 CALL R00007(NAT,COORD,I) 23 CONTINUE NCODE=0 J=1 DO 24 I=1,20 NCODE=NCODE+IELEM(I)*J 24 J=2*J 25 CALL R00005(COORD,-1) TOTAL=EW(1)+EW(2)+EW(3) DO 26 I=1,3 EW(I)=TOTAL-EW(I) DO 26 J=1,NUMAT 26 COORD(I,J)=COORD(I,J)+SHIFT(I) JGROUP = 0 CALL R00008(JGROUP,NCODE) IF(JGROUP.LT.1) IERROR=2 TOTAL=EW(1)*EW(2)*EW(3)/(SIG*SIG) IF(LINEAR) RTR= 6.970686D0 + 1.9865D0*DLOG(EW(1)/SIG) IF(.NOT.LINEAR) RTR=11.592852D0 + 0.98325D0*DLOG(TOTAL) RETURN END C C================================================================== C SUBROUTINE R00002(COORD,SINA,COSA,I,J) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM) WRITE(6,'('' == symtrz.f R00002 =='')') CALL R00005(COORD,-1) DO 1 K=1,3 BUFF=-SINA*R(K,I)+COSA*R(K,J) R(K,I)=COSA*R(K,I)+SINA*R(K,J) 1 R(K,J)=BUFF CALL R00005(COORD,1) RETURN END C C==================================================================== C SUBROUTINE R00003(NAT,COORD,JUMP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM),NAT(NUMATM),WINK(2) DATA BIG,TOLER / 1.D35,0.1/ DATA WINK(1),WINK(2)/ 0.955316618125D0, 0.6523581398D0 / WRITE(6,'('' == symtrz.f R00003 =='')') GOTO (1,5),JUMP 1 IELEM(19)=1 INDEX=0 XMIN=BIG DO 2 I=1,NUMAT DIST=COORD(1,I)**2+COORD(2,I)**2+COORD(3,I)**2 IF(DIST.LT.TOLER) GOTO 2 IF(DIST.GT.XMIN) GOTO 2 INDEX=I XMIN=DIST 2 CONTINUE DIST=SQRT(XMIN) CALL R00005(COORD,-1) R(1,3)=COORD(1,INDEX)/DIST R(2,3)=COORD(2,INDEX)/DIST R(3,3)=COORD(3,INDEX)/DIST BUFF=SQRT(R(1,3)**2+R(2,3)**2) BUFF1=SQRT(R(1,3)**2+R(3,3)**2) IF(BUFF.GT.BUFF1) GOTO 3 R(1,1)= R(3,3)/BUFF1 R(2,1)=0.D0 R(3,1)=-R(1,3)/BUFF1 GOTO 4 3 R(1,1)= R(2,3)/BUFF R(2,1)=-R(1,3)/BUFF R(3,1)=0.D0 4 R(1,2)= R(2,3)*R(3,1)-R(2,1)*R(3,3) R(2,2)= R(3,3)*R(1,1)-R(3,1)*R(1,3) R(3,2)= R(1,3)*R(2,1)-R(1,1)*R(2,3) CALL R00005(COORD,1) RETURN 5 WINK2=0.D0 IF(IELEM(8).LT.1) GOTO 8 DO 6 I=1,2 JOTA=18-4*I WINK2=WINK(I) SINA=SIN(WINK2) COSA=COS(WINK2) CALL R00002(COORD,SINA,COSA,1,3) CALL R00007(NAT,COORD,JOTA) IF(IELEM(JOTA).GT.0) GOTO 7 WINK2=-WINK2 SINB=SIN(2.D0*WINK2) COSB=COS(2.D0*WINK2) CALL R00002(COORD,SINB,COSB,1,3) CALL R00007(NAT,COORD,JOTA) IF(IELEM(JOTA).GT.0) GOTO 7 CALL R00002(COORD,SINA,COSA,1,3) 6 CONTINUE 7 CALL R00007(NAT,COORD,9) IF(IELEM(10).GT.0) CALL R00007(NAT,COORD,17) GOTO 10 8 WINK2=-WINK(1) IF(IELEM(10).GT.0) WINK2=-WINK(2) SINA=-SIN(WINK2) COSA=COS(WINK2) CALL R00002(COORD,SINA,COSA,1,3) CALL R00007(NAT,COORD,8) CALL R00002(COORD,-SINA,COSA,1,3) IF(IELEM(8).GT.0) GOTO 10 IF(IELEM(9).GT.0) GOTO 9 WINK2=-WINK2 GOTO 10 9 CALL R00002(COORD,0.707106781186D0,0.707106781186D0,1,2) 10 CUB(1,1)=COS(WINK2) CUB(3,3)=CUB(1,1) CUB(1,3)=SIN(WINK2) CUB(3,1)=-CUB(1,3) CALL R00004(CUB,8) CALL R00004(CUB,15) CALL R00007(NAT,COORD,8) CALL R00007(NAT,COORD,15) RETURN END C C===================================================================== C SUBROUTINE R00004(FMAT,IPLACE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DIMENSION HELP(3,3),FMAT(3,3) WRITE(6,'('' == symtrz.f R00004 =='')') DO 1 I=1,3 DO 1 J=1,3 HELP(I,J)=0.D0 DO 1 K=1,3 DO 1 L=1,3 1 HELP(I,J)=HELP(I,J)+FMAT(I,L)*FMAT(J,K)*ELEM(L,K,IPLACE) DO 2 I=1,3 DO 2 J=1,3 2 ELEM(I,J,IPLACE)=HELP(I,J) RETURN END C C========================================================================== C SUBROUTINE R00005(COORD,JUMP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM),HELP(3) WRITE(6,'('' == symtrz.f R00005 =='')') IF(JUMP.LT.0) GOTO 3 DO 2 I=1,NUMAT DO 1 J=1,3 1 HELP(J)=COORD(J,I) DO 2 J=1,3 COORD(J,I)=0.D0 DO 2 K=1,3 2 COORD(J,I)=COORD(J,I)+R(K,J)*HELP(K) RETURN 3 DO 5 I=1,NUMAT DO 4 J=1,3 4 HELP(J)=COORD(J,I) DO 5 J=1,3 COORD(J,I)=0.D0 DO 5 K=1,3 5 COORD(J,I)=COORD(J,I)+R(J,K)*HELP(K) RETURN END C C======================================================================== C SUBROUTINE R00006(IOPER,IPLACE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DIMENSION J(3,20) DATA J(1, 1),J(2, 1),J(3, 1) / 1 , -1 , -1 / DATA J(1, 2),J(2, 2),J(3, 2) / -1 , 1 , -1 / DATA J(1, 3),J(2, 3),J(3, 3) / -1 , -1 , 1 / DATA J(1, 4),J(2, 4),J(3, 4) / 1 , 1 , -1 / DATA J(1, 5),J(2, 5),J(3, 5) / 1 , -1 , 1 / DATA J(1, 6),J(2, 6),J(3, 6) / -1 , 1 , 1 / DATA J(1, 7),J(2, 7),J(3, 7) / -1 , -1 , -1 / DATA J(1, 8),J(2, 8),J(3, 8) / 3 , 0 , 1 / DATA J(1, 9),J(2, 9),J(3, 9) / 4 , 0 , 1 / DATA J(1,10),J(2,10),J(3,10) / 5 , 0 , 1 / DATA J(1,11),J(2,11),J(3,11) / 6 , 0 , 1 / DATA J(1,12),J(2,12),J(3,12) / 7 , 0 , 1 / DATA J(1,13),J(2,13),J(3,13) / 8 , 0 , 1 / DATA J(1,14),J(2,14),J(3,14) / 4 , 0 , -1 / DATA J(1,15),J(2,15),J(3,15) / 6 , 0 , -1 / DATA J(1,16),J(2,16),J(3,16) / 8 , 0 , -1 / DATA J(1,17),J(2,17),J(3,17) / 10 , 0 , -1 / DATA J(1,18),J(2,18),J(3,18) / 12 , 0 , -1 / DATA J(1,19),J(2,19),J(3,19) / 5 , 0 , -1 / DATA J(1,20),J(2,20),J(3,20) / 0 , 0 , -1 / DATA TWOPI / 6.283185308D0 / WRITE(6,'('' == symtrz.f R00006 =='')') DO 2 I=1,3 DO 1 K=1,3 1 ELEM(I,K,IPLACE)=0. 2 ELEM(I,I,IPLACE)=J(I,IOPER) IF(IOPER.EQ.20) GOTO 4 IF(J(1,IOPER).LT.2) GOTO 3 ANGLE=TWOPI/FLOAT(J(1,IOPER)) ELEM(1,1,IPLACE)=COS(ANGLE) ELEM(2,2,IPLACE)=ELEM(1,1,IPLACE) ELEM(2,1,IPLACE)=SIN(ANGLE) ELEM(1,2,IPLACE)=-ELEM(2,1,IPLACE) 3 IF((IOPER.EQ.8).OR.(IOPER.EQ.15)) CALL R00004(CUB,IPLACE) RETURN 4 ELEM(1,2,IPLACE)=1.D0 ELEM(2,1,IPLACE)=1.D0 RETURN END C C====================================================================== C SUBROUTINE R00007(NAT,COORD,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION NAT(NUMATM),COORD(3,NUMATM),HELP(3),E(3,3) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DATA TOLER / 0.01 D0/ WRITE(6,'('' == symtrz.f R00007 =='')') IRESUL=1 IQUAL=0 DO 2 I=1,NUMAT HELP(1)=COORD(1,I)*ELEM(1,1,IOPER)+COORD(2,I)*ELEM(1,2,IOPER) . +COORD(3,I)*ELEM(1,3,IOPER) HELP(2)=COORD(1,I)*ELEM(2,1,IOPER)+COORD(2,I)*ELEM(2,2,IOPER) . +COORD(3,I)*ELEM(2,3,IOPER) HELP(3)=COORD(1,I)*ELEM(3,1,IOPER)+COORD(2,I)*ELEM(3,2,IOPER) . +COORD(3,I)*ELEM(3,3,IOPER) DO 1 J=1,NUMAT IF(NAT(I).NE.NAT(J)) GOTO 1 IF(ABS(COORD(1,J)-HELP(1)).GT.TOLER) GOTO 1 IF(ABS(COORD(2,J)-HELP(2)).GT.TOLER) GOTO 1 IF(ABS(COORD(3,J)-HELP(3)).GT.TOLER) GOTO 1 JELEM(IOPER,I)=J IF(I.EQ.J) IQUAL=IQUAL+1 GOTO 2 1 CONTINUE IRESUL=0 2 CONTINUE IELEM(IOPER)=IRESUL RETURN END C C===================================================================== C SUBROUTINE R00008(IGROUP,NCODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) INTEGER C1(3),CS(7),CI(7),C2(7),C3(9),C4(16),C5(19),C6(29), . C7(33),C8(46),D2(21),D3(13),D4(31),D5(21),D6(43), . C2V(21),C3V(13),C4V(31),C5V(21),C6V(43), . C2H(21),C3H(29),C4H(55),C5H(67),C6H(105), . D2H(73),D3H(43),D4H(111),D5H(73),D6H(157), . D2D(31),D3D(43),D4D(57),D5D(73),D6D(91), . S4(16),S6(29),S8(46), . TD(31),OH(111),IH(111),CV(10),DH(25) DIMENSION J(43),JTAB(1844),ISIGMA(43) EQUIVALENCE (JTAB( 1),C1(1)),(JTAB( 4),CS(1)) EQUIVALENCE (JTAB( 11),CI(1)),(JTAB( 18),C2(1)) EQUIVALENCE (JTAB( 25),C3(1)),(JTAB( 34),C4(1)) EQUIVALENCE (JTAB( 50),C5(1)),(JTAB( 69),C6(1)) EQUIVALENCE (JTAB( 98),C7(1)),(JTAB( 131),C8(1)) EQUIVALENCE (JTAB( 177),D2(1)),(JTAB( 198),D3(1)) EQUIVALENCE (JTAB( 211),D4(1)),(JTAB( 242),D5(1)) EQUIVALENCE (JTAB( 263),D6(1)),(JTAB( 306),C2V(1)) EQUIVALENCE (JTAB( 327),C3V(1)),(JTAB( 340),C4V(1)) EQUIVALENCE (JTAB( 371),C5V(1)),(JTAB( 392),C6V(1)) EQUIVALENCE (JTAB( 435),C2H(1)),(JTAB( 456),C3H(1)) EQUIVALENCE (JTAB( 485),C4H(1)),(JTAB( 540),C5H(1)) EQUIVALENCE (JTAB( 607),C6H(1)),(JTAB( 712),D2H(1)) EQUIVALENCE (JTAB( 785),D3H(1)),(JTAB( 828),D4H(1)) EQUIVALENCE (JTAB( 939),D5H(1)),(JTAB(1012),D6H(1)) EQUIVALENCE (JTAB(1169),D2D(1)),(JTAB(1200),D3D(1)) EQUIVALENCE (JTAB(1243),D4D(1)),(JTAB(1300),D5D(1)) EQUIVALENCE (JTAB(1373),D6D(1)),(JTAB(1464),S4(1)) EQUIVALENCE (JTAB(1480),S6(1)),(JTAB(1509),S8(1)) EQUIVALENCE (JTAB(1555),TD(1)),(JTAB(1586),OH(1)) EQUIVALENCE (JTAB(1697),IH(1)) EQUIVALENCE (JTAB(1808),CV(1)),(JTAB(1818),DH(1)) DATA J( 1),J( 2),J( 3),J( 4)/ 1010001, 2020004, 2020011, 2020018 / DATA J( 5),J( 6),J( 7),J( 8)/ 3020025, 4030034, 5030050, 6040069 / DATA J( 9),J(10),J(11),J(12)/ 7040098, 8050131, 4040177, 3030198 / DATA J(13),J(14),J(15),J(16)/ 5050211, 4040242, 6060263, 4040306 / DATA J(17),J(18),J(19),J(20)/ 3030327, 5050340, 4040371, 6060392 / DATA J(21),J(22),J(23),J(24)/ 4040435, 6040456, 8060485,10060540 / DATA J(25),J(26),J(27),J(28)/12080607, 8080712, 6060785,10100828 / DATA J(29),J(30),J(31),J(32)/ 8080939,12121012, 5051169, 6061200 / DATA J(33),J(34),J(35),J(36)/ 7071243, 8081300, 9091373, 4031464 / DATA J(37),J(38),J(39),J(40)/ 6041480, 8051509, 5051555,10101586 / DATA J(41),J(42),J(43) /10101697, 2031808, 3061818 / DATA ISIGMA / 1,1,1,2,3,4,5,6,7,8,4,6,8,10,12,2,3,4,5,6,2,3,4,5,6, . 4,6,8,10,12,4,6,8,10,12,2,3,4,12,24,60,1,2 / DATA C1 ./ 2HC1, .4HA , 0 / DATA CS ./ 2HCS, .4HA , 8 , 20104 , .4HA , 1 , -1 / DATA CI ./ 2HCI, .4HAG , 64 , 10107 , .4HAU , 1 , -1 / DATA C2 ./ 2HC2, .4HA , 4 , 2140103 , .4HB , 1 , -1 / DATA C3 ./ 2HC3, .4HA , 128 , 3140108 , 3240122 , .4HE , 2 , -1 , -1 / DATA C4 ./ 2HC4, .4HA , 260 ,4140109 ,2140103 ,4340123 , .4HB , 1 , -1 , 1 , -1 , .4HE , 2 , 0 , -2 , 0 / DATA C5 ./ 2HC5, .2HA , 512 , 5140110 , 5240122 , 5340123 ,5440124, .2HE1 , 2 , 51 , 52 , 52 , 51 , .2HE2 , 2 , 52 , 51 , 51 , 52 / DATA C6 ./ 2HC6, .2HA , 1156 ,6140111 ,3140108 ,2140103 ,3240133 ,6540125 , .2HB , 1 , -1 , 1 , -1 , 1 , -1 , .2HE1 , 2 , 1 , -1 , -2 , -1 , 1 , .2HE2 , 2 , -1 , -1 , 2 , -1 , -1 / DATA C7 ./ 2HC7, .2HA ,2048,7140112,7240122,7340123,7440124,7540125,7640126, .2HE1 , 2 , 71 , 72 , 73 , 73 , 72 , 71 , .2HE2 , 2 , 72 , 73 , 71 , 71 , 73 , 72 , .2HE3 , 2 , 73 , 71 , 72 , 72 , 71 , 73 / DATA C8 ./ 2HC8, .2HA ,4356,8140113,4140109,2140103,4340134,8340123,8540124,8740125, .2HB , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , .2HE1 , 2 , 81 , 0 , -2 , 0 , 83 , 83 , 81 , .2HE2 , 2 , 0 , -2 , 2 , -2 , 0 , 0 , 0 , .2HE3 , 2 , 83 , 0 , -2 , 0 , 81 , 81 , 83 / DATA D2 ./ 2HD2, .4HA , 7 ,2140103 ,2140102 ,2140101 , .4HB1 , 1 , 1 , -1 , -1 , .4HB2 , 1 , -1 , 1 , -1 , .4HB3 , 1 , -1 , -1 , 1 / DATA D3 ./ 2HD3, .4HA1 , 129 , 3140208 , 2140301 , .4HA2 , 1 , 1 , -1 , .4HE , 2 , -1 , 0 / DATA D4 ./ 2HD4, .2HA1 , 263 , 4140209 , 2140103 ,2140201 ,2140220 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA D5 ./ 2HD5, .4HA1 , 513 ,5140210 ,5240222 , 2140501 , .4HA2 , 1 , 1 , 1 , -1 , .4HE1 , 2 , 51 , 52 , 0 , .4HE2 , 2 , 52 , 51 , 0 / DATA D6 ./ 2HD6, .2HA1 , 1159 ,6140211 ,3140208 ,2140103 ,2140301 ,2140302 , .2HA2 , 1 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , -1 , 1 , .2HE1 , 2 , 1 , -1 , -2 , 0 , 0 , .2HE2 , 2 , -1 , -1 , 2 , 0 , 0 / DATA C2V ./ 3HC2V, .4HA1 , 52 ,2140103 , 20105 , 20106 , .4HA2 , 1 , 1 , -1 , -1 , .4HB1 , 1 , -1 , 1 , -1 , .4HB2 , 1 , -1 , -1 , 1 / DATA C3V ./ 3HC3V, .4HA1 , 144 ,3140208 , 20305 , .4HA2 , 1 , 1 , -1 , .4HE , 2 , -1 , 0 / DATA C4V ./ 3HC4V, .2HA1 , 308 ,4140209 ,2140103 , 20205 ,20224 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA C5V ./ 3HC5V, .4HA1 , 528 , 5140210 , 5240222 , 20505 , .4HA2 , 1 , 1 , 1 , -1 , .4HE1 , 2 , 51 , 52 , 0 , .4HE2 , 2 , 52 , 51 , 0 / DATA C6V ./ 3HC6V, .2HA1 , 1204 , 6140211, 3140208,2140103 , 20305 , 20306 , .2HA2 , 1 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , -1 , 1 , .2HE1 , 2 , 1 , -1 , -2 , 0 , 0 , .2HE2 , 2 , -1 , -1 , 2 , 0 , 0 / DATA C2H ./ 3HC2H, .4HAG , 76 ,2140103 , 10107 , 20104 , .4HBG , 1 , -1 , 1 , -1 , .4HAU , 1 , 1 , -1 , -1 , .4HBU , 1 , -1 , -1 , 1 / DATA C3H ./ 3HC3H, .2HA , 136 , 3140108, 3240122, 20104, 3130124,3530143 , .2HE , 2 , -1 , -1 , 2 , -1 , -1 , .2HA , 1 , 1 , 1 , -1 , -1 , -1 , .2HE , 2 , -1 , -1 , -2 , 1 , 1 / DATA C4H ./ 3HC4H, .2HAG ,8524,4140109,2140103,4340123,10107,4330152,20104,4130114, .2HBG , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HEG , 2 , 0 , -2 , 0 , 2 , 0 , -2 , 0 , .2HAU , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .2HBU , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , .2HEU , 2 , 0 , -2 , 0 , -2 , 0 , 2 , 0 / DATA C5H ./ 3HC5H, .2HA ,520,5140110,5240122,5340123,5440124,20104,5130119,5730163, . 5330164,5930165, .3HE1 , 2 , 51 , 52 ,52 , 51 , 2 , 51 , 52 , 52 , 51 , .3HE2 , 2 , 52 , 51 ,51 , 52 , 2 , 52 , 51 , 51 , 52 , .2HA , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HE1 , 2 , 51 , 52 ,52 , 51 , -2 ,103 ,101 ,101 ,103 , .3HE2 , 2 , 52 , 51 ,51 , 52 , -2 ,101 ,103 ,103 ,101 / DATA C6H ./ 3HC6H, .2HAG ,17612,6140111,3140108,2140103,3240133,6540125,10107,20104, . 3530127,6530137,6130115,3130183, .3HBG , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , .3HE1G, 2 , 1 , -1 , -2 , -1 , 1 , 2 , -2 , 1 , -1 , -1 , 1 , .3HE2G, 2 , -1 , -1 , 2 , -1 , -1 , 2 , 2 , -1 , -1 , -1 , -1 , .3HAU , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , .3HBU , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , .3HE1U, 2 , 1 , -1 , -2 , -1 , 1 , -2 , 2 , -1 , 1 , 1 , -1 , .3HE2U, 2 , -1 , -1 , 2 , -1 , -1 , -2 , -2 , 1 , 1 , 1 , 1 / DATA D2H ./ 3HD2H, .2HAG, 127,2140103,2140102,2140101, 10107, 20104,20105,20106, .3HB1G, 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1, .3HB2G, 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1, .3HB3G, 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1, .3HAU , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1, .3HB1U, 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1, .3HB2U, 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1, .3HB3U, 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1/ DATA D3H ./ 3HD3H, .3HA1 , 153 ,3140208 ,2140301 , 20104 ,3130224 , 20305 , .3HA2 , 1 , 1 , -1 , 1 , 1 , -1 , .3HE , 2 , -1 , 0 , 2 , -1 , 0 , .3HA1 , 1 , 1 , 1 , -1 , -1 , -1 , .3HA2 , 1 , 1 , -1 , -1 , -1 , 1 , .3HE , 2 , -1 , 0 , -2 , 1 , 0 / DATA D4H ./ 3HD4H, .3HA1G ,8575,4140209,2140103,2140201,2140220,10107,4130214,20104, . 20205,20229, .3HA2G , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , .3HB1G , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , .3HB2G , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , .3HEG , 2 , 0 , -2 , 0 , 0 , 2 , 0 , -2 , 0 , 0 , .3HA1U , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , .3HB1U , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , .3HB2U , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , .3HEU , 2 , 0 , -2 , 0 , 0 , -2 , 0 , 2 , 0 , 0 / DATA D5H ./ 3HD5H, .3HA1 ,537, 5140210, 5240222,2140501,20104,5130219, 5330263,20505, .3HA2 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , .3HE1 , 2 , 51 , 52 , 0 , 2 , 51 , 52 , 0 , .3HE2 , 2 , 52 , 51 , 0 , 2 , 52 , 51 , 0 , .3HA1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .3HA2 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , .3HE1 , 2 , 51 , 52 , 0 , -2 , 103 , 101 , 0 , .3HE2 , 2 , 52 , 51 , 0 , -2 , 101 , 103 , 0 / DATA D6H ./ 3HD6H, .3HA1G ,17663,6140211,3140208,2140103,2140301,2140302,10107,20104, . 6130215,3130238,20306,20305, .3HA2G , 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, .3HB1G , 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, .3HB2G , 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, .3HE1G , 2, 1, -1, -2, 0, 0, 2, -2, -1, 1, 0, 0, .3HE2G , 2, -1, -1, 2, 0, 0, 2, 2, -1, -1, 0, 0, .3HA1U , 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, .3HA2U , 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, .3HB1U , 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, .3HB2U , 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, .3HE1U , 2, 1, -1, -2, 0, 0, -2, 2, 1, -1, 0, 0, .3HE2U , 2, -1, -1, 2, 0, 0, -2, -2, 1, 1, 0, 0/ DATA D2D ./ 3HD2D, .2HA1 , 8244 ,4130214 , 2140103 ,2140220 ,20205 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA D3D ./ 3HD3D, .3HA1G,16594 ,3140208 ,2140302 , 10107 ,6130215 , 20305 , .3HA2G, 1 , 1 , -1 , 1 , 1 , -1 , .3HEG , 2 , -1 , 0 , 2 , -1 , 0 , .3HA1U, 1 , 1 , 1 , -1 , -1 , -1 , .3HA2U, 1 , 1 , -1 , -1 , -1 , 1 , .3HEU , 2 , -1 , 0 , -2 , 1 , 0 / DATA D4D ./ 3HD4D, .3HA1 ,33076,8130216 ,4140209, 8330223,2140103,20405,2140426, .3HA2 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , .3HB1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , .3HB2 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , .3HE1 , 2 , 81 , 0 , 83 , -2 , 0 , 0 , .3HE2 , 2 , 0 , -2 , 0 , 2 , 0 , 0 , .3HE3 , 2 , 83 , 0 , 81 , -2 , 0 , 0 / DATA D5D ./ 3HD5D, .3HA1G ,66130,5140210,5240222,2140502,10107,10130217, . 10330226,20505, .3HA2G , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , .3HE1G , 2 , 51 , 52 , 0 , 2 , 52 , 51 , 0 , .3HE2G , 2 , 52 , 51 , 0 , 2 , 51 , 52 , 0 , .3HA1U , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , .3HE1U , 2 , 51 , 52 , 0 , -2 , 101 , 103 , 0 , .3HE2U , 2 , 52 , 51 , 0 , -2 , 103 , 101 , 0 / DATA D6D ./ 3HD6D, .2HA1 ,140468,12130218,6140211,4130214,3140208,12530225,2140103, . 20605,2140620, .3HA2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,-1 ,-1 , .3HB1 , 1 , -1 , 1 ,-1 , 1 , -1 , 1 ,-1 , 1 , .3HB2 , 1 , -1 , 1 ,-1 , 1 , -1 , 1 , 1 ,-1 , .3HE1 , 2 , 121 , 1 , 0 ,-1 , 125 ,-2 , 0 , 0 , .3HE2 , 2 , 1 ,-1 ,-2 ,-1 , 1 , 2 , 0 , 0 , .3HE3 , 2 , 0 ,-2 , 0 , 2 , 0 ,-2 , 0 , 0 , .3HE4 , 2 , -1 ,-1 , 2 ,-1 , -1 , 2 , 0 , 0 , .3HE5 , 2 , 125 , 1 , 0 ,-1 , 121 ,-2 , 0 , 0 / DATA S4 ./ 3HS4 , .4HA , 8196 , 4130114, 2140103, 4330123 , .4HB , 1 , -1 , 1 , -1 , .4HE , 2 , 0 , -2 , 0 / DATA S6 ./ 3HS6 , .3HAG ,16576 ,3140108 ,3240122 , 10107 , 6530124 , 6130115 , .3HEG , 2 , -1 , -1 , 2 , -1 , -1 , .3HAU , 1 , 1 , 1 , -1 , -1 , -1 , .3HEU , 2 , -1 , -1 , -2 , 1 , 1 / DATA S8 ./ 3HS8 , .3HA ,33028,8130116,4140109,8330123,2140103,8530125,4340135, . 8730127, .3HB , 1, -1 , 1, -1 , 1, -1 , 1, -1 , .3HE1 , 2, 81 , 0, 83 ,-2, 83 , 0, 81 , .3HE2 , 2, 0 ,-2, 0 , 2, 0 ,-2, 0 , .3HE3 , 2, 83 , 0, 81 ,-2, 81 , 0, 83 / DATA TD ./ 3HTD , .2HA1 ,270516 , 3140808, 2140303, 4130614, 20605 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HE , 2 , -1 , 2 , 0 , 0 , .2HT1 , 3 , 0 , -1 , 1 , -1 , .2HT2 , 3 , 0 , -1 , -1 , 1 / DATA OH ./ 3HOH , .3HA1G ,287231,3140808,2140601,4140609,2140303,10107,4130614, . 6130815,20304,20605, .3HA2G , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , .3HEG , 2 , -1 , 0 , 0 , 2 , 2 , 0 , -1 , 2 , 0 , .3HT1G , 3 , 0 , -1 , 1 , -1 , 3 , 1 , 0 , -1 , -1 , .3HT2G , 3 , 0 , 1 , -1 , -1 , 3 , -1 , 0 , -1 , 1 , .3HA1U , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , .3HEU , 2 , -1 , 0 , 0 , 2 , -2 , 0 , 1 , -2 , 0 , .3HT1U , 3 , 0 , -1 , 1 , -1 , -3 , -1 , 0 , 1 , 1 , .3HT2U , 3 , 0 , 1 , -1 , -1 , -3 , 1 , 0 , 1 , -1 / DATA IH ./ 3HIH , .3HAG ,344786,5141210,5241222,3142008,2141502,10107,10131217, . 10331227,6132015,21505, .3HT1G,3, 101 , 103 , 0,-1, 3, 103 , 101 , 0 ,-1 , .3HT2G,3, 103 , 101 , 0,-1, 3, 101 , 103 , 0 ,-1 , .3HGG ,4, -1 , -1 , 1, 0, 4, -1 , -1 , 1 , 0 , .3HHG ,5, 0 , 0 ,-1, 1, 5, 0 , 0 ,-1 , 1 , .3HAU ,1, 1 , 1 , 1, 1,-1, -1 , -1 ,-1 ,-1 , .3HT1U,3, 101 , 103 , 0,-1,-3, 51 , 52 , 0 , 1 , .3HT2U,3, 103 , 101 , 0,-1,-3, 52 , 51 , 0 , 1 , .3HGU ,4, -1 , -1 , 1, 0,-4, 1 , 1 ,-1 , 0 , .3HHU ,5, 0 , 0 ,-1, 1,-5, 0 , 0 , 1 ,-1 / DATA CV ./ 3HC*V, .3HSI , 524340 , 4140109 , .3HPI , 2 , 0 , .3HDE , 2 , -2 / DATA DH ./ 3HD*H, .3HSIG , 524415 , 4140109 , 10107 , .3HPIG , 2 , 0 , 2 , .3HDEG , 2 , -2 , 2 , .3HSIU , 1 , 1 , -1 , .3HPIU , 2 , 0 , -2 , .3HDEU , 2 , -2 , -2 / WRITE(6,'('' == symtrz.f R00008 =='')') SIG=1.D0 I=IGROUP IF(NCODE.LT.0) GOTO 2 IGROUP=0 DO 1 I=1,43 ICHECK=J(I)/10000 ICHECK=J(I)-10000*ICHECK+2 ICHECK=JTAB(ICHECK) IF(ICHECK.EQ.NCODE) GOTO 2 1 CONTINUE RETURN 2 IGROUP=I JGROUP=J(IGROUP) J1=JGROUP/1000000 KDIM=JGROUP-1000000*J1 I1=KDIM/10000 JGROUP=KDIM-10000*I1 NAME=JTAB(JGROUP) SIG=ISIGMA(IGROUP) J2=0 DO 4 I=1,I1 JGROUP=JGROUP+1 JX(1,I)=JTAB(JGROUP) DO 4 K=1,J1 JGROUP=JGROUP+1 BUFF=JTAB(JGROUP) IF(I.GT.1) GOTO 3 JX(2,K)=JTAB(JGROUP)/100 JX(3,K)=JTAB(JGROUP)-100*JX(2,K) JX(4,K)=JX(2,K)/100 JX(5,K)=JX(2,K)-100*JX(4,K) JX(2,K)=JX(5,K) JX(5,K)=JX(4,K)/10 JX(4,K)=JX(4,K)-10*JX(5,K) JX(2,1)=1 JX(3,1)=0 J2=J2+JX(2,K) BUFF=1.D0 3 IF(BUFF.LT.10.) GOTO 4 NZZ=JTAB(JGROUP) NZ=NZZ/10 FZ=NZ FN=NZZ-10*NZ BUFF=2.D0*COS(6.283185307179D0*FN/FZ) 4 T(I,K)=BUFF LINA=IGROUP-41 RETURN END C C================================================================ C SUBROUTINE R00009(NAT,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION HELP(3,3),NAT(NUMATM),COORD(3,NUMATM) WRITE(6,'('' == symtrz.f R00009 =='')') DO 1 I=1,3 DO 1 J=1,NUMAT 1 COORD(I,J)=COORD(I,J)-SHIFT(I) CALL R00005(COORD,1) IF(J1.LT.2) RETURN DO 5 I=2,J1 JOTA=JX(3,I) JOT=1 IF(JOTA.LE.20) GOTO 2 JOTB=JOTA/10 JOT=JOTA-10*JOTB JOTA=JX(3,JOTB) 2 CALL R00006(JOTA,I) IF(JOT.EQ.1) GOTO 5 DO 3 J=1,3 DO 3 K=1,3 HELP(J,K)=0.D0 DO 3 L=1,3 3 HELP(J,K)=HELP(J,K)+ELEM(J,L,JOT)*ELEM(L,K,I) DO 4 J=1,3 DO 4 K=1,3 4 ELEM(J,K,I)=HELP(J,K) 5 CONTINUE DO 6 I=2,J1 CALL R00007(NAT,COORD,I) JX(6,I)=IQUAL IF(IELEM(I).LT.1) IERROR=5 6 CONTINUE CALL R00005(COORD,-1) DO 7 I=1,3 DO 7 J=1,NUMAT 7 COORD(I,J)=COORD(I,J)+SHIFT(I) RETURN END C C=================================================================== C SUBROUTINE R00010(COEFF,NTYPE,ICOUNT,NCDUM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) C CHARACTER*4 NAME,ISTA C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; NAME is not used... CHARACTER*4 ISTA COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) DIMENSION NTYPE(MXDIM),COEFF(NCDUM,NCDUM) DIMENSION CHAR(12),ICOUNT(12) C DATA TOLER,IFRA / 0.1, '????'/ C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ INTEGER NAMES DATA TOLER,IFRA / 0.1, 0 / C WRITE(6,'('' == symtrz.f R00010 =='')') NDORBS=0 DO 1 I=1,I1 1 ICOUNT(I)=0 NAMES=IFRA IF(J1.EQ.1) NAMES=JX(1,1) DO 2 I=1,NORBS INDEX(I)=I 2 NAMO(I)=NAMES IF(J1.EQ.1) RETURN IF(IERROR.GT.0) RETURN IFOUND=0 I=0 3 IK=I+1 DO 4 J=1,J1 4 CHAR(J)=0.D0 5 I=I+1 IF(I.GT.NORBS) GOTO 10 DO 6 J=1,J1 CHAR(J)=CHAR(J)+R00011(COEFF,NTYPE,I,J,NCDUM) IF(CHAR(J).GT.10.) GOTO 3 6 CONTINUE DO 9 K=1,I1 DO 7 J=1,J1 CHECK=ABS(CHAR(J)-T(K,J)) IF(CHECK.GT.TOLER) GOTO 9 7 CONTINUE ICOUNT(K)=ICOUNT(K)+1 DO 8 J=IK,I IFOUND=IFOUND+1 INDEX(J)=ICOUNT(K) 8 NAMO(J)=JX(1,K) GOTO 3 9 CONTINUE GOTO 5 10 IF(IFOUND.NE.NORBS) IERROR=99 RETURN END C C====================================================================== C FUNCTION R00011(COEFF,NTYPE,JORB,IOPER,NCDUM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION NTYPE(MXDIM),COEFF(NCDUM,NCDUM),E(3,3,20) DIMENSION H(5),P(3),D(5),IP(2,3),ID(2,5),LOC(2,50) EQUIVALENCE (ELEM(1,1,1),E(1,1,1)) WRITE(6,'('' == symtrz.f R00011 =='')') R00011=1.D0 IF(IOPER.EQ.1) RETURN DO 1 I=1,NORBS VECT(1,I)=0.D0 1 VECT(2,I)=0.D0 DO 13 IATOM=1,NUMAT JATOM=JELEM(IOPER,IATOM) KI=0 KJ=0 DO 3 I=1,NORBS ICHECK=NTYPE(I)/100 IF(ICHECK.NE.IATOM) GOTO 2 KI=KI+1 LOC(1,KI)=I 2 IF(ICHECK.NE.JATOM) GOTO 3 KJ=KJ+1 LOC(2,KJ)=I 3 CONTINUE IBASE=KI DO 4 I=1,IBASE ICHECK=LOC(1,I) ITEST=NTYPE(ICHECK)-10*(NTYPE(ICHECK)/10) IF(ITEST.GT.0) GOTO 4 JCHECK=LOC(2,I) LOC(1,I)=0 KI=KI-1 VECT(1,ICHECK)=COEFF(ICHECK,JORB) VECT(2,JCHECK)=COEFF(ICHECK,JORB) 4 CONTINUE MINUS=100*IATOM 5 IF(KI.LT.3) GOTO 13 DO 6 I=1,3 IP(1,I)=0 6 ID(1,I)=0 ID(1,4)=0 ID(1,5)=0 NQZP=-1 NQZD=-1 DO 9 I=1,IBASE IF(LOC(1,I).LT.1) GOTO 9 ICHECK=LOC(1,I) ITEST=NTYPE(ICHECK) INQZ=(ITEST-MINUS)/10 ILQZ=ITEST-10*(ITEST/10) IF(ILQZ.GT.8) GOTO 8 IF(ILQZ.GT.3) GOTO 7 IF(NQZP.LT.0) NQZP=INQZ IF(INQZ.NE.NQZP) GOTO 9 P(ILQZ)=COEFF(ICHECK,JORB) IP(1,ILQZ)=LOC(1,I) IP(2,ILQZ)=LOC(2,I) GOTO 8 7 IF(NQZD.LT.0) NQZD=INQZ IF(INQZ.NE.NQZD) GOTO 9 ILQZ=ILQZ-3 D(ILQZ)=COEFF(ICHECK,JORB) ID(1,ILQZ)=LOC(1,I) ID(2,ILQZ)=LOC(2,I) 8 LOC(1,I)=0 KI=KI-1 9 CONTINUE IF(NQZP.LT.0) GOTO 11 H(1)=R(1,1)*P(1)+R(2,1)*P(2)+R(3,1)*P(3) H(2)=R(1,2)*P(1)+R(2,2)*P(2)+R(3,2)*P(3) H(3)=R(1,3)*P(1)+R(2,3)*P(2)+R(3,3)*P(3) P(1)=E(1,1,IOPER)*H(1)+E(1,2,IOPER)*H(2)+E(1,3,IOPER)*H(3) P(2)=E(2,1,IOPER)*H(1)+E(2,2,IOPER)*H(2)+E(2,3,IOPER)*H(3) P(3)=E(3,1,IOPER)*H(1)+E(3,2,IOPER)*H(2)+E(3,3,IOPER)*H(3) DO 10 I=1,3 IF(IP(1,I).LT.1) GOTO 16 II=IP(1,I) JJ=IP(2,I) VECT(1,II)=H(I) 10 VECT(2,JJ)=P(I) 11 IF(NQZD.LT.0) GOTO 5 CALL R00012(D,H,IOPER) DO 12 I=1,5 IF(ID(1,I).LT.1) GOTO 16 II=ID(1,I) JJ=ID(2,I) VECT(1,II)=H(I) 12 VECT(2,JJ)=D(I) KI=KI-5 GOTO 5 13 CONTINUE C1=0.D0 C2=0.D0 DO 14 I=1,NORBS C1=C1+VECT(1,I)*VECT(1,I) 14 C2=C2+VECT(1,I)*VECT(2,I) IF(ABS(C1).LT.1.E-5) GOTO 15 R00011=C2/C1 RETURN 15 R00011=100.D0 RETURN 16 IERROR=98 RETURN END C C======================================================================= C SUBROUTINE R00012(D,H,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION D(5),H(5),T1(5,5,12),S(3,3) CHARACTER JX*4 WRITE(6,'('' == symtrz.f R00012 =='')') IF(NDORBS.GT.0) GOTO 4 NDORBS=1 DO 1 I=1,3 DO 1 J=1,3 1 S(I,J)=R(I,J) CALL R00013(S,T1,1) DO 3 K=2,J1 DO 2 I=1,3 DO 2 J=1,3 2 S(I,J)=ELEM(I,J,K) CALL R00013(S,T1,K) 3 CONTINUE 4 DO 5 I=1,5 H(I)=0.D0 DO 5 J=1,5 5 H(I)=H(I)+T1(I,J,1)*D(J) DO 6 I=1,5 D(I)=0.D0 DO 6 J=1,5 6 D(I)=D(I)+T1(I,J,IOPER)*H(J) RETURN END C C================================================================= C SUBROUTINE R00013(R,T,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION R(3,3),T(5,5,12),F(2,4) LOGICAL RIGHT DATA PI,TOL,S12 / 3.1415926536D0 ,0.001D0,3.46410161513D0 / DATA S3,ONE / 1.73205080756D0 , 1.D0 / WRITE(6,'('' == symtrz.f R00013 =='')') R1=R(2,1)*R(3,2)-R(3,1)*R(2,2) R2=R(3,1)*R(1,2)-R(1,1)*R(3,2) R3=R(1,1)*R(2,2)-R(2,1)*R(1,2) CHECK=R1*R(1,3)+R2*R(2,3)+R3*R(3,3) RIGHT=CHECK.GT.0. R(1,3)=R1 R(2,3)=R2 R(3,3)=R3 ARG=R3 IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) B= ACOS(ARG) SINA=SQRT(1.D0-ARG*ARG) IF(SINA.LT.TOL) GOTO 1 ARG=R(3,2)/SINA IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) G= ASIN(ARG) ARG=R(2,3)/SINA IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) A= ASIN(ARG) GOTO 2 1 ARG=R(1,2) IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) G= ASIN(ARG) A=0.D0 2 F(1,1)=A F(1,2)=A F(1,3)=PI-A F(1,4)=PI-A F(2,1)=G F(2,3)=G F(2,2)=PI-G F(2,4)=PI-G DO 3 I=1,4 A=F(1,I) G=F(2,I) CHECK=ABS(SIN(B)*COS(A)+R(1,3)) IF(CHECK.GT.TOL) GOTO 3 CHECK=-SIN(G)*COS(B)*SIN(A)+COS(G)*COS(A) IF(ABS(CHECK-R(2,2)).GT.TOL) GOTO 3 CHECK=SIN(A)*COS(G)+COS(A)*COS(B)*SIN(G) IF(ABS(CHECK-R(1,2)).LE.TOL) GOTO 4 3 CONTINUE 4 G=-G A=-A B=-B E1=COS(B*0.5D0) X1=-SIN(B*0.5D0) E2=E1*E1 E3=E1*E2 E4=E2*E2 X2=X1*X1 X3=X1*X2 X4=X2*X2 TA=2.D0*A TG=2.D0*G T(1,1,IOPER)=E4*COS(TA+TG)+X4*COS(TA-TG) T(1,2,IOPER)=2.D0*E3*X1*COS(A+TG)-2.D0*E1*X3*COS(A-TG) T(1,3,IOPER)=2.D0*S3*E2*X2*COS(TG) T(1,4,IOPER)=2.D0*E3*X1*SIN(A+TG)-2.D0*E1*X3*SIN(A-TG) T(1,5,IOPER)=E4*SIN(TA+TG)+X4*SIN(TA-TG) T(2,1,IOPER)=2.D0*E1*X3*COS(TA-G)-2.D0*E3*X1*COS(TA+G) T(2,2,IOPER)=(E4-3.D0*E2*X2)*COS(A+G)-(3.D0*E2*X2-X4)*COS(A-G) T(2,3,IOPER)=2.D0*S3*(E3*X1-E1*X3)*COS(G) T(2,4,IOPER)=(E4-3.D0*E2*X2)*SIN(A+G)-(3.D0*E2*X2-X4)*SIN(A-G) T(2,5,IOPER)=-2.D0*E3*X1*SIN(TA+G)+2.D0*E1*X3*SIN(TA-G) T(3,1,IOPER)=S12*E2*X2*COS(TA) T(3,2,IOPER)=-S12*(E3*X1-E1*X3)*COS(A) T(3,3,IOPER)=E4-4.D0*E2*X2+X4 T(3,4,IOPER)=-S12*(E3*X1-E1*X3)*SIN(A) T(3,5,IOPER)=S12*E2*X2*SIN(TA) T(4,1,IOPER)=2.D0*E1*X3*SIN(TA-G)+2.D0*E3*X1*SIN(TA+G) T(4,2,IOPER)=-(E4-3.D0*E2*X2)*SIN(A+G)-(3.D0*E2*X2-X4)*SIN(A-G) T(4,3,IOPER)=-2.D0*S3*(E3*X1-E1*X3)*SIN(G) T(4,4,IOPER)=(E4-3.D0*E2*X2)*COS(A+G)+(3.D0*E2*X2-X4)*COS(A-G) T(4,5,IOPER)=-2.D0*E3*X1*COS(TA+G)-2.D0*E1*X3*COS(TA-G) T(5,1,IOPER)=-E4*SIN(TA+TG)+X4*SIN(TA-TG) T(5,2,IOPER)=-2.D0*E3*X1*SIN(A+TG)-2.D0*E1*X3*SIN(A-TG) T(5,3,IOPER)=-2.D0*S3*E2*X2*SIN(TG) T(5,4,IOPER)=2.D0*E3*X1*COS(A+TG)+2.D0*E1*X3*COS(A-TG) T(5,5,IOPER)=E4*COS(TA+TG)-X4*COS(TA-TG) IF(RIGHT) RETURN DO 5 I=1,5 T(2,I,IOPER)=-T(2,I,IOPER) 5 T(4,I,IOPER)=-T(4,I,IOPER) RETURN END C C====================================================================== C SUBROUTINE R00015(F,V,EW) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION F(6),A(3,3),V(3,3),EW(3) DATA TOLER /1.E-6 / WRITE(6,'('' == symtrz.f R00015 =='')') N=3 IJ=0 DO 2 J=1,N DO 1 I=1,J IJ=IJ+1 A(I,J)=F(IJ) A(J,I)=F(IJ) V(I,J)=0.D0 1 V(J,I)=0.D0 2 V(J,J)=1.D0 N1=N-1 ZETA=10.D0 3 SS=0.D0 DO 4 J=1,N1 DO 4 I=J,N1 IRG=I+1 4 SS=SS+ABS(A(IRG,J)) IF(SS-TOLER) 21,21,5 5 TAU=0.D0 DO 20 I=1,N I1=I+1 IF(N-I1) 20,6,6 6 DO 19 J=I1,N IF(ABS(A(J,I)).LT.1.E-30) GOTO 19 THETA=0.5D0*(A(J,J)-A(I,I))/A(J,I) IF(ABS(THETA)-ZETA) 7,7,19 7 T=1.D0 IF(THETA) 8,9,9 8 T=-1.D0 9 T=1.D0/(THETA+T*SQRT(1.D0+THETA*THETA)) C=1.D0/SQRT(1.D0+T*T) S=C*T H=2.D0*A(J,I) HC=S*H*(S*THETA-C) A(I,I)=A(I,I)+HC A(J,J)=A(J,J)-HC A(J,I)=-H*C*(S*THETA-0.5D0*(C-S*S/C)) TAU=TAU+1.D0 IF(I.LT.2) GOTO 11 DO 10 IG=2,I IRS=IG-1 H=C*A(I,IRS)-S*A(J,IRS) A(J,IRS)=S*A(I,IRS)+C*A(J,IRS) 10 A(I,IRS)=H 11 L=J-1 IF(L-I1) 14,12,12 12 DO 13 IG=I1,L H=C*A(IG,I)-S*A(J,IG) A(J,IG)=S*A(IG,I)+C*A(J,IG) 13 A(IG,I)=H 14 IF(N1-J) 17,15,15 15 DO 16 IG=J,N1 ILG=IG+1 H=C*A(ILG,I)-S*A(ILG,J) A(ILG,J)=S*A(ILG,I)+C*A(ILG,J) 16 A(ILG,I)=H 17 DO 18 IG=1,N H=C*V(IG,I)-S*V(IG,J) V(IG,J)=S*V(IG,I)+C*V(IG,J) 18 V(IG,I)=H 19 CONTINUE 20 CONTINUE H=0.5D0*FLOAT(N*(N-1)) ZETA=ZETA**(2.5D0-TAU/H) GOTO 3 21 DO 22 J=1,N 22 EW(J)=A(J,J) N1=N-1 23 NT=0 DO 26 J=1,N1 JRG=J+1 IF(EW(J)-EW(JRG)) 26,26,24 24 BUFFER=EW(J) EW(J)=EW(JRG) EW(JRG)=BUFFER DO 25 I=1,N BUFFER=V(I,JRG) V(I,JRG)=V(I,J) 25 V(I,J)=BUFFER NT=1 26 CONTINUE N1=N1-1 IF(NT) 23,27,23 27 RETURN END C C=================================================================== C SUBROUTINE R00016 IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,NAMO,ISTA COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) DIMENSION CHAR(12),COEFF(12) WRITE(6,'('' == symtrz.f R00016 =='')') IVIBRA=3*NUMAT-6 IF(LINA.GT.0) GOTO 8 CHAR(1)=IVIBRA IVIB=0 IF(J1.LT.2) RETURN DO 5 I=2,J1 JUMP=JX(4,I) GOTO (1,2,3,4),JUMP 1 CHAR(I)=-3*JX(6,I) GOTO 5 2 CHAR(I)=JX(6,I) GOTO 5 3 JP=JX(5,I)/10 JK=JX(5,I)-10*JP ANGLE=2.D0*COS(6.283185308D0*DBLE(JK)/DBLE(JP)) CHAR(I)=DBLE(JX(6,I))*(ANGLE-1.D0) GOTO 5 4 JP=JX(5,I)/10 JK=JX(5,I)-10*JP ANGLE=2.D0*COS(6.283185308D0*DBLE(JK)/DBLE(JP)) CHAR(I)=DBLE(JX(6,I)-2)*(ANGLE+1.D0) 5 CHAR(I)=CHAR(I)*DBLE(JX(2,I)) ORDER=DBLE(J2) DO 7 I=1,I1 COEFF(I)=0.1D0 DO 6 J=1,J1 6 COEFF(I)=COEFF(I)+CHAR(J)*T(I,J)/ORDER IF(COEFF(I).LT.1.) GOTO 7 IDEGEN= T(I,1)+0.1D0 IVIB=IVIB+1 IVIBRO(1,IVIB)= COEFF(I) IF(I1.NE.J1) IVIBRO(1,IVIB)= COEFF(I) /IDEGEN IVIBRO(2,IVIB)=JX(1,I) 7 CONTINUE RETURN 8 IVIBRA=IVIBRA+1 GOTO(9,10),LINA 9 IVIBRO(1,1)=NUMAT-1 IVIBRO(2,1)=JX(1,1) IVIBRO(1,2)=NUMAT-2 IVIBRO(2,2)=JX(1,2) IVIB=2 IF(NUMAT.LT.3) IVIB=1 RETURN 10 ICENT=JX(6,3) IVIBRO(1,1)=(NUMAT-ICENT)/2 IVIBRO(2,1)=JX(1,1) IVIB=2 IVIBRO(1,2)=(NUMAT-2-ICENT)/2 IVIBRO(2,2)=JX(1,2) IF(IVIBRO(1,2).GT.0) IVIB=3 IVIBRO(1,IVIB)=(NUMAT-2+ICENT)/2 IVIBRO(2,IVIB)=JX(1,4) IF(IVIBRO(1,IVIB).GT.0) IVIB=IVIB+1 IVIBRO(1,IVIB)=(NUMAT-2+ICENT)/2 IVIBRO(2,IVIB)=JX(1,5) IF(IVIBRO(1,IVIB).LT.1) IVIB=IVIB-1 RETURN END mopac7-1.15/fortran/dipole.f0000644000175000017500000001107211053302063012637 00000000000000 FUNCTION DIPOLE (P,Q,COORD,DIPVEC, MODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM), NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /DIPSTO/ UX,UY,UZ,CH(NUMATM) COMMON /KEYWRD/ KEYWRD COMMON /MOLMEC/ HTYPE(4),NHCO(4,20),NNHCO,ITYPE COMMON /ISTOPE/ AMS(107) COMMON /MULTIP/ DD(107), QQ(107), AM(107), AD(107), AQ(107) COMMON /NUMCAL/ NUMCAL DIMENSION P(*),Q(*),COORD(3,*),DIPVEC(3), CENTER(3) CHARACTER*241 KEYWRD C*********************************************************************** C DIPOLE CALCULATES DIPOLE MOMENTS C C ON INPUT P = DENSITY MATRIX C Q = TOTAL ATOMIC CHARGES, (NUCLEAR + ELECTRONIC) C NUMAT = NUMBER OF ATOMS IN MOLECULE C NAT = ATOMIC NUMBERS OF ATOMS C NFIRST= START OF ATOM ORBITAL COUNTERS C COORD = COORDINATES OF ATOMS C C OUTPUT DIPOLE = DIPOLE MOMENT C*********************************************************************** C C IN THE ZDO APPROXIMATION, ONLY TWO TERMS ARE RETAINED IN THE C CALCULATION OF DIPOLE MOMENTS. C 1. THE POINT CHARGE TERM (INDEPENDENT OF PARAMETERIZATION). C 2. THE ONE-CENTER HYBRIDIZATION TERM, WHICH ARISES FROM MATRIX C ELEMENTS OF THE FORM . THIS TERM IS A FUNCTION OF C THE SLATER EXPONENTS (ZS,ZP) AND IS THUS DEPENDENT ON PARAMETER- C IZATION. THE HYBRIDIZATION FACTORS (HYF(I)) USED IN THIS SUB- C ROUTINE ARE CALCULATED FROM THE FOLLOWING FORMULAE. C FOR SECOND ROW ELEMENTS <2S/R/2P> C HYF(I)= 469.56193322*(SQRT(((ZS(I)**5)*(ZP(I)**5)))/ C ((ZS(I) + ZP(I))**6)) C FOR THIRD ROW ELEMENTS <3S/R/3P> C HYF(I)=2629.107682607*(SQRT(((ZS(I)**7)*(ZP(I)**7)))/ C ((ZS(I) + ZP(I))**8)) C FOR FOURTH ROW ELEMENTS AND UP : C HYF(I)=2*(2.10716)*DD(I) C WHERE DD(I) IS THE CHARGE SEPARATION IN ATOMIC UNITS C C C REFERENCES: C J.A.POPLE & D.L.BEVERIDGE: APPROXIMATE M.O. THEORY C S.P.MCGLYNN, ET AL: APPLIED QUANTUM CHEMISTRY C DIMENSION DIP(4,3) DIMENSION HYF(107,2) SAVE FIRST, HYF, DIP, WTMOL, CHARGD, FORCE LOGICAL FIRST, FORCE, CHARGD DATA HYF(1,1) / 0.0D00 / DATA HYF(1,2) /0.0D0 / DATA HYF(5,2) /6.520587D0/ DATA HYF(6,2) /4.253676D0/ DATA HYF(7,2) /2.947501D0/ DATA HYF(8,2) /2.139793D0/ DATA HYF(9,2) /2.2210719D0/ DATA HYF(14,2)/6.663059D0/ DATA HYF(15,2)/5.657623D0/ DATA HYF(16,2)/6.345552D0/ DATA HYF(17,2)/2.522964D0/ DATA ICALCN/0/ FIRST=(ICALCN.NE.NUMCAL) ICALCN=NUMCAL IF (FIRST) THEN DO 10 I=2,107 10 HYF(I,1)= 5.0832D0*DD(I) WTMOL=0.D0 SUM=0.D0 DO 20 I=1,NUMAT WTMOL=WTMOL+AMS(NAT(I)) 20 SUM=SUM+Q(I) CHARGD=(ABS(SUM).GT.0.5D0) FORCE=(INDEX(KEYWRD,'FORCE') +INDEX(KEYWRD,'IRC').NE. 0) KTYPE=1 IF(ITYPE.EQ.4)KTYPE=2 ENDIF IF(.NOT.FORCE.AND.CHARGD)THEN C C NEED TO RESET ION'S POSITION SO THAT THE CENTER OF MASS IS AT THE C ORIGIN. C DO 30 I=1,3 30 CENTER(I)=0.D0 DO 40 I=1,3 DO 40 J=1,NUMAT 40 CENTER(I)=CENTER(I)+AMS(NAT(J))*COORD(I,J) DO 50 I=1,3 50 CENTER(I)=CENTER(I)/WTMOL DO 60 I=1,3 DO 60 J=1,NUMAT 60 COORD(I,J)=COORD(I,J)-CENTER(I) ENDIF DO 70 I=1,4 DO 70 J=1,3 70 DIP(I,J)=0.0D00 DO 90 I=1,NUMAT NI=NAT(I) IA=NFIRST(I) L=NLAST(I)-IA DO 80 J=1,L K=((IA+J)*(IA+J-1))/2+IA 80 DIP(J,2)=DIP(J,2)-HYF(NI,KTYPE)*P(K) DO 90 J=1,3 90 DIP(J,1)=DIP(J,1)+4.803D00*Q(I)*COORD(J,I) DO 100 J=1,3 100 DIP(J,3)=DIP(J,2)+DIP(J,1) DO 110 J=1,3 110 DIP(4,J)=SQRT(DIP(1,J)**2+DIP(2,J)**2+DIP(3,J)**2) IF( FORCE) THEN DIPVEC(1)=DIP(1,3) DIPVEC(2)=DIP(2,3) DIPVEC(3)=DIP(3,3) ENDIF IF(MODE.EQ.1)WRITE (6,130) ((DIP(I,J),I=1,4),J=1,3) C STORE DIPOLE MOMENT COMPONENTS IN UX,UY,UZ FOR USE IN C ASSIGNING CHARGES DETERMINED FROM THE ESP. BHB UX=DIP(1,3) UY=DIP(2,3) UZ=DIP(3,3) C C STORE CHARGES Q IN ARRAY CH FOR USE IN ASSIGNING SYMMETRY TO C CHARGES. BHB DO 120 I=1,NUMAT 120 CH(I)=Q(I) DIPOLE = DIP(4,3) RETURN C 130 FORMAT (' DIPOLE',11X,'X Y Z TOTAL',/, 1' POINT-CHG.',4F10.3/,' HYBRID',4X,4F10.3/,' SUM',7X,4F10.3) C END mopac7-1.15/fortran/deri0.f0000644000175000017500000000333011053302063012364 00000000000000 SUBROUTINE DERI0 (E,N, SCALAR,DIAG,FRACT,NBO) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION E(N), SCALAR(*), DIAG(*), NBO(3) C C COMPUTE THE DIAGONAL DOMINANT PART OF THE SUPER-MATRIX AND C DEFINE THE SCALAR COEFFICIENTS APPLIED ON EACH ROW OF THE C SUPER LINEAR SYSTEM IN ORDER TO REDUCE THE EIGENVALUE SPECTRUM OF C THE ELECTRONIC HESSIAN, C THUS SPEEDING CONVERGENCE OF RELAXATION PROCESS IN 'DERI2'. C INPUT C E(N) : EIGENVALUES OF FOCK MATRIX. C N : NUMBER OF M.O. C NBO(3) : OCCUPANCY BOUNDARIES. C FRACT : PARTIAL OCCUPANCY OF 'OPEN' SHELLS. C SCALAR(MINEAR) : SCALE APPLIED ON EACH COLUMN AND ROW OF THE C SYMMETRIC SUPER SYSTEM. C SHIFT=2.36D0 C C DOMINANT DIAGONAL PART OF THE SUPER-MATRIX. C ------------------------------------------- NOPEN=NBO(1)+NBO(2) CONST=1.D-3 L=1 IF(NBO(2).GT.0 .AND. NBO(1).GT.0) THEN C OPEN-CLOSED DO 10 J=1,NBO(1) DO 10 I=NBO(1)+1,NOPEN DIAG(L)=(E(I)-E(J))/(2.D0-FRACT+CONST) 10 L=L+1 ENDIF IF(NBO(3).GT.0 .AND. NBO(1).GT.0) THEN C VIRTUAL-CLOSED DO 20 J=1,NBO(1) DO 20 I=NOPEN+1,N DIAG(L)=(E(I)-E(J))/2.D0 20 L=L+1 ENDIF IF(NBO(3).NE.0 .AND. NBO(2).NE.0) THEN C VIRTUAL-OPEN DO 30 J=NBO(1)+1,NOPEN DO 30 I=NOPEN+1,N DIAG(L)=(E(I)-E(J))/(FRACT+CONST) 30 L=L+1 ENDIF C C TAKE SCALE FACTORS AS (SHIFT-DIAG)**(-0.5) . C ------------------------------------------ DO 40 I=1,L-1 40 SCALAR(I)=SQRT(1.D0/MAX(0.3D0*DIAG(I),DIAG(I)-SHIFT)) RETURN END mopac7-1.15/fortran/deri21.f0000644000175000017500000000403011053302063012445 00000000000000 SUBROUTINE DERI21 (A,NVAR,MINEAR,NFIRST,VNERT,PNERT 1 ,B,NCUT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION A(MINEAR,NVAR),VNERT(NVAR),PNERT(NVAR),B(MINEAR,*) ************************************************************************ * * LEAST-SQUARE ANALYSIS OF A SET OF NVAR POINTS {A} : * * PRODUCE A SUBSET OF NCUT ORTHONORMALIZED VECTORS B, OPTIMUM IN A * LEAST-SQUARE SENSE WITH RESPECT TO THE INITIAL SPACE {A}. * EACH NEW HIERARCHIZED VECTOR B EXTRACTS A MAXIMUM PERCENTAGE FROM * THE REMAINING DISPERSION OF THE SET {A} OUT OF THE PREVIOUS * {B} SUBSPACE. * INPUT * A(MINEAR,NVAR): ORIGINAL SET {A}. * NFIRST : MAXIMUM ALLOWED SIZE OF THE BASIS B. * OUTPUT * VNERT(NVAR) : LOWEST EIGENVECTOR OF A'* A. * PNERT(NVAR) : SQUARE ROOT OF THE ASSOCIATED EIGENVALUES * IN DECREASING ORDER. * B(MINEAR,NCUT): OPTIMUM ORTHONORMALIZED SUBSET {B}. * ************************************************************************ DIMENSION WORK(4) C C VNERT = A' * A CUTOFF=0.85D0 SUM2=0.D0 CALL MTXMC(A,NVAR,A,MINEAR,WORK) DO 10 I=1,(NVAR*(NVAR+1))/2 10 WORK(I)=-WORK(I) C DIAGONALIZE IN DECREASING ORDER OF EIGENVALUES IF(ABS(WORK(1)).LT.1.D-28 .AND. NVAR.EQ.1)THEN PNERT(1)=SQRT(-WORK(1)) WORK(1)=1.D15 VNERT(1)=1.D0 NCUT=1 GOTO 50 ELSE CALL HQRII(WORK,NVAR,NVAR,PNERT, VNERT) C FIND NCUT ACCORDING TO CUTOFF, BUILD WORK = VNERT * (PNERT)**-0.5 SUM=0.D0 DO 20 I=1,NVAR 20 SUM=SUM-PNERT(I) L=1 DO 40 I=1,NFIRST SUM2=SUM2-PNERT(I)/SUM PNERT(I)=SQRT(-PNERT(I)) DO 30 J=1,NVAR WORK(L)=VNERT(L)/PNERT(I) 30 L=L+1 IF(SUM2.GE.CUTOFF) THEN NCUT=I GO TO 50 ENDIF 40 CONTINUE NCUT=NFIRST C ORTHONORMALIZED BASIS C B(MINEAR,NCUT) = A(MINEAR,NVAR)*WORK(NVAR,NCUT) ENDIF 50 CALL MXM (A,MINEAR,WORK,NVAR,B,NCUT) RETURN END mopac7-1.15/fortran/exchng.f0000644000175000017500000000076611053302063012647 00000000000000 SUBROUTINE EXCHNG (A,B,C,D,X,Y,T,Q,N) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION X(*), Y(*) C******************************************************************** C C THE CONTENTS OF A, C, T, AND X ARE STORED IN B, D, Q, AND Y! C C THIS IS A DEDICATED ROUTINE, IT IS CALLED BY LINMIN AND LOCMIN ONLY. C C******************************************************************** B=A D=C Q=T DO 10 I=1,N Y(I)=X(I) 10 CONTINUE RETURN C END mopac7-1.15/fortran/chrge.f0000644000175000017500000000142611053302063012455 00000000000000 SUBROUTINE CHRGE(P,Q) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION P(*),Q(*) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT C*********************************************************************** C C CHRGE STORES IN Q THE TOTAL ELECTRON DENSITIES ON THE ATOMS C C ON INPUT P = DENSITY MATRIX C C ON OUTPUT Q = ATOM ELECTRON DENSITIES C C*********************************************************************** K=0 DO 10 I=1,NUMAT IA=NFIRST(I) IB=NLAST(I) Q(I)=0.D0 DO 10 J=IA,IB K=K+J 10 Q(I)=Q(I)+P(K) RETURN END mopac7-1.15/fortran/reada.f0000644000175000017500000001037211053302064012442 00000000000000 DOUBLE PRECISION FUNCTION READA(STRING,ISTART) C FORTRAN FUNCTION TO EXTRACT NUMBER FROM STRING C CHARACTER STRING*(*) DOUBLE PRECISION DIGIT LOGICAL EXPNNT C C DEFINE ASCII VALUES OF NUMERIC FIELD CHARACTERS I0=ICHAR('0') I9=ICHAR('9') IDOT=ICHAR('.') INEG=ICHAR('-') IPOS=ICHAR('+') ICAPD=ICHAR('D') ICAPE=ICHAR('E') ISMLD=ICHAR('d') ISMLE=ICHAR('e') C L=LEN(STRING) C C FIND THE START OF THE NUMERIC FIELD DO 10 I=ISTART,L IADD=0 N=ICHAR(STRING(I:I)) C C SIGNAL START OF NUMERIC FIELD IF DIGIT FOUND IF(N.GE.I0.AND.N.LE.I9)GOTO 20 C C ACCOUNT FOR CONSECUTIVE SIGNS [- AND(OR) +] IF(N.EQ.INEG.OR.N.EQ.IPOS)THEN IADD=IADD+1 IF(I+IADD.GT.L)GOTO 50 N=ICHAR(STRING(I+IADD:I+IADD)) IF(N.GE.I0.AND.N.LE.I9)GOTO 20 ENDIF C C ACCOUNT FOR CONSECUTIVE DECIMAL POINTS (.) IF(N.EQ.IDOT)THEN IADD=IADD+1 IF(I+IADD.GT.L)GOTO 50 N=ICHAR(STRING(I+IADD:I+IADD)) IF(N.GE.I0.AND.N.LE.I9)GOTO 20 ENDIF 10 CONTINUE GOTO 50 C C FIND THE END OF THE NUMERIC FIELD 20 EXPNNT=.FALSE. DO 30 J=I+1,L IADD=0 N=ICHAR(STRING(J:J)) C C CONTINUE SEARCH FOR END IF DIGIT FOUND IF(N.GE.I0.AND.N.LE.I9)GOTO 30 C C CONTINUE SEARCH FOR END IF SIGN FOUND AND EXPNNT TRUE IF(N.EQ.INEG.OR.N.EQ.IPOS)THEN IF(.NOT.EXPNNT)GOTO 40 IADD=IADD+1 IF(J+IADD.GT.L)GOTO 40 N=ICHAR(STRING(J+IADD:J+IADD)) IF(N.GE.I0.AND.N.LE.I9)GOTO 30 ENDIF IF(N.EQ.IDOT)THEN IADD=IADD+1 IF(J+IADD.GT.L)GOTO 40 N=ICHAR(STRING(J+IADD:J+IADD)) IF(N.GE.I0.AND.N.LE.I9)GOTO 30 IF(N.EQ.ICAPE.OR.N.EQ.ISMLE.OR.N.EQ.ICAPD.OR.N.EQ.ISMLD) 1 GOTO 30 ENDIF IF(N.EQ.ICAPE.OR.N.EQ.ISMLE.OR.N.EQ.ICAPD.OR.N.EQ.ISMLD)THEN IF(EXPNNT)GOTO 40 EXPNNT=.TRUE. GOTO 30 ENDIF GOTO 40 30 CONTINUE J=L+1 40 N=ICHAR(STRING(J-1:J-1)) IF(N.EQ.ICAPE.OR.N.EQ.ISMLE.OR.N.EQ.ICAPD.OR.N.EQ.ISMLD)J=J-1 C C FOUND THE END OF THE NUMERIC FIELD (IT RUNS 'I' THRU 'J-1') N=0 N=N+INDEX(STRING(I:J-1),'e') N=N+INDEX(STRING(I:J-1),'E') N=N+INDEX(STRING(I:J-1),'d') N=N+INDEX(STRING(I:J-1),'D') IF(N.EQ.0)THEN READA=DIGIT(STRING(I:J-1),1) ELSE READA=DIGIT(STRING(:I+N-2),I)*1.D1**DIGIT(STRING(:J-1),I+N) ENDIF RETURN C C DEFAULT VALUE RETURNED BECAUSE NO NUMERIC FIELD FOUND 50 READA=0.D0 RETURN END C ****************************************************************** DOUBLE PRECISION FUNCTION DIGIT(STRING,ISTART) C FORTRAN FUNCTION TO CONVERT NUMERIC FIELD TO DOUBLE PRECISION C NUMBER. THE STRING IS ASSUMED TO BE CLEAN (NO INVALID DIGIT C OR CHARACTER COMBINATIONS FROM ISTART TO THE FIRST NONSPACE, C NONDIGIT, NONSIGN, AND NONDECIMAL POINT CHARACTER). C CHARACTER STRING*(*) DOUBLE PRECISION C1,C2,DECIML LOGICAL SIGN C C DEFINE ASCII VALUES OF NUMERIC FIELD CHARACTERS I0=ICHAR('0') I9=ICHAR('9') INEG=ICHAR('-') IPOS=ICHAR('+') IDOT=ICHAR('.') ISPC=ICHAR(' ') C C1=0.D0 C2=0.D0 SIGN=.TRUE. L=LEN(STRING) C C DETERMINE THE CONTRIBUTION TO THE NUMBER GREATER THAN ONE IDIG=0 DO 10 I=ISTART,L N=ICHAR(STRING(I:I)) IF(N.GE.I0.AND.N.LE.I9)THEN IDIG=IDIG+1 C1=C1*1.D1+N-I0 ELSEIF(N.EQ.INEG.OR.N.EQ.IPOS.OR.N.EQ.ISPC)THEN IF(N.EQ.INEG)SIGN=.FALSE. ELSEIF(N.EQ.IDOT)THEN GOTO 20 ELSE GOTO 40 ENDIF 10 CONTINUE C C DETERMINE THE CONTRIBUTION TO THE NUMBER LESS THAN THAN ONE 20 DECIML=1.D0 DO 30 J=I+1,L N=ICHAR(STRING(J:J)) IF(N.GE.I0.AND.N.LE.I9)THEN DECIML=DECIML/1.D1 C2=C2+(N-I0)*DECIML ELSEIF(N.NE.ISPC)THEN GOTO 40 ENDIF 30 CONTINUE C C PUT THE PIECES TOGETHER 40 DIGIT=C1+C2 IF(.NOT.SIGN)DIGIT=-DIGIT RETURN END mopac7-1.15/fortran/gover.f0000644000175000017500000000615511053302063012513 00000000000000 SUBROUTINE GOVER(NI,NJ,XI,XJ,R,SG) ************************************************************************ * * * GOVER CALCULATES THE OVERLAP INTEGRALS USING A GAUSSIAN EXPANSION * * STO-6G BY R.F. STEWART, J. CHEM. PHYS., 52 431-438, 1970 * * * * ON INPUT NI = ATOMIC NUMBER OF FIRST ATOM * * NJ = ATOMIC NUMBER OF SECOND ATOM * * R = INTERATOMIC DISTANCE IN ANGSTROMS * * ON EXIT S = 9X9 ARRAY OF OVERLAPS, IN ORDER S,PX,PY, * * PZ * * * ************************************************************************ IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /NATYPE/ NZTYPE(107), MTYPE(30),LTYPE COMMON /TEMP/ C(60,6), Z(60,6) COMMON /NATORB/ NATORB(107) DIMENSION S(6,6), XI(3),XJ(3), SG(9,9) SAVE NGAUSS DATA NGAUSS/6/ C C FIND START AND END OF GAUSSIAN C IFA=NZTYPE(NI)*4-3 IF(C(IFA+1,1).NE.0.D0)THEN ILA=IFA+3 ELSE ILA=IFA ENDIF IFB=NZTYPE(NJ)*4-3 IF(C(IFB+1,1).NE.0.D0)THEN ILB=IFB+3 ELSE ILB=IFB ENDIF C C CONVERT R INTO AU C R=R/0.529167D0 R = R**2 KA=0 DO 80 I=IFA,ILA KA=KA+1 NAT=KA-1 KB=0 DO 80 J=IFB,ILB KB=KB+1 NBT=KB-1 C C DECIDE IS IT AN S-S, S-P, P-S, OR P-P OVERLAP C IF(NAT.GT.0.AND.NBT.GT.0) THEN C P-P IS=4 TOMB=(XI(NAT)-XJ(NAT))*(XI(NBT) 1-XJ(NBT))*3.5711928576D0 ELSEIF(NAT.GT.0) THEN C P-S IS=3 TOMB=(XI(NAT)-XJ(NAT))*1.88976D0 ELSEIF(NBT.GT.0) THEN C S-P IS=2 TOMB=(XI(NBT)-XJ(NBT))*1.88976D0 ELSE C S-S IS=1 ENDIF DO 60 K=1,NGAUSS DO 60 L=1,NGAUSS S(K,L)=0.0D0 AMB=Z(I,K)+Z(J,L) APB=Z(I,K)*Z(J,L) ADB=APB/AMB C C CHECK OF OVERLAP IS NON-ZERO BEFORE STARTING C IF((ADB*R).LT.90.D0) THEN ABN=1.0D0 GO TO(50,10,20,30),IS 10 ABN=2.D0*TOMB*Z(I,K)*SQRT(Z(J,L))/AMB GO TO 50 20 ABN=-2.D0*TOMB*Z(J,L)*SQRT(Z(I,K))/AMB GO TO 50 30 ABN=-ADB*TOMB IF(NAT.EQ.NBT) ABN=ABN+0.5D0 40 ABN=4.0D0*ABN*SQRT(APB)/AMB 50 S(K,L)=SQRT((2.D0*SQRT(APB)/AMB)**3)*EXP(-ADB*R)* . ABN ENDIF 60 CONTINUE SG(KA,KB)=0.0D0 DO 70 K=1,NGAUSS DO 70 L=1,NGAUSS 70 SG(KA,KB)=SG(KA,KB)+S(K,L)*C(I,K)*C(J,L) 80 CONTINUE RETURN END mopac7-1.15/fortran/update.f0000644000175000017500000000537611053302063012657 00000000000000 SUBROUTINE UPDATE(IPARAM, IELMNT, PARAM, KFN) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ************************************************************************ * * UPDATE UPDATES THE COMMON BLOCKS WHICH HOLD ALL THE PARAMETERS FOR * RUNNING MNDO. * IPARAM REFERS TO THE TYPE OF PARAMETER, * IELMNT REFERS TO THE ELEMENT, * PARAM IS THE VALUE OF THE PARAMETER, AND * ************************************************************************ COMMON /MNDO/ USSM(107), UPPM(107), UDDM(107), ZSM(107),ZPM(107), 1ZDM(107), BETASM(107), BETAPM(107), BETADM(107), ALPM(107), 2EISOLM(107), DDM(107), QQM(107), AMM(107), ADM(107), AQM(107) 3,GSSM(107),GSPM(107),GPPM(107),GP2M(107),HSPM(107), POLVOM(107) COMMON /EXPONT/ ZS(107),ZP(107),ZD(107) 1 /NATORB/ NATORB(107) 2 /BETAS / BETAS(107),BETAP(107),BETAD(107) 3 /VSIPS / VS(107),VP(107),VD(107) 4 /ONELEC/ USS(107),UPP(107),UDD(107) 5 /MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107) 6 /TWOELE/ GSS(107),GSP(107),GPP(107),GP2(107),HSP(107) 7 ,GSD(107),GPD(107),GDD(107) 8 /ALPHA / ALP(107) 9 /IDEAS / GUESS1(107,10), GUESS2(107,10), GUESS3(107,10) COMMON /GAUSS / FN1(107),FN2(107) GOTO 1(10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180, 2190,200,210,220,230,240,250),IPARAM 10 USS (IELMNT)=PARAM USSM(IELMNT)=PARAM RETURN 20 UPP (IELMNT)=PARAM UPPM(IELMNT)=PARAM RETURN 30 UDD (IELMNT)=PARAM UDDM(IELMNT)=PARAM RETURN 40 ZS (IELMNT)=PARAM ZSM(IELMNT)=PARAM RETURN 50 ZP (IELMNT)=PARAM ZPM(IELMNT)=PARAM RETURN 60 ZD (IELMNT)=PARAM ZDM(IELMNT)=PARAM RETURN 70 BETAS (IELMNT)=PARAM BETASM(IELMNT)=PARAM RETURN 80 BETAP (IELMNT)=PARAM BETAPM(IELMNT)=PARAM RETURN 90 BETAD (IELMNT)=PARAM BETADM(IELMNT)=PARAM RETURN 100 GSS (IELMNT)=PARAM GSSM(IELMNT)=PARAM RETURN 110 GSP (IELMNT)=PARAM GSPM(IELMNT)=PARAM RETURN 120 GPP (IELMNT)=PARAM GPPM(IELMNT)=PARAM RETURN 130 GP2 (IELMNT)=PARAM GP2M(IELMNT)=PARAM RETURN 140 HSP (IELMNT)=PARAM HSPM(IELMNT)=PARAM RETURN 150 RETURN 160 RETURN 170 RETURN 180 ALP (IELMNT)=PARAM ALPM(IELMNT)=PARAM RETURN 190 RETURN 200 RETURN 210 RETURN 220 GUESS1(IELMNT,KFN)=PARAM RETURN 230 GUESS2(IELMNT,KFN)=PARAM RETURN 240 GUESS3(IELMNT,KFN)=PARAM RETURN 250 NATORB(IELMNT)=PARAM I=INT(PARAM+0.5D0) IF(I.NE.9.AND.I.NE.4.AND.I.NE.1)THEN WRITE(6,'(///10X,'' UNACCEPTABLE VALUE FOR NO. OF ORBITALS'', 1'' ON ATOM'')') STOP ENDIF END mopac7-1.15/fortran/dgemm.f0000644000175000017500000002317311053302064012462 00000000000000 SUBROUTINE DGEMM ( TRANSA, TRANSB, M, N, K, ALPHA, A, LDA, B, LDB, $ BETA, C, LDC ) * .. SCALAR ARGUMENTS .. CHARACTER*1 TRANSA, TRANSB INTEGER M, N, K, LDA, LDB, LDC DOUBLE PRECISION ALPHA, BETA * .. ARRAY ARGUMENTS .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ) * .. * * PURPOSE * ======= * * DGEMM PERFORMS ONE OF THE MATRIX-MATRIX OPERATIONS * * C := ALPHA*OP( A )*OP( B ) + BETA*C, * * WHERE OP( X ) IS ONE OF * * OP( X ) = X OR OP( X ) = X', * * ALPHA AND BETA ARE SCALARS, AND A, B AND C ARE MATRICES, WITH OP( A ) * AN M BY K MATRIX, OP( B ) A K BY N MATRIX AND C AN M BY N MATRIX. * * PARAMETERS * ========== * * TRANSA - CHARACTER*1. * ON ENTRY, TRANSA SPECIFIES THE FORM OF OP( A ) TO BE USED IN * THE MATRIX MULTIPLICATION AS FOLLOWS: * * TRANSA = 'N' OR 'N', OP( A ) = A. * * TRANSA = 'T' OR 'T', OP( A ) = A'. * * TRANSA = 'C' OR 'C', OP( A ) = A'. * * UNCHANGED ON EXIT. * * TRANSB - CHARACTER*1. * ON ENTRY, TRANSB SPECIFIES THE FORM OF OP( B ) TO BE USED IN * THE MATRIX MULTIPLICATION AS FOLLOWS: * * TRANSB = 'N' OR 'N', OP( B ) = B. * * TRANSB = 'T' OR 'T', OP( B ) = B'. * * TRANSB = 'C' OR 'C', OP( B ) = B'. * * UNCHANGED ON EXIT. * * M - INTEGER. * ON ENTRY, M SPECIFIES THE NUMBER OF ROWS OF THE MATRIX * OP( A ) AND OF THE MATRIX C. M MUST BE AT LEAST ZERO. * UNCHANGED ON EXIT. * * N - INTEGER. * ON ENTRY, N SPECIFIES THE NUMBER OF COLUMNS OF THE MATRIX * OP( B ) AND THE NUMBER OF COLUMNS OF THE MATRIX C. N MUST BE * AT LEAST ZERO. * UNCHANGED ON EXIT. * * K - INTEGER. * ON ENTRY, K SPECIFIES THE NUMBER OF COLUMNS OF THE MATRIX * OP( A ) AND THE NUMBER OF ROWS OF THE MATRIX OP( B ). K MUST * BE AT LEAST ZERO. * UNCHANGED ON EXIT. * * ALPHA - DOUBLE PRECISION. * ON ENTRY, ALPHA SPECIFIES THE SCALAR ALPHA. * UNCHANGED ON EXIT. * * A - DOUBLE PRECISION ARRAY OF DIMENSION ( LDA, KA ), WHERE KA IS * K WHEN TRANSA = 'N' OR 'N', AND IS M OTHERWISE. * BEFORE ENTRY WITH TRANSA = 'N' OR 'N', THE LEADING M BY K * PART OF THE ARRAY A MUST CONTAIN THE MATRIX A, OTHERWISE * THE LEADING K BY M PART OF THE ARRAY A MUST CONTAIN THE * MATRIX A. * UNCHANGED ON EXIT. * * LDA - INTEGER. * ON ENTRY, LDA SPECIFIES THE FIRST DIMENSION OF A AS DECLARED * IN THE CALLING (SUB) PROGRAM. WHEN TRANSA = 'N' OR 'N' THEN * LDA MUST BE AT LEAST MAX( 1, M ), OTHERWISE LDA MUST BE AT * LEAST MAX( 1, K ). * UNCHANGED ON EXIT. * * B - DOUBLE PRECISION ARRAY OF DIMENSION ( LDB, KB ), WHERE KB IS * N WHEN TRANSB = 'N' OR 'N', AND IS K OTHERWISE. * BEFORE ENTRY WITH TRANSB = 'N' OR 'N', THE LEADING K BY N * PART OF THE ARRAY B MUST CONTAIN THE MATRIX B, OTHERWISE * THE LEADING N BY K PART OF THE ARRAY B MUST CONTAIN THE * MATRIX B. * UNCHANGED ON EXIT. * * LDB - INTEGER. * ON ENTRY, LDB SPECIFIES THE FIRST DIMENSION OF B AS DECLARED * IN THE CALLING (SUB) PROGRAM. WHEN TRANSB = 'N' OR 'N' THEN * LDB MUST BE AT LEAST MAX( 1, K ), OTHERWISE LDB MUST BE AT * LEAST MAX( 1, N ). * UNCHANGED ON EXIT. * * BETA - DOUBLE PRECISION. * ON ENTRY, BETA SPECIFIES THE SCALAR BETA. WHEN BETA IS * SUPPLIED AS ZERO THEN C NEED NOT BE SET ON INPUT. * UNCHANGED ON EXIT. * * C - DOUBLE PRECISION ARRAY OF DIMENSION ( LDC, N ). * BEFORE ENTRY, THE LEADING M BY N PART OF THE ARRAY C MUST * CONTAIN THE MATRIX C, EXCEPT WHEN BETA IS ZERO, IN WHICH * CASE C NEED NOT BE SET ON ENTRY. * ON EXIT, THE ARRAY C IS OVERWRITTEN BY THE M BY N MATRIX * ( ALPHA*OP( A )*OP( B ) + BETA*C ). * * LDC - INTEGER. * ON ENTRY, LDC SPECIFIES THE FIRST DIMENSION OF C AS DECLARED * IN THE CALLING (SUB) PROGRAM. LDC MUST BE AT LEAST * MAX( 1, M ). * UNCHANGED ON EXIT. * * * LEVEL 3 BLAS ROUTINE. * * -- WRITTEN ON 8-FEBRUARY-1989. * JACK DONGARRA, ARGONNE NATIONAL LABORATORY. * IAIN DUFF, AERE HARWELL. * JEREMY DU CROZ, NUMERICAL ALGORITHMS GROUP LTD. * SVEN HAMMARLING, NUMERICAL ALGORITHMS GROUP LTD. * * * .. EXTERNAL FUNCTIONS .. LOGICAL LSAME EXTERNAL LSAME * .. EXTERNAL SUBROUTINES .. EXTERNAL XERBLA * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX * .. LOCAL SCALARS .. LOGICAL NOTA, NOTB INTEGER I, INFO, J, L, NCOLA, NROWA, NROWB DOUBLE PRECISION TEMP * .. PARAMETERS .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. EXECUTABLE STATEMENTS .. * * SET NOTA AND NOTB AS TRUE IF A AND B RESPECTIVELY ARE NOT * TRANSPOSED AND SET NROWA, NCOLA AND NROWB AS THE NUMBER OF ROWS * AND COLUMNS OF A AND THE NUMBER OF ROWS OF B RESPECTIVELY. * NOTA = LSAME( TRANSA, 'N' ) NOTB = LSAME( TRANSB, 'N' ) IF( NOTA )THEN NROWA = M NCOLA = K ELSE NROWA = K NCOLA = M END IF IF( NOTB )THEN NROWB = K ELSE NROWB = N END IF * * TEST THE INPUT PARAMETERS. * INFO = 0 IF( ( .NOT.NOTA ).AND. $ ( .NOT.LSAME( TRANSA, 'C' ) ).AND. $ ( .NOT.LSAME( TRANSA, 'T' ) ) )THEN INFO = 1 ELSE IF( ( .NOT.NOTB ).AND. $ ( .NOT.LSAME( TRANSB, 'C' ) ).AND. $ ( .NOT.LSAME( TRANSB, 'T' ) ) )THEN INFO = 2 ELSE IF( M .LT.0 )THEN INFO = 3 ELSE IF( N .LT.0 )THEN INFO = 4 ELSE IF( K .LT.0 )THEN INFO = 5 ELSE IF( LDA.LT.MAX( 1, NROWA ) )THEN INFO = 8 ELSE IF( LDB.LT.MAX( 1, NROWB ) )THEN INFO = 10 ELSE IF( LDC.LT.MAX( 1, M ) )THEN INFO = 13 END IF IF( INFO.NE.0 )THEN CALL XERBLA( 'DGEMM ', INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. $ ( ( ( ALPHA.EQ.ZERO ).OR.( K.EQ.0 ) ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * AND IF ALPHA.EQ.ZERO. * IF( ALPHA.EQ.ZERO )THEN IF( BETA.EQ.ZERO )THEN DO 20, J = 1, N DO 10, I = 1, M C( I, J ) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40, J = 1, N DO 30, I = 1, M C( I, J ) = BETA*C( I, J ) 30 CONTINUE 40 CONTINUE END IF RETURN END IF * * START THE OPERATIONS. * IF( NOTB )THEN IF( NOTA )THEN * * FORM C := ALPHA*A*B + BETA*C. * DO 90, J = 1, N IF( BETA.EQ.ZERO )THEN DO 50, I = 1, M C( I, J ) = ZERO 50 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 60, I = 1, M C( I, J ) = BETA*C( I, J ) 60 CONTINUE END IF DO 80, L = 1, K IF( B( L, J ).NE.ZERO )THEN TEMP = ALPHA*B( L, J ) DO 70, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 70 CONTINUE END IF 80 CONTINUE 90 CONTINUE ELSE * * FORM C := ALPHA*A'*B + BETA*C * DO 120, J = 1, N DO 110, I = 1, M TEMP = ZERO DO 100, L = 1, K TEMP = TEMP + A( L, I )*B( L, J ) 100 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 110 CONTINUE 120 CONTINUE END IF ELSE IF( NOTA )THEN * * FORM C := ALPHA*A*B' + BETA*C * DO 170, J = 1, N IF( BETA.EQ.ZERO )THEN DO 130, I = 1, M C( I, J ) = ZERO 130 CONTINUE ELSE IF( BETA.NE.ONE )THEN DO 140, I = 1, M C( I, J ) = BETA*C( I, J ) 140 CONTINUE END IF DO 160, L = 1, K IF( B( J, L ).NE.ZERO )THEN TEMP = ALPHA*B( J, L ) DO 150, I = 1, M C( I, J ) = C( I, J ) + TEMP*A( I, L ) 150 CONTINUE END IF 160 CONTINUE 170 CONTINUE ELSE * * FORM C := ALPHA*A'*B' + BETA*C * DO 200, J = 1, N DO 190, I = 1, M TEMP = ZERO DO 180, L = 1, K TEMP = TEMP + A( L, I )*B( J, L ) 180 CONTINUE IF( BETA.EQ.ZERO )THEN C( I, J ) = ALPHA*TEMP ELSE C( I, J ) = ALPHA*TEMP + BETA*C( I, J ) END IF 190 CONTINUE 200 CONTINUE END IF END IF * RETURN * * END OF DGEMM . * END mopac7-1.15/fortran/matou1.f0000644000175000017500000000755611053302063012605 00000000000000 SUBROUTINE MATOU1(A,B,NCX,NR,NDIM,IFLAG) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) C PARAMETER (MAXDIM=MAX(MAXORB,3*NUMATM)) C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ C MAXORB = 4*60+60 = 300 ; see the SIZES-file... C 3*NUMATM = 3*(60+60) = 360 ; see the SIZES-file... PARAMETER (MAXDIM=600) C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DIMENSION A(NR,NR),B(NDIM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ELEMTS/ ELEMNT(107) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),JNDEX(MXDIM),ISTA(2) COMMON /KEYWRD/ KEYWRD CHARACTER*241 KEYWRD, NAME*4, NAMO*4, ISTA*4 LOGICAL ALLPRT C********************************************************************** C C MATOUT PRINTS A SQUARE MATRIX OF EIGENVECTORS AND EIGENVALUES C C ON INPUT A CONTAINS THE MATRIX TO BE PRINTED. C B CONTAINS THE EIGENVALUES. C NC NUMBER OF MOLECULAR ORBITALS TO BE PRINTED. C NR IS THE SIZE OF THE SQUARE ARRAY TO BE PRINTED. C NDIM IS THE ACTUAL SIZE OF THE SQUARE ARRAY "A". C NFIRST AND NLAST CONTAIN ATOM ORBITAL COUNTERS. C NAT = ARRAY OF ATOMIC NUMBERS OF ATOMS. C C C OUTPUT TYPE (ROW LABELING) C IFLAG=1 : ORBITALS C IFLAG=2 : ORBITALS + SYMMETRY-DESIGNATORS C IFLAG=3 : ATOMS C IFLAG=4 : NUMBERS ONLY C IFLAG=5 : VIBRATIONS + SYMMETRY-DESIGNATIONS C C C*********************************************************************** CHARACTER*2 ELEMNT, ATORBS(9), ITEXT(MAXDIM), JTEXT(MAXDIM),XYZ(3) DIMENSION NATOM(MAXDIM) DATA XYZ/' x',' y',' z'/ DATA ATORBS/'S ','Px','Py','Pz','x2','xz','z2','yz','xz'/ C ------------------------------------------------- ALLPRT=(INDEX(KEYWRD,'ALLVEC').NE.0) IF(IFLAG.GT.2.AND.IFLAG.NE.5) GO TO 30 NC=NCX IF(ALLPRT) GO TO 1988 NSAVE=NCX NFIX=MAX(NALPHA,NCLOSE) IF(IFLAG.EQ.2.AND.NC.GT.16) NC=NFIX+7 IF(NC.GT.NSAVE) NC=NSAVE 1988 CONTINUE IF(NUMAT.EQ.0) GOTO 30 IF(NLAST(NUMAT).NE.NR) GOTO 30 DO 20 I=1,NUMAT JLO=NFIRST(I) JHI=NLAST(I) L=NAT(I) K=0 IF(IFLAG.LE.2) THEN DO 10 J=JLO,JHI K=K+1 ITEXT(J)=ATORBS(K) JTEXT(J)=ELEMNT(L) NATOM(J)=I 10 CONTINUE ELSE JHI=3*(I-1) DO 15 J=1,3 K=K+1 ITEXT(J+JHI)=XYZ(J) JTEXT(J+JHI)=ELEMNT(L) 15 NATOM(J+JHI)=I ENDIF 20 CONTINUE GOTO 50 30 CONTINUE NR=ABS(NR) DO 40 I=1,NR ITEXT(I)=' ' JTEXT(I)=' ' IF(IFLAG.EQ.3) JTEXT(I)=ELEMNT(NAT(I)) 40 NATOM(I)=I 50 CONTINUE KA=1 KC=8 IF(ALLPRT) GO TO 1989 IF(IFLAG.EQ.2.AND.NORBS.GT.16) KA=NFIX-8 IF(KA.LT.1) KA=1 IF(IFLAG.EQ.2.AND.NORBS.GT.16) KC=KA+7 1989 CONTINUE 60 KB=MIN0(KC,NC) WRITE (6,100) (I,I=KA,KB) IF (IFLAG.EQ.2.OR.IFLAG.EQ.5) * WRITE (6,150) (JNDEX(I),NAMO(I),I=KA,KB) IF(B(1).NE.0.D0) THEN IF(IFLAG.EQ.5) THEN WRITE(6,111) (B(I),I=KA,KB) ELSE WRITE (6,110) (B(I),I=KA,KB) ENDIF ENDIF WRITE (6,120) LA=1 LC=40 70 LB=MIN0(LC,NR) DO 80 I=LA,LB IF(ITEXT(I).EQ.' S')WRITE(6,120) WRITE (6,130) ITEXT(I),JTEXT(I),NATOM(I),(A(I,J),J=KA,KB) 80 CONTINUE IF (LB.EQ.NR) GO TO 90 LA=LC+1 LC=LC+40 GO TO 70 90 IF (KB.EQ.NC) RETURN KA=KC+1 KC=KC+8 GO TO 60 100 FORMAT (//,2X,9H Root No.,I5,9I8) 110 FORMAT (/10X,10F8.3) 111 FORMAT (/10x,10f8.1) 120 FORMAT (2H ) 130 FORMAT (1H ,2(1X,A2),I3,F8.4,10F8.4) 150 FORMAT(/12X,10(I3,1X,A4)) END mopac7-1.15/fortran/denrot.f0000644000175000017500000001262511053302063012663 00000000000000 SUBROUTINE DENROT IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ELEMTS/ ELEMNT(107) COMMON /SCRACH/ B(MAXORB*MAXORB), BONDAB(MAXPAR**2-MAXORB*MAXORB) ************************************************************************ * * DENROT PRINTS THE DENSITY MATRIX AS (S-SIGMA, P-SIGMA, P-PI) RATHER * THAN (S, PX, PY, PZ). * ************************************************************************ DIMENSION AROT(9,9), C(3,5,5), PAB(9,9), VECT(9,9) DIMENSION NATOM(MAXORB) DIMENSION XYZ(3,NUMATM), IROT(5,35), ISP(9) CHARACTER * 6 LINE(21) CHARACTER ELEMNT*2,ATORBS(9)*7,ITEXT(MAXORB)*7,JTEXT(MAXORB)*2 SAVE ATORBS, IROT, ISP DATA ATORBS/'S-SIGMA','P-SIGMA',' P-PI ',' P-PI ','D-SIGMA', 1 ' D-PI ',' D-PI ',' D-DELL',' D-DELL'/ *********************************************************************** * IROT IS A MAPPING LIST. FOR EACH ELEMENT OF AROT 5 NUMBERS ARE * NEEDED. THESE ARE, IN ORDER, FIRST AND SECOND SUBSCRIPTS OF AROT, * AND FIRST,SECOND, AND THIRD SUBSCRIPTS OF C, THUS THE FIRST * LINE OF IROT DEFINES AROT(1,1)=C(1,3,3) * *********************************************************************** DATA IROT/1,1,1,3,3, 2,2,2,4,3, 3,2,2,2,3, 4,2,2,3,3, 2,3,2,4,2, 1 3,3,2,2,2, 4,3,2,3,2, 2,4,2,4,4, 3,4,2,2,4, 4,4,2,3,4, 2 5,5,3,1,5, 6,5,3,4,3, 7,5,3,3,3, 8,5,3,2,3, 9,5,3,5,3, 3 5,6,3,1,2, 6,6,3,4,2, 7,7,3,3,2, 8,6,3,2,2, 9,6,3,5,2, 4 5,7,3,1,4, 6,7,3,4,4, 7,7,3,3,4, 8,7,3,2,4, 9,7,3,5,4, 5 5,8,3,1,1, 6,8,3,4,1, 7,8,3,3,1, 8,8,3,2,1, 9,8,3,5,1, 6 5,9,3,1,5, 6,9,3,4,5, 7,9,3,3,5, 8,9,3,2,5, 9,9,3,5,5/ DATA ISP /1,2,3,3,4,5,5,6,6/ CALL GMETRY(GEO,XYZ) IPRT=0 DO 120 I=1,NUMAT IF=NFIRST(I) IL=NLAST(I) IPQ=IL-IF-1 II=IPQ+2 IF(II.EQ.0)GOTO 120 DO 10 I1=1,II J1=IPRT+ISP(I1) ITEXT(J1)=ATORBS(I1) JTEXT(J1)=ELEMNT(NAT(I)) NATOM(J1)=I 10 CONTINUE IPRT=J1 IF(IPQ.NE.2)IPQ=MIN(MAX(IPQ,1),3) DO 110 J=1,I JF=NFIRST(J) JL=NLAST(J) JPQ=JL-JF-1 JJ=JPQ+2 IF(JJ.EQ.0)GOTO 110 IF(JPQ.NE.2)JPQ=MIN(MAX(JPQ,1),3) DO 20 I1=1,9 DO 20 J1=1,9 20 PAB(I1,J1)=0.D0 KK=0 DO 30 K=IF,IL KK=KK+1 LL=0 DO 30 L=JF,JL LL=LL+1 30 PAB(KK,LL)=P(L+(K*(K-1))/2) CALL COE(XYZ(1,I),XYZ(2,I),XYZ(3,I), 1 XYZ(1,J),XYZ(2,J),XYZ(3,J),IPQ,JPQ,C,R) DO 40 I1=1,9 DO 40 J1=1,9 40 AROT(I1,J1)=0.D0 DO 50 I1=1,35 50 AROT(IROT(1,I1),IROT(2,I1))= 1 C(IROT(3,I1),IROT(4,I1),IROT(5,I1)) L1=ISP(II) L2=ISP(JJ) DO 60 I1=1,9 DO 60 J1=1,9 60 VECT(I1,J1)=-1.D0 DO 70 I1=1,L1 DO 70 J1=1,L2 70 VECT(I1,J1)=0.D0 IF(I.NE.J) THEN IJ=MAX(II,JJ) DO 90 I1=1,II DO 90 J1=1,JJ SUM=0.D0 DO 80 L1=1,IJ DO 80 L2=1,IJ 80 SUM=SUM+AROT(L1,I1)*PAB(L1,L2)*AROT(L2,J1) 90 VECT(ISP(I1),ISP(J1))= 1 VECT(ISP(I1),ISP(J1))+SUM**2 ENDIF K=0 DO 100 I1=IF,IL K=K+1 L=0 DO 100 J1=JF,JL L=L+1 100 IF(J1.LE.I1) B(J1+(I1*(I1-1))/2)=VECT(K,L) 110 CONTINUE 120 CONTINUE C C NOW TO REMOVE ALL THE DEAD SPACE IN P, CHARACTERIZED BY -1.0 C LINEAR=(NORBS*(NORBS+1))/2 L=0 DO 130 I=1,LINEAR IF(B(I).GT.-0.1) THEN L=L+1 B(L)=B(I) ENDIF 130 CONTINUE C C PUT ATOMIC ORBITAL VALENCIES ONTO THE DIAGONAL C DO 160 I=1,IPRT SUM=0.D0 II=(I*(I-1))/2 DO 140 J=1,I 140 SUM=SUM+B(J+II) DO 150 J=I+1,IPRT 150 SUM=SUM+B((J*(J-1))/2+I) 160 B((I*(I+1))/2)=SUM DO 170 I=1,21 170 LINE(I)='------' LIMIT=(IPRT*(IPRT+1))/2 KK=8 NA=1 180 LL=0 M=MIN0((IPRT+1-NA),6) MA=2*M+1 M=NA+M-1 WRITE(6,'(/16X,10(1X,A7,3X))')(ITEXT(I),I=NA,M) WRITE(6,'(15X,10(2X,A2,I3,4X))')(JTEXT(I),NATOM(I),I=NA,M) WRITE (6,'(20A6)') (LINE(K),K=1,MA) DO 200 I=NA,IPRT LL=LL+1 K=(I*(I-1))/2 L=MIN0((K+M),(K+I)) K=K+NA IF ((KK+LL).LE.50) GO TO 190 WRITE (6,'(''1'')') WRITE(6,'(/17X,10(1X,A7,3X))')(ITEXT(N),N=NA,M) WRITE(6,'( 17X,10(2X,A2,I3,4X))')(JTEXT(N),NATOM(N),N=NA,M) WRITE (6,'(20A6)') (LINE(N),N=1,MA) KK=4 LL=0 190 WRITE (6,'(1X,A7,1X,A2,I3,10F11.6)') 1 ITEXT(I),JTEXT(I),NATOM(I),(B(N),N=K,L) 200 CONTINUE IF (L.GE.LIMIT) GO TO 210 KK=KK+LL+4 NA=M+1 IF ((KK+IPRT+1-NA).LE.50) GO TO 180 KK=4 WRITE (6,'(''1'')') GO TO 180 210 RETURN END mopac7-1.15/fortran/polar.f0000644000175000017500000030313711053302064012507 00000000000000 SUBROUTINE POLAR C.. 6/13/91 IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C********************************************************************** C C POLAR SETS UP THE CALCULATION OF THE MOLECULAR ELECTRIC RESPONSE C PROPERTIES BY FFHPOL. C C********************************************************************** CHARACTER*2 ELEMNT DIMENSION X1(MAXORB,MAXORB), X2(MAXORB,MAXORB), X3(MAXORB,MAXORB) DIMENSION X4(MAXORB,MAXORB), X5(MAXORB,MAXORB), X6(MAXORB,MAXORB) DIMENSION X7(MAXORB,MAXORB), X8(MAXORB,MAXORB), X9(MAXORB,MAXORB) DIMENSION X10(MAXORB,MAXORB),X11(MAXORB,MAXORB),X12(MAXORB,MAXORB) DIMENSION X13(MAXORB,MAXORB) COMMON /WORK1/ X1,X2,X3,X4,X5,X6,X7,X8,X9,X10, 1 XDUMY(21*MPACK-10*MAXORB*MAXORB) COMMON /WORK3/ X11,X12,XDUMY1(4*MPACK-2*MAXORB*MAXORB) COMMON /SCRACH/ X13, XDUMY2(MAXPAR*MAXPAR-MAXORB*MAXORB) C.. COMMON /TITLES/ KOMENT,TITLE COMMON /POLVOL/ POLVOL(107) COMMON /KEYWRD/ KEYWRD COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR),IDUMY,XPARAM(MAXPAR) COMMON /SCFTYP/ EMIN,LIMSCF COMMON /TIMCOM/ TIME0 COMMON /ELEMTS/ ELEMNT(107) COMMON /CORE / CORE(107) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON /GEOM / GEO(3,NUMATM), COORD(3,NUMATM) COMMON /LAST / LAST COMMON /EULER / TVEC(3,3),IDTVEC COMMON /OMVAL/ OMEGA COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)), (IR,IFILES(5)) DIMENSION GRAD(MAXPAR),ROTVEC(3,3), TEMPV(3,3), DATAEV(10) 1,VALUE(40) CHARACTER KEYWRD*241, TYPE*7, KOMENT*81, TITLE*81 CHARACTER POLKEY*241, LINE*80 LOGICAL LET, LIMSCF LIMSCF=.FALSE. TYPE=' MNDO ' LET=(INDEX(KEYWRD,'LET').NE.0) IF(INDEX(KEYWRD,'MINDO') .NE. 0) TYPE='MINDO/3' IF(INDEX(KEYWRD,'AM1') .NE. 0) TYPE=' AM1 ' WRITE(6,10) 10 FORMAT('1',20('*'),' TDHF POLARIZABILITIES ', 1 20('*'),//) CALL GMETRY(GEO,COORD) C C ORIENT THE MOLECULE WITH THE MOMENTS OF INERTIA. C THIS IS DONE TO ENSURE A UNIQUE, REPRODUCEABLE SET OF DIRECTIONS. C IF LET IS SPECIFIED, THE INPUT ORIENTATION WILL BE USED. C IF (.NOT.LET) THEN MASS = 1 CALL AXIS(COORD,NUMAT,A,B,C,SUMW,MASS,ROTVEC) WRITE(6,20) 20 FORMAT (/' ROTATION MATRIX FOR ORIENTATION OF MOLECULE:'/) DO 40 I = 1,3 WRITE(6,30) (ROTVEC(I,J),J=1,3) 30 FORMAT(5X,3F12.6) 40 CONTINUE C C ROTATE ATOMS C DO 70 I = 1,NUMAT DO 60 J = 1,3 SUM = 0.0D00 DO 50 K = 1,3 SUM = SUM + COORD(K,I)*ROTVEC(K,J) 50 CONTINUE GEO(J,I) = SUM 60 CONTINUE 70 CONTINUE DO 90 I = 1,NUMAT DO 80 J = 1,3 COORD(J,I) = GEO(J,I) 80 CONTINUE 90 CONTINUE WRITE(6,'(//10X,''CARTESIAN COORDINATES '',/)') WRITE(6,'(4X,''NO.'',7X,''ATOM'',9X,''X'', 1 9X,''Y'',9X,''Z'',/)') L=0 DO 100 I=1,NUMAT IF(NAT(I).EQ.99.OR.NAT(I).EQ.107) GOTO 100 L=L+1 WRITE(6,'(I6,8X,A2,4X,3F10.4)') 1 L,ELEMNT(NAT(I)),(COORD(J,L),J=1,3) 100 CONTINUE C C IF POLYMER, ROTATE TVEC C (BEWARE: THE POLYMER SECTIONS MAY NOT WORK YET) C IF (IDTVEC.GT.0) THEN DO 130 I = 1,IDTVEC DO 120 J = 1,3 SUM = 0.0D00 DO 110 K = 1,3 SUM = SUM + TVEC(K,I)*ROTVEC(K,J) 110 CONTINUE TEMPV(J,I) = SUM 120 CONTINUE 130 CONTINUE DO 150 I = 1,3 DO 140 J = 1,IDTVEC TVEC(I,J) = TEMPV(I,J) 140 CONTINUE 150 CONTINUE WRITE(6,160)((TVEC(J,I),J=1,3),I=1,IDTVEC) 160 FORMAT(/' NEW TRANSLATION VECTOR:'/, 1 ' ',3(3F15.5)) ENDIF ENDIF C LAST=1 NA(1)=99 C C SET UP THE VARIABLES IN XPARAM AND LOC, THESE ARE IN CARTESIAN C COORDINATES. C NDEP=0 NUMAT=0 SUMX=0.D0 SUMY=0.D0 SUMZ=0.D0 DO 180 I=1,NATOMS IF((LABELS(I).NE.99).AND.(LABELS(I).NE.107)) THEN NUMAT=NUMAT+1 LABELS(NUMAT)=LABELS(I) SUMX=SUMX+COORD(1,NUMAT) SUMY=SUMY+COORD(2,NUMAT) SUMZ=SUMZ+COORD(3,NUMAT) DO 170 J=1,3 170 GEO(J,NUMAT)=COORD(J,NUMAT) ENDIF 180 CONTINUE SUMX=SUMX/NUMAT SUMY=SUMY/NUMAT SUMZ=SUMZ/NUMAT SUMMAX=0.D0 ATPOL=0.D0 DO 190 I=1,NUMAT IF (LABELS(I).NE.107) THEN ATPOL=ATPOL+POLVOL(LABELS(I)) ENDIF GEO(1,I)=GEO(1,I)-SUMX IF(SUMMAX.LT.ABS(GEO(1,I))) SUMMAX=ABS(GEO(1,I)) GEO(2,I)=GEO(2,I)-SUMY IF(SUMMAX.LT.ABS(GEO(2,I))) SUMMAX=ABS(GEO(2,I)) GEO(3,I)=GEO(3,I)-SUMZ IF(SUMMAX.LT.ABS(GEO(3,I))) SUMMAX=ABS(GEO(3,I)) 190 CONTINUE C NVAR=0 NATOMS = NUMAT CALL COMPFG(GEO, .TRUE., HEAT0, .TRUE., GRAD, .FALSE.) WRITE(6,200) HEAT0 200 FORMAT(//' ENERGY OF "REORIENTED" SYSTEM WITHOUT FIELD:', 1 F20.10) C............................................................... C C VARIABLES USED FOR TIME-DEPENDENT CALCULATIONS C C OMEGA ......... FREQUENCY OF LIGHT (ACTUALLY INPUT AS ENERGY C IN EV'S. C IWFLA ......... TYPE OF ALPHA CALCULATION FOR STORING MATRICES C 0 = STATIC C 1 = OMEGA C 2 = 2*OMEGA C 3 = 3*OMEGA C IWFLB ......... TYPE OF BETA CALCULATION FOR STORING MATRICES C 0 = (0,0) C 1 = (W,W) (SHG) C 2 = (0,W) (EOPE) C 3 = (W,-W) (OR) C C INPUT NUMBER OF FREQENCIES TO RUN C C IBET = 0 NO BETA CALC C 1 ITERATIVE BETA C -1 NONITER BETA (SHG) C -2 NONITER EOPE C -3 NONITER OR C C IGAM = 0 NO GAMMA CALC C 1 THIRD HARMONIC GENERATION INPUT N,0,1,1 C 2 DC-EFISHG INPUT N,0,1,2 C 3 IDRI N,0,1,3 C 4 OKE N,0,1,4 C 5 DC EFIOR (NOT AVAILABLE) C READ(5,'(A)') LINE CALL NUCHAR(LINE,VALUE,NVALUE) IWFLB=VALUE(1) IBET=VALUE(2) IGAM=VALUE(3) ATOL=VALUE(4) MAXITU=VALUE(5) MAXITA=VALUE(6) BTOL=VALUE(7) DO 220 I=1,3 220 DATAEV(I)=(I-1)*0.25D0 NFREQ=3 230 CONTINUE IF (IGAM.NE.0) THEN IBET = 1 ENDIF WRITE(6,240) NFREQ,IWFLB,IBET,IGAM 240 FORMAT(//' NFREQ=',I3,' IWFLB=',I3,' IBET=',I3,' IGAM=',I3) C C ATOL IS THE MAXIMUM TOLERANCE IN MAKEUF AND BTOL IS THAT IN BMAKUF C MAXITU IS THE MAXIMUM ITERATION IN BETAF AND MAXITA IS THE MAXIMUM C ITERATION IN ALPHAF C C# READ(IR,*,END=99,ERR=99) ATOL,MAXITU,MAXITA,BTOL WRITE(6,250) ATOL,BTOL,MAXITU,MAXITA 250 FORMAT(' ATOL=',D12.5,' BTOL=',D12.5,' MAXITU=',I5, 1 ' MAXITA=',I5) C C SET UP DIRECT ACCESS FILE FOR T-D MATRICES CALL OPENDA(0) C C CALCULATE ALPHA AT STATIC VALUES C IF ((IWFLB .EQ. 2).OR.(IGAM .EQ. 2).OR.(IGAM.EQ.4).OR. 1 (IBET.LE.-2)) THEN IWFLA = 0 OMEGA = 0.0D00 CALL ALPHAF(IWFLA,ATOL,MAXITA,X1,X2,X3,X4,X5,X6,X7) ENDIF IF (IGAM.EQ.4) THEN IWFLB=0 CALL BETAF(IWFLB,MAXITU,BTOL,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10, 1 X11,X12,X13) ENDIF C C CALCULATE FREQUENCY DEPENDENT VALUES C DO 280 I = 1, NFREQ C C READ IN FREQ: ACTUALLY READ IN AS ENERGY IN EV. C OMEGA=DATAEV(I) OMEGAU = OMEGA/27.2113961D+00 IF (OMEGA.LT.1.0D-8) THEN WAVLEN = 999999.99D0 C# WRITE(6,401) OMEGA WRITE(6,260) 260 FORMAT(//,' ',65(1H*),/, 1 ' CALCULATION OF STATIC FIELD QUANTITIES',/, 2 ' ',65('*')) ELSE WRITE(6,270) OMEGA,OMEGAU,1239.8424D0/OMEGA, 1 8065.541D0*OMEGA 270 FORMAT(//,' ',70(1H*), 1 /' CALCULATION FOR A FREQUENCY OF ',F10.5,' EV =', 2 F14.5,' A.U. '/18X,'WAVELENGTH OF ',F10.2,' NM =', 3 F14.5,' CM(-1)',/, 4 ' ',70('*')) ENDIF C C CALCULATE ALPHA(W) C IWFLA = 1 CALL ALPHAF(IWFLA,ATOL,MAXITA,X1,X2,X3,X4,X5,X6,X7) C C PERFORM NONITERATIVE BETA CALCULATIONS C C OPTICAL RECTIFICATION IF (IBET.EQ.-3) THEN CALL NONOR(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12) ENDIF C ELECTROPTIC POCKELS EFFECT IF (IBET.EQ.-2) THEN CALL NONOPE(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12) ENDIF C SECOND HARMONIC GENERATION IF (IBET.EQ.-1) THEN IWFLA = 2 OMEGA = OMEGA*2.0D00 CALL ALPHAF(IWFLA,ATOL,MAXITA,X1,X2,X3,X4,X5,X6,X7) OMEGA = OMEGA/2.0D00 CALL NONBET(X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12) ENDIF C C PERFORM ITERATIVE BETA (SHG AND STATIC)CALCULATIONS C C IF ((IBET.GT.0) .AND.(IGAM .EQ. 0)) THEN IF ((IBET.EQ.1) .AND. (IWFLB .LE. 1) .AND. (IGAM .EQ. 0)) THEN CALL BETAF(IWFLB,MAXITU,BTOL,X1,X2,X3,X4,X5,X6,X7,X8, 1 X9,X10,X11,X12,X13) C C PERFORM ITERATIVE BETA (EOPE AND OR) CALCULATIONS C ELSEIF ((IBET.EQ.1).AND.(IWFLB.GT.1).AND.(IGAM.EQ.0)) THEN CALL BEOPOR(IWFLB,MAXITU,BTOL,X1,X2,X3,X4,X5,X6,X7,X8, 1 X9,X10,X11,X12,X13) ENDIF C....................................................................... C CALCULATE GAMMA VALUES C....................................................................... IF ((IBET.GT.0).AND.(IGAM .LE. 3).AND.(IGAM.NE.0)) THEN IWFLB=1 CALL BETAF(IWFLB,MAXITU,BTOL,X1,X2,X3,X4,X5,X6,X7,X8, 1 X9,X10,X11,X12,X13) ENDIF C THIRD HARMONIC GENRATION IF (IGAM.EQ.1) THEN IWFLA = 3 OMEGA = OMEGA*3.0D00 CALL ALPHAF(IWFLA,ATOL,MAXITA,X1,X2,X3,X4,X5,X6,X7) OMEGA = OMEGA/3.0D00 CALL NGAMTG(IGAM,X1,X2,X3,X4,X5,X6,X7,X8,X9) ENDIF C DC-EFISHG IF (IGAM.EQ.2) THEN IWFLA = 2 OMEGA = 2.0D00*OMEGA CALL ALPHAF(IWFLA,ATOL,MAXITA,X1,X2,X3,X4,X5,X6,X7) OMEGA = OMEGA/2.0D00 IWFLB = 2 CALL BEOPOR(IWFLB,MAXITU,BTOL,X1,X2,X3,X4,X5,X6,X7,X8, 1 X9,X10,X11,X12,X13) CALL NGEFIS(IGAM,X1,X2,X3,X4,X5,X6,X7,X8,X9) ENDIF C IDRI IF (IGAM.EQ.3) THEN IWFLB=3 CALL BEOPOR(IWFLB,MAXITU,BTOL,X1,X2,X3,X4,X5,X6,X7,X8, 1 X9,X10,X11,X12,X13) CALL NGIDRI(IGAM,X1,X2,X3,X4,X5,X6,X7,X8,X9) ENDIF C OKE IF (IGAM.EQ.4) THEN IWFLB=2 CALL BEOPOR(IWFLB,MAXITU,BTOL,X1,X2,X3,X4,X5,X6,X7,X8, 1 X9,X10,X11,X12,X13) CALL NGOKE(IGAM,X1,X2,X3,X4,X5,X6,X7,X8,X9) ENDIF 280 CONTINUE C RETURN 290 WRITE(6,'('' DATA FOR POLAR CALCULATION EITHER'', 1'' MISSING OR FAULTY'')') RETURN END C C======================================================================= C SUBROUTINE TF(UA,GA,UB,GB,T,NORBS,NCLOSE,IWFLB) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C THIS SUBROUTINE CREATES THE NEW T MATRIX C DIMENSION UA(NORBS,NORBS),UB(NORBS,NORBS), 1 T(NORBS,NORBS),GA(NORBS,NORBS), 2 GB(NORBS,NORBS) C C ZERO MATRIX INITIALLY C CALL ZEROM(T,NORBS) C C CALCULATE T (IJ)(W,W)= SUM(GA(IK)(W)*UB(KJ)(W)+ C GB(IK)(W)*UA(KJ)(W)-UA(IK)(W)GB(KJ)(W)-UB(IK)(W)GA(KJ)(W) C DO 30 I = 1,NORBS DO 20 J = 1,NORBS SUM1=0.0D0 SUM2=0.0D0 DO 10 K = 1,NORBS C CALCULATE FOR (W,W), (0,W) VALUES C SUM1 = SUM1+GA(I,K)*UB(K,J)+GB(I,K)*UA(K,J) 1 -UA(I,K)*GB(K,J)-UB(I,K)*GA(K,J) SUM2 = SUM2+GA(J,K)*UB(K,I)+GB(J,K)*UA(K,I) 1 -UA(J,K)*GB(K,I)-UB(J,K)*GA(K,I) 10 CONTINUE T(I,J) = SUM1 T(J,I) = SUM2 20 CONTINUE 30 CONTINUE C RETURN END SUBROUTINE TRANSF(F,G,C,NORB) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C THIS SUBROUTINE FORMS THE G MATRIX BY TRANSFORMING F WITH C C DIMENSION C(NORB,NORB),F(NORB,NORB),G(NORB,NORB) C DO 40 I = 1,NORB DO 30 J = 1,NORB C IJ = I*(I-1)/2 + J TERM2 = 0.0D00 DO 20 K = 1,NORB TERM = 0.0D00 DO 10 L = 1,NORB C KI = MAX0(K,L) C LI = MIN0(K,L) C KL = KI*(KI-1)/2 + LI TERM = TERM + F(K,L)*C(L,J) 10 CONTINUE TERM2 = TERM2 + TERM*C(K,I) 20 CONTINUE G(I,J) = TERM2 30 CONTINUE 40 CONTINUE RETURN END FUNCTION TRSUB(UL,X,UR,L1,LM,NDIM) C THIS PROGRAM CALCULATES TRACES OF MATRICES IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION UL(NDIM,NDIM),X(NDIM,NDIM),UR(NDIM,NDIM) C SUM = 0.0D00 DO 30 I = 1,L1 DO 20 K = 1,LM SUML = 0.0D00 DO 10 L = 1,LM SUML = SUML + X(K,L)*UR(L,I) 10 CONTINUE SUM = SUM + SUML*UL(I,K) 20 CONTINUE 30 CONTINUE TRSUB = 2.0D00*SUM RETURN END FUNCTION TRUDGU(UL,X,UR,L1,LM,NDIM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION UL(NDIM,NDIM),X(NDIM,NDIM),UR(NDIM,NDIM) C SUM = 0.0D00 DO 30 I = 1,L1 DO 20 K = 1,LM SUML = 0.0D00 DO 10 L = 1,LM SUML = SUML + X(K,L)*UR(L,I) 10 CONTINUE SUM = SUM + SUML*UL(K,I) 20 CONTINUE 30 CONTINUE TRUDGU = 2.0D00*SUM RETURN END FUNCTION TRUGDU(UL,X,UR,L1,LM,NDIM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION UL(NDIM,NDIM),X(NDIM,NDIM),UR(NDIM,NDIM) C SUM = 0.0D00 DO 30 I = 1,L1 DO 20 K = 1,LM SUML = 0.0D00 DO 10 L = 1,LM SUML = SUML + X(L,K)*UR(L,I) 10 CONTINUE SUM = SUM + SUML*UL(I,K) 20 CONTINUE 30 CONTINUE TRUGDU = 2.0D00*SUM RETURN END FUNCTION TRUGUD(UL,X,UR,L1,LM,NDIM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION UL(NDIM,NDIM),X(NDIM,NDIM),UR(NDIM,NDIM) C SUM = 0.0D00 DO 30 I = 1,L1 DO 20 K = 1,LM SUML = 0.0D00 DO 10 L = 1,LM SUML = SUML + X(K,L)*UR(I,L) 10 CONTINUE SUM = SUM + SUML*UL(I,K) 20 CONTINUE 30 CONTINUE TRUGUD = 2.0D00*SUM RETURN END SUBROUTINE ZEROM(X,M) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C ZEROM ZEROS THE MATRIX X C DIMENSION X(M,M) DO 20 I = 1,M DO 10 J = 1,M X(I,J) = 0.0D00 10 CONTINUE 20 CONTINUE RETURN END SUBROUTINE ALPHAF (IWFLA,ATOL,MAXITA,U,F,G,UOLD,H1,D,DA) C C SUBROUTINE FOR THE CALCULATION OF THE FREQUENCY DEPENDENT FIRST-ORDER C RESPONCE MATRICIES UA AND DENSITIES DA. C USED TO COMPUTE THE FREQUENCY DEPENDENT POLARIZABILITY AND FOR C SOLVING THE SECOND-ORDER PROBLEM. C IMPLICIT DOUBLE PRECISION (A-H,O-Z) LOGICAL LAST INCLUDE 'SIZES' C COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /VECTOR/ C(MORB2),EIGS(MAXORB),CA(MORB2),DUMY(MAXORB) COMMON /WMATRX/ W(N2ELEC*2) COMMON /GEOM / GEO(3,NUMATM), COORD(3,NUMATM) COMMON /OMVAL/ OMEGA COMMON /KEYWRD/ KEYWRD CHARACTER*241 KEYWRD COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) C DIMENSION U(MAXORB,MAXORB), F(MAXORB,MAXORB), G(MAXORB,MAXORB) DIMENSION UOLD(MAXORB,MAXORB), H1(MAXORB,MAXORB), 1 D(MAXORB,MAXORB),DA(MAXORB,MAXORB), ALLALP(3,3) CHARACTER*1 ALAB DIMENSION ALAB(3) SAVE ALAB DATA ALAB/'X','Y','Z'/ C NSQR = NORBS*NORBS ALPAVG = 0.0D00 C COMPUTE OFFSETS FOR U AND G MATRICES IPOSU = 1 + 6*IWFLA IPOSG = 4 + 6*IWFLA WRITE(6,10) OMEGA 10 FORMAT (/,' +++++ ALPHA AT ',1F13.5,' EV.') C C CHOOSE A COMPONENT C X: ID=1 Y: ID=2 Z: ID=3 C DO 70 ID = 1,3 CMPTIM = SECOND() LAST = .FALSE. C C CALCULATE THE DIPOLE MATRIX. C CALL HMUF (H1,ID,COORD,NFIRST,NLAST,NAT,NORBS,NUMAT) CALL COPYM (H1,F,NORBS) C C INITIALIZE UOLD TO ZERO C CALL ZEROM (UOLD,NORBS) C................................................................. C LOOP STARTS HERE C................................................................. ICOUNT = 0 ALPOLD = 0.0D00 20 CONTINUE ICOUNT = ICOUNT + 1 IF (ICOUNT.GT.MAXITA) LAST = .TRUE. C C CREATE G MATRIX. C CALL TRANSF (F,G,C,NORBS) C C FORM U MATRIX C CALL MAKEUF (U,UOLD,G,EIGS,LAST,NORBS,NNORB,NCLOSE,DIFF,ATOL) C C FORM NEW DENSITY MATRIX C CALL DENSF (U,C,CA,D,DA,NORBS,NCLOSE) C C COMPUTE TEST ALPHA TO BE USED FOR A CONVERGENCE TEST C ALPHAW = AVAL(H1,D,NORBS) DELA = DABS(ALPOLD-ALPHAW) ALPOLD = ALPHAW C. WRITE(6,1500) ALPHAW C. 1500 FORMAT (' TEST ALPHA = ',D12.5) C C CREATE NEW FOCK MATRIX C CALL ZEROM (F,NORBS) CALL FFREQ2 (F,D,W,NUMAT,NFIRST,NLAST,NORBS) CALL FFREQ1 (F,D,DA,DA,NORBS) CALL HPLUSF (F,H1,NORBS) C.............................................................. IF (.NOT.LAST) GO TO 20 CMPTIM = SECOND() - CMPTIM WRITE(6,30) ICOUNT,CMPTIM,DIFF,DELA 30 FORMAT (/' CONVERGED IN',I4,' ITERATIONS IN',F10.2,' SECONDS', 1 /' DENSITY CONVERG. TO ',1PD12.5, 2 /' ALPHA CONVERG. TO ',1PD12.5,/) C C COMPUTE ALPHA C ALPHAW = AVAL(H1,D,NORBS) ALLALP(ID,ID)=ALPHAW WRITE(6,40) ALAB(ID),ALAB(ID),ALPHAW 40 FORMAT (' ALPHA(',A1,',',A1,') = ',1PD14.7) ALPAVG = ALPAVG + ALPHAW C C WRITE OUT U AND G FOR FUTURE USE C CALL DAWRIT (U,NSQR,IPOSU+ID) CALL DAWRIT (G,NSQR,IPOSG+ID) C C COMPUTE OTHER COMPONENTS C DO 60 IC = 1,3 IF (IC.NE.ID) THEN CALL HMUF (H1,IC,COORD,NFIRST,NLAST,NAT,NORBS,NUMAT) ALPHAW = AVAL(H1,D,NORBS) ALLALP(IC,ID)=ALPHAW WRITE(6,50) ALAB(IC),ALAB(ID),ALPHAW 50 FORMAT (' ALPHA(',A1,',',A1,') = ',1PD14.7) ENDIF 60 CONTINUE 70 CONTINUE ALPAVG = ALPAVG/3.0D00 WRITE(6,80) ALPAVG 80 FORMAT (/,' ISOTROPIC AVERAGE ALPHA = ',1F13.5,' A.U.') C RETURN END FUNCTION AVAL (H,D,NORBS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C................................................................. C COMPUTE POLARIZABILITY AS TRACE OF H*D C................................................................. DIMENSION H(NORBS,NORBS),D(NORBS,NORBS) SUM = 0.0D00 DO 20 I = 1,NORBS DO 10 J = 1,NORBS SUM = SUM + H(I,J)*D(J,I) 10 CONTINUE 20 CONTINUE AVAL = -SUM RETURN END SUBROUTINE BDENSF (UA,UB,UAB,C,D,DA,NORBS,NCLOSE,IWFLB) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) C C THIS SUBROUTINE IS USED TO COMPUTE THE FIRST-ORDER DENSITY C DIMENSION C(NORBS,NORBS),D(NORBS,NORBS),UA(NORBS,NORBS), 1 UB(NORBS,NORBS),DA(NORBS,NORBS),UAB(NORBS,NORBS) C C FORM DENSITY MATRIX C C CALL ZEROM(D,NORBS) C C CALCULATE C DO 100 I = 1,NORBS DO 90 J = 1,NORBS S1 = 0.0D00 S2 = 0.0D00 S3 = 0.0D00 S4 = 0.0D00 DO 20 K = 1,NORBS DO 10 L = 1,NCLOSE S1 = S1+C(I,K)*UAB(K,L)*C(J,L) S2 = S2+C(I,L)*UAB(L,K)*C(J,K) 10 CONTINUE 20 CONTINUE C DO 50 K = 1,NCLOSE DO 40 L= NCLOSE+1,NORBS DO 30 M = 1,NCLOSE S3 = S3+C(I,K)*(UA(K,L)*UB(L,M)+UB(K,L)*UA(L,M))* 1C(J,M) 30 CONTINUE 40 CONTINUE 50 CONTINUE C DO 80 K = NCLOSE+1,NORBS DO 70 L = 1,NCLOSE DO 60 M = NCLOSE+1, NORBS S4 = S4+C(I,K)*(UA(K,L)*UB(L,M)+UB(K,L)*UA(L,M))* 1C(J,M) 60 CONTINUE 70 CONTINUE 80 CONTINUE D(I,J) = 2.0D00*(S1-S2+S3-S4) 90 CONTINUE 100 CONTINUE C WRITE(6,*) 'INITIAL DENSITY MATRIX FINAL FORM' C CALL MATOUT(D,EIGS,NORBS,NORBS,NORBS) C C CREATE DA C DO 120 I = 1,NORBS DO 110 J = 1,NORBS DA(I,J) = D(I,J)/2.0D00 110 CONTINUE 120 CONTINUE C RETURN END SUBROUTINE BEOPOR(IWFLB,MAXITU,BTOL,UA,UB,F,GA,GB,T,H1, 1 D,DA,UAB,UOLD1,G,X) C C THIS SUBROUTINE CALCULATES ITERATIVE BETA VALUES FOR C THE ELECTROOPTIC POCKELS EFFECT AND OPTICAL RECTIFICATION C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DOUBLE PRECISION MAXU LOGICAL LAST INCLUDE 'SIZES' C COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /VECTOR/ C(MORB2),EIGS(MAXORB),CA(MORB2),DUMY(MAXORB) COMMON /WMATRX/ W(N2ELEC*2) COMMON /GEOM / GEO(3,NUMATM), COORD(3,NUMATM) COMMON /OMVAL/ OMEGA COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) C DIMENSION UA(MAXORB,MAXORB),UB(MAXORB,MAXORB),F(MAXORB,MAXORB), 1 GA(MAXORB,MAXORB),GB(MAXORB,MAXORB), 2 T(MAXORB,MAXORB), H1(MAXORB,MAXORB), 3 D(MAXORB,MAXORB),DA(MAXORB,MAXORB), 4 UAB(MAXORB,MAXORB),UOLD1(MAXORB,MAXORB), 5 G(MAXORB,MAXORB),X(MAXORB,MAXORB) CHARACTER*1 ALAB DIMENSION ALAB(3),IDA(9),IDB(9) SAVE ALAB, IDA, IDB DATA ALAB/'X','Y','Z'/ DATA IDA /1,1,1,2,2,2,3,3,3/ DATA IDB /1,2,3,1,2,3,1,2,3/ ONE=1.0D00 BETOLD = 0.0D00 MAXSQ = NORBS*NORBS IF (IWFLB .EQ. 2) THEN IPOSU = 73 ELSE IPOSU = 109 ENDIF IPOSG = IPOSU + 9 IPOSE = IPOSG + 9 IPOSUM = IPOSE + 9 IF (IWFLB .EQ. 0) THEN WRITE(6,10) OMEGA 10 FORMAT(/,' +++++ BETA (STATIC) AT ',1F15.5 ,' EV.'/) ELSEIF (IWFLB .EQ. 2) THEN WRITE(6,20) OMEGA 20 FORMAT(/,' +++++ BETA', 1 ' (ELECTROOPTIC POCKELS EFFECT) AT ',1F15.5 ,' EV.'/) ELSE WRITE(6,30) OMEGA 30 FORMAT(/,' +++++ BETA', 1 ' (OPTICAL RECTIFICATION) AT ',1F15.5 ,' EV.'/) ENDIF C C LOOP OVER COMPONENTS C BAVX = 0.0D+00 BAVY = 0.0D+00 BAVZ = 0.0D+00 DO 90 ID = 1,9 CMPTIM = SECOND() IA=IDA(ID) IB=IDB(ID) LAST = .FALSE. C C CALCULATE THE DIPOLE MATRIX. C CALL HMUF(H1,IA,COORD,NFIRST,NLAST,NAT,NORBS,NUMAT) C C INITIALIZE ZERO ARRAYS C CALL ZEROM(UOLD1,NORBS) CALL ZEROM(UAB,NORBS) CALL ZEROM(F,NORBS) C C INPUT U AND GA FROM ALPHA CALCULATIONS C IF ((IWFLB .EQ. 2) .OR. (IWFLB .EQ. 0)) THEN C UA CONTAINS UA(0) JPU = 1 + IA CALL DAREAD(UA,MAXSQ,JPU) C GA CONTAINS GA(0) JPG = 4 + IA CALL DAREAD(GA,MAXSQ,JPG) ELSE C UA CONTAINS UA(W) JPU = 7 + IA CALL DAREAD(UA,MAXSQ,JPU) C GA CONTAINS GA(W) JPG = 10 + IA CALL DAREAD(GA,MAXSQ,JPG) ENDIF C C READ VALUES FOR (W,-W) CALCULATION : OR C IF (IWFLB .EQ. 3) THEN C UB CONTAINS UB(-W) = -UB+(W) JPU = 7 + IB CALL DAREAD(X,MAXSQ,JPU) CALL FHPATN(UB,X,NORBS,2,-ONE) C GB CONTAINS GB(-W) = GB+(W) JPG = 10 + IB CALL DAREAD(X,MAXSQ,JPG) CALL FHPATN(GB,X,NORBS,2,ONE) C C READ VALUES FOR (0,W) CALCULATION : OKE C ELSEIF (IWFLB .EQ. 0) THEN C UB CONTAINS UB(0) JPU = 1 + IB CALL DAREAD(UB,MAXSQ,JPU) C GB CONTAINS GB(0) JPG = 4 + IB CALL DAREAD(GB,MAXSQ,JPG) ELSE C UB CONTAINS UB(W) JPU = 7 + IB CALL DAREAD(UB,MAXSQ,JPU) C GB CONTAINS GB(W) JPG = 10 + IB CALL DAREAD(GB,MAXSQ,JPG) ENDIF C C CONSTRUCT T-MATRIX ONE TIME C CALL TF(UA,GA,UB,GB,T,NORBS,NCLOSE,IWFLB) C C CALCULATE INITIAL DENSITY AND BETA VALUE C CALL BDENSF(UA,UB,UAB,C,D,DA,NORBS,NCLOSE,IWFLB) BETAW = AVAL(H1,D,NORBS) DELA = DABS(BETOLD-BETAW) BETOLD = BETAW C C INITIALIZE FOCK MATRIX C CALL FFREQ2(F,D,W,NUMAT,NFIRST,NLAST,NORBS) CALL FFREQ1(F,D,DA,DA,NORBS) CALL ZEROM(DA,NORBS) CALL HPLUSF(F,DA,NORBS) C................................................................. C LOOP STARTS HERE C................................................................. ICOUNT = 0 40 CONTINUE ICOUNT = ICOUNT + 1 IF (ICOUNT .GE. MAXITU) LAST = .TRUE. C C CREATE G MATRIX. C CALL TRANSF(F,G,C,NORBS) C C FORM U MATRIX C CALL BMAKUF(UA,UB,UAB,T,UOLD1,G,EIGS,LAST,NORBS, 1 NCLOSE,DIFF,IWFLB,MAXU,BTOL) C C FORM NEW DENSITY MATRIX C CALL BDENSF(UA,UB,UAB,C,D,DA,NORBS,NCLOSE,IWFLB) C... C COMPUTE TEST BETA C BETAW = AVAL(H1,D,NORBS) DELA = DABS(BETOLD-BETAW) BETOLD = BETAW C IF (LAST.OR.(ICOUNT.GT.(MAXITU-5))) THEN C WRITE(6,1500) ICOUNT,DELA,MAXU,DIFF C 1500 FORMAT(' ',I4,' DELTA BETA = ', D12.5, C X ' MAXU = ', D12.5, ' UDIFF = ', D12.5) C ENDIF C C CREATE NEW FOCK MATRIX C CALL ZEROM(F,NORBS) CALL FFREQ2(F,D,W,NUMAT,NFIRST,NLAST,NORBS) CALL FFREQ1(F,D,DA,DA,NORBS) CALL ZEROM(DA,NORBS) CALL HPLUSF(F,DA,NORBS) C.............................................................. IF (.NOT.LAST) GO TO 40 CMPTIM = SECOND() - CMPTIM WRITE(6,50) ICOUNT,CMPTIM 50 FORMAT(/' CONVERGED IN',I4,' ITERATIONS IN',F10.2, 1 ' SECONDS') WRITE(6,60) MAXU,DIFF 60 FORMAT(' MAXIMUM UAB ELEMENT =',1F15.5 , 1 ', MAXIMUM DIFFERENCE =',1F15.5 ,/) C C COMPUTE OTHER COMPONENTS C DO 80 IC = 1,3 CALL HMUF(H1,IC,COORD,NFIRST,NLAST,NAT,NORBS,NUMAT) BETAW = AVAL(H1,D,NORBS) WRITE(6,70) ALAB(IC),ALAB(IA),ALAB(IB),BETAW 70 FORMAT(' BETA(',A1,',',A1,',',A1,') = ',1F15.5 ) C CALCULATES THE AVERAGE VALUE OF BETA C IF ((ID .EQ. 1) .AND. (IC .EQ. 1)) THEN BAVX = BAVX + 3.0D0*BETAW ELSEIF (((ID.EQ.5).OR.(ID.EQ.9)).AND. (IC .EQ. 1)) THEN BAVX = BAVX + BETAW ELSEIF (((ID.EQ.2).OR.(ID .EQ. 4)) .AND. (IC .EQ. 2)) THEN BAVX = BAVX + BETAW ELSEIF (((ID.EQ.3).OR.(ID .EQ. 7)) .AND. (IC .EQ. 3)) THEN BAVX = BAVX + BETAW ENDIF C CALCULATES AVERAGE BETA IN Y-DIRECTION C IF ((ID .EQ. 5) .AND. (IC .EQ. 2)) THEN BAVY = BAVY + 3.0D0*BETAW ELSEIF (((ID.EQ.2).OR.(ID .EQ. 4)) .AND. (IC .EQ. 1)) THEN BAVY = BAVY + BETAW ELSEIF (((ID.EQ.1).OR.(ID .EQ. 9)) .AND. (IC .EQ. 2)) THEN BAVY = BAVY + BETAW ELSEIF (((ID.EQ.6).OR.(ID .EQ. 8)) .AND. (IC .EQ. 3)) THEN BAVY = BAVY + BETAW ENDIF C CALCULATES AVERAGE BETA IN THE Z-DIRECTION C IF ((ID .EQ. 9) .AND. (IC .EQ. 3)) THEN BAVZ = BAVZ + 3.0D0 * BETAW ELSEIF (((ID.EQ.3).OR.(ID .EQ. 7)) .AND. (IC .EQ. 1)) THEN BAVZ = BAVZ + BETAW ELSEIF (((ID.EQ.6).OR.(ID .EQ. 8)) .AND. (IC .EQ. 2)) THEN BAVZ = BAVZ + BETAW ELSEIF (((ID.EQ.1).OR.(ID .EQ. 5)) .AND. (IC .EQ. 3)) THEN BAVZ = BAVZ + BETAW ENDIF 80 CONTINUE C C CALL SUBROUTINE TO CALCULATE EPSILON AND UMINUS OMEGA,OMEGA C EPSILON IN H1 AND UMINUS IN DA CALL EPSAB(H1,EIGS,G,GA,GB,UA,UB,UAB,DA,NORBS,NCLOSE,IWFLB) CALL DAWRIT(UAB,MAXSQ,IPOSU+ID) CALL DAWRIT(G,MAXSQ,IPOSG+ID) CALL DAWRIT(H1,MAXSQ,IPOSE+ID) CALL DAWRIT(DA,MAXSQ,IPOSUM+ID) 90 CONTINUE BAVX = BAVX/5.0D+00 BAVY = BAVY/5.0D+00 BAVZ = BAVZ/5.0D+00 BVEC = (BAVX*BAVX+BAVY*BAVY+BAVZ*BAVZ)**0.5D+00 C WRITE(6,100) OMEGA,BAVX 100 FORMAT(//,' AVERAGE BETAX VALUE AT ',F10.5,' EV = ', 1 1F15.5 ) WRITE(6,110) OMEGA,BAVY 110 FORMAT(' AVERAGE BETAY VALUE AT ',F10.5,' EV = ', 1 1F15.5 ) WRITE(6,120) OMEGA,BAVZ 120 FORMAT(' AVERAGE BETAZ VALUE AT ',F10.5,' EV = ', 1 1F15.5 ) WRITE(6,130) OMEGA,BVEC 130 FORMAT(//,' AVERAGE BETA VALUE AT ',F10.5,' EV = ', 1 1F15.5 ,//) C RETURN END SUBROUTINE BETAF(IWFLB,MAXITU,BTOL,UA,UB,F,GA,GB,T,H1,D,DA, 1 UAB,UOLD1,G,X) C C THIS SUBROUTINE CALCULATES ITERATIVE BETA VALUES FOR SECOND HARMONIC C GENERATION. C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DOUBLE PRECISION MAXU LOGICAL LAST INCLUDE 'SIZES' C COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /VECTOR/ C(MORB2),EIGS(MAXORB),CA(MORB2),DUMY(MAXORB) COMMON /WMATRX/ W(N2ELEC*2) COMMON /GEOM / GEO(3,NUMATM), COORD(3,NUMATM) COMMON /OMVAL/ OMEGA COMMON /KEYWRD/ KEYWRD COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) CHARACTER*241 KEYWRD C DIMENSION UA(MAXORB,MAXORB),UB(MAXORB,MAXORB),F(MAXORB,MAXORB), 1 GA(MAXORB,MAXORB),GB(MAXORB,MAXORB), 2 T(MAXORB,MAXORB), H1(MAXORB,MAXORB), 3 D(MAXORB,MAXORB),DA(MAXORB,MAXORB), 4 UAB(MAXORB,MAXORB),UOLD1(MAXORB,MAXORB), 5 G(MAXORB,MAXORB),X(MAXORB,MAXORB) DIMENSION ALLBET(3,3,3) CHARACTER*1 ALAB DIMENSION ALAB(3),IDA(6),IDB(6) SAVE ALAB, IDA, IDB DATA ALAB/'X','Y','Z'/ DATA IDA /1,1,1,2,2,3/ DATA IDB /1,2,3,2,3,3/ C ONE=1.0D00 BETOLD = 0.0D00 MAXSQ = NORBS*NORBS IPOSU = 25 + 24*IWFLB IPOSG = IPOSU + 6 IPOSE = IPOSG + 6 IPOSUM = IPOSE + 6 C IF (IWFLB .EQ. 0) THEN WRITE(6,10) OMEGA 10 FORMAT(/,' +++++ BETA (STATIC) AT ',1F15.5 ,' EV.'/) ELSE WRITE(6,20) OMEGA 20 FORMAT(/,' +++++ BETA', 1 ' (SECOND HARMONIC GENERATION) AT ',1F13.5,' EV.'/) ENDIF C C CHOOSE A COMPONENT C X: ID=1 Y: ID=2 Z: ID=3 C BAVX = 0.0D+00 BAVY = 0.0D+00 BAVZ = 0.0D+00 DO 80 ID = 1,6 CMPTIM = SECOND() IA=IDA(ID) IB=IDB(ID) LAST = .FALSE. C C CALCULATE THE DIPOLE MATRIX. C CALL HMUF(H1,IA,COORD,NFIRST,NLAST,NAT,NORBS,NUMAT) C C INITIALIZE ZERO ARRAYS C CALL ZEROM(UOLD1,NORBS) CALL ZEROM(UAB,NORBS) CALL ZEROM(F,NORBS) C C INPUT U AND GA FROM ALPHA CALCULATIONS C IF ((IWFLB .EQ. 2) .OR. (IWFLB .EQ. 0)) THEN JPU = 1 + IA CALL DAREAD(UA,MAXSQ,JPU) JPG = 4 + IA CALL DAREAD(GA,MAXSQ,JPG) ELSE JPU = 7 + IA CALL DAREAD(UA,MAXSQ,JPU) JPG = 10 + IA CALL DAREAD(GA,MAXSQ,JPG) ENDIF C READ VALUES FOR (W,-W) IF (IWFLB .EQ. 3) THEN JPU = 7 + IB CALL DAREAD(X,MAXSQ,JPU) CALL FHPATN(UB,X,NORBS,2,-ONE) JPG = 10 + IB CALL DAREAD(X,MAXSQ,JPG) CALL FHPATN(GB,X,NORBS,2,ONE) C READ VALUES FOR OKE C ELSEIF (IWFLB .EQ. 0) THEN JPU = 1 + IB CALL DAREAD(UB,MAXSQ,JPU) JPG = 4 + IB CALL DAREAD(GB,MAXSQ,JPG) ELSE JPU = 7 + IB CALL DAREAD(UB,MAXSQ,JPU) JPG = 10 + IB CALL DAREAD(GB,MAXSQ,JPG) ENDIF C C CONSTRUCT T-MATRIX ONE TIME C CALL TF(UA,GA,UB,GB,T,NORBS,NCLOSE,IWFLB) C C CALCULATE INITIAL DENSITY AND BETA VALUE C CALL BDENSF(UA,UB,UAB,C,D,DA,NORBS,NCLOSE,IWFLB) BETAW = AVAL(H1,D,NORBS) DELA = DABS(BETOLD-BETAW) BETOLD = BETAW C C INITIALIZE FOCK MATRIX C CALL FFREQ2(F,D,W,NUMAT,NFIRST,NLAST,NORBS) CALL FFREQ1(F,D,DA,DA,NORBS) CALL ZEROM(DA,NORBS) CALL HPLUSF(F,DA,NORBS) C................................................................. C LOOP STARTS HERE C................................................................. ICOUNT = 0 30 CONTINUE ICOUNT = ICOUNT + 1 IF (ICOUNT .GE. MAXITU) LAST = .TRUE. C C CREATE G MATRIX. C CALL TRANSF(F,G,C,NORBS) C C FORM U MATRIX C CALL BMAKUF(UA,UB,UAB,T,UOLD1,G,EIGS,LAST,NORBS, 1 NCLOSE,DIFF,IWFLB,MAXU,BTOL) C C FORM NEW DENSITY MATRIX C CALL BDENSF(UA,UB,UAB,C,D,DA,NORBS,NCLOSE,IWFLB) C... C COMPUTE TEST BETA C BETAW = AVAL(H1,D,NORBS) DELA = DABS(BETOLD-BETAW) BETOLD = BETAW C IF (LAST.OR.(ICOUNT.GT.(MAXITU-5))) THEN C WRITE(6,1500) ICOUNT,DELA,MAXU,DIFF C 1500 FORMAT(' ',I4,' DELTA BETA = ', D12.5, C X ' MAXU = ', D12.5, ' UDIFF = ', D12.5) C ENDIF C C CREATE NEW FOCK MATRIX C CALL ZEROM(F,NORBS) CALL FFREQ2(F,D,W,NUMAT,NFIRST,NLAST,NORBS) CALL FFREQ1(F,D,DA,DA,NORBS) CALL ZEROM(DA,NORBS) CALL HPLUSF(F,DA,NORBS) C.............................................................. IF (.NOT.LAST) GO TO 30 CMPTIM = SECOND() - CMPTIM WRITE(6,40) ICOUNT,CMPTIM 40 FORMAT(/' CONVERGED IN',I4,' ITERATIONS IN',F10.2, 1 ' SECONDS') WRITE(6,50) MAXU,DIFF 50 FORMAT(' MAXIMUM UAB ELEMENT =',1F15.5 , 1 ', MAXIMUM DIFFERENCE =',1F15.5 ,/) C C COMPUTE BETA C C CALL HMUF(H1,ID,COORD,NFIRST,NLAST,NAT,NORBS,NUMAT) C BETAW = AVAL(H1,D,NORBS) C WRITE(6,2000) ALAB(ID),ALAB(ID),ALAB(ID),BETAW C2000 FORMAT('BETA(',A1,',',A1,','A1,') = ',D12.5) C C COMPUTE OTHER COMPONENTS C DO 70 IC = 1,3 CALL HMUF(H1,IC,COORD,NFIRST,NLAST,NAT,NORBS,NUMAT) BETAW = AVAL(H1,D,NORBS) ALLBET(IC,IA,IB)=BETAW WRITE(6,60) ALAB(IC),ALAB(IA),ALAB(IB),BETAW 60 FORMAT(' BETA(',A1,',',A1,',',A1,') = ',1F15.5 ) C C CALCULATE AVERAGE BETA IN THE X-DIRECTION C IF ((ID .EQ. 1) .AND. (IC .EQ. 1)) THEN BAVX = BAVX + 3.0D0 * BETAW ELSEIF ((ID .EQ. 2) .AND. (IC .EQ. 2)) THEN BAVX = BAVX + 2.0D0 * BETAW ELSEIF ((ID .EQ. 3) .AND. (IC .EQ. 3)) THEN BAVX = BAVX + 2.0D0 * BETAW ELSEIF (((ID.EQ.4).OR.(ID .EQ. 6)) .AND. (IC .EQ. 1)) THEN BAVX = BAVX + BETAW ENDIF C CALCULATES AVERAGE BETA IN THE Y-DIRECTION IF ((ID .EQ. 4) .AND. (IC .EQ. 2)) THEN BAVY = BAVY + 3.0D0 * BETAW ELSEIF ((ID .EQ. 2) .AND. (IC .EQ. 1)) THEN BAVY = BAVY + 2.0D0 * BETAW ELSEIF ((ID .EQ. 5) .AND. (IC .EQ. 3)) THEN BAVY = BAVY + 2.0D0 * BETAW ELSEIF (((ID.EQ.1).OR.(ID .EQ. 6)) .AND. (IC .EQ. 2)) THEN BAVY = BAVY + BETAW ENDIF C CALCULATES AVERAGE BETA IN THE Z-DIRECTION IF ((ID .EQ. 6) .AND. (IC .EQ. 3)) THEN BAVZ = BAVZ + 3.0D0 * BETAW ELSEIF ((ID .EQ. 3) .AND. (IC .EQ. 1)) THEN BAVZ = BAVZ + 2.0D0 * BETAW ELSEIF ((ID .EQ. 5) .AND. (IC .EQ. 2)) THEN BAVZ = BAVZ + 2.0D0 * BETAW ELSEIF (((ID.EQ.4) .OR. (ID.EQ.1)) .AND. (IC .EQ. 3)) THEN BAVZ = BAVZ + BETAW ENDIF 70 CONTINUE C C C CALL SUBROUTINE TO CALCULATE EPSILON AND UMINUS OMEGA,OMEGA C EPSILON IN H1 AND UMINUS IN DA CALL EPSAB(H1,EIGS,G,GA,GB,UA,UB,UAB,DA,NORBS,NCLOSE,IWFLB) CALL DAWRIT(UAB,MAXSQ,IPOSU+ID) CALL DAWRIT(G,MAXSQ,IPOSG+ID) CALL DAWRIT(H1,MAXSQ,IPOSE+ID) CALL DAWRIT(DA,MAXSQ,IPOSUM+ID) 80 CONTINUE C BAVX = BAVX/5.0D+00 BAVY = BAVY/5.0D+00 BAVZ = BAVZ/5.0D+00 C CALCULATES AVERAGE BETA BVEC = (BAVX*BAVX+BAVY*BAVY+BAVZ*BAVZ)**0.5D+00 C WRITE(6,90) OMEGA,BAVX 90 FORMAT(//,' AVERAGE BETAX(SHG) VALUE AT',F10.5, ' EV = ', 1 1F11.5 ) WRITE(6,100) OMEGA,BAVY 100 FORMAT(' AVERAGE BETAY(SHG) VALUE AT',F10.5, ' EV = ', 1 1F11.5 ) WRITE(6,110) OMEGA,BAVZ 110 FORMAT(' AVERAGE BETAZ(SHG) VALUE AT',F10.5, ' EV = ', 1 1F11.5) C WRITE(6,120) OMEGA,BVEC 120 FORMAT(//,' AVERAGE BETA (SHG) VALUE AT',F10.5, ' EV = ', 1 1F11.5 ,//) RETURN END SUBROUTINE BETAL1(U0A,G0A,U1B,G1B,U1C,G1C,NCLOSE,NORBS,TERM) C C THIS SUBROUTINE CALCULATES THE TRACE OF UGU MATRICES C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U0A(NORBS,NORBS),U1B(NORBS,NORBS),U1C(NORBS,NORBS), 1 G0A(NORBS,NORBS),G1B(NORBS,NORBS),G1C(NORBS,NORBS) T1A = TRUGUD(U0A,G1B,U1C,NCLOSE,NORBS,NORBS) T2A = TRUDGU(U1C,G1B,U0A,NCLOSE,NORBS,NORBS) T3A = TRUGDU(U1B,G1C,U0A,NCLOSE,NORBS,NORBS) T4A = TRUGDU(U0A,G1C,U1B,NCLOSE,NORBS,NORBS) T5A = TRUDGU(U1C,G0A,U1B,NCLOSE,NORBS,NORBS) T6A = TRUGUD(U1B,G0A,U1C,NCLOSE,NORBS,NORBS) T1B = TRUGUD(U0A,G1B,U1C,NORBS,NCLOSE,NORBS) T2B = TRUDGU(U1C,G1B,U0A,NORBS,NCLOSE,NORBS) T3B = TRUGDU(U1B,G1C,U0A,NORBS,NCLOSE,NORBS) T4B = TRUGDU(U0A,G1C,U1B,NORBS,NCLOSE,NORBS) T5B = TRUDGU(U1C,G0A,U1B,NORBS,NCLOSE,NORBS) T6B = TRUGUD(U1B,G0A,U1C,NORBS,NCLOSE,NORBS) TERM = T1B-T1A+T2B-T2A+T3A-T3B+T4A-T4B+T5B-T5A+T6B-T6A RETURN END SUBROUTINE BETALL(U2A,G2A,U1B,G1B,U1C,G1C,NCLOSE,NORBS,TERM) C C THIS SUBROUTINE CALCULATES TRACE OF UGU MATRICES C WHEN A,B,C DIRECTIONS ARE DIFFERENT C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U2A(NORBS,NORBS),U1B(NORBS,NORBS),U1C(NORBS,NORBS), 1 G2A(NORBS,NORBS),G1B(NORBS,NORBS),G1C(NORBS,NORBS) T1A = TRUDGU(U2A,G1B,U1C,NCLOSE,NORBS,NORBS) T2A = TRUGUD(U1C,G1B,U2A,NCLOSE,NORBS,NORBS) T3A = TRUGUD(U1B,G1C,U2A,NCLOSE,NORBS,NORBS) T4A = TRUDGU(U2A,G1C,U1B,NCLOSE,NORBS,NORBS) T5A = TRUGDU(U1C,G2A,U1B,NCLOSE,NORBS,NORBS) T6A = TRUGDU(U1B,G2A,U1C,NCLOSE,NORBS,NORBS) T1B = TRUDGU(U2A,G1B,U1C,NORBS,NCLOSE,NORBS) T2B = TRUGUD(U1C,G1B,U2A,NORBS,NCLOSE,NORBS) T3B = TRUGUD(U1B,G1C,U2A,NORBS,NCLOSE,NORBS) T4B = TRUDGU(U2A,G1C,U1B,NORBS,NCLOSE,NORBS) T5B = TRUGDU(U1C,G2A,U1B,NORBS,NCLOSE,NORBS) T6B = TRUGDU(U1B,G2A,U1C,NORBS,NCLOSE,NORBS) TERM = T1B-T1A+T2B-T2A+T3B-T3A+T4B-T4A+T5A-T5B+T6A-T6B RETURN END SUBROUTINE BETCOM(U1,G1,U2,G2,NCLOSE,NORBS,TERM) C C THIS SUBROUTINE CALCULATES TRACE OF UGU MATRICES C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U1(NORBS,NORBS),U2(NORBS,NORBS), 1 G1(NORBS,NORBS),G2(NORBS,NORBS) T1A = TRUDGU(U2,G1,U1,NCLOSE,NORBS,NORBS) T2A = TRUGUD(U1,G1,U2,NCLOSE,NORBS,NORBS) T3A = TRUGDU(U1,G2,U1,NCLOSE,NORBS,NORBS) T1B = TRUDGU(U2,G1,U1,NORBS,NCLOSE,NORBS) T2B = TRUGUD(U1,G1,U2,NORBS,NCLOSE,NORBS) T3B = TRUGDU(U1,G2,U1,NORBS,NCLOSE,NORBS) TERM = 2.0D0*(T1B-T1A+T2B-T2A+T3A-T3B) RETURN END SUBROUTINE BMAKUF(UA,UB,UAB,T,UOLD1,GAB,EIGS,LAST,NORBS, 1 NCLOSE,DIFF,IWFLB,MAXU,BTOL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DOUBLE PRECISION MAXU LOGICAL LAST C C THIS SUBROUTINE CREATES THE NEW TRANSFORMATION MATRIX U C AND THEN CHECKS FOR CONVERGENCE C DIMENSION UA(NORBS,NORBS),UOLD1(NORBS,NORBS),T(NORBS,NORBS), 1 EIGS(NORBS),GAB(NORBS,NORBS),UAB(NORBS,NORBS), 2 UB(NORBS,NORBS) COMMON /OMVAL/ OMEGA C C ZERO MATRIX INITIALLY C CALL ZEROM(UAB,NORBS) C C CREATE DIAGONAL BLOCKS (OCC,OCC) AND (UNOCC,UNOCC) C DO 30 I = 1,NORBS DO 20 J = 1,I SUM = 0.0D00 IF (I.LE.NCLOSE) THEN KLL=NCLOSE+1 KUL=NORBS ELSEIF ((I.GT.NCLOSE).AND.(J.GT.NCLOSE)) THEN KLL=1 KUL=NCLOSE ENDIF DO 10 K =KLL,KUL SUM = SUM+UA(I,K)*UB(K,J)+UB(I,K)*UA(K,J) 10 CONTINUE UAB(I,J) = SUM*0.5D00 UAB(J,I) = SUM*0.5D00 20 CONTINUE 30 CONTINUE C C CREATE OFF-DIAGONAL BLOCKS C DO 80 K = NCLOSE+1,NORBS DO 70 L = 1,NCLOSE GO TO (40,50,60), IWFLB C CALCULATE FOR (W,W) VALUES C 40 UAB(K,L) = 27.2113961D0*((GAB(K,L)+T(K,L))/ 1 ((EIGS(L)-EIGS(K))-2.0D00*OMEGA)) UAB(L,K) = 27.2113961D0*((GAB(L,K)+T(L,K))/ 1 ((EIGS(K)-EIGS(L))-2.0D00*OMEGA)) GO TO 70 C CALCULATE FOR (0,W) VALUES C 50 UAB(K,L) = 27.2113961D0*((GAB(K,L)+T(K,L))/ 1 ((EIGS(L)-EIGS(K))-OMEGA)) UAB(L,K) = 27.2113961D0*((GAB(L,K)+T(L,K))/ 1 ((EIGS(K)-EIGS(L))-OMEGA)) GO TO 70 C CALCULATE FOR (W,-W) VALUES C 60 UAB(K,L) = 27.2113961D0*((GAB(K,L)+T(K,L))/ 1 (EIGS(L)-EIGS(K))) UAB(L,K) = 27.2113961D0*((GAB(L,K)+T(L,K))/ 1 (EIGS(K)-EIGS(L))) 70 CONTINUE 80 CONTINUE C C CHECK FOR CONVERGENCE C DIFF = 0.0D00 MAXU = -1000.00D0 DO 100 I = 1,NORBS DO 90 J = 1,NORBS UDIF = UAB(I,J)-UOLD1(I,J) IF (DIFF.LT.ABS(UDIF)) DIFF = ABS(UDIF) IF (MAXU.LT.UAB(I,J)) MAXU = UAB(I,J) 90 CONTINUE 100 CONTINUE IF (DIFF.LT.BTOL) THEN LAST = .TRUE. ENDIF C DO 120 I = 1,NORBS DO 110 J = 1,NORBS UOLD1(I,J) = UAB(I,J) 110 CONTINUE 120 CONTINUE C RETURN END SUBROUTINE COPYM(H,F,M) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C COPYM COPIES MATRIX H INTO F C DIMENSION F(M,M),H(M,M) DO 20 I = 1,M DO 10 J = 1,M F(I,J) = H(I,J) 10 CONTINUE 20 CONTINUE RETURN END SUBROUTINE DAREA1(V,LEN,IDAF,NS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION V(LEN) C C READ A PHYSICAL RECORD FROM THE DAF C READ(UNIT=IDAF, REC=NS) V RETURN END SUBROUTINE DAREAD(V,LEN,NREC) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION V(LEN) C COMMON /IODAF/ IDAF,IRECLN,IRECST,IFILEN(145),IODA(145) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) C C READ A LOGICAL RECORD FROM THE DAF DICTIONARY FILE C A LOGICAL RECORD MAY SPAN SEVERAL PHYSICAL RECORDS. C N = IODA(NREC) IF(N.EQ.-1) GO TO 20 IS = -IRECLN + 1 NS = N LENT = LEN 10 CONTINUE IS = IS + IRECLN IF = IS + LENT - 1 IF ((IF-IS+1) .GT. IRECLN) IF = IS + IRECLN - 1 NSP = NS LENW = IF - IS + 1 CALL DAREA1(V(IS),LENW,IDAF,NSP) LENT = LENT - IRECLN NS = NS + 1 N = NS IF (LENT .GE. 1) GO TO 10 RETURN C 20 CONTINUE WRITE(6,30) NREC,LEN STOP C 30 FORMAT(1X,'*** ERROR ***, ATTEMPT TO READ A DAF RECORD', 1 ' THAT WAS NEVER WRITTEN. NREC,LEN=',I5,I10) END SUBROUTINE DAWRIT(V,LEN,NREC) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C LOGICAL NEWREC C DIMENSION V(LEN) C COMMON /IODAF/ IDAF,IRECLN,IRECST,IFILEN(145),IODA(145) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) C C WRITE A LOGICAL RECORD ON THE DAF DICTIONARY FILE C A LOGICAL RECORD MAY SPAN SEVERAL PHYSICAL RECORDS C N = IODA(NREC) IF (N .GT. 0 .AND. LEN .NE. IFILEN(NREC)) GO TO 30 NEWREC = .FALSE. IF (N .GT. 0) GO TO 10 IODA(NREC) = IRECST IFILEN(NREC) = LEN NEWREC = .TRUE. IRECST = IRECST + (LEN-1)/IRECLN + 1 N = IODA(NREC) 10 CONTINUE IST = -IRECLN + 1 NS = N LENT = LEN 20 CONTINUE IST = IST + IRECLN IF = IST + LENT - 1 IF ((IF-IST+1) .GT. IRECLN) IF = IST+IRECLN-1 NSP = NS LENW = IF - IST + 1 CALL DAWRT1(V(IST),LENW,IDAF,NSP) LENT = LENT - IRECLN NS = NS + 1 N = NS IF (LENT .GE. 1) GO TO 20 IF (NEWREC) WRITE(UNIT=IDAF, REC=1) IRECST,IODA,IFILEN,IS,IPK C C THE CRAY/CTSS SYSTEM HAS A BUG IN IT! THIS CALL TO DAWRIT C DOES NOT ALWAYS SUCCEED IN TRANFERRING DATA TO THE DISK, C LEAVING THE DATA ONLY IN THE BUFFER. SUBSEQUENT CALLS C TO DAREAD FOR OTHER LOGICAL RECORDS WILL DESTROY THE C BUFFER RESIDENT DATA, AND THE DATA WILL BE LOST FOREVER. C THE FOLLOWING CALL QUARANTEES THE BUFFER IS FLUSHED C TO DISK. IT SHOULD BE REMOVED IF THIS BUG IS EVER FIXED. C *CTS CALL EMPTY(IDAF) RETURN C 30 CONTINUE WRITE(6,40) NREC,LEN,IFILEN(NREC) STOP C 40 FORMAT(1X,'DAWRIT HAS REQUESTED A RECORD WITH LENGTH', 1 1X,'DIFFERENT THAN BEFORE - ABORT FORCED.'/ 2 1X,'DAF RECORD ',I5,' NEW LENGTH =',I5,' OLD LENGTH =',I5) END C*MODULE IOLIB *DECK DAWRT1 SUBROUTINE DAWRT1(V,LEN,IDAF,NS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION V(LEN) C C ----- WRITE A PHYSICAL RECORD ON THE DAF ----- C WRITE(UNIT=IDAF, REC=NS) V RETURN END SUBROUTINE DENSF(U,C,CA,D,DA,NORBS,NCLOSE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C THIS SUBROUTINE IS USED TO COMPUTE THE FIRST-ORDER DENSITY C FROM CA = C*U C DIMENSION C(NORBS,NORBS),CA(NORBS,NORBS),D(NORBS,NORBS) DIMENSION U(NORBS,NORBS),DA(NORBS,NORBS) C C FORM DENSITY MATRIX CA*N*C+ + C*N*CA+ C DO 40 I = 1,NORBS DO 30 J = 1,NORBS SUM = 0.0D00 DO 20 K = 1,NORBS SK1 = 0.0D00 SK2 = 0.0D00 DO 10 L = 1,NCLOSE SK1 = SK1 + U(K,L)*C(J,L) SK2 = SK2 + C(I,L)*U(L,K) 10 CONTINUE SUM = SUM + C(I,K)*SK1 - SK2*C(J,K) 20 CONTINUE D(I,J) = 2.0D00*SUM DA(I,J) = SUM 30 CONTINUE 40 CONTINUE C RETURN END SUBROUTINE EPSAB(EIGSAB,EIGS,GAB,GA,GB,UA,UB, 1 UAB,UDMS,NORBS,NCLOSE,IWFLB) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /OMVAL/ OMEGA C C THIS SUBROUTINE CREATES THE NEW EPSILON MATRIX AND UDMS MATRIX C DIMENSION EIGS(NORBS),EIGSAB(NORBS,NORBS), 1 GA(NORBS,NORBS),GB(NORBS,NORBS), 2 GAB(NORBS,NORBS),UAB(NORBS,NORBS), 3 UA(NORBS,NORBS),UB(NORBS,NORBS),UDMS(NORBS,NORBS) C C ZERO EPSILON OMEGA OMEGA MATRIX INITIALLY C CALL ZEROM(EIGSAB,NORBS) C C ZERO UAB MINUS OMEGA,OMEGA MATRIX INITIALLY C CALL ZEROM(UDMS,NORBS) C IF ((IWFLB .EQ. 0) .OR. (IWFLB .EQ. 1)) THEN OMVAL = 2.0D00 * OMEGA ELSEIF (IWFLB .EQ. 3) THEN OMVAL = 0.0D00 ELSEIF (IWFLB .EQ. 2) THEN OMVAL = OMEGA ENDIF DO 30 I = 1,NCLOSE DO 20 J = 1,NCLOSE S1=0.0D00 DO 10 K = NCLOSE+1, NORBS C C CALCULATION FOR EPSAB C S1 = S1+ GA(I,K)*UB(K,J)+GB(I,K)*UA(K,J) C 10 CONTINUE EIGSAB(I,J)=GAB(I,J)+S1+UAB(I,J)*(EIGS(I)- 1 EIGS(J) + OMVAL)/27.2113961D00 20 CONTINUE 30 CONTINUE C C CALCULATION FOR UMS C DO 60 I=1,NORBS DO 50 J=1,NORBS S2=0.0D00 DO 40 K= 1,NORBS S2 = S2 + UA(I,K)*UB(K,J)+UB(I,K)*UA(K,J) 40 CONTINUE C UDMS(I,J) = S2-UAB(I,J) 50 CONTINUE 60 CONTINUE C RETURN END SUBROUTINE FFREQ1(F, PTOT, PA, PB, NDIM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION F(NDIM,NDIM), PTOT(NDIM,NDIM), 1 PA(NDIM,NDIM), PB(NDIM,NDIM) C ********************************************************************* C C *** COMPUTE THE REMAINING CONTRIBUTIONS TO THE ONE-CENTRE ELEMENTS. C C ********************************************************************* COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /GAUSS / FN1(107),FN2(107) 1 /MOLORB/ USPD(MAXORB),DUMY(MAXORB) COMMON /TWOELE/ GSS(107),GSP(107),GPP(107),GP2(107),HSP(107) 1 ,GSD(107),GPD(107),GDD(107) COMMON /KEYWRD/ KEYWRD CHARACTER*241 KEYWRD LOGICAL FIRST SAVE FIRST DATA FIRST /.TRUE./ IF(FIRST)THEN FIRST=.FALSE. ENDIF DO 60 II=1,NUMAT IA=NFIRST(II) IB=NMIDLE(II) IC=NLAST(II) NI=NAT(II) DTPOP=0.D0 DAPOP=0.D0 PTPOP=0.D0 PAPOP=0.D0 GOTO (60,30,20,20,20,10,10,10,10,10)IC-IA+2 10 DTPOP=PTOT(IC,IC)+PTOT(IC-1,IC-1) 1 +PTOT(IC-2,IC-2)+PTOT(IC-3,IC-3) 2 +PTOT(IC-4,IC-4) DAPOP=PA(IC,IC)+PA(IC-1,IC-1) 1 +PA(IC-2,IC-2)+PA(IC-3,IC-3) 2 +PA(IC-4,IC-4) 20 PTPOP=PTOT(IB,IB)+PTOT(IB-1,IB-1) 1 +PTOT(IB-2,IB-2) PAPOP=PA(IB,IB)+PA(IB-1,IB-1) 1 +PA(IB-2,IB-2) 30 DBPOP=DTPOP-DAPOP C C F(S,S) C F(IA,IA) = F(IA,IA) + PB(IA,IA)*GSS(NI) + PTPOP*GSP(NI) 1 - PAPOP*HSP(NI) + DTPOP*GSD(NI) IF (NI.LT.3) GO TO 60 IPLUS=IA+1 DO 40 J=IPLUS,IB C C F(P,P) C F(J,J) = F(J,J) + PTOT(IA,IA)*GSP(NI) - PA(IA,IA)*HSP(NI) 1 + PB(J,J)*GPP(NI) + (PTPOP-PTOT(J,J))*GP2(NI) 2 - 0.5D0*(PAPOP-PA(J,J))*(GPP(NI)-GP2(NI)) 3 + DTPOP*GPD(NI) C C F(S,P) C F(IA,J) = F(IA,J) + 2.D0*PTOT(IA,J)*HSP(NI) 1 - PA(IA,J)*(HSP(NI)+GSP(NI)) F(J,IA) = F(J,IA) + 2.D0*PTOT(J,IA)*HSP(NI) 1 - PA(J,IA)*(HSP(NI)+GSP(NI)) 40 CONTINUE C C F(P,P*) C IMINUS=IB-1 DO 50 J=IPLUS,IMINUS ICC=J+1 DO 50 L=ICC,IB F(J,L) = F(J,L) + PTOT(J,L)*(GPP(NI)-GP2(NI)) 1 - 0.5D0*PA(J,L)*(GPP(NI)+GP2(NI)) F(L,J) = F(L,J) + PTOT(L,J)*(GPP(NI)-GP2(NI)) 1 - 0.5D0*PA(L,J)*(GPP(NI)+GP2(NI)) 50 CONTINUE 60 CONTINUE RETURN END SUBROUTINE FFREQ2(F,PTOT,W,NUMAT,NFIRST,NLAST,NORBS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION F(NORBS,NORBS), PTOT(NORBS,NORBS), 1 NFIRST(*), 2 NLAST(*), W(*) C******************************************************************* C C TDHF FORMS TWO ELECTRON TWO CENTER REPULSION PART OF THE FOCK C MATRIX C ON INPUT PTOT = TOTAL DENSITY MATRIX C P = ALPHA OR BETA DENSITY MATRIX C W = TWO ELECTRON INTEGRAL MATRIX C C ON OUTPUT F = PARTIAL FOCK MATRIX C C******************************************************************** COMMON /KEYWRD/ KEYWRD CHARACTER*241 KEYWRD 10 KK=0 C DO 70 II=2,NUMAT IIM1 = II - 1 IA=NFIRST(II) IB=NLAST(II) DO 60 JJ=1,IIM1 JA=NFIRST(JJ) JB=NLAST(JJ) DO 50 I=IA,IB DO 40 J=IA,I FIJ = 1.0D00 IF (I.EQ.J) FIJ = 0.5D00 DO 30 K=JA,JB DO 20 L=JA,K FKL = 1.0D00 IF (K.EQ.L) FKL = 0.5D00 KK=KK+1 A=W(KK) AINT=A*FKL*FIJ F(I,J)=F(I,J)+ AINT*(PTOT(K,L)+PTOT(L,K)) F(J,I)=F(J,I)+ AINT*(PTOT(K,L)+PTOT(L,K)) F(K,L)=F(K,L)+ AINT*(PTOT(I,J)+PTOT(J,I)) F(L,K)=F(L,K)+ AINT*(PTOT(I,J)+PTOT(J,I)) AINT=AINT*0.5D00 F(I,L)=F(I,L)-AINT*PTOT(J,K) F(L,I)=F(L,I)-AINT*PTOT(K,J) F(K,J)=F(K,J)-AINT*PTOT(L,I) F(J,K)=F(J,K)-AINT*PTOT(I,L) F(I,K)=F(I,K)-AINT*PTOT(J,L) F(K,I)=F(K,I)-AINT*PTOT(L,J) F(J,L)=F(J,L)-AINT*PTOT(I,K) F(L,J)=F(L,J)-AINT*PTOT(K,I) 20 CONTINUE 30 CONTINUE 40 CONTINUE 50 CONTINUE 60 CONTINUE 70 CONTINUE RETURN END SUBROUTINE FHPATN(A,B,NORBS,ITW,SIGN) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C THIS SUBROUTINE CONVERTS THE MATRICES INTO ITS ADJOINTS C DIMENSION A(NORBS,NORBS),B(NORBS,NORBS) GO TO (10,40,40,10) ITW 10 CONTINUE DO 30 J=1,NORBS DO 20 I=1,NORBS A(I,J)=B(I,J) 20 CONTINUE 30 CONTINUE GO TO 70 40 CONTINUE DO 60 J=1,NORBS DO 50 I=1,NORBS A(I,J)=SIGN*B(J,I) 50 CONTINUE 60 CONTINUE 70 CONTINUE RETURN END SUBROUTINE HMUF(H1,ID,COORD,NFIRST,NLAST,NAT,NORBS,NUMAT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C FORM THE DIPOLE MOMENT MATRIX FOR COMPONENT ID C COMMON /MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107) DIMENSION H1(NORBS,NORBS), COORD(3,*) DIMENSION NFIRST(NUMAT),NLAST(NUMAT),NAT(NUMAT) C C ZERO H1 MATRIX C CALL ZEROM(H1,NORBS) C C FORM DIPOLE MATRIX C DO 30 I = 1,NUMAT IA = NFIRST(I) IB = NLAST(I) NI = NAT(I) DO 20 I1 = IA,IB DO 10 J1 = IA,I1 H1(I1,J1) = 0.0D00 IO1 = I1 - IA JO1 = J1 - IA IF ((ID.EQ.1).AND.((JO1.EQ.0).AND.(IO1.EQ.1))) THEN H1(I1,J1) = DD(NI) H1(J1,I1) = DD(NI) ENDIF IF ((ID.EQ.2).AND.((JO1.EQ.0).AND.(IO1.EQ.2))) THEN H1(I1,J1) = DD(NI) H1(J1,I1) = DD(NI) ENDIF IF ((ID.EQ.3).AND.((JO1.EQ.0).AND.(IO1.EQ.3))) THEN H1(I1,J1) = DD(NI) H1(J1,I1) = DD(NI) ENDIF 10 CONTINUE H1(I1,I1) = 0.0D00 C.. ADDED FOR TRANSLATION OF CENTER FROM ORIGIN H1(I1,I1) = H1(I1,I1) + 1.8897262D0*COORD(ID,I) 20 CONTINUE 30 CONTINUE C RETURN END SUBROUTINE HPLUSF(F,H,NORBS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C HPLUSF ADDS THE 1 AND 2-ELECTRON PARTS OF THE FOCK MATRIX C DIMENSION F(NORBS,NORBS), H(NORBS,NORBS) DO 20 I=1,NORBS DO 10 J=1,NORBS TERM = F(I,J)/27.2113961D00 F(I,J)=H(I,J)+TERM 10 CONTINUE 20 CONTINUE RETURN END SUBROUTINE MAKEUF(U,UOLD,G,EIGS,LAST,NORBS,NNORBS,NCLOSE, 1 DIFF,ATOL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) LOGICAL LAST C C THIS SUBROUTINE CREATES THE NEW TRANSFORMATION MATRIX U C AND THEN CHECKS FOR CONVERGENCE C DIMENSION U(NORBS,NORBS),UOLD(NORBS,NORBS), 1 EIGS(NORBS),G(NORBS,NORBS) COMMON /OMVAL/ OMEGA C C ZERO MATRIX INITIALLY C CALL ZEROM(U,NORBS) C C CREATE OFF-DIAGONAL BLOCKS C DO 20 K = NCLOSE+1,NORBS DO 10 L = 1,NCLOSE U(L,K) = 27.2113961D0*G(L,K)/(EIGS(K)-EIGS(L)-OMEGA) U(K,L) = 27.2113961D0*G(K,L)/(EIGS(L)-EIGS(K)-OMEGA) 10 CONTINUE 20 CONTINUE C C CHECK FOR CONVERGENCE C DIFF = 0.0D00 DO 40 I = 1,NORBS DO 30 J = 1,NORBS UDIF = ABS(U(I,J)-UOLD(I,J)) IF (DIFF.LT.UDIF) DIFF = UDIF 30 CONTINUE 40 CONTINUE IF (DIFF.LT.ATOL) THEN LAST = .TRUE. ENDIF C DO 60 I = 1,NORBS DO 50 J = 1,NORBS UOLD(I,J) = U(I,J) 50 CONTINUE 60 CONTINUE C RETURN END SUBROUTINE NGAMTG(IGAM,X,GD3,UD3,G1,U1,GS,USMD,EPS,US) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C..................................................................... C CALCULATE GAMMA(THG) IN A NONITERATIVE FASHION C..................................................................... COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE, 2 NOPEN,NDUMY,FRACT COMMON /OMVAL/ OMEGA COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION X(MAXORB,MAXORB),GD3(MAXORB,MAXORB),UD3(MAXORB,MAXORB), 1 G1(MAXORB,MAXORB),U1(MAXORB,MAXORB),GS(MAXORB,MAXORB), 2 USMD(MAXORB,MAXORB),EPS(MAXORB,MAXORB), 3 GAMMA(9),US(MAXORB,MAXORB) CHARACTER*1 ALAB DIMENSION ALAB(3),IDA(9),IDB(9),IDC(9),IDD(9), 1 IPAIR(3,3) SAVE ALAB, IDA, IDB, IDC, IDD, IPAIR DATA ALAB /'X','Y','Z'/ DATA IDA /1,2,3,1,1,2,2,3,3/ DATA IDB /1,2,3,1,1,2,2,3,3/ DATA IDC /1,2,3,2,3,1,3,1,2/ DATA IDD /1,2,3,2,3,1,3,1,2/ DATA IPAIR /1,2,3,2,4,5,3,5,6/ ONE=1.D0 MSQ = NORBS*NORBS 10 WRITE(6,20) OMEGA 20 FORMAT (//, 1 ' GAMMA (THIRD HARMONIC GENERATION) AT ',F10.5,' EV.'//) C C IGAM=1 (THIRD HARMONIC GENERATION) C JGARC=22 JUARC=19 JUREC=07 JGREC=10 JG2REC=55 JU2REC=49 JU2MRC=67 JEPREC=61 C C LOOP BEGINS FOR THE CALCULATION OF GAMMA(ABCD) C GAV = 0.0D+00 DO 100 IE=1,9 C IA=IDA(IE) IB=IDB(IE) IC=IDC(IE) ID=IDD(IE) ICD=IPAIR(IC,ID) IBD=IPAIR(IB,ID) IBC=IPAIR(IB,IC) C C READ IN THE FIRST ORDER U3 OMEGA AND G3 OMEGA IN THE DIRECTION A C C MAKE GD3 OMEGA MATRIX FROM G3 MATRIX C CALL DAREAD(X,MSQ,JGARC+IA) CALL FHPATN(GD3,X,NORBS,2,ONE) C C MAKE UD3 OMEGA MATRIX FROM U3 OMEGA MATRIX C CALL DAREAD(X,MSQ,JUARC+IA) CALL FHPATN(UD3,X,NORBS,2,-ONE) C YY=0.0D00 IMOVE=1 30 CONTINUE C 40 GO TO (50,60,70), IMOVE C 50 J2=IB J34=ICD GO TO 80 60 J2=IC J34=IBD GO TO 80 70 J2=ID J34=IBC 80 CONTINUE C C READ IN G1,U1,GS,US,UMS,EPS C C GET UB CALL DAREAD(U1,MSQ,JUREC+J2) C GET GB CALL DAREAD(G1,MSQ,JGREC+J2) C GET GCD CALL DAREAD(GS,MSQ,JG2REC+J34) C GET UCD CALL DAREAD(US,MSQ,JU2REC+J34) C GET USMD CALL DAREAD(USMD,MSQ,JU2MRC+J34) C GET EPCD CALL DAREAD(EPS,MSQ,JEPREC+J34) C C C FIRST KIND C YY = YY+TRSUB(UD3,G1,US,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(USMD,G1,UD3,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(UD3,G1,US,NORBS,NCLOSE,NORBS) YY = YY+TRSUB(USMD,G1,UD3,NORBS,NCLOSE,NORBS) C C SECOND KIND C YY = YY+TRSUB(UD3,GS,U1,NCLOSE,NORBS,NORBS) YY = YY+TRSUB(U1,GS,UD3,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(UD3,EPS,U1,NORBS,NCLOSE,NORBS) YY = YY-TRSUB(U1,EPS,UD3,NORBS,NCLOSE,NORBS) C C THIRD KIND C YY = YY+TRSUB(U1,GD3,US,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(USMD,GD3,U1,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(U1,GD3,US,NORBS,NCLOSE,NORBS) YY = YY+TRSUB(USMD,GD3,U1,NORBS,NCLOSE,NORBS) C IMOVE=IMOVE+1 IF (IMOVE .LE. 3) GO TO 30 C GAMMA(IE) = YY C C CALCULATE THE AVERAGE GAMMA VALUE C GAV = GAV + YY C C WRITE GAMMA(ABCD) C WRITE(6,90)ALAB(IA),ALAB(IB),ALAB(IC),ALAB(ID),GAMMA(IE) 90 FORMAT(' GAMMA(',A1,',',A1,',',A1,',',A1,') = ',1F13.5) C 100 CONTINUE GAVE = GAV/5.0D+00 WRITE(6,110) OMEGA,GAVE 110 FORMAT(//,' AVERAGE GAMMA VALUE AT ',F10.5,' = ',1F13.5,//) RETURN END SUBROUTINE NGEFIS(IGAM,X,GD3,UD3,G1,U1,GS,USMD,EPS,US) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C..................................................................... C CALCULATE GAMMA(DC-EFISHG) IN A NONITERATIVE FASHION C..................................................................... COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE, 2 NOPEN,NDUMY,FRACT COMMON /OMVAL/ OMEGA COMMON /IODAF/IDAF,IRECLN,IRECST,IFILEN(145),IODA(145) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION X(MAXORB,MAXORB),GD3(MAXORB,MAXORB),UD3(MAXORB,MAXORB), 1 G1(MAXORB,MAXORB),U1(MAXORB,MAXORB),GS(MAXORB,MAXORB), 2 USMD(MAXORB,MAXORB),EPS(MAXORB,MAXORB), 3 GAMMA(15),US(MAXORB,MAXORB) CHARACTER*1 ALAB DIMENSION ALAB(3),IDA(15),IDB(15),IDC(15),IDD(15), 1 IP(3,3),IPAIR(3,3) SAVE ALAB, IDA, IDB, IDC, IDD, IP, IPAIR DATA ALAB /'X','Y','Z'/ C DATA IDA /1,2,3,1,1,2,2,3,3,1,1,2,2,3,3/ DATA IDB /1,2,3,2,3,1,3,1,2,1,1,2,2,3,3/ DATA IDC /1,2,3,1,1,2,2,3,3,2,3,1,3,1,2/ DATA IDD /1,2,3,2,3,1,3,1,2,2,3,1,3,1,2/ DATA IP /1,2,3,2,4,5,3,5,6/ DATA IPAIR /1,4,7,2,5,8,3,6,9/ ONE=1.D0 MSQ = NORBS*NORBS WRITE(6,10) OMEGA 10 FORMAT (//, 1 ' GAMMA (DC-EFISHG) AT ',F10.5,' EV.'//) C C GET DATA FROM ALPHA AND ITERATIVE BETA CALCULATIONS C C REQUIRED RECORDS FROM POLARIZABILITY CALCULATIONS C ------------------------------------------------------- C 0 W 2W 3W C C -02- -08- -14- -20- -U- MATRIX FOR -X- DIRECTION C -03- -09- -15- -21- -U- MATRIX FOR -Y- DIRECTION C -04- -10- -16- -22- -U- MATRIX FOR -Z- DIRECTION C -05- -11- -17- -23- -G- MATRIX FOR -X- DIRECTION C -06- -12- -18- -24- -G- MATRIX FOR -Y- DIRECTION C -07- -13- -19- -25- -G- MATRIX FOR -Z- DIRECTION C ------------------------------------------------------- C (0,0) (W,W) (0,W) (W,-W) C C -26- -50- -74- -110- -U- MATRIX FOR -XX- DIRECTION C -27- -51- -75- -111- -U- MATRIX FOR -XY- DIRECTION C -28- -52- -76- -112- -U- MATRIX FOR -XZ- DIRECTION C -77- -113- -U- MATRIX DOE -YX- DIRECTION C -29- -53- -78- -114- -U- MATRIX FOR -YY- DIRECTION C -30- -54- -79- -115- -U- MATRIX FOR -YZ- DIRECTION C -80- -116- -U- MATRIX FOR -ZX- DIRECTION C -81- -117- -U- MATRIX FOR -ZY- DIRECTION C -31- -55- -82- -118- -U- MATRIX FOR -ZZ- DIRECTION C ------------------------------------------------------------------ C C -32- -56- -83- -119- -G- MATRIX FOR -XX- DIRECTION C -33- -57- -84- -120- -G- MATRIX FOR -XY- DIRECTION C -34- -58- -85- -121- -G- MATRIX FOR -XZ- DIRECTION C -86- -122- -G- MATRIX FOR -YX- DIRECTION C -35- -59- -87- -123- -G- MATRIX FOR -YY- DIRECTION C -36- -60- -88- -124- -G- MATRIX FOR -YZ- DIRECTION C -89- -125- -G- MATRIX FOR -ZX- DIRECTION C -90- -126- -G- MATRIX FOR -ZY- DIRECTION C -37- -61- -91- -127- -G- MATRIX FOR -ZZ- DIRECTION C ------------------------------------------------------------------ C C -38- -62- -92- -128- -E- MATRIX FOR -XX- DIRECTION C -39- -63- -93- -129- -E- MATRIX FOR -XY- DIRECTION C -40- -64- -94- -130- -E- MATRIX FOR -XZ- DIRECTION C -95- -131- -E- MATRIX FOR -YX- DIRECTION C -41- -65- -96- -132- -E- MATRIX FOR -YY- DIRECTION C -42- -66- -97- -133- -E- MATRIX FOR -YZ- DIRECTION C -98- -134- -E- MATRIX FOR -ZX- DIRECTION C -99- -135- -E- MATRIX FOR -ZY- DIRECTION C -43- -67- -100- -136- -E- MATRIX FOR -ZZ- DIRECTION C ------------------------------------------------------------------ C C -44- -68- -101- -137- -UM- MATRIX FOR -XX- DIRECTION C -45- -69- -102- -138- -UM- MATRIX FOR -XY- DIRECTION C -46- -70- -103- -139- -UM- MATRIX FOR -XZ- DIRECTION C -104- -140- -UM- MATRIX FOR -YX- DIRECTION C -47- -71- -105- -141- -UM- MATRIX FOR -YY- DIRECTION C -48- -72- -106- -142- -UM- MATRIX FOR -YZ- DIRECTION C -107- -143- -UM- MATRIX FOR -ZX- DIRECTION C -108- -144- -UM- MATRIX FOR -ZY- DIRECTION C -49- -73- -109- -145- -UM- MATRIX FOR -ZZ- DIRECTION C ------------------------------------------------------------------ C C CALCULATION OF DIFFERENT GAMMA VALUES IN A NONITERATIVE METHOD. C C IGAM=2 (DC-ELECTIC FIELD INDUCED SECOND HARMONIC GENERATION) C JGARC=16 JUARC=13 JUREC=01 JGREC=04 JG2REC=55 JU2REC=49 JU2MRC=67 JEPREC=61 C LOOP BEGINS FOR THE CALCULATION OF GAMMA(ABCD) C GAV = 0.0D00 DO 90 IE=1,15 IA=IDA(IE) IB=IDB(IE) IC=IDC(IE) ID=IDD(IE) ICD=IP(IC,ID) IBD=IPAIR(IB,ID) IBC=IPAIR(IB,IC) C C READ IN THE FIRST ORDER U3 OMEGA AND G3 OMEGA IN THE DIRECTION A C MAKE GD3 OMEGA MATRIX FROM G3 MATRIX C CALL DAREAD(X,MSQ,JGARC+IA) CALL FHPATN(GD3,X,NORBS,2,ONE) C C MAKE UD3 OMEGA MATRIX FROM U3 OMEGA MATRIX C CALL DAREAD(X,MSQ,JUARC+IA) CALL FHPATN(UD3,X,NORBS,2,-ONE) YY=0.0D00 IMOVE=1 20 CONTINUE C C DC EFISHG C 30 GO TO (40,50,60), IMOVE 40 J2=IB J34=ICD GO TO 70 50 J2=IC+6 C J34=IBD+24 J3U=IBD+24 J3G=IBD+27 J3E=IBD+30 J3UM=IBD+33 GO TO 70 60 J2=ID+6 J3U=IBC+24 J3G=IBC+27 J3E=IBC+30 J3UM=IBC+33 70 CONTINUE C C READ IN G1,U1,GS,US,UMS,EPS C C CALL UB C CALL DAREAD(U1,MSQ,JUREC+J2) C CALL GB CALL DAREAD(G1,MSQ,JGREC+J2) IF (IMOVE .EQ. 1) THEN C CALL GCD CALL DAREAD(GS,MSQ,JG2REC+J34) C CALL UCD CALL DAREAD(US,MSQ,JU2REC+J34) C CALL USMD CALL DAREAD(USMD,MSQ,JU2MRC+J34) C CALL EPCD CALL DAREAD(EPS,MSQ,JEPREC+J34) C ELSE C CALL GCD CALL DAREAD(GS,MSQ,JG2REC+J3G) C CALL UCD CALL DAREAD(US,MSQ,JU2REC+J3U) C CALL USMD CALL DAREAD(USMD,MSQ,JU2MRC+J3UM) C CALL EPCD CALL DAREAD(EPS,MSQ,JEPREC+J3E) ENDIF C C FIRST KIND C YY = YY+TRSUB(UD3,G1,US,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(USMD,G1,UD3,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(UD3,G1,US,NORBS,NCLOSE,NORBS) YY = YY+TRSUB(USMD,G1,UD3,NORBS,NCLOSE,NORBS) C C SECOND KIND C YY = YY+TRSUB(UD3,GS,U1,NCLOSE,NORBS,NORBS) YY = YY+TRSUB(U1,GS,UD3,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(UD3,EPS,U1,NORBS,NCLOSE,NORBS) YY = YY-TRSUB(U1,EPS,UD3,NORBS,NCLOSE,NORBS) C C THIRD KIND C YY = YY+TRSUB(U1,GD3,US,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(USMD,GD3,U1,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(U1,GD3,US,NORBS,NCLOSE,NORBS) YY = YY+TRSUB(USMD,GD3,U1,NORBS,NCLOSE,NORBS) C IMOVE=IMOVE+1 IF (IMOVE .LE. 3) GO TO 20 C GAMMA(IE) = YY C CALCULATE THE AVERAGE GAMMA VALUE IF (IE .LE. 3) THEN GAV = GAV + 3*YY ELSEIF (IE .GT. 9) THEN GAV = GAV + YY ELSE GAV = GAV + 2*YY ENDIF C C WRITE GAMMA(ABCD) C WRITE(6,80) ALAB(IA),ALAB(IB),ALAB(IC),ALAB(ID),GAMMA(IE) 80 FORMAT(' GAMMA(',A1,',',A1,',',A1,',',A1,') = ',1PD14.7) C 90 CONTINUE GAVE = GAV/15.0D+00 WRITE(6,100) OMEGA,GAVE 100 FORMAT(//,' AVERAGE GAMMA VALUE AT ',F10.5, ' EV = ',1PD14.7,//) RETURN END SUBROUTINE NGIDRI(IGAM,X,GD3,UD3,G1,U1,GS,USMD,EPS,US) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C..................................................................... C CALCULATE GAMMA(IDRI) IN A NONITERATIVE FASHION C..................................................................... COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE, 2 NOPEN,NDUMY,FRACT COMMON /OMVAL/ OMEGA COMMON /IODAF/IDAF,IRECLN,IRECST,IFILEN(145),IODA(145) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION X(MAXORB,MAXORB),GD3(MAXORB,MAXORB),UD3(MAXORB,MAXORB), 1 G1(MAXORB,MAXORB),U1(MAXORB,MAXORB),GS(MAXORB,MAXORB), 2 USMD(MAXORB,MAXORB),EPS(MAXORB,MAXORB), 3 GAMMA(15),US(MAXORB,MAXORB) DIMENSION ALAB(3),IDA(15),IDB(15),IDC(15),IDD(15), 1 IP(3,3),IPAIR(3,3) CHARACTER*1 ALAB SAVE ALAB, IDA, IDB, IDC, IDD, IP, IPAIR DATA ALAB /'X','Y','Z'/ C DATA IDA /1,2,3,1,1,2,2,3,3,1,1,2,2,3,3/ DATA IDB /1,2,3,1,1,2,2,3,3,2,3,1,3,1,2/ DATA IDC /1,2,3,2,3,1,3,1,2,2,3,1,3,1,2/ DATA IDD /1,2,3,2,3,1,3,1,2,1,1,2,2,3,3/ DATA IP /1,2,3,2,4,5,3,5,6/ DATA IPAIR /1,4,7,2,5,8,3,6,9/ ONE=1.0D00 MSQ = NORBS*NORBS C WRITE(6,10) OMEGA 10 FORMAT (//, 1 ' GAMMA (IDRI) AT ',F10.5,' EV.'//) C C GET DATA FROM ALPHA AND ITERATIVE BETA CALCULATIONS C C C IGAM=3 (INTENSITY DEPENDENT REFRACTIVE INDEX OR DEGENERATED FOUR C WAVE MIXING) C JGARC=10 JUARC=07 JUREC=07 JGREC=10 C LOOP BEGINS FOR THE CALCULATION OF GAMMA(ABCD) C GAV = 0.0D+00 DO 80 IE=1,15 IA=IDA(IE) IB=IDB(IE) IC=IDC(IE) ID=IDD(IE) ICD=IPAIR(IC,ID) IBD=IPAIR(IB,ID) IBC=IP(IB,IC) C C READ IN THE FIRST ORDER U3 OMEGA AND G3 OMEGA IN THE DIRECTION A C C MAKE GD3 OMEGA MATRIX FROM G3 MATRIX C CALL DAREAD(X,MSQ,JGARC+IA) CALL FHPATN(GD3,X,NORBS,2,ONE) C C MAKE UD3 OMEGA MATRIX FROM U3 OMEGA MATRIX C CALL DAREAD(X,MSQ,JUARC+IA) CALL FHPATN(UD3,X,NORBS,2,-ONE) C YY=0.0D00 IMOVE=1 20 CONTINUE C C C IDRI C GO TO (30,40,50), IMOVE 30 J2= IB J34=ICD JG2REC=118 JU2REC=109 JU2MRC=136 JEPREC=127 GO TO 60 40 J2=IC J34=IBD JG2REC=118 JU2REC=109 JU2MRC=136 JEPREC=127 GO TO 60 50 J2=ID J34=IBC JG2REC= 55 JU2REC= 49 JU2MRC= 67 JEPREC= 61 60 CONTINUE C READ IN G1,U1,GS,US,UMS,EPS C C CALL UB IF (IMOVE.EQ.3) THEN CALL DAREAD(X,MSQ,JUREC+J2) CALL FHPATN(U1,X,NORBS,2,-ONE) ELSE CALL DAREAD(U1,MSQ,JUREC+J2) ENDIF C CALL GB IF (IMOVE.EQ.3) THEN CALL DAREAD(X,MSQ,JGREC+J2) CALL FHPATN(G1,X,NORBS,2,ONE) ELSE CALL DAREAD(G1,MSQ,JGREC+J2) ENDIF C CALL GCD CALL DAREAD(GS,MSQ,JG2REC+J34) C CALL UCD CALL DAREAD(US,MSQ,JU2REC+J34) C CALL USMD CALL DAREAD(USMD,MSQ,JU2MRC+J34) C CALL EPCD CALL DAREAD(EPS,MSQ,JEPREC+J34) C C FIRST KIND C YY = YY+TRSUB(UD3,G1,US,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(USMD,G1,UD3,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(UD3,G1,US,NORBS,NCLOSE,NORBS) YY = YY+TRSUB(USMD,G1,UD3,NORBS,NCLOSE,NORBS) C C SECOND KIND C YY = YY+TRSUB(UD3,GS,U1,NCLOSE,NORBS,NORBS) YY = YY+TRSUB(U1,GS,UD3,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(UD3,EPS,U1,NORBS,NCLOSE,NORBS) YY = YY-TRSUB(U1,EPS,UD3,NORBS,NCLOSE,NORBS) C C THIRD KIND C YY = YY+TRSUB(U1,GD3,US,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(USMD,GD3,U1,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(U1,GD3,US,NORBS,NCLOSE,NORBS) YY = YY+TRSUB(USMD,GD3,U1,NORBS,NCLOSE,NORBS) C IMOVE=IMOVE+1 IF (IMOVE .LE. 3) GO TO 20 C GAMMA(IE) = YY C C CALCULATE THE AVERAGE GAMMA VALUE C IF (IE .LE. 3) THEN GAV = GAV + 3.0D0*YY ELSEIF (IE .GT. 9) THEN GAV = GAV + YY ELSE GAV = GAV + 2.0D0*YY ENDIF C C WRITE GAMMA(ABCD) C WRITE(6,70) ALAB(IA),ALAB(IB),ALAB(IC),ALAB(ID),GAMMA(IE) 70 FORMAT(' GAMMA(',A1,',',A1,',',A1,',',A1,') = ',1PD14.7) C 80 CONTINUE GAVE = GAV/15.0D+00 WRITE(6,90) OMEGA,GAVE 90 FORMAT(//,' AVERAGE GAMMA VALUE AT ',F10.5,' = ',1PD14.7,//) RETURN END SUBROUTINE NGOKE(IGAM,X,GD3,UD3,G1,U1,GS,USMD,EPS,US) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C..................................................................... C CALCULATE GAMMA(OKE) IN A NONITERATIVE FASHION C..................................................................... COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE, 2 NOPEN,NDUMY,FRACT COMMON /OMVAL/ OMEGA COMMON /IODAF/IDAF,IRECLN,IRECST,IFILEN(145),IODA(145) COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION X(MAXORB,MAXORB),GD3(MAXORB,MAXORB),UD3(MAXORB,MAXORB), 1 G1(MAXORB,MAXORB),U1(MAXORB,MAXORB),GS(MAXORB,MAXORB), 2 USMD(MAXORB,MAXORB),EPS(MAXORB,MAXORB), 3 GAMMA(15),US(MAXORB,MAXORB) CHARACTER*1 ALAB DIMENSION ALAB(3),IDA(15),IDB(15),IDC(15),IDD(15), 1 IP(3,3),IPAIR(3,3) SAVE ALAB, IDA, IDB, IDC, IDD, IP, IPAIR DATA ALAB /'X','Y','Z'/ C DATA IDA /1,2,3,1,1,2,2,3,3,1,1,2,2,3,3/ DATA IDB /1,2,3,1,1,2,2,3,3,2,3,1,3,1,2/ DATA IDC /1,2,3,2,3,1,3,1,2,2,3,1,3,1,2/ DATA IDD /1,2,3,2,3,1,3,1,2,1,1,2,2,3,3/ DATA IP /1,2,3,2,4,5,3,5,6/ DATA IPAIR /1,4,7,2,5,8,3,6,9/ ONE=1.0D00 MSQ = NORBS*NORBS C IF (IGAM .EQ. 3 ) THEN WRITE(6,10) OMEGA 10 FORMAT (//, 1 ' GAMMA (IDRI) AT ',F10.5,' EV.'//) ELSE WRITE(6,20) OMEGA 20 FORMAT (//, 1 ' GAMMA (OKE) AT ',F10.5,' EV.'//) ENDIF C C DATA INCLUDING YX, ZY, ZX DIRECTIONS C GET DATA FROM ALPHA AND ITERATIVE BETA CALCULATIONS C C REQUIRED RECORDS FROM POLARIZABILITY CALCULATIONS C C ------------------------------------------------------- C 0 W 2W 3W C C -02- -08- -14- -20- -U- MATRIX FOR -X- DIRECTION C -03- -09- -15- -21- -U- MATRIX FOR -Y- DIRECTION C -04- -10- -16- -22- -U- MATRIX FOR -Z- DIRECTION C -05- -11- -17- -23- -G- MATRIX FOR -X- DIRECTION C -06- -12- -18- -24- -G- MATRIX FOR -Y- DIRECTION C -07- -13- -19- -25- -G- MATRIX FOR -Z- DIRECTION C ------------------------------------------------------- C (0,0) (W,W) (0,W) (W,-W) C C -26- -50- -74- -110- -U- MATRIX FOR -XX- DIRECTION C -27- -51- -75- -111- -U- MATRIX FOR -XY- DIRECTION C -28- -52- -76- -112- -U- MATRIX FOR -XZ- DIRECTION C -77- -113- -U- MATRIX DOE -YX- DIRECTION C -29- -53- -78- -114- -U- MATRIX FOR -YY- DIRECTION C -30- -54- -79- -115- -U- MATRIX FOR -YZ- DIRECTION C -80- -116- -U- MATRIX FOR -ZX- DIRECTION C -81- -117- -U- MATRIX FOR -ZY- DIRECTION C -31- -55- -82- -118- -U- MATRIX FOR -ZZ- DIRECTION C ------------------------------------------------------------------ C C -32- -56- -83- -119- -G- MATRIX FOR -XX- DIRECTION C -33- -57- -84- -120- -G- MATRIX FOR -XY- DIRECTION C -34- -58- -85- -121- -G- MATRIX FOR -XZ- DIRECTION C -86- -122- -G- MATRIX FOR -YX- DIRECTION C -35- -59- -87- -123- -G- MATRIX FOR -YY- DIRECTION C -36- -60- -88- -124- -G- MATRIX FOR -YZ- DIRECTION C -89- -125- -G- MATRIX FOR -ZX- DIRECTION C -90- -126- -G- MATRIX FOR -ZY- DIRECTION C -37- -61- -91- -127- -G- MATRIX FOR -ZZ- DIRECTION C ------------------------------------------------------------------ C C -38- -62- -92- -128- -E- MATRIX FOR -XX- DIRECTION C -39- -63- -93- -129- -E- MATRIX FOR -XY- DIRECTION C -40- -64- -94- -130- -E- MATRIX FOR -XZ- DIRECTION C -95- -131- -E- MATRIX FOR -YX- DIRECTION C -41- -65- -96- -132- -E- MATRIX FOR -YY- DIRECTION C -42- -66- -97- -133- -E- MATRIX FOR -YZ- DIRECTION C -98- -134- -E- MATRIX FOR -ZX- DIRECTION C -99- -135- -E- MATRIX FOR -ZY- DIRECTION C -43- -67- -100- -136- -E- MATRIX FOR -ZZ- DIRECTION C ------------------------------------------------------------------ C C -44- -68- -101- -137- -UM- MATRIX FOR -XX- DIRECTION C -45- -69- -102- -138- -UM- MATRIX FOR -XY- DIRECTION C -46- -70- -103- -139- -UM- MATRIX FOR -XZ- DIRECTION C -104- -140- -UM- MATRIX FOR -YX- DIRECTION C -47- -71- -105- -141- -UM- MATRIX FOR -YY- DIRECTION C -48- -72- -106- -142- -UM- MATRIX FOR -YZ- DIRECTION C -107- -143- -UM- MATRIX FOR -ZX- DIRECTION C -108- -144- -UM- MATRIX FOR -ZY- DIRECTION C -49- -73- -109- -145- -UM- MATRIX FOR -ZZ- DIRECTION C ------------------------------------------------------------------ C C GET DATA FROM ALPHA AND ITERATIVE BETA CALCULATIONS C C C IGAM=4 (OPTICAL KERR EFFECT) C JGARC=10 JUARC=07 JUREC=01 JGREC=04 C LOOP BEGINS FOR THE CALCULATION OF GAMMA(ABCD) C GAV = 0.0D+00 DO 90 IE=1,15 IA=IDA(IE) IB=IDB(IE) IC=IDC(IE) ID=IDD(IE) ICD=IPAIR(IC,ID) IBD=IPAIR(IB,ID) IBC=IP(IB,IC) C C READ IN THE FIRST ORDER U3 OMEGA AND G3 OMEGA IN THE DIRECTION A C C MAKE GD3 OMEGA MATRIX FROM G3 MATRIX C CALL DAREAD(X,MSQ,JGARC+IA) CALL FHPATN(GD3,X,NORBS,2,ONE) C C MAKE UD3 OMEGA MATRIX FROM U3 OMEGA MATRIX C CALL DAREAD(X,MSQ,JUARC+IA) CALL FHPATN(UD3,X,NORBS,2,-ONE) C YY=0.0D00 IMOVE=1 30 CONTINUE C C OKE GO TO (40,50,60), IMOVE 40 J2= IB J34=ICD JG2REC=82 JU2REC=73 JU2MRC=100 JEPREC=91 GO TO 70 50 J2=IC J34=IBD JG2REC=82 JU2REC=73 JU2MRC=100 JEPREC=91 GO TO 70 60 J2=ID J34=IBC JG2REC=31 JU2REC=25 JU2MRC=43 JEPREC=37 70 CONTINUE C READ IN G1,U1,GS,US,UMS,EPS C C CALL UB IF (IMOVE.EQ.3) THEN CALL DAREAD(U1,MSQ,JUARC+J2) ELSE CALL DAREAD(U1,MSQ,JUREC+J2) ENDIF C CALL GB IF (IMOVE.EQ.3) THEN CALL DAREAD(G1,MSQ,JGARC+J2) ELSE CALL DAREAD(G1,MSQ,JGREC+J2) ENDIF C CALL GCD CALL DAREAD(GS,MSQ,JG2REC+J34) C CALL UCD CALL DAREAD(US,MSQ,JU2REC+J34) C CALL USMD CALL DAREAD(USMD,MSQ,JU2MRC+J34) C CALL EPCD CALL DAREAD(EPS,MSQ,JEPREC+J34) C C FIRST KIND C YY = YY+TRSUB(UD3,G1,US,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(USMD,G1,UD3,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(UD3,G1,US,NORBS,NCLOSE,NORBS) YY = YY+TRSUB(USMD,G1,UD3,NORBS,NCLOSE,NORBS) C C SECOND KIND C YY = YY+TRSUB(UD3,GS,U1,NCLOSE,NORBS,NORBS) YY = YY+TRSUB(U1,GS,UD3,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(UD3,EPS,U1,NORBS,NCLOSE,NORBS) YY = YY-TRSUB(U1,EPS,UD3,NORBS,NCLOSE,NORBS) C C THIRD KIND C YY = YY+TRSUB(U1,GD3,US,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(USMD,GD3,U1,NCLOSE,NORBS,NORBS) YY = YY-TRSUB(U1,GD3,US,NORBS,NCLOSE,NORBS) YY = YY+TRSUB(USMD,GD3,U1,NORBS,NCLOSE,NORBS) C IMOVE=IMOVE+1 IF (IMOVE .LE. 3) GO TO 30 C GAMMA(IE) = YY C C CALCULATE THE AVERAGE GAMMA VALUE C IF (IE .LE. 3) THEN GAV = GAV + 3.0D0*YY ELSEIF (IE .GT. 9) THEN GAV = GAV + YY ELSE GAV = GAV + 2.0D0*YY ENDIF C C WRITE GAMMA(ABCD) C WRITE(6,80) ALAB(IA),ALAB(IB),ALAB(IC),ALAB(ID),GAMMA(IE) 80 FORMAT(' GAMMA(',A1,',',A1,',',A1,',',A1,') = ',1PD14.7) C 90 CONTINUE GAVE = GAV/15.0D+00 WRITE(6,100) OMEGA,GAVE 100 FORMAT(//,' AVERAGE GAMMA VALUE AT ',F10.5,' = ',1PD14.7,//) RETURN END SUBROUTINE NONBET (U1X,U1Y,U1Z,U2X,U2Y,U2Z, 1 G1X,G1Y,G1Z,G2X,G2Y,G2Z) C C THIS SUBROUTINE CALCULATES SECOND HARMONIC GENERATION IN A C NONITERATIVE WAY. C IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C..................................................................... C CALCULATE BETA IN A NONITERATIVE FASHION C..................................................................... COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE, 2 NOPEN,NDUMY,FRACT COMMON /OMVAL/ OMEGA COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION U1X(MAXORB,MAXORB),U1Y(MAXORB,MAXORB),U1Z(MAXORB,MAXORB) DIMENSION U2X(MAXORB,MAXORB),U2Y(MAXORB,MAXORB),U2Z(MAXORB,MAXORB) DIMENSION G1X(MAXORB,MAXORB),G1Y(MAXORB,MAXORB),G1Z(MAXORB,MAXORB) DIMENSION G2X(MAXORB,MAXORB),G2Y(MAXORB,MAXORB),G2Z(MAXORB,MAXORB) C C GET DATA FROM ALPHA CALCULATIONS C MAXSQ = NORBS*NORBS BAVX = 0.0D+00 BAVY = 0.0D+00 BAVZ = 0.0D+00 CALL DAREAD (U1X,MAXSQ,8) CALL DAREAD (U1Y,MAXSQ,9) CALL DAREAD (U1Z,MAXSQ,10) CALL DAREAD (G1X,MAXSQ,11) CALL DAREAD (G1Y,MAXSQ,12) CALL DAREAD (G1Z,MAXSQ,13) CALL DAREAD (U2X,MAXSQ,14) CALL DAREAD (U2Y,MAXSQ,15) CALL DAREAD (U2Z,MAXSQ,16) CALL DAREAD (G2X,MAXSQ,17) CALL DAREAD (G2Y,MAXSQ,18) CALL DAREAD (G2Z,MAXSQ,19) C XXX CALL BETCOM (U1X,G1X,U2X,G2X,NCLOSE,NORBS,BXXX) BAVX = BAVX +3.0D0 * BXXX C YXX CALL BETCOM (U1X,G1X,U2Y,G2Y,NCLOSE,NORBS,BYXX) BAVY = BAVY + BYXX C ZXX CALL BETCOM (U1X,G1X,U2Z,G2Z,NCLOSE,NORBS,BZXX) BAVZ = BAVZ + BZXX C XXY CALL BETALL (U2X,G2X,U1X,G1X,U1Y,G1Y,NCLOSE,NORBS,BXXY) BAVY = BAVY + BXXY C YXY CALL BETALL (U2Y,G2Y,U1X,G1X,U1Y,G1Y,NCLOSE,NORBS,BYXY) BAVX = BAVX + BYXY C ZXY CALL BETALL (U2Z,G2Z,U1X,G1X,U1Y,G1Y,NCLOSE,NORBS,BZXY) C XXZ CALL BETALL (U2X,G2X,U1X,G1X,U1Z,G1Z,NCLOSE,NORBS,BXXZ) BAVZ = BAVZ + BXXZ C YXZ CALL BETALL (U2Y,G2Y,U1X,G1X,U1Z,G1Z,NCLOSE,NORBS,BYXZ) C ZXZ CALL BETALL (U2Z,G2Z,U1X,G1X,U1Z,G1Z,NCLOSE,NORBS,BZXZ) BAVX = BAVX + BZXZ C XYX CALL BETALL (U2X,G2X,U1Y,G1Y,U1X,G1X,NCLOSE,NORBS,BXYX) BAVY = BAVY + BXYX C YYX CALL BETALL (U2Y,G2Y,U1Y,G1Y,U1X,G1X,NCLOSE,NORBS,BYYX) BAVX = BAVX + BYYX C ZYX CALL BETALL (U2Z,G2Z,U1Y,G1Y,U1X,G1X,NCLOSE,NORBS,BZYX) C XYY CALL BETCOM (U1Y,G1Y,U2X,G2X,NCLOSE,NORBS,BXYY) BAVX = BAVX + BXYY C YYY CALL BETCOM (U1Y,G1Y,U2Y,G2Y,NCLOSE,NORBS,BYYY) BAVY = BAVY + 3.0D0*BYYY C ZYY CALL BETCOM (U1Y,G1Y,U2Z,G2Z,NCLOSE,NORBS,BZYY) BAVZ = BAVZ + BZYY C XYZ CALL BETALL (U2X,G2X,U1Y,G1Y,U1Z,G1Z,NCLOSE,NORBS,BXYZ) C YYZ CALL BETALL (U2Y,G2Y,U1Y,G1Y,U1Z,G1Z,NCLOSE,NORBS,BYYZ) BAVZ = BAVZ + BYYZ C ZYZ CALL BETALL (U2Z,G2Z,U1Y,G1Y,U1Z,G1Z,NCLOSE,NORBS,BZYZ) BAVY = BAVY + BZYZ C XZX CALL BETALL (U2X,G2X,U1Z,G1Z,U1X,G1X,NCLOSE,NORBS,BXZX) BAVZ = BAVZ + BXZX C YZX CALL BETALL (U2Y,G2Y,U1Z,G1Z,U1X,G1X,NCLOSE,NORBS,BYZX) C ZZX CALL BETALL (U2Z,G2Z,U1Z,G1Z,U1X,G1X,NCLOSE,NORBS,BZZX) BAVX = BAVX + BZZX C XZY CALL BETALL (U2X,G2X,U1Z,G1Z,U1Y,G1Y,NCLOSE,NORBS,BXZY) C YZY CALL BETALL (U2Y,G2Y,U1Z,G1Z,U1Y,G1Y,NCLOSE,NORBS,BYZY) BAVZ = BAVZ + BYZY C ZZY CALL BETALL (U2Z,G2Z,U1Z,G1Z,U1Y,G1Y,NCLOSE,NORBS,BZZY) BAVY = BAVY + BZZY C XZZ CALL BETCOM (U1Z,G1Z,U2X,G2X,NCLOSE,NORBS,BXZZ) BAVX = BAVX + BXZZ C YZZ CALL BETCOM (U1Z,G1Z,U2Y,G2Y,NCLOSE,NORBS,BYZZ) BAVY = BAVY + BYZZ C ZZZ CALL BETCOM (U1Z,G1Z,U2Z,G2Z,NCLOSE,NORBS,BZZZ) BAVZ = BAVZ + 3.0D0 * BZZZ C BAVX = BAVX/5.0D+00 BAVY = BAVY/5.0D+00 BAVZ = BAVZ/5.0D+00 C BVEC = (BAVX*BAVX+BAVY*BAVY+BAVZ*BAVZ)**0.5D+00 WRITE(6,10) 10 FORMAT (//, ' BETA (SECOND HARMONIC GENERATION)'//) WRITE(6,20) BXXX,BYXX,BZXX,BXXY,BYXY,BZXY, 1 BXXZ,BYXZ,BZXZ,BXYX,BYYX,BZYX, 2 BXYY,BYYY,BZYY,BXYZ,BYYZ,BZYZ, 3 BXZX,BYZX,BZZX,BXZY,BYZY,BZZY, 4 BXZZ,BYZZ,BZZZ 20 FORMAT (//,' BXXX ',D15.8,' BYXX ',D15.8,' BZXX ',D15.8,/, 1 ' BXXY ',D15.8,' BYXY ',D15.8,' BZXY ',D15.8,/, 2 ' BXXZ ',D15.8,' BYXZ ',D15.8,' BZXZ ',D15.8,/, 3 ' BXYX ',D15.8,' BYYX ',D15.8,' BZYX ',D15.8,/, 4 ' BXYY ',D15.8,' BYYY ',D15.8,' BZYY ',D15.8,/, 5 ' BXYZ ',D15.8,' BYYZ ',D15.8,' BZYZ ',D15.8,/, 6 ' BXZX ',D15.8,' BYZX ',D15.8,' BZZX ',D15.8,/, 7 ' BXZY ',D15.8,' BYZY ',D15.8,' BZZY ',D15.8,/, 8 ' BXZZ ',D15.8,' BYZZ ',D15.8,' BZZZ ',D15.8) C WRITE(6,30) OMEGA,BAVX 30 FORMAT (//, ' AVERAGE BETAX(SHG) VALUE AT',F10.5, 'EV = ', 1 1F15.5 ) C WRITE(6,40) OMEGA,BAVY 40 FORMAT (' AVERAGE BETAY(SHG) VALUE AT',F10.5, 'EV = ', 1 1F15.5 ) C WRITE(6,50) OMEGA,BAVZ 50 FORMAT (' AVERAGE BETAZ(SHG) VALUE AT',F10.5, 'EV = ', 1 1F15.5 ,//) C WRITE(6,60) OMEGA,BVEC 60 FORMAT (//, ' AVERAGE BETA (SHG) VALUE AT',F10.5, 'EV = ', 1 1F15.5 ,//) RETURN END SUBROUTINE NONOPE (U0X,U1Y,U1Z,U1X,U0Y,U0Z, 1 G0X,G1Y,G1Z,G1X,G0Y,G0Z) C C THIS SUBROUTINE CALCULATES ELECTROOPTIC POCKEL'S EFFECT C IN A NONITERATIVE WAY. C IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C..................................................................... C CALCULATE BETA IN A NONITERATIVE FASHION C..................................................................... COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE, 2 NOPEN,NDUMY,FRACT COMMON /OMVAL/ OMEGA COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION U0X(MAXORB,MAXORB),U1Y(MAXORB,MAXORB),U1Z(MAXORB,MAXORB) DIMENSION U1X(MAXORB,MAXORB),U0Y(MAXORB,MAXORB),U0Z(MAXORB,MAXORB) DIMENSION G0X(MAXORB,MAXORB),G1Y(MAXORB,MAXORB),G1Z(MAXORB,MAXORB) DIMENSION G1X(MAXORB,MAXORB),G0Y(MAXORB,MAXORB),G0Z(MAXORB,MAXORB) C MAXSQ = NORBS*NORBS C C READ DATA FROM ALPHA CALCULATION C BAVX = 0.0D+00 BAVY = 0.0D+00 BAVZ = 0.0D+00 C CALL DAREAD (U0X,MAXSQ,2) CALL DAREAD (U0Y,MAXSQ,3) CALL DAREAD (U0Z,MAXSQ,4) CALL DAREAD (G0X,MAXSQ,5) CALL DAREAD (G0Y,MAXSQ,6) CALL DAREAD (G0Z,MAXSQ,7) CALL DAREAD (U1X,MAXSQ,8) CALL DAREAD (U1Y,MAXSQ,9) CALL DAREAD (U1Z,MAXSQ,10) CALL DAREAD (G1X,MAXSQ,11) CALL DAREAD (G1Y,MAXSQ,12) CALL DAREAD (G1Z,MAXSQ,13) C XXX CALL BETALL (U1X,G1X,U0X,G0X,U1X,G1X,NCLOSE,NORBS,BXXX) BAVX = BAVX + 3.0D0 * BXXX C YXX CALL BETALL (U1Y,G1Y,U0X,G0X,U1X,G1X,NCLOSE,NORBS,BYXX) BAVY = BAVY + BYXX C ZXX CALL BETALL (U1Z,G1Z,U0X,G0X,U1X,G1X,NCLOSE,NORBS,BZXX) BAVZ = BAVZ + BZXX C XXY CALL BETALL (U1X,G1X,U0X,G0X,U1Y,G1Y,NCLOSE,NORBS,BXXY) BAVY = BAVY + BXXY C YXY CALL BETALL (U1Y,G1Y,U0X,G0X,U1Y,G1Y,NCLOSE,NORBS,BYXY) BAVX = BAVX + BYXY C ZXY CALL BETALL (U1Z,G1Z,U0X,G0X,U1Y,G1Y,NCLOSE,NORBS,BZXY) C XXZ CALL BETALL (U1X,G1X,U0X,G0X,U1Z,G1Z,NCLOSE,NORBS,BXXZ) BAVZ = BAVZ + BXXZ C YXZ CALL BETALL (U1Y,G1Y,U0X,G0X,U1Z,G1Z,NCLOSE,NORBS,BYXZ) C ZXZ CALL BETALL (U1Z,G1Z,U0X,G0X,U1Z,G1Z,NCLOSE,NORBS,BZXZ) BAVX = BAVX + BZXZ C XYX CALL BETALL (U1X,G1X,U0Y,G0Y,U1X,G1X,NCLOSE,NORBS,BXYX) BAVY = BAVY + BXYX C YYX CALL BETALL (U1Y,G1Y,U0Y,G0Y,U1X,G1X,NCLOSE,NORBS,BYYX) BAVX = BAVX + BYYX C ZYX CALL BETALL (U1Z,G1Z,U0Y,G0Y,U1X,G1X,NCLOSE,NORBS,BZYX) C XYY CALL BETALL (U1X,G1X,U0Y,G0Y,U1Y,G1Y,NCLOSE,NORBS,BXYY) BAVX = BAVX + BXYY C YYY CALL BETALL (U1Y,G1Y,U0Y,G0Y,U1Y,G1Y,NCLOSE,NORBS,BYYY) BAVY = BAVY + 3.0D0 * BYYY C ZYY CALL BETALL (U1Z,G1Z,U0Y,G0Y,U1Y,G1Y,NCLOSE,NORBS,BZYY) BAVZ = BAVZ + BZYY C XYZ CALL BETALL (U1X,G1X,U0Y,G0Y,U1Z,G1Z,NCLOSE,NORBS,BXYZ) C YYZ CALL BETALL (U1Y,G1Y,U0Y,G0Y,U1Z,G1Z,NCLOSE,NORBS,BYYZ) BAVZ = BAVZ + BYYZ C ZYZ CALL BETALL (U1Z,G1Z,U0Y,G0Y,U1Z,G1Z,NCLOSE,NORBS,BZYZ) BAVY = BAVY + BZYZ C XZX CALL BETALL (U1X,G1X,U0Z,G0Z,U1X,G1X,NCLOSE,NORBS,BXZX) BAVZ = BAVZ + BXZX C YZX CALL BETALL (U1Y,G1Y,U0Z,G0Z,U1X,G1X,NCLOSE,NORBS,BYZX) C ZZX CALL BETALL (U1Z,G1Z,U0Z,G0Z,U1X,G1X,NCLOSE,NORBS,BZZX) BAVX = BAVX + BZZX C XZY CALL BETALL (U1X,G1X,U0Z,G0Z,U1Y,G1Y,NCLOSE,NORBS,BXZY) C YZY CALL BETALL (U1Y,G1Y,U0Z,G0Z,U1Y,G1Y,NCLOSE,NORBS,BYZY) BAVZ = BAVZ + BYZY C ZZY CALL BETALL (U1Z,G1Z,U0Z,G0Z,U1Y,G1Y,NCLOSE,NORBS,BZZY) BAVY = BAVY + BZZY C XZZ CALL BETALL (U1X,G1X,U0Z,G0Z,U1Z,G1Z,NCLOSE,NORBS,BXZZ) BAVX = BAVX + BXZZ C YZZ CALL BETALL (U1Y,G1Y,U0Z,G0Z,U1Z,G1Z,NCLOSE,NORBS,BYZZ) BAVY = BAVY + BYZZ C ZZZ CALL BETALL (U1Z,G1Z,U0Z,G0Z,U1Z,G1Z,NCLOSE,NORBS,BZZZ) BAVZ = BAVZ + 3.0D0 * BZZZ C BAVX = BAVX/5.0D+00 BAVY = BAVY/5.0D+00 BAVZ = BAVZ/5.0D+00 C BVEC = (BAVX*BAVX+BAVY*BAVY+BAVZ*BAVZ)**0.5D+00 WRITE(6,*) ' BETA (ELECTOPTIC POCKELS EFFECT) ' WRITE(6,10) BXXX,BYXX,BZXX,BXXY,BYXY,BZXY, 1 BXXZ,BYXZ,BZXZ,BXYX,BYYX,BZYX, 2 BXYY,BYYY,BZYY,BXYZ,BYYZ,BZYZ, 3 BXZX,BYZX,BZZX,BXZY,BYZY,BZZY, 4 BXZZ,BYZZ,BZZZ 10 FORMAT (//,' BXXX ',D15.8,' BYXX ',D15.8,' BZXX ',D15.8,/, 1 ' BXXY ',D15.8,' BYXY ',D15.8,' BZXY ',D15.8,/, 2 ' BXXZ ',D15.8,' BYXZ ',D15.8,' BZXZ ',D15.8,/, 3 ' BXYX ',D15.8,' BYYX ',D15.8,' BZYX ',D15.8,/, 4 ' BXYY ',D15.8,' BYYY ',D15.8,' BZYY ',D15.8,/, 5 ' BXYZ ',D15.8,' BYYZ ',D15.8,' BZYZ ',D15.8,/, 6 ' BXZX ',D15.8,' BYZX ',D15.8,' BZZX ',D15.8,/, 7 ' BXZY ',D15.8,' BYZY ',D15.8,' BZZY ',D15.8,/, 8 ' BXZZ ',D15.8,' BYZZ ',D15.8,' BZZZ ',D15.8) C WRITE(6,20) OMEGA,BAVX 20 FORMAT(//,' AVERAGE BETAX VALUE AT', F10.5, 'EV = ', 1 1F15.5 ) C WRITE(6,30) OMEGA,BAVY 30 FORMAT(' AVERAGE BETAY VALUE AT', F10.5, 'EV = ', 1 1F15.5 ) C WRITE(6,40) OMEGA,BAVZ 40 FORMAT(' AVERAGE BETAZ VALUE AT', F10.5, 'EV = ', 1 1F15.5 ,//) C WRITE(6,50) OMEGA,BVEC 50 FORMAT(//,' AVERAGE BETA(EOPE) VALUE AT', F10.5, 'EV = ', 1 1F15.5 ,//) RETURN END SUBROUTINE NONOR (U0X,U1Y,U1Z,U1X,U0Y,U0Z,G0X,G1Y,G1Z, 1 G1X,G0Y,G0Z) C C THIS SUBROUTINE CALCULATES OPTICAL RECTIFICATION IN A C NONITERATIVE WAY C IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C..................................................................... C CALCULATE BETA IN A NONITERATIVE FASHION C..................................................................... COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE, 2 NOPEN,NDUMY,FRACT COMMON /OMVAL/ OMEGA COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) DIMENSION U0X(MAXORB,MAXORB),U1Y(MAXORB,MAXORB),U1Z(MAXORB,MAXORB) DIMENSION U1X(MAXORB,MAXORB),U0Y(MAXORB,MAXORB),U0Z(MAXORB,MAXORB) DIMENSION G0X(MAXORB,MAXORB),G1Y(MAXORB,MAXORB),G1Z(MAXORB,MAXORB) DIMENSION G1X(MAXORB,MAXORB),G0Y(MAXORB,MAXORB),G0Z(MAXORB,MAXORB) MAXSQ = NORBS*NORBS C C READ DATA FROM ALPHA CALCULATION C BAVX = 0.0D+00 BAVY = 0.0D+00 BAVZ = 0.0D+00 C CALL DAREAD (U0X,MAXSQ,2) CALL DAREAD (U0Y,MAXSQ,3) CALL DAREAD (U0Z,MAXSQ,4) CALL DAREAD (G0X,MAXSQ,5) CALL DAREAD (G0Y,MAXSQ,6) CALL DAREAD (G0Z,MAXSQ,7) CALL DAREAD (U1X,MAXSQ,8) CALL DAREAD (U1Y,MAXSQ,9) CALL DAREAD (U1Z,MAXSQ,10) CALL DAREAD (G1X,MAXSQ,11) CALL DAREAD (G1Y,MAXSQ,12) CALL DAREAD (G1Z,MAXSQ,13) C C NONITERATIVE BETA CALCULATION C C XXX CALL BETAL1 (U0X,G0X,U1X,G1X,U1X,G1X,NCLOSE,NORBS,BXXX) BAVX = BAVX + 3.0D0* BXXX C YXX CALL BETAL1 (U0Y,G0Y,U1X,G1X,U1X,G1X,NCLOSE,NORBS,BYXX) BAVY = BAVY + BYXX C ZXX CALL BETAL1 (U0Z,G0Z,U1X,G1X,U1X,G1X,NCLOSE,NORBS,BZXX) BAVZ = BAVZ + BZXX C XXY CALL BETAL1 (U0X,G0X,U1X,G1X,U1Y,G1Y,NCLOSE,NORBS,BXXY) BAVY = BAVY + BXXY C YXY CALL BETAL1 (U0Y,G0Y,U1X,G1X,U1Y,G1Y,NCLOSE,NORBS,BYXY) BAVX = BAVX + BYXY C ZXY CALL BETAL1 (U0Z,G0Z,U1X,G1X,U1Y,G1Y,NCLOSE,NORBS,BZXY) C XXZ CALL BETAL1 (U0X,G0X,U1X,G1X,U1Z,G1Z,NCLOSE,NORBS,BXXZ) BAVZ = BAVZ + BXXZ C YXZ CALL BETAL1 (U0Y,G0Y,U1X,G1X,U1Z,G1Z,NCLOSE,NORBS,BYXZ) C ZXZ CALL BETAL1 (U0Z,G0Z,U1X,G1X,U1Z,G1Z,NCLOSE,NORBS,BZXZ) BAVX = BAVX + BZXZ C XYX CALL BETAL1 (U0X,G0X,U1Y,G1Y,U1X,G1X,NCLOSE,NORBS,BXYX) BAVY = BAVY + BXYX C YYX CALL BETAL1 (U0Y,G0Y,U1Y,G1Y,U1X,G1X,NCLOSE,NORBS,BYYX) BAVX = BAVX + BYYX C ZYX CALL BETAL1 (U0Z,G0Z,U1Y,G1Y,U1X,G1X,NCLOSE,NORBS,BZYX) C XYY CALL BETAL1 (U0X,G0X,U1Y,G1Y,U1Y,G1Y,NCLOSE,NORBS,BXYY) BAVX = BAVX + BXYY C YYY CALL BETAL1 (U0Y,G0Y,U1Y,G1Y,U1Y,G1Y,NCLOSE,NORBS,BYYY) BAVY = BAVY + 3.0D0 * BYYY C ZYY CALL BETAL1 (U0Z,G0Z,U1Y,G1Y,U1Y,G1Y,NCLOSE,NORBS,BZYY) BAVZ = BAVZ + BZYY C XYZ CALL BETAL1 (U0X,G0X,U1Y,G1Y,U1Z,G1Z,NCLOSE,NORBS,BXYZ) C YYZ CALL BETAL1 (U0Y,G0Y,U1Y,G1Y,U1Z,G1Z,NCLOSE,NORBS,BYYZ) BAVZ = BAVZ + BYYZ C ZYZ CALL BETAL1 (U0Z,G0Z,U1Y,G1Y,U1Z,G1Z,NCLOSE,NORBS,BZYZ) BAVY = BAVY + BZYZ C XZX CALL BETAL1 (U0X,G0X,U1Z,G1Z,U1X,G1X,NCLOSE,NORBS,BXZX) BAVZ = BAVZ + BXZX C YZX CALL BETAL1 (U0Y,G0Y,U1Z,G1Z,U1X,G1X,NCLOSE,NORBS,BYZX) C ZZX CALL BETAL1 (U0Z,G0Z,U1Z,G1Z,U1X,G1X,NCLOSE,NORBS,BZZX) BAVX = BAVX + BZZX C XZY CALL BETAL1 (U0X,G0X,U1Z,G1Z,U1Y,G1Y,NCLOSE,NORBS,BXZY) C YZY CALL BETAL1 (U0Y,G0Y,U1Z,G1Z,U1Y,G1Y,NCLOSE,NORBS,BYZY) BAVZ = BAVZ + BYZY C ZZY CALL BETAL1 (U0Z,G0Z,U1Z,G1Z,U1Y,G1Y,NCLOSE,NORBS,BZZY) BAVY = BAVY + BZZY C XZZ CALL BETAL1 (U0X,G0X,U1Z,G1Z,U1Z,G1Z,NCLOSE,NORBS,BXZZ) BAVX = BAVX + BXZZ C YZZ CALL BETAL1 (U0Y,G0Y,U1Z,G1Z,U1Z,G1Z,NCLOSE,NORBS,BYZZ) BAVY = BAVY + BYZZ C ZZZ CALL BETAL1 (U0Z,G0Z,U1Z,G1Z,U1Z,G1Z,NCLOSE,NORBS,BZZZ) BAVZ = BAVZ + 3.0D0 * BZZZ C BAVX = BAVX/5.0D+00 BAVY = BAVY/5.0D+00 BAVZ = BAVZ/5.0D+00 C BVEC = (BAVX*BAVX+BAVY*BAVY+BAVZ*BAVZ)**0.5D+00 WRITE(6,10) 10 FORMAT (//, ' BETA (OPTICAL RECTIFICATION) ') WRITE(6,20) BXXX,BYXX,BZXX,BXXY,BYXY,BZXY, 1 BXXZ,BYXZ,BZXZ,BXYX,BYYX,BZYX, 2 BXYY,BYYY,BZYY,BXYZ,BYYZ,BZYZ, 3 BXZX,BYZX,BZZX,BXZY,BYZY,BZZY, 4 BXZZ,BYZZ,BZZZ 20 FORMAT (//,' BXXX ',D15.8,' BYXX ',D15.8,' BZXX ',D15.8,/, 1 ' BXXY ',D15.8,' BYXY ',D15.8,' BZXY ',D15.8,/, 2 ' BXXZ ',D15.8,' BYXZ ',D15.8,' BZXZ ',D15.8,/, 3 ' BXYX ',D15.8,' BYYX ',D15.8,' BZYX ',D15.8,/, 4 ' BXYY ',D15.8,' BYYY ',D15.8,' BZYY ',D15.8,/, 5 ' BXYZ ',D15.8,' BYYZ ',D15.8,' BZYZ ',D15.8,/, 6 ' BXZX ',D15.8,' BYZX ',D15.8,' BZZX ',D15.8,/, 7 ' BXZY ',D15.8,' BYZY ',D15.8,' BZZY ',D15.8,/, 8 ' BXZZ ',D15.8,' BYZZ ',D15.8,' BZZZ ',D15.8) C WRITE(6,30) OMEGA,BAVX 30 FORMAT(//,' AVERAGE BETAX VALUE AT ',F10.5, 'EV = ', 1 1F15.5 ) C WRITE(6,40) OMEGA,BAVY 40 FORMAT(' AVERAGE BETAY VALUE AT ',F10.5, 'EV = ', 1 1F15.5 ) C WRITE(6,50) OMEGA,BAVZ 50 FORMAT(' AVERAGE BETAZ VALUE AT ',F10.5, 'EV = ', 1 1F15.5 ,//) C WRITE(6,60) OMEGA,BVEC 60 FORMAT(//,' AVERAGE BETA(OR) VALUE AT ',F10.5, 'EV = ', 1 1F15.5 ,//) C RETURN END SUBROUTINE OPENDA(IREST) C C - - - - OPEN MASTER DICTIONARY FILE 10 - - - - C IMPLICIT DOUBLE PRECISION (A-H,O-Z) C C COMMON /IODAF/ IDAF,IRECLN,IRECST,IFILEN(145),IODA(145) COMMON /JOBNAM/ JOBNAM COMMON /CHANEL/ IFILES(30) CHARACTER*80 JOBNAM EQUIVALENCE(IW,IFILES(6)) C IDAF = 17 *VAX IRECLN = 512 IRECLN = 1023 C C GET OPEN PARAMETERS FROM INPUT (OPTIONAL) C C OBTAIN DICTNRY FILE NAME FROM RUN COMMAND LINE C *VAX OPEN (UNIT=IDAF, FILE='DICTNRY', STATUS='UNKNOWN', *VAX * ACCESS='DIRECT', FORM='UNFORMATTED', RECL=2*IRECLN) C C---------- modified by I. Cserny, June 21, 1995 ------------- C- I=INDEX(JOBNAM,' ')-1 C- OPEN(UNIT=IDAF, FILE=JOBNAM(:I)//'.POL', STATUS='UNKNOWN', C- 1 ACCESS='DIRECT', FORM='UNFORMATTED', RECL=8*IRECLN) OPEN(UNIT=IDAF, FILE='DICTNRY', STATUS='UNKNOWN', 1 ACCESS='DIRECT', FORM='UNFORMATTED', RECL=8*IRECLN) C-------------------------------------------------------------- C C ----- IS THIS A NEW OR OLD DAF FILE ----- C IF (IREST .NE. 0) GO TO 20 C C ----- MARK THE NEW DAF RECORDS AS EMPTY ----- C IRECST = 1 DO 10 I = 1,145 IODA(I) = -1 10 CONTINUE IRECST = IRECST + 1 WRITE(UNIT=IDAF, REC=1) IRECST,IODA,IFILEN,IS,IPK RETURN C C ----- LOAD THE OLD DAF DIRECTORY ----- C 20 CONTINUE READ(UNIT=IDAF, REC=1) IRECST,IODA,IFILEN,IS,IPK RETURN END mopac7-1.15/fortran/s_copy.c0000644000175000017500000000200611053302063012651 00000000000000/* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the * target of an assignment to appear on its right-hand side (contrary * to the Fortran 77 Standard, but in accordance with Fortran 90), * as in a(2:5) = a(4:7) . */ #include "mopac7f2c.h" #ifdef __cplusplus extern "C" { #endif /* assign strings: a = b */ #ifdef KR_headers VOID s_copy(a, b, la, lb) register char *a, *b; ftnlen la, lb; #else void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb) #endif { register char *aend, *bend; aend = a + la; if(la <= lb) #ifndef NO_OVERWRITE if (a <= b || a >= b + la) #endif while(a < aend) *a++ = *b++; #ifndef NO_OVERWRITE else for(b += la; a < aend; ) *--aend = *--b; #endif else { bend = b + lb; #ifndef NO_OVERWRITE if (a <= b || a >= bend) #endif while(b < bend) *a++ = *b++; #ifndef NO_OVERWRITE else { a += lb; while(b < bend) *--a = *--bend; a += lb; } #endif while(a < aend) *a++ = ' '; } } #ifdef __cplusplus } #endif mopac7-1.15/fortran/c_src_bak/0000777000175000017500000000000011274262042013214 500000000000000mopac7-1.15/fortran/c_src_bak/Makefile.am0000644000175000017500000000013611053302063015155 00000000000000EXTRA_DIST = \ etime.c \ fdate.c \ libmopac7.c \ libmopac7.h \ mopac7f2c.h \ s_copy.c mopac7-1.15/fortran/c_src_bak/libmopac7.h0000644000175000017500000000220411053302063015145 00000000000000/* libmopac7.h ; written by Tommi Hassinen 2005 as a part of mopac7 package */ /* this is a set of C wrapper functions NOT contained in the fortran sources */ /* these are from fortran source files : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ extern "C" void lm7start_(void); extern "C" void lm7stop_(void); extern "C" int lm7iniplt_(void); extern "C" int getesp_(void); extern "C" int geteldens_(void); extern "C" int getorb_(void); /* the rest are from libmopac7.c : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ extern "C" void lm7_ini_full_xyz(void); extern "C" int lm7_get_atom_count(void); extern "C" int lm7_get_electron_count(void); extern "C" void lm7_set_atom_crd(int, double *); /* unit is nm */ extern "C" void lm7_call_compfg(double *, double *, int); extern "C" void lm7_get_atom_grad(int, double *); /* unit is kJ/mol nm^2 ??? */ extern "C" int lm7_get_orbital_count(void); extern "C" void lm7_set_plots_orbital_index(int); extern "C" double lm7_get_orbital_energy(int); /* unit is ??? */ extern "C" void lm7_set_num_potesp(int); extern "C" void lm7_set_crd_potesp(int, double *); extern "C" double lm7_get_val_potesp(int); /* END */ mopac7-1.15/fortran/c_src_bak/Makefile.in0000644000175000017500000002101411274260541015175 00000000000000# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = fortran/c_src_bak DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NMEDIT = @NMEDIT@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ etime.c \ fdate.c \ libmopac7.c \ libmopac7.h \ mopac7f2c.h \ s_copy.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu fortran/c_src_bak/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu fortran/c_src_bak/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mopac7-1.15/fortran/c_src_bak/mopac7f2c.h0000644000175000017500000001112011053302063015046 00000000000000/* f2c.h -- Standard Fortran to C header file */ /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed." - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */ #ifndef F2C_INCLUDE #define F2C_INCLUDE typedef long int integer; typedef unsigned long int uinteger; typedef char *address; typedef short int shortint; typedef float real; typedef double doublereal; typedef struct { real r, i; } complex; typedef struct { doublereal r, i; } doublecomplex; typedef long int logical; typedef short int shortlogical; typedef char logical1; typedef char integer1; #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ typedef long long longint; /* system-dependent */ typedef unsigned long long ulongint; /* system-dependent */ #define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b))) #define qbit_set(a,b) ((a) | ((ulongint)1 << (b))) #endif #define TRUE_ (1) #define FALSE_ (0) /* Extern is for use with -E */ #ifndef Extern #define Extern extern #endif /* I/O stuff */ #ifdef f2c_i2 /* for -i2 */ typedef short flag; typedef short ftnlen; typedef short ftnint; #else typedef long int flag; typedef long int ftnlen; typedef long int ftnint; #endif /*external read, write*/ typedef struct { flag cierr; ftnint ciunit; flag ciend; char *cifmt; ftnint cirec; } cilist; /*internal read, write*/ typedef struct { flag icierr; char *iciunit; flag iciend; char *icifmt; ftnint icirlen; ftnint icirnum; } icilist; /*open*/ typedef struct { flag oerr; ftnint ounit; char *ofnm; ftnlen ofnmlen; char *osta; char *oacc; char *ofm; ftnint orl; char *oblnk; } olist; /*close*/ typedef struct { flag cerr; ftnint cunit; char *csta; } cllist; /*rewind, backspace, endfile*/ typedef struct { flag aerr; ftnint aunit; } alist; /* inquire */ typedef struct { flag inerr; ftnint inunit; char *infile; ftnlen infilen; ftnint *inex; /*parameters in standard's order*/ ftnint *inopen; ftnint *innum; ftnint *innamed; char *inname; ftnlen innamlen; char *inacc; ftnlen inacclen; char *inseq; ftnlen inseqlen; char *indir; ftnlen indirlen; char *infmt; ftnlen infmtlen; char *inform; ftnint informlen; char *inunf; ftnlen inunflen; ftnint *inrecl; ftnint *innrec; char *inblank; ftnlen inblanklen; } inlist; #define VOID void union Multitype { /* for multiple entry points */ integer1 g; shortint h; integer i; /* longint j; */ real r; doublereal d; complex c; doublecomplex z; }; typedef union Multitype Multitype; /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ struct Vardesc { /* for Namelist */ char *name; char *addr; ftnlen *dims; int type; }; typedef struct Vardesc Vardesc; struct Namelist { char *name; Vardesc **vars; int nvars; }; typedef struct Namelist Namelist; #define abs(x) ((x) >= 0 ? (x) : -(x)) #define dabs(x) (doublereal)abs(x) #define min(a,b) ((a) <= (b) ? (a) : (b)) #define max(a,b) ((a) >= (b) ? (a) : (b)) #define dmin(a,b) (doublereal)min(a,b) #define dmax(a,b) (doublereal)max(a,b) #define bit_test(a,b) ((a) >> (b) & 1) #define bit_clear(a,b) ((a) & ~((uinteger)1 << (b))) #define bit_set(a,b) ((a) | ((uinteger)1 << (b))) /* procedure parameter types for -A and -C++ */ #define F2C_proc_par_types 1 #ifdef __cplusplus typedef int /* Unknown procedure type */ (*U_fp)(...); typedef shortint (*J_fp)(...); typedef integer (*I_fp)(...); typedef real (*R_fp)(...); typedef doublereal (*D_fp)(...), (*E_fp)(...); typedef /* Complex */ VOID (*C_fp)(...); typedef /* Double Complex */ VOID (*Z_fp)(...); typedef logical (*L_fp)(...); typedef shortlogical (*K_fp)(...); typedef /* Character */ VOID (*H_fp)(...); typedef /* Subroutine */ int (*S_fp)(...); #else typedef int /* Unknown procedure type */ (*U_fp)(); typedef shortint (*J_fp)(); typedef integer (*I_fp)(); typedef real (*R_fp)(); typedef doublereal (*D_fp)(), (*E_fp)(); typedef /* Complex */ VOID (*C_fp)(); typedef /* Double Complex */ VOID (*Z_fp)(); typedef logical (*L_fp)(); typedef shortlogical (*K_fp)(); typedef /* Character */ VOID (*H_fp)(); typedef /* Subroutine */ int (*S_fp)(); #endif /* E_fp is for real functions when -R is not specified */ typedef VOID C_f; /* complex function */ typedef VOID H_f; /* character function */ typedef VOID Z_f; /* double complex function */ typedef doublereal E_f; /* real function with -R not specified */ /* undef any lower-case symbols that your C compiler predefines, e.g.: */ #ifndef Skip_f2c_Undefs #undef cray #undef gcos #undef mc68010 #undef mc68020 #undef mips #undef pdp11 #undef sgi #undef sparc #undef sun #undef sun2 #undef sun3 #undef sun4 #undef u370 #undef u3b #undef u3b2 #undef u3b5 #undef unix #undef vax #endif #endif mopac7-1.15/fortran/c_src_bak/etime.c0000644000175000017500000000144211053302063014371 00000000000000/* NAME etime - return elapsed execution time SYNOPSIS real function etime (tarray) real tarray(2) DESCRIPTION These routine return elapsed runtime in seconds for the calling process. The argument array returns user time in the first element and system time in the second element. The function value is the sum of user and system time. LAST MODIFICATION January 24, 2000, I. Cserny (cserny@atomki.hu) */ #include #include #include float etime_(float *a) { struct rusage t; getrusage(RUSAGE_SELF,&t); a[0] = (double)(t.ru_utime.tv_sec); a[0] = a[0] + (double)(t.ru_utime.tv_usec) / CLOCKS_PER_SEC; a[1] = (double)(t.ru_stime.tv_sec); a[1] = a[1] + (double)(t.ru_stime.tv_usec) / CLOCKS_PER_SEC; } mopac7-1.15/fortran/c_src_bak/s_copy.c0000644000175000017500000000200611053302063014557 00000000000000/* Unless compiled with -DNO_OVERWRITE, this variant of s_copy allows the * target of an assignment to appear on its right-hand side (contrary * to the Fortran 77 Standard, but in accordance with Fortran 90), * as in a(2:5) = a(4:7) . */ #include "mopac7f2c.h" #ifdef __cplusplus extern "C" { #endif /* assign strings: a = b */ #ifdef KR_headers VOID s_copy(a, b, la, lb) register char *a, *b; ftnlen la, lb; #else void s_copy(register char *a, register char *b, ftnlen la, ftnlen lb) #endif { register char *aend, *bend; aend = a + la; if(la <= lb) #ifndef NO_OVERWRITE if (a <= b || a >= b + la) #endif while(a < aend) *a++ = *b++; #ifndef NO_OVERWRITE else for(b += la; a < aend; ) *--aend = *--b; #endif else { bend = b + lb; #ifndef NO_OVERWRITE if (a <= b || a >= bend) #endif while(b < bend) *a++ = *b++; #ifndef NO_OVERWRITE else { a += lb; while(b < bend) *--a = *--bend; a += lb; } #endif while(a < aend) *a++ = ' '; } } #ifdef __cplusplus } #endif mopac7-1.15/fortran/c_src_bak/libmopac7.c0000644000175000017500000001146211053302063015146 00000000000000/* libmopac7.c ; written by Tommi Hassinen 2005 as a part of mopac7 package */ /* this is a set of C wrapper functions NOT contained in the fortran sources */ #include "mopac7f2c.h" /* these come from MOPAC7/compfg.c */ struct { integer natoms, labels[120], na[120], nb[120], nc[120]; } geokst_; #define geokst_1 geokst_ struct { integer nvar, loc[720] /* was [2][360] */, idumy; doublereal dumy[360]; } geovar_; #define geovar_1 geovar_ struct { doublereal elect; } elect_; #define elect_1 elect_ struct { doublereal enuclr; } enuclr_; #define enuclr_1 enuclr_ struct { integer numat, nat[120], nfirst[120], nmidle[120], nlast[120], norbs, nelecs, nalpha, nbeta, nclose, nopen, ndumy; doublereal fract; } molkst_; #define molkst_1 molkst_ struct { doublereal c__[90000], eigs[300], cbeta[90000], eigb[300]; } vector_; #define vector_1 vector_ /* these come from MOPAC7/force.c */ struct { doublereal grad[360], gnorm; } gradnt_; #define gradnt_1 gradnt_ /* these come from MOPAC7/esp.c */ union { struct { doublereal potpt[150000] /* was [3][50000] */, work1d[200000]; } _1; struct { doublereal potpt[150000] /* was [3][50000] */, pad1[100000], rad[50000]; integer ias[50000]; } _2; struct { doublereal potpt[150000] /* was [3][50000] */, es[50000], esp[50000], work1d[100000]; } _3; } work1_; #define work1_1 (work1_._1) #define work1_2 (work1_._2) #define work1_3 (work1_._3) struct { doublereal xc, yc, zc, espnuc, espele; integer nesp; } potesp_; #define potesp_1 potesp_ struct { doublereal cespm2[90000] /* was [300][300] */, sla[10], cespml[90000], cesp[90000]; integer inc[1800], nc, npr, is, ip, ipc, isc, icd, iorb; } plots_; #define plots_1 plots_ /****************************************************/ /* these are some definitions that do not change!!! */ /****************************************************/ static logical c_true = TRUE_; /* the idea is that these are CONST */ static logical c_false = FALSE_; /* the idea is that these are CONST */ extern int compfg_(doublereal *, logical *, doublereal *, logical *, doublereal *, logical *); /**************************************************/ /* these are the libmopac7.c utility functions!!! */ /**************************************************/ void lm7_ini_full_xyz(void) { int var_i; /* by default, MOPAC changes the molecule orientation, and limits the available variables. we will change it here, by writing our own variable table. THIS IS FOR XYZ MODE ONLY! */ geovar_1.nvar = geokst_1.natoms * 3; for (var_i = 0;var_i < geovar_1.nvar;var_i++) { geovar_1.loc[var_i * 2 + 0] = (var_i / 3) + 1; } for (var_i = 0;var_i < geovar_1.nvar;var_i++) { geovar_1.loc[var_i * 2 + 1] = (var_i % 3) + 1; } /* ok, but now we still have to update the geometry before doing calculations... that will happen on each call of the energy functions separately. */ } int lm7_get_atom_count(void) { return geokst_1.natoms; } int lm7_get_electron_count(void) { return molkst_1.nelecs; /* for an RHF case... */ } void lm7_set_atom_crd(int atm_i, double * xyz) { const double cf = 10.0; /* conversion factor for [nm] -> [Å] */ geovar_1.dumy[atm_i * 3 + 0] = xyz[0] * cf; geovar_1.dumy[atm_i * 3 + 1] = xyz[1] * cf; geovar_1.dumy[atm_i * 3 + 2] = xyz[2] * cf; } void lm7_call_compfg(double * e, double * hf, int comp_grad) { static doublereal escf; const double cf = 96.4853; /* conversion factor for [eV] -> [kJ/mol] */ if (comp_grad == 0) /* energy was requested... */ { compfg_(geovar_1.dumy, &c_true, &escf, &c_true, gradnt_1.grad, &c_false); (* e) = (elect_1.elect + enuclr_1.enuclr) * cf; (* hf) = escf; } else /* both energy and gradient were requested... */ { compfg_(geovar_1.dumy, &c_true, &escf, &c_true, gradnt_1.grad, &c_true); (* e) = (elect_1.elect + enuclr_1.enuclr) * cf; (* hf) = escf; } } void lm7_get_atom_grad(int atm_i, double * xyz) { const double cf = 41.868; /* conversion factors for [cal] -> [J] and [nm] -> [Å] */ xyz[0] = gradnt_1.grad[atm_i * 3 + 0] * cf; xyz[1] = gradnt_1.grad[atm_i * 3 + 1] * cf; xyz[2] = gradnt_1.grad[atm_i * 3 + 2] * cf; } int lm7_get_orbital_count(void) { return molkst_1.norbs; /* for an RHF case... */ /* cout << "norbs = " << molkst_1.norbs << endl; cout << "nalpha = " << molkst_1.nalpha << endl; */ } void lm7_set_plots_orbital_index(int orb_i) { plots_1.iorb = orb_i; } double lm7_get_orbital_energy(int orb_i) { return vector_1.eigs[orb_i]; } void lm7_set_num_potesp(int n_potesp) { potesp_1.nesp = n_potesp; } void lm7_set_crd_potesp(int potesp_i, double * xyz) { work1_3.potpt[potesp_i * 3 + 0] = xyz[0]; work1_3.potpt[potesp_i * 3 + 1] = xyz[1]; work1_3.potpt[potesp_i * 3 + 2] = xyz[2]; } double lm7_get_val_potesp(int potesp_i) { return work1_3.esp[potesp_i]; } /* END */ mopac7-1.15/fortran/c_src_bak/fdate.c0000644000175000017500000000107311053302063014351 00000000000000/* NAME fdate - return date and time in an ASCII string SYNOPSIS subroutine fdate(string) character*24 string DESCRIPTION Fdate returns the current date and time as a 24 character string in the format described under ctime(3). Neither `newline' nor NULL will be included. LAST MODIFIACTION June 21, 1995, Istvan Cserny (cserny@atomki.hu) */ #include "mopac7f2c.h" #include #include void fdate_(char *cht, ftnlen cht_len) { static time_t t; time(&t); s_copy(cht,ctime(&t),24L,24L); return; } mopac7-1.15/fortran/ilaenv.f0000644000175000017500000003561211053302063012647 00000000000000 INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, $ N4 ) * * -- LAPACK AUXILIARY ROUTINE (PRELIMINARY VERSION) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * FEBRUARY 20, 1992 * * .. SCALAR ARGUMENTS .. CHARACTER*( * ) NAME, OPTS INTEGER ISPEC, N1, N2, N3, N4 * .. * * PURPOSE * ======= * * ILAENV IS CALLED FROM THE LAPACK ROUTINES TO CHOOSE PROBLEM-DEPENDENT * PARAMETERS FOR THE LOCAL ENVIRONMENT. SEE ISPEC FOR A DESCRIPTION OF * THE PARAMETERS. * * THIS VERSION PROVIDES A SET OF PARAMETERS WHICH SHOULD GIVE GOOD, * BUT NOT OPTIMAL, PERFORMANCE ON MANY OF THE CURRENTLY AVAILABLE * COMPUTERS. USERS ARE ENCOURAGED TO MODIFY THIS SUBROUTINE TO SET * THE TUNING PARAMETERS FOR THEIR PARTICULAR MACHINE USING THE OPTION * AND PROBLEM SIZE INFORMATION IN THE ARGUMENTS. * * THIS ROUTINE WILL NOT FUNCTION CORRECTLY IF IT IS CONVERTED TO ALL * LOWER CASE. CONVERTING IT TO ALL UPPER CASE IS ALLOWED. * * ARGUMENTS * ========= * * ISPEC (INPUT) INTEGER * SPECIFIES THE PARAMETER TO BE RETURNED AS THE VALUE OF * ILAENV. * = 1: THE OPTIMAL BLOCKSIZE; IF THIS VALUE IS 1, AN UNBLOCKED * ALGORITHM WILL GIVE THE BEST PERFORMANCE. * = 2: THE MINIMUM BLOCK SIZE FOR WHICH THE BLOCK ROUTINE * SHOULD BE USED; IF THE USABLE BLOCK SIZE IS LESS THAN * THIS VALUE, AN UNBLOCKED ROUTINE SHOULD BE USED. * = 3: THE CROSSOVER POINT (IN A BLOCK ROUTINE, FOR N LESS * THAN THIS VALUE, AN UNBLOCKED ROUTINE SHOULD BE USED) * = 4: THE NUMBER OF SHIFTS, USED IN THE NONSYMMETRIC * EIGENVALUE ROUTINES * = 5: THE MINIMUM COLUMN DIMENSION FOR BLOCKING TO BE USED; * RECTANGULAR BLOCKS MUST HAVE DIMENSION AT LEAST K BY M, * WHERE K IS GIVEN BY ILAENV(2,...) AND M BY ILAENV(5,...) * = 6: THE CROSSOVER POINT FOR THE SVD (WHEN REDUCING AN M BY N * MATRIX TO BIDIAGONAL FORM, IF MAX(M,N)/MIN(M,N) EXCEEDS * THIS VALUE, A QR FACTORIZATION IS USED FIRST TO REDUCE * THE MATRIX TO A TRIANGULAR FORM.) * = 7: THE NUMBER OF PROCESSORS * = 8: THE CROSSOVER POINT FOR THE MULTISHIFT QR AND QZ METHODS * FOR NONSYMMETRIC EIGENVALUE PROBLEMS. * * NAME (INPUT) CHARACTER*(*) * THE NAME OF THE CALLING SUBROUTINE, IN EITHER UPPER CASE OR * LOWER CASE. * * OPTS (INPUT) CHARACTER*(*) * THE CHARACTER OPTIONS TO THE SUBROUTINE NAME, CONCATENATED * INTO A SINGLE CHARACTER STRING. FOR EXAMPLE, UPLO = 'U', * TRANS = 'T', AND DIAG = 'N' FOR A TRIANGULAR ROUTINE WOULD * BE SPECIFIED AS OPTS = 'UTN'. * * N1 (INPUT) INTEGER * N2 (INPUT) INTEGER * N3 (INPUT) INTEGER * N4 (INPUT) INTEGER * PROBLEM DIMENSIONS FOR THE SUBROUTINE NAME; THESE MAY NOT ALL * BE REQUIRED. * * (ILAENV) (OUTPUT) INTEGER * >= 0: THE VALUE OF THE PARAMETER SPECIFIED BY ISPEC * < 0: IF ILAENV = -K, THE K-TH ARGUMENT HAD AN ILLEGAL VALUE. * * FURTHER DETAILS * =============== * * THE FOLLOWING CONVENTIONS HAVE BEEN USED WHEN CALLING ILAENV FROM THE * LAPACK ROUTINES: * 1) OPTS IS A CONCATENATION OF ALL OF THE CHARACTER OPTIONS TO * SUBROUTINE NAME, IN THE SAME ORDER THAT THEY APPEAR IN THE * ARGUMENT LIST FOR NAME, EVEN IF THEY ARE NOT USED IN DETERMINING * THE VALUE OF THE PARAMETER SPECIFIED BY ISPEC. * 2) THE PROBLEM DIMENSIONS N1, N2, N3, N4 ARE SPECIFIED IN THE ORDER * THAT THEY APPEAR IN THE ARGUMENT LIST FOR NAME. N1 IS USED * FIRST, N2 SECOND, AND SO ON, AND UNUSED PROBLEM DIMENSIONS ARE * PASSED A VALUE OF -1. * 3) THE PARAMETER VALUE RETURNED BY ILAENV IS CHECKED FOR VALIDITY IN * THE CALLING SUBROUTINE. FOR EXAMPLE, ILAENV IS USED TO RETRIEVE * THE OPTIMAL BLOCKSIZE FOR STRTRI AS FOLLOWS: * * NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) * IF( NB.LE.1 ) NB = MAX( 1, N ) * * ===================================================================== * * .. LOCAL SCALARS .. LOGICAL CNAME, SNAME CHARACTER*1 C1 CHARACTER*2 C2, C4 CHARACTER*3 C3 CHARACTER*6 SUBNAM INTEGER I, IC, IZ, NB, NBMIN, NX * .. * .. INTRINSIC FUNCTIONS .. INTRINSIC CHAR, ICHAR, INT, MIN, REAL * .. * .. EXECUTABLE STATEMENTS .. * GO TO ( 100, 100, 100, 400, 500, 600, 700, 800 ) ISPEC * * INVALID VALUE FOR ISPEC * ILAENV = -1 RETURN * 100 CONTINUE * * CONVERT NAME TO UPPER CASE IF THE FIRST CHARACTER IS LOWER CASE. * ILAENV = 1 SUBNAM = NAME IC = ICHAR( SUBNAM( 1:1 ) ) IZ = ICHAR( 'Z' ) IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN * * ASCII CHARACTER SET * IF( IC.GE.97 .AND. IC.LE.122 ) THEN SUBNAM( 1:1 ) = CHAR( IC-32 ) DO 10 I = 2, 6 IC = ICHAR( SUBNAM( I:I ) ) IF( IC.GE.97 .AND. IC.LE.122 ) $ SUBNAM( I:I ) = CHAR( IC-32 ) 10 CONTINUE END IF * ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN * * EBCDIC CHARACTER SET * IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN SUBNAM( 1:1 ) = CHAR( IC+64 ) DO 20 I = 2, 6 IC = ICHAR( SUBNAM( I:I ) ) IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. $ ( IC.GE.162 .AND. IC.LE.169 ) ) $ SUBNAM( I:I ) = CHAR( IC+64 ) 20 CONTINUE END IF * ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN * * PRIME MACHINES: ASCII+128 * IF( IC.GE.225 .AND. IC.LE.250 ) THEN SUBNAM( 1:1 ) = CHAR( IC-32 ) DO 30 I = 2, 6 IC = ICHAR( SUBNAM( I:I ) ) IF( IC.GE.225 .AND. IC.LE.250 ) $ SUBNAM( I:I ) = CHAR( IC-32 ) 30 CONTINUE END IF END IF * C1 = SUBNAM( 1:1 ) SNAME = C1.EQ.'S' .OR. C1.EQ.'D' CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' IF( .NOT.( CNAME .OR. SNAME ) ) $ RETURN C2 = SUBNAM( 2:3 ) C3 = SUBNAM( 4:6 ) C4 = C3( 2:3 ) * GO TO ( 110, 200, 300 ) ISPEC * 110 CONTINUE * * ISPEC = 1: BLOCK SIZE * * IN THESE EXAMPLES, SEPARATE CODE IS PROVIDED FOR SETTING NB FOR * REAL AND COMPLEX. WE ASSUME THAT NB WILL TAKE THE SAME VALUE IN * SINGLE OR DOUBLE PRECISION. * NB = 1 * IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. $ C3.EQ.'QLF' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'PO' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN NB = 1 ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN NB = 64 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRF' ) THEN NB = 64 ELSE IF( C3.EQ.'TRD' ) THEN NB = 1 ELSE IF( C3.EQ.'GST' ) THEN NB = 64 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NB = 32 END IF ELSE IF( C3( 1:1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NB = 32 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NB = 32 END IF ELSE IF( C3( 1:1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NB = 32 END IF END IF ELSE IF( C2.EQ.'GB' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN IF( N4.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF ELSE IF( N4.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF END IF END IF ELSE IF( C2.EQ.'PB' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN IF( N2.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF ELSE IF( N2.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF END IF END IF ELSE IF( C2.EQ.'TR' ) THEN IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'LA' ) THEN IF( C3.EQ.'UUM' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN IF( C3.EQ.'EBZ' ) THEN NB = 1 END IF END IF ILAENV = NB RETURN * 200 CONTINUE * * ISPEC = 2: MINIMUM BLOCK SIZE * NBMIN = 2 IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. $ C3.EQ.'QLF' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN NBMIN = 2 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRD' ) THEN NBMIN = 2 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NBMIN = 2 END IF ELSE IF( C3( 1:1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NBMIN = 2 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NBMIN = 2 END IF ELSE IF( C3( 1:1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NBMIN = 2 END IF END IF END IF ILAENV = NBMIN RETURN * 300 CONTINUE * * ISPEC = 3: CROSSOVER POINT * NX = 0 IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. $ C3.EQ.'QLF' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( SNAME .AND. C3.EQ.'TRD' ) THEN NX = 1 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRD' ) THEN NX = 1 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NX = 128 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1:1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. $ C4.EQ.'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. $ C4.EQ.'BR' ) THEN NX = 128 END IF END IF END IF ILAENV = NX RETURN * 400 CONTINUE * * ISPEC = 4: NUMBER OF SHIFTS (USED BY XHSEQR) * ILAENV = 6 RETURN * 500 CONTINUE * * ISPEC = 5: MINIMUM COLUMN DIMENSION (NOT USED) * ILAENV = 2 RETURN * 600 CONTINUE * * ISPEC = 6: CROSSOVER POINT FOR SVD (USED BY XGELSS AND XGESVD) * ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) RETURN * 700 CONTINUE * * ISPEC = 7: NUMBER OF PROCESSORS (NOT USED) * ILAENV = 1 RETURN * 800 CONTINUE * * ISPEC = 8: CROSSOVER POINT FOR MULTISHIFT (USED BY XHSEQR) * ILAENV = 50 RETURN * * END OF ILAENV * END mopac7-1.15/fortran/dijkl1.f0000644000175000017500000000620111053302063012537 00000000000000 SUBROUTINE DIJKL1 (C,N,NATI,W,CIJ,WCIJ,CKL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C(N,*), W(*) DIMENSION CIJ(10*MAXORB), WCIJ(10*MAXORB), CKL(10*MAXORB) ************************************************************************ * * DIJKL1 IS SIMILAR TO IJKL. THE MAIN DIFFERENCES ARE THAT * THE ARRAY W CONTAINS THE TWO ELECTRON INTEGRALS BETWEEN * ONE ATOM (NATI) AND ALL THE OTHER ATOMS IN THE SYSTEM. * * ON EXIT * * THE ARRAY XY IS FILLED WITH THE DIFFERENTIALS OF THE * TWO-ELECTRON INTEGRALS OVER ACTIVE-SPACE M.O.S W.R.T. MOTION * OF THE ATOM NATI. ************************************************************************ COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /CIBITS/ NMOS,LAB,NELEC, NBO(3) COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) DIMENSION NB(0:8) DATA NB /1,0,0,10,0,0,0,0,45/ NA=NMOS DO 110 I=1,NA DO 110 J=1,I IPQ=0 DO 20 II=1,NUMAT IF(II.EQ.NATI) GOTO 20 DO 10 IP=NFIRST(II),NLAST(II) DO 10 IQ=NFIRST(II),IP IPQ=IPQ+1 CIJ(IPQ)=C(IP,I)*C(IQ,J)+C(IP,J)*C(IQ,I) 10 CONTINUE 20 CONTINUE I77=IPQ+1 DO 30 IP=NFIRST(NATI),NLAST(NATI) DO 30 IQ=NFIRST(NATI),IP IPQ=IPQ+1 CIJ(IPQ)=C(IP,I)*C(IQ,J)+C(IP,J)*C(IQ,I) 30 CONTINUE DO 40 II=1,IPQ 40 WCIJ(II)=0.D0 KR=1 JS=1 NBJ=NB(NLAST(NATI)-NFIRST(NATI)) DO 50 II=1,NUMAT IF (II.EQ.NATI) GOTO 50 NBI=NB(NLAST(II)-NFIRST(II)) CALL FORMXY 1(W(KR), KR, WCIJ(I77), WCIJ(JS), CIJ(I77), NBJ, CIJ(JS), NBI) JS=JS+NBI 50 CONTINUE DO 100 K=1,I IF(K.EQ.I) THEN LL=J ELSE LL=K ENDIF DO 100 L=1,LL IPQ=0 DO 70 II=1,NUMAT IF(II.EQ.NATI) GOTO 70 DO 60 IP=NFIRST(II),NLAST(II) DO 60 IQ=NFIRST(II),IP IPQ=IPQ+1 CKL(IPQ)=C(IP,K)*C(IQ,L)+C(IP,L)*C(IQ,K) 60 CONTINUE 70 CONTINUE DO 80 IP=NFIRST(NATI),NLAST(NATI) DO 80 IQ=NFIRST(NATI),IP IPQ=IPQ+1 CKL(IPQ)=C(IP,K)*C(IQ,L)+C(IP,L)*C(IQ,K) 80 CONTINUE SUM=0.D0 DO 90 II=1,IPQ 90 SUM=SUM+CKL(II)*WCIJ(II) XY(I,J,K,L)=SUM XY(I,J,L,K)=SUM XY(J,I,K,L)=SUM XY(J,I,L,K)=SUM XY(K,L,I,J)=SUM XY(K,L,J,I)=SUM XY(L,K,I,J)=SUM XY(L,K,J,I)=SUM 100 CONTINUE 110 CONTINUE RETURN END mopac7-1.15/fortran/symtry.f0000644000175000017500000000174211053302064012736 00000000000000 SUBROUTINE SYMTRY IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) C********************************************************************** C C SYMTRY COMPUTES THE BOND LENGTHS AND ANGLES THAT ARE FUNCTIONS OF C OTHER BOND LENGTHS AND ANGLES. C C ON INPUT GEO = KNOWN INTERNAL COORDINATES C NDEP = NUMBER OF DEPENDENCY FUNCTIONS. C IDEPFN = ARRAY OF DEPENDENCY FUNCTIONS. C LOCDEP = ARRAY OF LABELS OF DEPENDENT ATOMS. C LOCPAR = ARRAY OF LABELS OF REFERENCE ATOMS. C C ON OUTPUT THE ARRAY "GEO" IS FILLED C*********************************************************************** C C NOW COMPUTE THE DEPENDENT PARAMETERS. C DO 10 I=1,NDEP CALL HADDON (VALUE,LOCN,IDEPFN(I),LOCPAR(I),GEO) J=LOCDEP(I) 10 GEO(LOCN,J)=VALUE RETURN END mopac7-1.15/fortran/lsame.f0000644000175000017500000000454511053302063012473 00000000000000 LOGICAL FUNCTION LSAME( CA, CB ) * * -- LAPACK AUXILIARY ROUTINE (VERSION 1.0) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * FEBRUARY 29, 1992 * * .. SCALAR ARGUMENTS .. CHARACTER CA, CB * .. * * PURPOSE * ======= * * LSAME RETURNS .TRUE. IF CA IS THE SAME LETTER AS CB REGARDLESS OF * CASE. * * ARGUMENTS * ========= * * CA (INPUT) CHARACTER*1 * CB (INPUT) CHARACTER*1 * CA AND CB SPECIFY THE SINGLE CHARACTERS TO BE COMPARED. * * .. INTRINSIC FUNCTIONS .. INTRINSIC ICHAR * .. * .. LOCAL SCALARS .. INTEGER INTA, INTB, ZCODE * .. * .. EXECUTABLE STATEMENTS .. * * TEST IF THE CHARACTERS ARE EQUAL * LSAME = CA.EQ.CB IF( LSAME ) $ RETURN * * NOW TEST FOR EQUIVALENCE IF BOTH CHARACTERS ARE ALPHABETIC. * ZCODE = ICHAR( 'Z' ) * * USE 'Z' RATHER THAN 'A' SO THAT ASCII CAN BE DETECTED ON PRIME * MACHINES, ON WHICH ICHAR RETURNS A VALUE WITH BIT 8 SET. * ICHAR('A') ON PRIME MACHINES RETURNS 193 WHICH IS THE SAME AS * ICHAR('A') ON AN EBCDIC MACHINE. * INTA = ICHAR( CA ) INTB = ICHAR( CB ) * IF( ZCODE.EQ.90 .OR. ZCODE.EQ.122 ) THEN * * ASCII IS ASSUMED - ZCODE IS THE ASCII CODE OF EITHER LOWER OR * UPPER CASE 'Z'. * IF( INTA.GE.97 .AND. INTA.LE.122 ) INTA = INTA - 32 IF( INTB.GE.97 .AND. INTB.LE.122 ) INTB = INTB - 32 * ELSE IF( ZCODE.EQ.233 .OR. ZCODE.EQ.169 ) THEN * * EBCDIC IS ASSUMED - ZCODE IS THE EBCDIC CODE OF EITHER LOWER OR * UPPER CASE 'Z'. * IF( INTA.GE.129 .AND. INTA.LE.137 .OR. $ INTA.GE.145 .AND. INTA.LE.153 .OR. $ INTA.GE.162 .AND. INTA.LE.169 ) INTA = INTA + 64 IF( INTB.GE.129 .AND. INTB.LE.137 .OR. $ INTB.GE.145 .AND. INTB.LE.153 .OR. $ INTB.GE.162 .AND. INTB.LE.169 ) INTB = INTB + 64 * ELSE IF( ZCODE.EQ.218 .OR. ZCODE.EQ.250 ) THEN * * ASCII IS ASSUMED, ON PRIME MACHINES - ZCODE IS THE ASCII CODE * PLUS 128 OF EITHER LOWER OR UPPER CASE 'Z'. * IF( INTA.GE.225 .AND. INTA.LE.250 ) INTA = INTA - 32 IF( INTB.GE.225 .AND. INTB.LE.250 ) INTB = INTB - 32 END IF LSAME = INTA.EQ.INTB * * RETURN * * END OF LSAME * END mopac7-1.15/fortran/diat.f0000644000175000017500000002200711053302063012304 00000000000000 SUBROUTINE DIAT(NI,NJ,XI,XJ,DI) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ************************************************************************ * * DIAT CALCULATES THE DI-ATOMIC OVERLAP INTEGRALS BETWEEN ATOMS * CENTERED AT XI AND XJ. * * ON INPUT NI = ATOMIC NUMBER OF THE FIRST ATOM. * NJ = ATOMIC NUMBER OF THE SECOND ATOM. * XI = CARTESIAN COORDINATES OF THE FIRST ATOM. * XJ = CARTESIAN COORDINATES OF THE SECOND ATOM. * * ON OUTPUT DI = DIATOMIC OVERLAP, IN A 9 * 9 MATRIX. LAYOUT OF * ATOMIC ORBITALS IN DI IS * 1 2 3 4 5 6 7 8 9 * S PX PY PZ D(X**2-Y**2) D(XZ) D(Z**2) D(YZ)D(XY) * * LIMITATIONS: IN THIS FORMULATION, NI AND NJ MUST BE LESS THAN 107 * EXPONENTS ARE ASSUMED TO BE PRESENT IN COMMON BLOCK EXPONT. * ************************************************************************ COMMON /KEYWRD/KEYWRD CHARACTER*241 KEYWRD INTEGER A,PQ2,B,PQ1,AA,BB COMMON /NUMCAL/ NUMCAL SAVE NPQ, IVAL LOGICAL ANALYT COMMON /EXPONT/ EMUS(107),EMUP(107),EMUD(107) DIMENSION DI(9,9),S(3,3,3),UL1(3),UL2(3),C(3,5,5),NPQ(107) 1 ,XI(3),XJ(3), SLIN(27), IVAL(3,5) 2, C1(3,5), C2(3,5), C3(3,5), C4(3,5), C5(3,5) 3, S1(3,3), S2(3,3), S3(3,3) EQUIVALENCE(SLIN(1),S(1,1,1)) EQUIVALENCE (C1(1,1),C(1,1,1)), (C2(1,1),C(1,1,2)), 1 (C3(1,1),C(1,1,3)), (C4(1,1),C(1,1,4)), 2 (C5(1,1),C(1,1,5)), (S1(1,1),S(1,1,1)), 3 (S2(1,1),S(1,1,2)), (S3(1,1),S(1,1,3)) DATA NPQ/1,0, 2,2,2,2,2,2,2,0, 0,3,3,3,3,3,3,0, 0,4,4,4,4,4,4,4, 14,4,4,4,4,4,4,4,4,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 2,32*6,15*0,3,5*0/ DATA IVAL/1,0,9,1,3,8,1,4,7,1,2,6,0,0,5/ DATA ICALCN/0/ IF(ICALCN.NE.NUMCAL)THEN ANALYT=(INDEX(KEYWRD,'ANALYT').NE.0) ICALCN=NUMCAL ENDIF X1=XI(1) X2=XJ(1) Y1=XI(2) Y2=XJ(2) Z1=XI(3) Z2=XJ(3) PQ1=NPQ(NI) PQ2=NPQ(NJ) DO 20 I=1,9 DO 10 J=1,9 DI(I,J)=0.0D0 10 CONTINUE 20 CONTINUE CALL COE(X1,Y1,Z1,X2,Y2,Z2,PQ1,PQ2,C,R) IF(PQ1.EQ.0.OR.PQ2.EQ.0.OR.R.GE.10.D0) RETURN IF(R.LT.0.001)THEN RETURN ENDIF IA=MIN(PQ1,3) IB=MIN(PQ2,3) A=IA-1 B=IB-1 IF(ANALYT)THEN CALL GOVER(NI,NJ,XI,XJ,R,DI) C# WRITE(6,*)' OVERLAP FROM GOVER' C# WRITE(6,'(4F15.10)')SG RETURN ENDIF IF(NI.LT.18.AND.NJ.LT.18) THEN CALL DIAT2(NI,EMUS(NI),EMUP(NI),R,NJ,EMUS(NJ),EMUP(NJ),S) ELSE UL1(1)=EMUS(NI) UL2(1)=EMUS(NJ) UL1(2)=EMUP(NI) UL2(2)=EMUP(NJ) UL1(3)=MAX(EMUD(NI),0.3D0) UL2(3)=MAX(EMUD(NJ),0.3D0) DO 30 I=1,27 30 SLIN(I)=0.0D0 NEWK=MIN(A,B) NK1=NEWK+1 DO 40 I=1,IA ISS=I IB=B+1 DO 40 J=1,IB JSS=J DO 40 K=1,NK1 IF(K.GT.I.OR.K.GT.J) GOTO 40 KSS=K S(I,J,K)=SS(PQ1,PQ2,ISS,JSS,KSS,UL1(I),UL2(J),R) 40 CONTINUE ENDIF DO 50 I=1,IA KMIN=4-I KMAX=2+I DO 50 J=1,IB IF(J.EQ.2)THEN AA=-1 BB=1 ELSE AA=1 IF(J.EQ.3) THEN BB=-1 ELSE BB=1 ENDIF ENDIF LMIN=4-J LMAX=2+J DO 50 K=KMIN,KMAX DO 50 L=LMIN,LMAX II=IVAL(I,K) JJ=IVAL(J,L) DI(II,JJ)=S1(I,J)*(C3(I,K)*C3(J,L))*AA+ 1(C4(I,K)*C4(J,L)+C2(I,K)*C2(J,L))*BB*S2(I,J)+(C5(I,K)*C5(J,L) 2+C1(I,K)*C1(J,L))*S3(I,J) 50 CONTINUE C# WRITE(6,*)' OVERLAP FROM DIAT2' C# DO 12 I=1,4 C# 12 WRITE(6,'(4F15.10)')(DI(J,I),J=1,4) RETURN END DOUBLE PRECISION FUNCTION SS(NA,NB,LA1,LB1,M1,UA,UB,R1) IMPLICIT DOUBLE PRECISION (A-H,O-Z) LOGICAL FIRST DIMENSION FA(0:13),AFF(0:2,0:2,0:2),AF(0:19),BF(0:19), 1BI(0:12,0:12) SAVE AFF, FA, BI, FIRST DATA FIRST /.TRUE./ DATA AFF/27*0. D0/ DATA FA/1.D0,1.D0,2.D0,6.D0,24.D0,120.D0,720.D0,5040.D0,40320.D0, 1362880.D0,3628800.D0,39916800.D0,479001600.D0,6227020800.D0/ M=M1-1 LB=LB1-1 LA=LA1-1 R=R1/0.529167D0 IF(FIRST) THEN FIRST=.FALSE. C C INITIALISE SOME CONSTANTS C C BINOMIALS C DO 10 I=0,12 BI(I,0)=1.D0 BI(I,I)=1.D0 10 CONTINUE DO 20 I=0,11 I1=I-1 DO 20 J=0,I1 BI(I+1,J+1)=BI(I,J+1)+BI(I,J) 20 CONTINUE AFF(0,0,0)=1.D0 AFF(1,0,0)=1.D0 AFF(1,1,0)=1.D0 AFF(2,0,0)=1.5D0 AFF(2,1,0)=1.73205D0 AFF(2,2,0)=1.224745D0 AFF(2,0,2)=-0.5D0 ENDIF P=(UA+UB)*R*0.5D0 B=(UA-UB)*R*0.5D0 QUO=1/P AF(0)=QUO*EXP(-P) DO 30 N=1,19 AF(N)=N*QUO*AF(N-1)+AF(0) 30 CONTINUE CALL BFN(B,BF) SUM=0.D0 LAM1=LA-M LBM1=LB-M C C START OF OVERLAP CALCULATION PROPER C DO 50 I=0,LAM1,2 IA=NA+I-LA IC=LA-I-M DO 50 J=0,LBM1,2 IB=NB+J-LB ID=LB-J-M SUM1=0.D0 IAB=IA+IB DO 40 K1=0,IA DO 40 K2=0,IB DO 40 K3=0,IC DO 40 K4=0,ID DO 40 K5=0,M IAF=IAB-K1-K2+K3+K4+2*K5 DO 40 K6=0,M IBF=K1+K2+K3+K4+2*K6 JX=(-1)**(M+K2+K4+K5+K6) SUM1=SUM1+BI(ID,K4)* 1BI(M,K5)*BI(IC,K3)*BI(IB,K2)*BI(IA,K1)* 2BI(M,K6)*JX*AF(IAF)*BF(IBF) 40 CONTINUE SUM=SUM+SUM1*AFF(LA,M,I)*AFF(LB,M,J) 50 CONTINUE SS=SUM*R**(NA+NB+1)*UA**NA*UB**NB/(2.D0**(M+1))* 1SQRT(UA*UB/(FA(NA+NA)*FA(NB+NB))*((LA+LA+1)*(LB+LB+1))) RETURN END SUBROUTINE COE(X1,Y1,Z1,X2,Y2,Z2,PQ1,PQ2,C,R) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INTEGER PQ1,PQ2,PQ DIMENSION C(75) XY=(X2-X1)**2+(Y2-Y1)**2 R=SQRT(XY+(Z2-Z1)**2) XY=SQRT(XY) IF (XY.LT.1.D-10) GO TO 10 CA=(X2-X1)/XY CB=(Z2-Z1)/R SA=(Y2-Y1)/XY SB=XY/R GO TO 50 10 IF (Z2-Z1) 20,30,40 20 CA=-1.D0 CB=-1.D0 SA=0.D0 SB=0.D0 GO TO 50 30 CA=0.D0 CB=0.D0 SA=0.D0 SB=0.D0 GO TO 50 40 CA=1.D0 CB=1.D0 SA=0.D0 SB=0.D0 50 CONTINUE DO 60 I=1,75 60 C(I)=0.D0 IF (PQ1.GT.PQ2) GO TO 70 PQ=PQ2 GO TO 80 70 PQ=PQ1 80 CONTINUE C(37)=1.D0 IF (PQ.LT.2) GO TO 90 C(56)=CA*CB C(41)=CA*SB C(26)=-SA C(53)=-SB C(38)=CB C(23)=0.D0 C(50)=SA*CB C(35)=SA*SB C(20)=CA IF (PQ.LT.3) GO TO 90 C2A=2*CA*CA-1.D0 C2B=2*CB*CB-1.D0 S2A=2*SA*CA S2B=2*SB*CB C(75)=C2A*CB*CB+0.5D0*C2A*SB*SB C(60)=0.5D0*C2A*S2B C(45)=0.8660254037841D0*C2A*SB*SB C(30)=-S2A*SB C(15)=-S2A*CB C(72)=-0.5D0*CA*S2B C(57)=CA*C2B C(42)=0.8660254037841D0*CA*S2B C(27)=-SA*CB C(12)=SA*SB C(69)=0.5773502691894D0*SB*SB*1.5D0 C(54)=-0.8660254037841D0*S2B C(39)=CB*CB-0.5D0*SB*SB C(66)=-0.5D0*SA*S2B C(51)=SA*C2B C(36)=0.8660254037841D0*SA*S2B C(21)=CA*CB C(6)=-CA*SB C(63)=S2A*CB*CB+0.5D0*S2A*SB*SB C(48)=0.5D0*S2A*S2B C(33)=0.8660254037841D0*S2A*SB*SB C(18)=C2A*SB C(3)=C2A*CB 90 CONTINUE RETURN END SUBROUTINE BFN(X,BF) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION BF(13) C********************************************************************** C C BINTGS FORMS THE "B" INTEGRALS FOR THE OVERLAP CALCULATION. C C********************************************************************** DIMENSION FACT(17) SAVE FACT DATA FACT/1.D0,2.D0,6.D0,24.D0,120.D0,720.D0,5040.D0,40320.D0, 1362880.D0,3628800.D0,39916800.D0,479001600.D0,6227020800.D0, 28.71782912D10,1.307674368D12,2.092278989D13,3.556874281D14/ K=12 IO=0 ABSX = ABS(X) IF (ABSX.GT.3.D00) GO TO 40 IF (ABSX.LE.2.D00) GO TO 10 LAST=15 GO TO 60 10 IF (ABSX.LE.1.D00) GO TO 20 LAST=12 GO TO 60 20 IF (ABSX.LE.0.5D00) GO TO 30 LAST=7 GO TO 60 30 IF (ABSX.LE.1.D-6) GOTO 90 LAST=6 GO TO 60 40 EXPX=EXP(X) EXPMX=1.D00/EXPX BF(1)=(EXPX-EXPMX)/X DO 50 I=1,K 50 BF(I+1)=(I*BF(I)+(-1.D00)**I*EXPX-EXPMX)/X GO TO 110 60 DO 80 I=IO,K Y=0.0D00 DO 70 M=IO,LAST XF=1.0D00 IF(M.NE.0) XF=FACT(M) 70 Y=Y+(-X)**M*(2*MOD(M+I+1,2))/(XF*(M+I+1)) 80 BF(I+1)=Y GO TO 110 90 DO 100 I=IO,K 100 BF(I+1)=(2*MOD(I+1,2))/(I+1.D0) 110 CONTINUE RETURN C END mopac7-1.15/fortran/matout.f0000644000175000017500000000451011053302063012673 00000000000000 SUBROUTINE MATOUT (A,B,NC,NNR,NDIM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION A(NDIM,NDIM), B(NDIM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ELEMTS/ ELEMNT(107) C********************************************************************** C C MATOUT PRINTS A SQUARE MATRIX OF EIGENVECTORS AND EIGENVALUES C C ON INPUT A CONTAINS THE MATRIX TO BE PRINTED. C B CONTAINS THE EIGENVALUES. C NC NUMBER OF MOLECULAR ORBITALS TO BE PRINTED. C NR IS THE SIZE OF THE SQUARE ARRAY TO BE PRINTED. C NDIM IS THE ACTUAL SIZE OF THE SQUARE ARRAY "A". C NFIRST AND NLAST CONTAIN ATOM ORBITAL COUNTERS. C NAT = ARRAY OF ATOMIC NUMBERS OF ATOMS. C C C*********************************************************************** CHARACTER*2 ELEMNT, ATORBS(9), ITEXT(4*MAXHEV+3*MAXLIT), + JTEXT(4*MAXHEV+3*MAXLIT) DIMENSION NATOM(4*MAXHEV+3*MAXLIT ) SAVE ATORBS DATA ATORBS/' S','PX','PY','PZ','X2','XZ','Z2','YZ','XY'/ NR = NNR IF(NUMAT.EQ.0)GOTO 30 IF(NLAST(NUMAT).NE.NR) GOTO 30 DO 20 I=1,NUMAT JLO=NFIRST(I) JHI=NLAST(I) L=NAT(I) K=0 DO 10 J=JLO,JHI K=K+1 ITEXT(J)=ATORBS(K) JTEXT(J)=ELEMNT(L) NATOM(J)=I 10 CONTINUE 20 CONTINUE GOTO 50 30 CONTINUE NR=ABS(NR) DO 40 I=1,NR ITEXT(I)=' ' JTEXT(I)=' ' 40 NATOM(I)=I 50 CONTINUE KA=1 KC=6 60 KB=MIN0(KC,NC) WRITE (6,100) (I,I=KA,KB) IF(B(1).NE.0.D0)WRITE (6,110) (B(I),I=KA,KB) WRITE (6,120) LA=1 LC=40 70 LB=MIN0(LC,NR) DO 80 I=LA,LB IF(ITEXT(I).EQ.' S')WRITE(6,120) WRITE (6,130) ITEXT(I),JTEXT(I),NATOM(I),(A(I,J),J=KA,KB) 80 CONTINUE IF (LB.EQ.NR) GO TO 90 LA=LC+1 LC=LC+40 WRITE (6,140) GO TO 70 90 IF (KB.EQ.NC) RETURN KA=KC+1 KC=KC+6 IF (NR.GT.25) WRITE (6,140) GO TO 60 C 100 FORMAT (////,3X,9H ROOT NO.,I5,9I12) 110 FORMAT (/8X,10F12.5) 120 FORMAT (2H ) 130 FORMAT (2(1X,A2),I4,F10.5,10F12.5) 140 FORMAT (1H1) C END mopac7-1.15/fortran/consts.f0000644000175000017500000003165311053302063012703 00000000000000 SUBROUTINE CONSTS (COORD) C THIS ROUTINE CONSTRUCTS OR UPDATES THE SOLVENT-ACCESSIBLE C SURFACE (SAS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XX(3),XA(3),XI(3),XJ(3),XSP(3,LENABC),COORD(3,*) DIMENSION NSET(NPPA*NUMATM/2),NSETF(LENABC), N0(2) LOGICAL DIN(NPPA),ISUP COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 BH(LENABC) 4 /SOLVI/ IATSP(LENABC+1),NAR(LENABC), NNX(2,NUMATM) x /SOLVPS/ NPSX, NPS2X COMMON /DIRVEC/ DIRVEC(3,NPPA), NN(3,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT DIMENSION IPIV(LENABC) COMMON /AREAVD/ AREA COMMON /CHANEL/ IFILES(30) EQUIVALENCE(IW,IFILES(6)) EQUIVALENCE (ABCMAT(LENABC*LENABC+1),XSP) NPS = NPSX NPS2 = NPS2X ISUP=(NPS.GT.0) N0(1)=NPS2 N0(2)=-NPS MAXNPS=SQRT(2*LENAB2+.251)-NDEN-.5 MAXNPS=MIN(MAXNPS,LENABC) IF (MAXNPS .LT. 3*NUMAT) THEN WRITE(IW,*)' PARAMETER LENABC MUST BE INCREASED FOR THIS SYSTEM 1' STOP ' PARAMETER LENABC MUST BE INCREASED FOR THIS SYSTEM 1' ENDIF IF (ISUP) THEN NPS3=LENABC-NPS DO 10 I=NPS,1,-1 IATSP(NPS3+I)=IATSP(I) DO 10 IX=1,3 COSURF(IX,NPS3+I)=COSURF(IX,I) 10 CONTINUE NPS3=NPS3+1 END IF SDIS=0.D0 FDIAG=1.05D0*SQRT(NPPA+0.D0) INSET=1 IATSP(LENABC+1)=0 NPS = 0 AREA=0.D0 DO 340 I=1,NUMAT DS=SQRT(4.D0/NSPA) IF (NAT(I) .EQ. 1) DS=2*DS C2DS=COS(2.D0*DS) R=SRAD(I) RI=R-RDS DO 20 IX=1,3 20 XA(IX)=COORD(IX,I) NPS0=NPS+1 IF(ISUP) THEN IF (NPS .GE. NPS3) STOP 'NPS .GT. NPS3' NPS2=NPS3 * IF (IATSP(NPS0) .NE. I) GO TO 340 DO 30 IPS=NPS2,LENABC+1 30 IF(IATSP(IPS) .NE. I) GO TO 40 40 NPS3=IPS C TRANSFORM COSURF ACCORDING TO TM(INV) DO 50 J=NPS2,NPS3-1 XX(1)=COSURF(1,J) XX(2)=COSURF(2,J) XX(3)=COSURF(3,J) COSURF(1,J)=XX(1)*TM(1,1,I)+XX(2)*TM(1,2,I)+XX(3)*TM(1,3, 1I) COSURF(2,J)=XX(1)*TM(2,1,I)+XX(2)*TM(2,2,I)+XX(3)*TM(2,3, 1I) COSURF(3,J)=XX(1)*TM(3,1,I)+XX(2)*TM(3,2,I)+XX(3)*TM(3,3, 1I) 50 CONTINUE NN1=NN(1,I) NN2=NN(2,I) NN3=NN(3,I) ELSE C SEARCH FOR 3 NEAREST NEIGHBOR ATOMS DIST1=1.D20 DIST2=1.D20 DIST3=1.D20 NN1=0 NN2=0 NN3=0 DO 70 J=1,NUMAT IF (J.EQ. I) GO TO 70 DIST=0.D0 DO 60 IX=1,3 60 DIST=DIST+(XA(IX)-COORD(IX,J))**2 IF (DIST+0.05D0 .LT. DIST3) THEN DIST3=DIST NN3=J END IF IF (DIST3+0.05D0 .LT. DIST2) THEN DIST=DIST2 DIST2=DIST3 DIST3=DIST NN3=NN2 NN2=J END IF IF (DIST2+0.05D0 .LT. DIST1) THEN DIST=DIST1 DIST1=DIST2 DIST2=DIST NN2=NN1 NN1=J END IF 70 CONTINUE NN(1,I)=NN1 NN(2,I)=NN2 NN(3,I)=NN3 ENDIF C BUILD NEW TRANSFORMATION MATRIX IF (NN1 .EQ. 0) THEN TM(1,1,I)=1.D0 TM(1,2,I)=0.D0 TM(1,3,I)=0.D0 ELSE DIST1=0.D0 DO 80 IX=1,3 80 DIST1=DIST1+(XA(IX)-COORD(IX,NN1))**2 DIST=1.D0/SQRT(DIST1) TM(1,1,I)=(COORD(1,NN1)-XA(1))*DIST TM(1,2,I)=(COORD(2,NN1)-XA(2))*DIST TM(1,3,I)=(COORD(3,NN1)-XA(3))*DIST END IF 90 IF (NN2 .EQ. 0) THEN DIST=SQRT(TM(1,3,I)**2+TM(1,2,I)**2+TM(1,1,I)**2) TM(2,1,I)=-TM(1,2,I)/DIST TM(2,2,I)=TM(1,1,I)/DIST TM(2,3,I)=0.D0 ELSE DIST2=0.D0 DO 100 IX=1,3 100 DIST2=DIST2+(XA(IX)-COORD(IX,NN2))**2 DIST=1.D0/SQRT(DIST2) XX(1)=(COORD(1,NN2)-XA(1))*DIST XX(2)=(COORD(2,NN2)-XA(2))*DIST XX(3)=(COORD(3,NN2)-XA(3))*DIST SP=XX(1)*TM(1,1,I)+XX(2)*TM(1,2,I)+XX(3)*TM(1,3,I) IF (SP*SP .GT. 0.99D0) THEN NN2=NN3 NN3=0 DIST2=DIST3 GO TO 90 END IF SININV=1.D0/SQRT(1.D0-SP*SP) TM(2,1,I)=(XX(1)-SP*TM(1,1,I))*SININV TM(2,2,I)=(XX(2)-SP*TM(1,2,I))*SININV TM(2,3,I)=(XX(3)-SP*TM(1,3,I))*SININV END IF TM(3,1,I)=TM(1,2,I)*TM(2,3,I)-TM(2,2,I)*TM(1,3,I) TM(3,2,I)=TM(1,3,I)*TM(2,1,I)-TM(2,3,I)*TM(1,1,I) TM(3,3,I)=TM(1,1,I)*TM(2,2,I)-TM(2,1,I)*TM(1,2,I) C TRANSFORM DIRVEC ACCORDING TO TM DO 110 J=1,NPPA XX(1)=DIRVEC(1,J) XX(2)=DIRVEC(2,J) XX(3)=DIRVEC(3,J) DO 110 IX=1,3 X=XX(1)*TM(1,IX,I)+XX(2)*TM(2,IX,I)+XX(3)*TM(3,IX,I) DIRTM(IX,J)=X 110 CONTINUE C FIND THE POINTS OF THE BASIC GRID ON THE SAS NAREA=0 DO 160 J = 1,NPPA DIN(J)=.FALSE. DO 130 IX=1,3 XX(IX) = XA(IX) + DIRTM(IX,J)* R 130 CONTINUE DO 150 K = 1, NUMAT IF (K . EQ. I) GO TO 150 DIST=0.D0 DO 140 IX=1,3 DIST = DIST + (XX(IX) - COORD(IX,K))**2 140 CONTINUE DIST=SQRT(DIST)-SRAD(K) IF (DIST .LT. 0) GO TO 160 150 CONTINUE NAREA=NAREA+1 DIN(J)=.TRUE. 160 CONTINUE IF( NAREA.EQ.0 ) GOTO 340 AREA=AREA+NAREA*RI*RI IF (ISUP) THEN DO 120 J=NPS2,NPS3-1 NPS=NPS+1 IATSP(NPS)=I XX(1)=COSURF(1,J) XX(2)=COSURF(2,J) XX(3)=COSURF(3,J) COSURF(1,NPS)=XX(1)*TM(1,1,I)+XX(2)*TM(2,1,I)+XX(3)*TM(3, 11,I) COSURF(2,NPS)=XX(1)*TM(1,2,I)+XX(2)*TM(2,2,I)+XX(3)*TM(3, 12,I) COSURF(3,NPS)=XX(1)*TM(1,3,I)+XX(2)*TM(2,3,I)+XX(3)*TM(3, 13,I) 120 CONTINUE ELSE I0=2-1/NAT(I) JMAX=N0(I0) I0=3*(I0-1)*NPPA-3 DO 45 J=1,JMAX NPS=NPS+1 IATSP(NPS)=I XX(1)=ABCMAT(I0+J*3+1) XX(2)=ABCMAT(I0+J*3+2) XX(3)=ABCMAT(I0+J*3+3) COSURF(1,NPS)=XX(1)*TM(1,1,I)+XX(2)*TM(2,1,I)+XX(3)*TM(3,1,I) COSURF(2,NPS)=XX(1)*TM(1,2,I)+XX(2)*TM(2,2,I)+XX(3)*TM(3,2,I) COSURF(3,NPS)=XX(1)*TM(1,3,I)+XX(2)*TM(2,3,I)+XX(3)*TM(3,3,I) 45 CONTINUE ENDIF 200 SDIS0=SDIS DO 210 IPS=NPS0,NPS NAR(IPS)=0 XSP(1,IPS)=0.D0 XSP(2,IPS)=0.D0 XSP(3,IPS)=0.D0 210 CONTINUE DO 250 J=1,NPPA IF (.NOT. DIN(J)) GO TO 250 SPM=-1.D0 X1=DIRTM(1,J) X2=DIRTM(2,J) X3=DIRTM(3,J) DO 220 IPS=NPS0,NPS SP=X1*COSURF(1,IPS)+X2*COSURF(2,IPS)+X3*COSURF(3,IPS) IF (SP .LT. SPM) GO TO 220 SPM=SP IPM=IPS 220 CONTINUE IF (SPM .LT. C2DS) THEN NPS=NPS+1 IF (NPS .GT. MAXNPS) THEN WRITE(IW,*) 'NPS IS GREATER THAN MAXNPS-USE SMALLER NS 1PA' STOP 'NPS GREATER THAN MAXNPS' END IF DO 230 IX=1,3 230 COSURF(IX,NPS)=DIRTM(IX,J) IATSP(NPS)=I GO TO 200 END IF NAR(IPM)=NAR(IPM)+1 DO 240 IX=1,3 240 XSP(IX,IPM)=XSP(IX,IPM)+DIRTM(IX,J) 250 CONTINUE SDIS=0.D0 IPS=NPS0-1 IF(NPS.LT.IPS) GOTO 200 260 IPS=IPS+1 352 IF(NAR(IPS).EQ.0)THEN NPS=NPS-1 IF(NPS.LT.IPS) GOTO 200 DO 369 JPS=IPS,NPS NAR(JPS)=NAR(JPS+1) XSP(1,JPS)=XSP(1,JPS+1) XSP(2,JPS)=XSP(2,JPS+1) 369 XSP(3,JPS)=XSP(3,JPS+1) GOTO 352 ENDIF DIST=0.D0 DO 280 IX=1,3 X=XSP(IX,IPS) DIST=DIST+X*X 280 CONTINUE SDIS=SDIS+DIST DIST=1.D0/SQRT(DIST) DO 290 IX=1,3 290 COSURF(IX,IPS)=XSP(IX,IPS)*DIST IF(IPS.LT.NPS) GOTO 260 IF (ABS(SDIS-SDIS0) .GT. 1.D-5) GO TO 200 DO 310 IPS=NPS0,NPS NSETF(IPS)=INSET INSET=INSET+NAR(IPS) NAR(IPS)=0 DO 300 IX=1,3 300 XSP(IX,IPS)=XA(IX)+COSURF(IX,IPS)*RI 310 CONTINUE DO 330 J=1,NPPA IF (.NOT. DIN(J)) GO TO 330 SPM=-1.D0 X1=DIRTM(1,J) X2=DIRTM(2,J) X3=DIRTM(3,J) DO 320 IPS=NPS0,NPS SP=X1*COSURF(1,IPS)+X2*COSURF(2,IPS)+X3*COSURF(3,IPS) IF (SP .LT. SPM) GO TO 320 SPM=SP IPM=IPS 320 CONTINUE IF (SPM .LT. C2DS) GO TO 330 NARA=NAR(IPM) NSET(NSETF(IPM)+NARA)=J NAR(IPM)=NARA+1 330 CONTINUE 340 CONTINUE AREA=AREA*4.D0*3.14159D0/NPPA C FILLING AAMAT DO 450 IPS=1,NPS I=IATSP(IPS) RI=SRAD(I)-RDS NARI=NAR(IPS) NSETFI=NSETF(IPS) AA=0.D0 DO 350 K=NSETFI,NSETFI+NARI-1 J1=NSET(K) AA=AA+FDIAG X1=DIRVEC(1,J1) X2=DIRVEC(2,J1) X3=DIRVEC(3,J1) DO 350 L=NSETFI,K-1 J2=NSET(L) AA=AA+2.D0/SQRT((X1-DIRVEC(1,J2))**2+ 1 (X2-DIRVEC(2,J2))**2+(X3-DIRVEC(3,J2))**2) 350 CONTINUE AA=AA/RI/NARI**2 ABCMAT(IPS+(IPS-1)*NPS)=AA DO 360 IX=1,3 XI(IX)=COORD(IX,I) 360 XA(IX)=XSP(IX,IPS) DO 440 JPS=IPS+1,NPS NARJ=NAR(JPS) NSETFJ=NSETF(JPS) J=IATSP(JPS) DIST=0.D0 DO 370 IX=1,3 XJ(IX)=COORD(IX,J)-XI(IX) 370 DIST=DIST+(XSP(IX,JPS)-XA(IX))**2 IF (DIST .LT. DISEX2) THEN RJ=SRAD(J)-RDS AIJ=0.D0 DO 430 K=NSETFI,NSETFI+NARI-1 J1=NSET(K) DO 380 IX=1,3 380 XX(IX)=DIRVEC(IX,J1)*RI IF (I .NE. J) THEN X1=XX(1)*TM(1,1,I)+XX(2)*TM(2,1,I)+XX(3)*TM(3,1,I)- 1XJ(1) X2=XX(1)*TM(1,2,I)+XX(2)*TM(2,2,I)+XX(3)*TM(3,2,I)- 1XJ(2) X3=XX(1)*TM(1,3,I)+XX(2)*TM(2,3,I)+XX(3)*TM(3,3,I)- 1XJ(3) DO 400 L=NSETFJ,NSETFJ+NARJ-1 J2=NSET(L) DO 390 IX=1,3 390 XX(IX)=DIRVEC(IX,J2)*RJ Y1=XX(1)*TM(1,1,J)+XX(2)*TM(2,1,J)+XX(3)*TM(3,1, 1J)-X1 Y2=XX(1)*TM(1,2,J)+XX(2)*TM(2,2,J)+XX(3)*TM(3,2, 1J)-X2 Y3=XX(1)*TM(1,3,J)+XX(2)*TM(2,3,J)+XX(3)*TM(3,3, 1J)-X3 AIJ=AIJ+1.D0/SQRT(Y1*Y1+Y2*Y2+Y3*Y3) 400 CONTINUE ELSE 410 DO 420 L=NSETFJ,NSETFJ+NARJ-1 J2=NSET(L) C AA=((DIRVEC(1,J2)*RJ-XX(1))**2+(DIRVEC(2,J2)*RJ C & -XX(2))**2+(DIRVEC(3,J2)*RJ-XX(3))**2) C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C AIJ=AIJ+((DIRVEC(1,J2)*RJ-XX(1))**2+(DIRVEC(2,J2 C 1)*RJ -XX(2))**2+(DIRVEC(3,J2)*RJ-XX(3))**2)**-.5 C 2D0 AIJ=AIJ+((DIRVEC(1,J2)*RJ-XX(1))**2 1 +(DIRVEC(2,J2)*RJ-XX(2))**2 2 +(DIRVEC(3,J2)*RJ-XX(3))**2)**(-.5D0) C ***************************** at 1994-05-25 ***** 420 CONTINUE END IF 430 CONTINUE AIJ=AIJ/NARI/NARJ ELSE AIJ=1.D0/SQRT(DIST) END IF ABCMAT(IPS+(JPS-1)*NPS)=AIJ ABCMAT(JPS+(IPS-1)*NPS)=AIJ 440 CONTINUE 450 CONTINUE C INVERT A-MATRIX CALL DGETRF(NPS,NPS,ABCMAT,NPS,IPIV,INFO) IF( INFO.NE.0 ) THEN WRITE(*,*) ' DGETRF FAILED WITH ERROR CODE ', INFO STOP 'CONSTS' ENDIF CALL DGETRI(NPS,ABCMAT,NPS,IPIV,XSP, 3*LENABC,INFO) IF( INFO.NE.0 ) THEN WRITE(*,*) ' DGETRI FAILED WITH ERROR CODE ', INFO STOP 'CONSTS' ENDIF C STORE INV. A-MATRIX AS LOWER TRIANGLE II=0 DO 460 I=1,NPS DO 460 J=1,I II=II+1 ABCMAT(II)=ABCMAT(J+(I-1)*NPS) 460 CONTINUE NPS2=II RETURN END mopac7-1.15/fortran/dtrmv.f0000644000175000017500000002123611053302063012522 00000000000000 SUBROUTINE DTRMV ( UPLO, TRANS, DIAG, N, A, LDA, X, INCX ) * .. SCALAR ARGUMENTS .. INTEGER INCX, LDA, N CHARACTER*1 DIAG, TRANS, UPLO * .. ARRAY ARGUMENTS .. DOUBLE PRECISION A( LDA, * ), X( * ) * .. * * PURPOSE * ======= * * DTRMV PERFORMS ONE OF THE MATRIX-VECTOR OPERATIONS * * X := A*X, OR X := A'*X, * * WHERE X IS AN N ELEMENT VECTOR AND A IS AN N BY N UNIT, OR NON-UNIT, * UPPER OR LOWER TRIANGULAR MATRIX. * * PARAMETERS * ========== * * UPLO - CHARACTER*1. * ON ENTRY, UPLO SPECIFIES WHETHER THE MATRIX IS AN UPPER OR * LOWER TRIANGULAR MATRIX AS FOLLOWS: * * UPLO = 'U' OR 'U' A IS AN UPPER TRIANGULAR MATRIX. * * UPLO = 'L' OR 'L' A IS A LOWER TRIANGULAR MATRIX. * * UNCHANGED ON EXIT. * * TRANS - CHARACTER*1. * ON ENTRY, TRANS SPECIFIES THE OPERATION TO BE PERFORMED AS * FOLLOWS: * * TRANS = 'N' OR 'N' X := A*X. * * TRANS = 'T' OR 'T' X := A'*X. * * TRANS = 'C' OR 'C' X := A'*X. * * UNCHANGED ON EXIT. * * DIAG - CHARACTER*1. * ON ENTRY, DIAG SPECIFIES WHETHER OR NOT A IS UNIT * TRIANGULAR AS FOLLOWS: * * DIAG = 'U' OR 'U' A IS ASSUMED TO BE UNIT TRIANGULAR. * * DIAG = 'N' OR 'N' A IS NOT ASSUMED TO BE UNIT * TRIANGULAR. * * UNCHANGED ON EXIT. * * N - INTEGER. * ON ENTRY, N SPECIFIES THE ORDER OF THE MATRIX A. * N MUST BE AT LEAST ZERO. * UNCHANGED ON EXIT. * * A - DOUBLE PRECISION ARRAY OF DIMENSION ( LDA, N ). * BEFORE ENTRY WITH UPLO = 'U' OR 'U', THE LEADING N BY N * UPPER TRIANGULAR PART OF THE ARRAY A MUST CONTAIN THE UPPER * TRIANGULAR MATRIX AND THE STRICTLY LOWER TRIANGULAR PART OF * A IS NOT REFERENCED. * BEFORE ENTRY WITH UPLO = 'L' OR 'L', THE LEADING N BY N * LOWER TRIANGULAR PART OF THE ARRAY A MUST CONTAIN THE LOWER * TRIANGULAR MATRIX AND THE STRICTLY UPPER TRIANGULAR PART OF * A IS NOT REFERENCED. * NOTE THAT WHEN DIAG = 'U' OR 'U', THE DIAGONAL ELEMENTS OF * A ARE NOT REFERENCED EITHER, BUT ARE ASSUMED TO BE UNITY. * UNCHANGED ON EXIT. * * LDA - INTEGER. * ON ENTRY, LDA SPECIFIES THE FIRST DIMENSION OF A AS DECLARED * IN THE CALLING (SUB) PROGRAM. LDA MUST BE AT LEAST * MAX( 1, N ). * UNCHANGED ON EXIT. * * X - DOUBLE PRECISION ARRAY OF DIMENSION AT LEAST * ( 1 + ( N - 1 )*ABS( INCX ) ). * BEFORE ENTRY, THE INCREMENTED ARRAY X MUST CONTAIN THE N * ELEMENT VECTOR X. ON EXIT, X IS OVERWRITTEN WITH THE * TRANFORMED VECTOR X. * * INCX - INTEGER. * ON ENTRY, INCX SPECIFIES THE INCREMENT FOR THE ELEMENTS OF * X. INCX MUST NOT BE ZERO. * UNCHANGED ON EXIT. * * * LEVEL 2 BLAS ROUTINE. * * -- WRITTEN ON 22-OCTOBER-1986. * JACK DONGARRA, ARGONNE NATIONAL LAB. * JEREMY DU CROZ, NAG CENTRAL OFFICE. * SVEN HAMMARLING, NAG CENTRAL OFFICE. * RICHARD HANSON, SANDIA NATIONAL LABS. * * * .. PARAMETERS .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. LOCAL SCALARS .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, J, JX, KX LOGICAL NOUNIT * .. EXTERNAL FUNCTIONS .. LOGICAL LSAME EXTERNAL LSAME * .. EXTERNAL SUBROUTINES .. EXTERNAL XERBLA * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * INFO = 0 IF ( .NOT.LSAME( UPLO , 'U' ).AND. $ .NOT.LSAME( UPLO , 'L' ) )THEN INFO = 1 ELSE IF( .NOT.LSAME( TRANS, 'N' ).AND. $ .NOT.LSAME( TRANS, 'T' ).AND. $ .NOT.LSAME( TRANS, 'C' ) )THEN INFO = 2 ELSE IF( .NOT.LSAME( DIAG , 'U' ).AND. $ .NOT.LSAME( DIAG , 'N' ) )THEN INFO = 3 ELSE IF( N.LT.0 )THEN INFO = 4 ELSE IF( LDA.LT.MAX( 1, N ) )THEN INFO = 6 ELSE IF( INCX.EQ.0 )THEN INFO = 8 END IF IF( INFO.NE.0 )THEN CALL XERBLA( 'DTRMV ', INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE. * IF( N.EQ.0 ) $ RETURN * NOUNIT = LSAME( DIAG, 'N' ) * * SET UP THE START POINT IN X IF THE INCREMENT IS NOT UNITY. THIS * WILL BE ( N - 1 )*INCX TOO SMALL FOR DESCENDING LOOPS. * IF( INCX.LE.0 )THEN KX = 1 - ( N - 1 )*INCX ELSE IF( INCX.NE.1 )THEN KX = 1 END IF * * START THE OPERATIONS. IN THIS VERSION THE ELEMENTS OF A ARE * ACCESSED SEQUENTIALLY WITH ONE PASS THROUGH A. * IF( LSAME( TRANS, 'N' ) )THEN * * FORM X := A*X. * IF( LSAME( UPLO, 'U' ) )THEN IF( INCX.EQ.1 )THEN DO 20, J = 1, N IF( X( J ).NE.ZERO )THEN TEMP = X( J ) DO 10, I = 1, J - 1 X( I ) = X( I ) + TEMP*A( I, J ) 10 CONTINUE IF( NOUNIT ) $ X( J ) = X( J )*A( J, J ) END IF 20 CONTINUE ELSE JX = KX DO 40, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = X( JX ) IX = KX DO 30, I = 1, J - 1 X( IX ) = X( IX ) + TEMP*A( I, J ) IX = IX + INCX 30 CONTINUE IF( NOUNIT ) $ X( JX ) = X( JX )*A( J, J ) END IF JX = JX + INCX 40 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 60, J = N, 1, -1 IF( X( J ).NE.ZERO )THEN TEMP = X( J ) DO 50, I = N, J + 1, -1 X( I ) = X( I ) + TEMP*A( I, J ) 50 CONTINUE IF( NOUNIT ) $ X( J ) = X( J )*A( J, J ) END IF 60 CONTINUE ELSE KX = KX + ( N - 1 )*INCX JX = KX DO 80, J = N, 1, -1 IF( X( JX ).NE.ZERO )THEN TEMP = X( JX ) IX = KX DO 70, I = N, J + 1, -1 X( IX ) = X( IX ) + TEMP*A( I, J ) IX = IX - INCX 70 CONTINUE IF( NOUNIT ) $ X( JX ) = X( JX )*A( J, J ) END IF JX = JX - INCX 80 CONTINUE END IF END IF ELSE * * FORM X := A'*X. * IF( LSAME( UPLO, 'U' ) )THEN IF( INCX.EQ.1 )THEN DO 100, J = N, 1, -1 TEMP = X( J ) IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 90, I = J - 1, 1, -1 TEMP = TEMP + A( I, J )*X( I ) 90 CONTINUE X( J ) = TEMP 100 CONTINUE ELSE JX = KX + ( N - 1 )*INCX DO 120, J = N, 1, -1 TEMP = X( JX ) IX = JX IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 110, I = J - 1, 1, -1 IX = IX - INCX TEMP = TEMP + A( I, J )*X( IX ) 110 CONTINUE X( JX ) = TEMP JX = JX - INCX 120 CONTINUE END IF ELSE IF( INCX.EQ.1 )THEN DO 140, J = 1, N TEMP = X( J ) IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 130, I = J + 1, N TEMP = TEMP + A( I, J )*X( I ) 130 CONTINUE X( J ) = TEMP 140 CONTINUE ELSE JX = KX DO 160, J = 1, N TEMP = X( JX ) IX = JX IF( NOUNIT ) $ TEMP = TEMP*A( J, J ) DO 150, I = J + 1, N IX = IX + INCX TEMP = TEMP + A( I, J )*X( IX ) 150 CONTINUE X( JX ) = TEMP JX = JX + INCX 160 CONTINUE END IF END IF END IF * RETURN * * END OF DTRMV . * END mopac7-1.15/fortran/c_src_f2c/0000777000175000017500000000000011274262042013131 500000000000000mopac7-1.15/fortran/c_src_f2c/Makefile.am0000644000175000017500000000004411053302063015070 00000000000000EXTRA_DIST = \ etime.c \ fdate.c mopac7-1.15/fortran/c_src_f2c/Makefile.in0000644000175000017500000002072211274260541015117 00000000000000# Makefile.in generated by automake 1.10.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = fortran/c_src_f2c DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ NMEDIT = @NMEDIT@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ etime.c \ fdate.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu fortran/c_src_f2c/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu fortran/c_src_f2c/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-exec-am: install-html: install-html-am install-info: install-info-am install-man: install-pdf: install-pdf-am install-ps: install-ps-am installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: mopac7-1.15/fortran/c_src_f2c/etime.c0000644000175000017500000000144211053302063014306 00000000000000/* NAME etime - return elapsed execution time SYNOPSIS real function etime (tarray) real tarray(2) DESCRIPTION These routine return elapsed runtime in seconds for the calling process. The argument array returns user time in the first element and system time in the second element. The function value is the sum of user and system time. LAST MODIFICATION January 24, 2000, I. Cserny (cserny@atomki.hu) */ #include #include #include float etime_(float *a) { struct rusage t; getrusage(RUSAGE_SELF,&t); a[0] = (double)(t.ru_utime.tv_sec); a[0] = a[0] + (double)(t.ru_utime.tv_usec) / CLOCKS_PER_SEC; a[1] = (double)(t.ru_stime.tv_sec); a[1] = a[1] + (double)(t.ru_stime.tv_usec) / CLOCKS_PER_SEC; } mopac7-1.15/fortran/c_src_f2c/fdate.c0000644000175000017500000000106311053302063014265 00000000000000/* NAME fdate - return date and time in an ASCII string SYNOPSIS subroutine fdate(string) character*24 string DESCRIPTION Fdate returns the current date and time as a 24 character string in the format described under ctime(3). Neither `newline' nor NULL will be included. LAST MODIFIACTION June 21, 1995, Istvan Cserny (cserny@atomki.hu) */ #include "f2c.h" #include #include void fdate_(char *cht, ftnlen cht_len) { static time_t t; time(&t); s_copy(cht,ctime(&t),24L,24L); return; } mopac7-1.15/fortran/geout.f0000644000175000017500000001275211053302063012514 00000000000000 SUBROUTINE GEOUT(MODE1) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' ********************************************************************** * * GEOUT PRINTS THE CURRENT GEOMETRY. IT CAN BE CALLED ANY TIME, * FROM ANY POINT IN THE PROGRAM AND DOES NOT AFFECT ANYTHING. * ********************************************************************** COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR),IDUMY,XPARAM(MAXPAR) COMMON /PATH / LATOM,LPARAM,REACT(200) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /CORE / CORE(107) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /KEYWRD/ KEYWRD COMMON /TITLES/ KOMENT,TITLE COMMON /ATOMTX/ LTXT, TXTATM(NUMATM) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON /ELEMTS/ ELEMNT(107) DIMENSION COORD(3,NUMATM), Q2(NUMATM), LOCTMP(2,MAXPAR) CHARACTER Q(3)*2, ELEMNT*2, FLAG1*2, FLAG0*2, FLAGN*2, TXTATM*8 CHARACTER KEYWRD*241, KOMENT*81, TITLE*81, BLANK*80, LTXT*1 LOGICAL CART MODE=MODE1 IF(MODE.EQ.1)THEN FLAG1=' *' FLAG0=' ' FLAGN=' +' IPRT=6 ELSE FLAG1=' 1' FLAG0=' 0' FLAGN='-1' IPRT=ABS(MODE) ENDIF C C *** OUTPUT THE PARAMETER DATA. C CART=.FALSE. IF(NA(1).NE.0) THEN CART=.TRUE. CALL XYZINT(GEO,NATOMS,NA,NB,NC,1.D0,COORD) LOCTMP(1,1)=2 LOCTMP(2,1)=1 LOCTMP(1,2)=3 LOCTMP(2,2)=1 LOCTMP(1,3)=3 LOCTMP(2,3)=2 NVARTM=0 DO 10 I=4,NATOMS NVARTM=NVARTM+3 DO 10 J=1,3 LOCTMP(1,NVARTM+J)=I 10 LOCTMP(2,NVARTM+J)=J NVARTM=NVARTM+3 ELSE DO 20 I=1,NVAR LOCTMP(1,I)=LOC(1,I) 20 LOCTMP(2,I)=LOC(2,I) NVARTM=NVAR DO 30 J=1,3 C$DOUT VBEST DO 30 I=1,NATOMS 30 COORD(J,I)=GEO(J,I) ENDIF DEGREE=57.29577951D00 MAXTXT=ICHAR(LTXT) BLANK=' ' IF(MODE.EQ.1)THEN WRITE (6,40)BLANK(:MAX(2,MAXTXT-4)), 1 BLANK(:MAX(4,MAXTXT-2)), 2 BLANK(:MAX(18,MAXTXT+12)) 40 FORMAT (/4X,'ATOM',3X,'CHEMICAL',A ,'BOND LENGTH',4X,'BOND ANGL 1E',4X ,' TWIST ANGLE',/3X,'NUMBER',2X,'SYMBOL', A,'(ANGSTROMS)',5 2X,'(DEGREES)',5X,' (DEGREES)',/4X,'(I)',A,'NA:I',10X,'NB:NA:I',5 3X,' NC:NB:NA:I',5X,'NA',3X,'NB',3X,'NC',/) ELSE IF(MODE.GT.0)CALL WRTTXT(IPRT) ENDIF IF(MODE.NE.1)THEN CALL CHRGE(P,Q2) DO 50 I=1,NUMAT L=NAT(I) 50 Q2(I)=CORE(L) - Q2(I) ENDIF N=1 IA=LOCTMP(1,1) II=0 DO 80 I=1,NATOMS DO 60 J=1,3 Q(J)=FLAG0 IF (IA.NE.I) GO TO 60 IF (J.NE.LOCTMP(2,N).OR.N.GT.NVARTM) GO TO 60 Q(J)=FLAG1 N=N+1 IA=LOCTMP(1,N) 60 CONTINUE W = COORD(2,I) * DEGREE X = COORD(3,I) * DEGREE C C CONSTRAIN ANGLE TO DOMAIN 0 - 180 DEGREES C W=W - AINT(W/360.D0)*360.D0 IF(W.LT.0)W=W+360.D0 IF(W .GT. 180.D0) THEN X=X+180.D0 W=360.D0-W ENDIF C C CONSTRAIN DIHEDRAL TO DOMAIN -180 - 180 DEGREES C X=X - AINT(X/360.D0+SIGN(0.5D0-1.D-9,X)-1.D-9)*360.D0 IF (LATOM.NE.I) GO TO 70 J=LPARAM Q(J)=FLAGN 70 CONTINUE BLANK=ELEMNT(LABELS(I))//TXTATM(I)//' ' IF(MODE.NE.1)THEN J=MAX(4,MAXTXT+2) K=MAX(0,8-J) ELSE J=MAX(9,MAXTXT+3) ENDIF IF(LABELS(I).NE.0)THEN IF(MODE.NE.1)THEN IF(LABELS(I).NE.99.AND.LABELS(I).NE.107)THEN II=II+1 WRITE (IPRT,'(1X,A,F11.7,1X,A2,F14.6,1X,A2,F14.6,1X, 1A2,3I5,A,F7.4)') BLANK(:J),COORD(1,I),Q(1),W,Q(2),X,Q(3), 2NA(I),NB(I),NC(I),BLANK(20:20+K),Q2(II) ELSE WRITE (IPRT,'(1X,A,F11.7,1X,A2,F14.6,1X,A2,F14.6,1X, 1A2,3I5)') BLANK(:J),COORD(1,I),Q(1),W,Q(2),X,Q(3), 2NA(I),NB(I),NC(I) ENDIF ELSEIF(I.GT.3)THEN WRITE (6,'(3X,I4 ,5X,A,F9.5,1X,A2,F14.5,1X,A2,F11.5,1X, 1A2,I4,2I5)') I,BLANK(:J),COORD(1,I),Q(1),W,Q(2),X,Q(3), 2NA(I),NB(I),NC(I) ELSEIF(I.EQ.3)THEN WRITE (6,'('' 3'',5X,A,F9.5,1X,A2,F14.5,1X,A2,13X, 12I5)') BLANK(:J),COORD(1,3),Q(1),W,Q(2),NA(3),NB(3) ELSEIF(I.EQ.2)THEN WRITE (6,'('' 2'',5X,A,F9.5,1X,A2,30X,I5)') 1 BLANK(:J),COORD(1,2),Q(1),NA(2) ELSE WRITE (6,'('' 1'',5X,A)') BLANK(:J) ENDIF ENDIF 80 CONTINUE IF(CART) NA(1)=99 IF(MODE.EQ.1) RETURN WRITE (IPRT,*) IF(NDEP.EQ.0) RETURN C C OUTPUT SYMMETRY DATA. C I=1 90 J=I 100 IF(J.EQ.NDEP) GOTO 110 IF(LOCPAR(J).EQ.LOCPAR(J+1).AND.IDEPFN(J).EQ.IDEPFN(J+1) 1.AND.J-I.LT.15)THEN J=J+1 GOTO 100 ELSE WRITE(IPRT,'(I4,I3,I5,15I4)') 1LOCPAR(I),IDEPFN(I),(LOCDEP(K),K=I,J) ENDIF I=J+1 GOTO 90 110 CONTINUE WRITE(IPRT,'(I4,I3,I5,15I4)') 1LOCPAR(I),IDEPFN(I),(LOCDEP(K),K=I,J) RETURN END mopac7-1.15/fortran/dvfill.f0000644000175000017500000000603511053302063012646 00000000000000 SUBROUTINE DVFILL(NPPA,DIRVEC) C FUELLEN DES FELDES DIRVEC IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION DIRVEC(3,*) INTEGER FSET(3,20), KSET(2,30) DATA KSET/ 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1 12,11,12,10,12, 9,12, 8,12, 7, 2 2, 3, 3, 4, 4, 5, 5, 6, 6, 2, 3 7, 8, 8, 9, 9,10,10,11,11, 7, 4 2,7,7,3,3,8,8,4,4,9,9,5,5,10,10,6,6,11,11,2/ DATA FSET/ 1, 2, 3, 1, 3, 4, 1, 4, 5, 1, 5, 6, 1, 6, 2, 1 12,11,10,12,10, 9,12, 9, 8,12, 8, 7,12, 7,11, 2 2, 3, 7, 3, 4, 8, 4, 5, 9, 5, 6,10, 6, 2,11, 3 7, 8, 3, 8, 9, 4, 9,10, 5,10,11, 6,11, 7, 2/ DIRVEC (1,1) = -1.D0 DIRVEC (2,1) = 0.D0 DIRVEC (3,1) = 0.D0 ND=1 R=SQRT(.8D0) H=SQRT(.2D0) DO 10 I= -1,1,2 DO 10 J= 1,5 ND=ND+1 BETA=1.D0+ J*1.25663706D0 + (I+1)*0.3141593D0 DIRVEC(2,ND)=R*COS(BETA) DIRVEC(3,ND)=R*SIN(BETA) DIRVEC(1,ND)=I*H 10 CONTINUE DIRVEC (2,12) = 0.D0 DIRVEC (3,12) = 0.D0 DIRVEC (1,12) = 1.D0 ND=12 C NPPA=10*3**K*4**L+2 M=(NPPA-2)/10 DO 20 K=0,10 IF ((M/3)*3 .NE. M) GO TO 30 20 M=M/3 30 DO 40 L=0,10 IF ((M/4)*4 .NE. M) GO TO 50 40 M=M/4 50 IF (10*3**K*4**L+2 .NE. NPPA) STOP 'VALUE OF NPPA NOT ALLOWED: 1 IT MUST BE 10*3**K*4**L+2' KH=K/2 M=2**L*3**KH C CREATE ON EACH EDGE 2**L*3**KH-1 NEW POINTS DO 70 I=1,30 NA=KSET(1,I) NB=KSET(2,I) DO 70 J=1,M-1 ND=ND+1 DO 60 IX=1,3 60 DIRVEC(IX,ND)=DIRVEC(IX,NA)*(M-J)+DIRVEC(IX,NB)*J 70 CONTINUE C CREATE POINTS WITHIN EACH TRIANGLE DO 90 I=1,20 NA=FSET(1,I) NB=FSET(2,I) NC=FSET(3,I) DO 90 J1=1,M-1 DO 90 J2=1,M-J1-1 ND=ND+1 DO 80 IX=1,3 80 DIRVEC(IX,ND)=DIRVEC(IX,NA)*(M-J1-J2) 1 +DIRVEC(IX,NB)*J1+DIRVEC(IX,NC)*J2 90 CONTINUE IF (K .EQ. 2*KH) GO TO 140 C CREATE TO ADDITIONAL SUBGRIDS T=1.D0/3.D0 DO 110 I=1,20 NA=FSET(1,I) NB=FSET(2,I) NC=FSET(3,I) DO 110 J1=0,M-1 DO 110 J2=0,M-J1-1 ND=ND+1 DO 100 IX=1,3 100 DIRVEC(IX,ND)=DIRVEC(IX,NA)*(M-J1-J2-2*T) 1 +DIRVEC(IX,NB)*(J1+T)+DIRVEC(IX,NC)*(J2+T) 110 CONTINUE T=2.D0/3.D0 DO 130 I=1,20 NA=FSET(1,I) NB=FSET(2,I) NC=FSET(3,I) DO 130 J1=0,M-2 DO 130 J2=0,M-J1-2 ND=ND+1 DO 120 IX=1,3 120 DIRVEC(IX,ND)=DIRVEC(IX,NA)*(M-J1-J2-2*T) 1 +DIRVEC(IX,NB)*(J1+T)+DIRVEC(IX,NC)*(J2+T) 130 CONTINUE C NORMALIZE ALL VECTORS 140 DO 170 I=1,NPPA DIST=0.D0 DO 150 IX=1,3 150 DIST=DIST+DIRVEC(IX,I)**2 DIST=1.D0/SQRT(DIST) DO 160 IX=1,3 160 DIRVEC(IX,I)=DIRVEC(IX,I)*DIST 170 CONTINUE RETURN END mopac7-1.15/fortran/cdiag.f0000644000175000017500000003403311053302063012434 00000000000000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C this subroutine is moved to the top of the C source file in order to resolve the mis- C matching parameter types later in code. C 2005-10-11 Tommi Hassinen CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE EC08C(A,B,VALUE,VEC,N,IV,W) C C TO FIND THE EIGENVALUES AND VECTORS OF A TRI-DIAGONAL C HERMITIAN MATRIX. REAL VALUE(*),W(*),PCK(2),ONE,ZERO,VEC(*) COMPLEX A(*),B(*),DN,UPCK EQUIVALENCE (PCK(1),UPCK) C WE TREAT VEC AS IF IT IS DEFINED AS COMPLEX VEC(IV,N) C IN THE CALLING PROGRAM. DATA ONE, ZERO/1.0,0.0/ IV2=IV+IV N2=N+N IL=IV2*(N-1)+1 W(1)=A(1) C C THE HERMITIAN FORM IS TRANSFORMED INTO A REAL FORM IF(N-1)80,80,10 10 DO 20 I=2,N W(I)=A(I) 20 W(I+N)=CABS(B(I)) C C FIND THE EIGENVALUES AND VECTORS OF THE REAL FORM 30 CALL EA08C(W,W(N+1),VALUE,VEC,N,IV2,W(N2+1)) C C THE VECTORS IN VEC AT THIS POINT ARE REAL,WE NOW EXPAND THEM C INTO VEC AS THOUGH THEY WERE COMPLEX. DO 50 I=1,IL,IV2 DO 40 J=1,N K=N-J L=K+K 40 VEC(I+L)=VEC(I+K) 50 VEC(I+1)=ZERO IF(N.LE.1)GO TO 80 DN=ONE K=1 C C TRANSFORM VECTORS OF REAL FORM TO THOSE OF COMPLEX FORM. DO 70 I=4,N2,2 K=K+1 UPCK=ONE IF(W(K+N).NE.ZERO)UPCK=DN*CONJG(B(K))/W(K+N) I1=IL-1+I DO 60 J=I,I1,IV2 VEC(J)=VEC(J-1)*PCK(2) 60 VEC(J-1)=VEC(J-1)*PCK(1) 70 DN=UPCK 80 RETURN END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C this subroutine is moved to the top of the C source file in order to resolve the mis- C matching parameter types later in code. C 2005-10-11 Tommi Hassinen CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC SUBROUTINE ME08B (A,Q,B,N,IA) REAL A(IA,*),Q(2,*),B(IA,*) DO 10 I=1,N A(1,I)=A(1,I) -Q(1,1)*B(1,I)+Q(2,1)*B(2,I) 1 -Q(1,I)*B(1,1)+Q(2,I)*B(2,1) 10 A(2,I)=A(2,I)-Q(2,1)*B(1,I)-Q(1,1)*B(2,I) 1 +Q(2,I)*B(1,1)+Q(1,I)*B(2,1) RETURN END SUBROUTINE CDIAG(A,VALUE,VEC,N, NEED) C C TO FIND THE EIGENVALUES AND EIGENVECTORS OF A HERMITIAN MATRIX. REAL VALUE(*),H COMPLEX W(6000) COMPLEX A(N,*),VEC(N,*) COMPLEX FM06AS IA=N IV=N C C REDUCE MATRIX TO A TRI-DIAGONAL HERMITIAN MATRIX. CALL ME08A(A,W,W(N+1),N,IA,W(2*N+1)) C C FIND THE EIGENVALUES AND EIGENVECTORS OF THE TRI-DIAGONAL MATRIX CALL EC08C(W,W(N+1),VALUE,VEC,N,IV,W(2*N+1)) IF(NEED.EQ.0) GOTO 50 IF(N.LT.2)RETURN C C THE EIGENVECTORS OF THE ORIGINAL MATRIX ARE NOW FOUND BY C BACK TRANSFORMATION USING INFORMATION STORE IN THE UPPER C TRIANGLE OF MATRIX A (BY ME08) DO 40 II=3,N I=N-II+1 H=W(N+I+1)*CONJG(A(I,I+1)) IF(H)10,40,10 10 DO30L=1,N I1=I+1 S=FM06AS(N-I,A(I,I+1),IA,VEC(I+1,L),1) S=S/H DO20K=I1,N 20 VEC(K,L)=VEC(K,L)+CONJG(A(I,K))*S 30 CONTINUE 40 CONTINUE 50 CALL SORT(VALUE,VEC,N) RETURN END SUBROUTINE EA08C(A,B,VALUE,VEC,M,IV,W) C STANDARD FORTRAN 66 (A VERIFIED PFORT SUBROUTINE) DIMENSION A(*),B(*),VALUE(*),VEC(*),W(*) DATA EPS/1.E-6/,A34/0.0/ C THIS USES QR ITERATION TO FIND THE EIGENVALUES AND EIGENVECTORS C OF THE SYMMETRIC TRIDIAGONAL MATRIX WHOSE DIAGONAL ELEMENTS ARE C A(I),I=1,M AND OFF-DIAGONAL ELEMENTS ARE B(I),I=2,M. THE ARRAY C W IS USED FOR WORKSPACE AND MUST HAVE DIMENSION AT LEAST 2*M. C WE TREAT VEC AS IF IT HAD DIMENSIONS (IV,M). SML=EPS*FLOAT(M) CALL EA09C(A,B,W(M+1),M,W) C SET VEC TO THE IDENTITY MATRIX. DO 20 I=1,M VALUE(I)=A(I) W(I)=B(I) K=(I-1)*IV+1 L=K+M-1 DO 10 J=K,L 10 VEC(J)=0. KI=K+I-1 20 VEC(KI)=1. K=0 IF(M.EQ.1)RETURN DO 100 N3=2,M N2=M+2-N3 C EACH QR ITERATION IS PERFORMED OF ROWS AND COLUMNS N1 TO N2 MN2=M+N2 ROOT=W(MN2) DO 80 ITER=1,20 BB=(VALUE(N2)-VALUE(N2-1))*0.5 CC=W(N2)*W(N2) A22=VALUE(N2) IF(CC.NE.0.0)A22=A22+CC/(BB+SIGN(1.0,BB)*SQRT(BB*BB+CC)) DO 30 I=1,N2 MI=M+I IF(ABS(ROOT-A22).LE.ABS(W(MI)-A22))GO TO 30 ROOT=W(MI) MN=M+N2 W(MI)=W(MN) W(MN)=ROOT 30 CONTINUE DO 40 II=2,N2 N1=2+N2-II IF(ABS(W(N1)).LE.(ABS(VALUE(N1-1))+ABS(VALUE(N1)))*SML)GO 1 TO 50 40 CONTINUE N1=1 50 IF(N2.EQ.N1) GO TO 100 N2M1=N2-1 IF(ITER.GE.3)ROOT=A22 K=K+1 A22=VALUE(N1) A12=A22-ROOT A23=W(N1+1) A13=A23 DO70 I=N1,N2M1 A33=VALUE(I+1) IF(I.NE.N2M1)A34=W (I+2) S=SIGN(SQRT(A12*A12+A13*A13),A12) SI=A13/S CO=A12/S JK=I*IV+1 J1=JK-IV J2=J1+MIN0(M,I+K)-1 DO 60 JI=J1,J2 V1=VEC(JI) V2=VEC(JK) VEC(JI)=V1*CO+V2*SI VEC(JK)=V2*CO-V1*SI 60 JK=JK+1 IF(I.NE.N1) W(I)=S A11=CO*A22+SI*A23 A12=CO*A23+SI*A33 A13=SI*A34 A21=CO*A23-SI*A22 A22=CO*A33-SI*A23 A23=CO*A34 VALUE(I)=A11*CO+A12*SI A12=-A11*SI+A12*CO W(I+1)=A12 70 A22=A22*CO-A21*SI 80 VALUE(N2)=A22 WRITE(6,90) 90 FORMAT(48H1CYCLE DETECTED IN SUBROUTINE EA08 -STOPPING NOW) STOP 100 CONTINUE C RAYLEIGH QUOTIENT DO 120 J=1,M K=(J-1)*IV XX=VEC(K+1)**2 XAX=XX*A(1) DO 110 I=2,M KI=K+I XX=XX+VEC(KI)**2 110 XAX=XAX+VEC(KI)*(2.*B(I)*VEC(KI-1)+A(I)*VEC(KI)) 120 VALUE(J)=XAX/XX RETURN END SUBROUTINE EA09C(A,B,VALUE,M,OFF) C STANDARD FORTRAN 66 (A VERFIED PFORT SUBROUTINE) DIMENSION A(*),B(*),VALUE(*),OFF(*) DATA A34/0.0/,EPS/1.0E-6/ SML=EPS*FLOAT(M) VALUE(1)=A(1) IF(M.EQ.1)RETURN DO 10 I=2,M VALUE(I)=A(I) 10 OFF(I)=B(I) C EACH QR ITERATION IS PERFORMED OF ROWS AND COLUMNS N1 TO N2 MAXIT=10*M DO 80 ITER=1,MAXIT DO 40 N3=2,M N2=M+2-N3 DO 20 II=2,N2 N1=2+N2-II IF(ABS(OFF(N1)).LE.(ABS(VALUE(N1-1))+ABS(VALUE(N1)))*SML) 1GO TO 30 20 CONTINUE N1=1 30 IF(N2.NE.N1) GO TO 50 40 CONTINUE RETURN C ROOT IS THE EIGENVALUE OF THE BOTTOM 2*2 MATRIX THAT IS NEAREST C TO THE LAST MATRIX ELEMENT AND IS USED TO ACCELERATE THE C CONVERGENCE 50 BB=(VALUE(N2)-VALUE(N2-1))*0.5 CC=OFF(N2)*OFF(N2) SBB=1. IF(BB.LT.0.)SBB=-1. ROOT=VALUE(N2)+CC/(BB+SBB*SQRT(BB*BB+CC)) N2M1=N2-1 60 A22=VALUE(N1) A12=A22-ROOT A23=OFF(N1+1) A13=A23 DO 70 I=N1,N2M1 A33=VALUE(I+1) IF(I.NE.N2M1)A34=OFF(I+2) S=SQRT(A12*A12+A13*A13) SI=A13/S CO=A12/S IF(I.NE.N1)OFF(I)=S A11=CO*A22+SI*A23 A12=CO*A23+SI*A33 A13=SI*A34 A21=CO*A23-SI*A22 A22=CO*A33-SI*A23 A23=CO*A34 VALUE(I)=A11*CO+A12*SI A12=-A11*SI+A12*CO OFF(I+1)=A12 70 A22=A22*CO-A21*SI 80 VALUE(N2)=A22 WRITE(6,90) 90 FORMAT(39H1LOOPING DETECTED IN EA09-STOPPING NOW ) STOP END COMPLEX FUNCTION FM06AS(N,A,IA,B,IB) IMPLICIT COMPLEX (A-H,O-Z) COMPLEX A(*), B(*) ******************************************************* * * FM06AS - A FUNCTION ROUTINE TO COMPUTE THE VALUE OF THE * INNER PRODUCT, OR DOT PRODUCT, OF TWO SINGLE PRECISION * COMPLEX VECTORS, ACCUMULATING THE INTERMEDIATE PRODUCTS * DOUBLE PRECISION. THE ELEMENTS OF EACH VECTOR CAN BE * STORED IN ANY FIXED DISPLACEMENT FROM NEIGHBOURING * ELEMENTS. * * COMPUTES: SUM(J=1,N) A((J-1)*IA+1)*B((J-1)*IB+1) * * W = FM06AS(N,A,IA,B,IB) * * N INTEGER SCALAR; (USER:*); LENGTH OF THE VECTORS A AND B. * IF N <= 0 THE INNER PRODUCT VALUE IS DEFINED TO BE ZERO. * A COMPLEX*8 ARRAY((N-1)*IABS(IA)+1); (USER:*); THE ARRAY * CONTAINING THE 1ST VECTOR. THE FORTRAN CONVENTION OF STORING * REAL AND IMAGINARY PARTS IN ADJACENT WORDS IS ASSUMED. * IA INTEGER SCALAR; (USER:*); THE SUBSCRIPT DISPLACEMENT OF * AN ELEMENT IN THE ARRAY A TO ITS NEIGHBOUR, I.E. THE VECTOR * ELEMENTS ARE IN A(1), A(IA+1), A(2*IA+1),... * IF IA < 0 THE ELEMENTS ARE ASSUMED TO BE STORED IN * A(1-(N-1)*IA), A(1-(N-2)*IA),..., A(1-IA), A(1). * B COMPLEX*8 ARRAY((N-1)*IABS(IA)+1); (USER:*); THE ARRAY * CONTAINING THE SECOND VECTOR. TREAT LIKE A. * IB INTEGER SCALAR; (USER:*); THE SUBSCRIPT DISPLACEMENT OF * AN ELEMENT IN B TO ITS NEIGHBOUR. TREAT LIKE IA. * FM06AS COMPLEX FUNCTION; (*:FM06AS); THE INNER PRODUCT VALUE. * IT IS RETURNED DOUBLE PRECISION, THE REAL PART IN FLT PNT * REG 0 AND THE IMAGINARY PART IN FLT PNT REG 2. * * THIS ROUTINE IS WRITTEN IN FORTRAN. * *--------------------------------------------------------* SUM=(0.0,0.0) DO 10 I=1,N 10 SUM=SUM+A((I-1)*IA+1)*B((I-1)*IB+1) FM06AS=SUM RETURN END COMPLEX FUNCTION FM06BS(N,A,IA,B,IB) IMPLICIT COMPLEX (A-H,O-Z) COMPLEX A(*), B(*) ******************************************************* * * FM06BS - A FUNCTION ROUTINE TO COMPUTE THE VALUE OF THE * INNER PRODUCT, OR DOT PRODUCT, OF A SIGLE PRECISION * COMPLEX VECTORS, ACCUMULATING THE INTERMEDIATE PRODUCTS * DOUBLE PRECISION. THE ELEMENTS OF EACH VECTOR CAN BE * STORED IN ANY FIXED DISPLACEMENT FROM NEIGHBOURING * ELEMENTS. * * COMPUTES: SUM(J=1,N) A((J-1)*IA+1)*B((J-1)*IB+1) * * W = FM06BS(N,A,IA,B,IB) * * N INTEGER SCALAR; (USER:*); LENGTH OF THE VECTORS A AND B. * IF N <= 0 THE INNER PRODUCT VALUE IS DEFINED TO BE ZERO. * A COMPLEX*8 ARRAY((N-1)*IABS(IA)+1); (USER:*); THE ARRAY * CONTAINING THE 1ST VECTOR. THE FORTRAN CONVENTION OF STORING * REAL AND IMAGINARY PARTS IN ADJACENT WORDS IS ASSUMED. * IA INTEGER SCALAR; (USER:*); THE SUBSCRIPT DISPLACEMENT OF * AN ELEMENT IN THE ARRAY A TO ITS NEIGHBOUR, I.E. THE VECTOR * ELEMENTS ARE IN A(1), A(IA+1), A(2*IA+1),... * IF IA < 0 THE ELEMENTS ARE ASSUMED TO BE STORED IN * A(1-(N-1)*IA), A(1-(N-2)*IA),..., A(1-IA), A(1). * B COMPLEX*8 ARRAY((N-1)*IABS(IA)+1); (USER:*); THE ARRAY * CONTAINING THE SECOND VECTOR. TREAT LIKE A. * IB INTEGER SCALAR; (USER:*); THE SUBSCRIPT DISPLACEMENT OF * AN ELEMENT IN B TO ITS NEIGHBOUR. TREAT LIKE IA. * FM06BS COMPLEX FUNCTION; (*:FM06BS); THE INNER PRODUCT VALUE. * IT IS RETURNED DOUBLE PRECISION, THE REAL PART IN FLT PNT * REG 0 AND THE IMAGINARY PART IN FLT PNT REG 2. * * THIS ROUTINE IS WRITTEN IN FORTRAN. * *--------------------------------------------------------* SUM=(0.0,0.0) DO 10 I=1,N 10 SUM=SUM+A((I-1)*IA+1)*CONJG(B((I-1)*IB+1)) FM06BS=SUM RETURN END SUBROUTINE ME08A(A,ALPHA,BETA,N,IA,Q) COMPLEX A(IA,*),ALPHA(*),BETA(*),Q(*),CW,QJ COMPLEX FM06AS,FM06BS REAL PP,ZERO,P5,H REAL S1,PP1 DATA ZERO/0.0/, P5 /0.50/ C************************************************************** C THE REDUCTION OF FULL HERMITIAN MATRIX INTO TRI-DIAGONAL HERMITIAN C FORM IS DONE IN N-2 STEPS.AT THE I TH STEP ZEROS ARE INTRODUCED IN C THE I TH ROW AND COLUMNS WITHOUT DESTROYING PREVIOUSLY PRODUCED ZEROS C C H C AT THE I TH STEP WE HAVE A =P A P WITH P =I-U U /K C I I I-1 I I I I I C C WHERE U =(0,0,...,A (1+S /T ),A ,...,A ) C I I,I+1 I I I,I+2 I,N C 2 N 2 2 2 C S = SUM ] A ] K =S +T AND T = SQRT(]A ] S ) C I J=I+1 I,J I I I I I,I+1 I C C COMPUTATIONAL DETAILS AT THE I TH STAGE ARE (1) FORM S ,K THEN C I I C C H H H C (2) Q =A U /K (3) Q =Q -.5U (U Q /K ) (4) A =A -U Q -Q U C I I-1 I I I I I I I I I I-1 I I I I C C THE VECTORS U BEING APPROPIATELY IN A. IF(N.LE.0)GO TO 90 DO 10 J=1,N ALPHA(J)=A(J,J) DO 10 I=1,J 10 A(I,J)=CONJG(A(J,I)) IF(N-2)90,80,20 20 N2=N-2 DO 60 I=1,N2 I1=I+1 C (1) CW=FM06BS(N-I,A(I,I+1),IA,A(I,I+1),IA) PP=CW PP1=SQRT(PP) BETA(I+1)=CMPLX(-PP1,ZERO) S1=CABS(A(I,I+1)) IF(S1.GT.ZERO)BETA(I+1)=BETA(I+1)*A(I,I+1)/S1 IF(PP.LE.1.D-15)GO TO 60 H=PP+PP1*S1 A(I,I+1)=A(I,I+1)-BETA(I+1) C (2) DO 30 K=I1,N QJ=FM06AS(-(I-K),A(I+1,K),1,A(I,I+1),IA) QJ=FM06BS(N-K,A(K,K+1),IA,A(I,K+1),IA)+CONJG(QJ) 30 Q(K)=QJ/H C (3) CW=FM06AS(N-I,A(I,I+1),IA,Q(I+1),1) PP=CW*P5/H DO 40 K=I1,N 40 Q(K)=Q(K)-PP*CONJG(A(I,K)) C (4) DO 50 K=I1,N 50 CALL ME08B (A(K,K),Q(K),A(I,K),N-K+1,IA*2) 60 CONTINUE DO 70 I=2,N QJ=ALPHA(I) ALPHA(I)=A(I,I) 70 A(I,I)=QJ 80 BETA(N)=A(N-1,N) 90 RETURN END SUBROUTINE SORT(VAL,VEC,N) COMPLEX VEC(N,*), SUM REAL VAL(*) DO 30 I=1,N X=1.E9 DO 10 J=I,N IF(VAL(J).LT.X) THEN K=J X=VAL(J) ENDIF 10 CONTINUE DO 20 J=1,N SUM=VEC(J,K) VEC(J,K)=VEC(J,I) 20 VEC(J,I)=SUM VAL(K)=VAL(I) VAL(I)=X 30 CONTINUE RETURN END mopac7-1.15/fortran/hqrii.f0000644000175000017500000001530211053302063012477 00000000000000 SUBROUTINE HQRII(A,N,M,E,V) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION A(*), E(N), V(N,M) ************************************************************* * * HQRII IS A DIAGONALISATION ROUTINE, WRITTEN BY YOSHITAKA BEPPU OF * NAGOYA UNIVERSITY, JAPAN. * FOR DETAILS SEE 'COMPUTERS & CHEMISTRY' VOL.6 1982. PAGE 000. * * ON INPUT A = MATRIX TO BE DIAGONALISED (PACKED CANONICAL) * N = SIZE OF MATRIX TO BE DIAGONALISED. * M = NUMBER OF EIGENVECTORS NEEDED. * E = ARRAY OF SIZE AT LEAST N * V = ARRAY OF SIZE AT LEAST NMAX*M * * ON OUTPUT E = EIGENVALUES * V = EIGENVECTORS IN ARRAY OF SIZE NMAX*M * ************************************************************************ DIMENSION W(5,MAXPAR) IF(N.LE.1 .OR. M .LE.1 .OR. M .GT. N) THEN IF(N.EQ.1 .AND. M.EQ.1) THEN E(1)=A(1) V(1,1)=1.D0 RETURN ENDIF WRITE(6,'(////10X,''IN HQRII, N ='',I4,'' M ='',I4)')N,M STOP ENDIF * * EPS3 AND EPS ARE MACHINE-PRECISION DEPENDENT * EPS3=1.D-30 LL=(N*(N+1))/2+1 EPS=1.D-8 IORD=-1 NM1=N-1 IF(N.EQ.2) GOTO 90 NM2=N-2 KRANK=0 C HOUSEHOLDER TRANSFORMATION DO 80 K=1,NM2 KP1=K+1 KRANK=KRANK+K W(2,K)=A(KRANK) SUM=0.D0 JRANK=KRANK DO 10 J=KP1,N W(2,J)=A(JRANK+K) JRANK=JRANK+J 10 SUM=W(2,J)**2+SUM S=SIGN(SQRT(SUM),W(2,KP1)) W(1,K)=-S W(2,KP1)=W(2,KP1)+S A(K+KRANK)=W(2,KP1) H=W(2,KP1)*S IF(ABS(H).LT.EPS3) GOTO 80 SUMM=0.D0 IRANK=KRANK DO 50 I=KP1,N SUM=0.D0 DO 20 J=KP1,I 20 SUM=SUM+A(J+IRANK)*W(2,J) IF(I.GE.N) GOTO 40 IP1=I+1 JRANK=I*(I+3)/2 DO 30 J=IP1,N SUM=SUM+A(JRANK)*W(2,J) 30 JRANK=JRANK+J 40 W(1,I)=SUM/H IRANK=IRANK+I 50 SUMM=W(1,I)*W(2,I)+SUMM U=SUMM*0.5D0/H JRANK=KRANK DO 70 J=KP1,N W(1,J)=W(2,J)*U-W(1,J) DO 60 I=KP1,J 60 A(I+JRANK)=W(1,I)*W(2,J)+W(1,J)*W(2,I)+A(I+JRANK) 70 JRANK=JRANK+J 80 A(KRANK)=H 90 W(2,NM1)=A((NM1*(NM1+1))/2) W(2,N)=A((N*(N+1))/2) W(1,NM1)=A(NM1+(N*(N-1))/2) W(1,N)=0.D0 GERSCH=ABS(W(2,1))+ABS(W(1,1)) DO 100 I=1,NM1 100 GERSCH=MAX(ABS(W(2,I+1))+ABS(W(1,I))+ABS(W(1,I+1)),GERSCH) DEL=EPS*GERSCH DO 110 I=1,N W(3,I)=W(1,I) E(I)=W(2,I) 110 V(I,M)=E(I) IF(ABS(DEL).LT.EPS3) GOTO 220 C QR-METHOD WITH ORIGIN SHIFT K=N 120 L=K 130 IF(ABS(W(3,L-1)).LT.DEL) GOTO 140 L=L-1 IF(L.GT.1) GOTO 130 140 IF(L.EQ.K) GOTO 170 WW=(E(K-1)+E(K))*0.5D0 R=E(K)-WW Z=SIGN(SQRT(W(3,K-1)**2+R*R),R)+WW EE=E(L)-Z E(L)=EE FF=W(3,L) R=SQRT(EE*EE+FF*FF) J=L GOTO 160 150 R=SQRT(E(J)**2+W(3,J)**2) W(3,J-1)=S*R EE=E(J)*C FF=W(3,J)*C 160 C=E(J)/R S=W(3,J)/R WW=E(J+1)-Z E(J)=(FF*C+WW*S)*S+EE+Z E(J+1)=C*WW-S*FF J=J+1 IF(J.LT.K) GOTO 150 W(3,K-1)=E(K)*S E(K)=E(K)*C+Z GOTO 120 170 K=K-1 IF(K.GT.1) GOTO 120 * * * * * * * * * * * * * * * AT THIS POINT THE ARRAY 'E' CONTAINS THE UN-ORDERED EIGENVALUES * * * * * * * * * * * * * * C STRAIGHT SELECTION SORT OF EIGENVALUES SORTER=1.D0 IF(IORD.LT.0) SORTER=-1.D0 J=N 180 L=1 II=1 LL=1 DO 200 I=2,J IF((E(I)-E(L))*SORTER .GT. 0.D0) GOTO 190 L=I GOTO 200 190 II=I LL=L 200 CONTINUE IF(II.EQ.LL) GOTO 210 WW=E(LL) E(LL)=E(II) E(II)=WW 210 J=II-1 IF(J.GE.2) GOTO 180 220 IF(M.EQ.0) RETURN *************** * ORDERING OF EIGENVALUES COMPLETE. *************** C INVERSE-ITERATION FOR EIGENVECTORS EPS1=1.D-5 EPS2=0.05D0 RN=0.D0 RA=EPS*0.6180339887485D0 C 0.618... IS THE FIBONACCI NUMBER (-1+SQRT(5))/2. IG=1 DO 450 I=1,M IM1=I-1 DO 230 J=1,N W(3,J)=0.D0 W(4,J)=W(1,J) W(5,J)=V(J,M)-E(I) RN=RN+RA IF(RN.GE.EPS) RN=RN-EPS 230 V(J,I)=RN DO 260 J=1,NM1 IF(ABS(W(5,J)).GE.ABS(W(1,J))) GOTO 240 W(2,J)=-W(5,J)/W(1,J) W(5,J)=W(1,J) T=W(5,J+1) W(5,J+1)=W(4,J) W(4,J)=T W(3,J)=W(4,J+1) IF(ABS(W(3,J)).LT.EPS3) W(3,J)=DEL W(4,J+1)=0.D0 GOTO 250 240 IF(ABS(W(5,J)).LT.EPS3) W(5,J)=DEL W(2,J)=-W(1,J)/W(5,J) 250 W(4,J+1)=W(3,J)*W(2,J)+W(4,J+1) 260 W(5,J+1)=W(4,J)*W(2,J)+W(5,J+1) IF(ABS(W(5,N)) .LT. EPS3) W(5,N)=DEL DO 320 ITERE=1,5 IF(ITERE.EQ.1) GOTO 280 DO 270 J=1,NM1 IF(ABS(W(3,J)).LT.EPS3) GOTO 270 T=V(J,I) V(J,I)=V(J+1,I) V(J+1,I)=T 270 V(J+1,I)=V(J,I)*W(2,J)+V(J+1,I) 280 V(N,I)=V(N,I)/W(5,N) V(NM1,I)=(V(NM1,I)-V(N,I)*W(4,NM1))/W(5,NM1) VN=MAX(ABS(V(N,I)),ABS(V(NM1,I)),1.D-20) IF(N.EQ.2) GOTO 300 K=NM2 290 V(K,I)=(V(K,I)-V(K+1,I)*W(4,K)-V(K+2,I)*W(3,K))/W(5,K) VN=MAX(ABS(V(K,I)),VN,1.D-20) K=K-1 IF(K.GE.1) GOTO 290 300 S=EPS1/VN DO 310 J=1,N 310 V(J,I)=V(J,I)*S IF(ITERE.GT.1 .AND. VN.GT.1) GOTO 330 320 CONTINUE C TRANSFORMATION OF EIGENVECTORS 330 IF(N.EQ.2) GOTO 380 KRANK=NM2*(N+1)/2 KPIV=NM2*NM1/2 DO 370 K=NM2,1,-1 KP1=K+1 IF(ABS(A(KPIV)).LE.EPS3) GOTO 360 SUM=0.D0 DO 340 KK=KP1,N SUM=SUM+A(KRANK)*V(KK,I) 340 KRANK=KRANK+KK S=-SUM/A(KPIV) DO 350 KK=N,KP1,-1 KRANK=KRANK-KK 350 V(KK,I)=A(KRANK)*S+V(KK,I) 360 KPIV=KPIV-K 370 KRANK=KRANK-KP1 380 DO 390 J=IG,I IF(ABS(E(J)-E(I)) .LT. EPS2) GOTO 400 390 CONTINUE J=I 400 IG=J IF(IG .EQ. I) GOTO 430 C RE-ORTHOGONALISATION DO 420 K=IG,IM1 SUM=0.D0 DO 410 J=1,N 410 SUM=V(J,K)*V(J,I)+SUM S=-SUM DO 420 J=1,N 420 V(J,I)=V(J,K)*S+V(J,I) C NORMALISATION 430 SUM=1.D-24 DO 440 J=1,N 440 SUM=SUM+V(J,I)**2 SINV=1.D0/SQRT(SUM) DO 450 J=1,N 450 V(J,I)=V(J,I)*SINV RETURN END mopac7-1.15/fortran/mopac7lib.f0000644000175000017500000001447311053302063013250 00000000000000C C Notice of Public Domain nature of MOPAC C C 'This computer program is a work of the United States C Government and as such is not subject to protection by C copyright (17 U.S.C. # 105.) Any person who fraudulently C places a copyright notice or does any other act contrary C to the provisions of 17 U.S. Code 506(c) shall be subject C to the penalties provided therein. This notice shall not C be altered or removed from this software and is to be on C all reproductions.' C SUBROUTINE LM7START() C *** this is the original MOPAC main program. C *** since we already have a main program, we have changed it into a subroutine. IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /SCFTYP/ EMIN, LIMSCF COMMON /KEYWRD/ KEYWRD COMMON /OKMANY/ ISOK COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /MESAGE/ IFLEPO,ISCF COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ATHEAT/ ATHEAT COMMON /LAST / LAST COMMON /ATOMIC/ EISOL(107),EHEAT(107) COMMON /NUMCAL/ NUMCAL C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /PATH / LATOM,LPARAM,REACT(200) C COSMO change LOGICAL ISEPS, USEPS , UPDA COMMON /ISEPS/ ISEPS, USEPS, UPDA C end of COSMO change CHARACTER*241 KEYWRD, GETNAM*80 LOGICAL ISOK, LIMSCF DATA NUMCAL /0/ DATA ISOK /.TRUE./ CALL GETDAT C C CLOSE UNIT 6 IN CASE IT WAS ALREADY PRE-ASSIGNED C C *** don't open unit 6; the output is done to STDOUT instead of file... C CLOSE (6) C OPEN(UNIT=6,FILE=GETNAM('FOR006'),STATUS='NEW') C REWIND 6 C# CALL TIMER('FIRST LINE') C *** update logic for NUMCAL and ISOK is changed; initialized using DATA commands above. C NUMCAL=0 C ISOK=.TRUE. 10 NUMCAL=NUMCAL+1 C TIME0=SECOND() C C READ AND CHECK INPUT FILE, EXIT IF NECESSARY. C WRITE INPUT FILE TO UNIT 6 AS FEEDBACK TO USER C 20 CALL READMO EMIN=0.D0 C# CALL TIMER('AFTER READ') C *** text outputs and jumps in code are removed here... C IF(NATOMS.EQ.0) GOTO 50 C IF(INDEX(KEYWRD,'AUTHOR') .NE. 0) THEN C WRITE(6,'(10X,'' MOPAC - A GENERAL MOLECULAR ORBITAL PACKAGE'', C 1/ ,10X,'' ORIGINAL VERSION WRITTEN IN 1983'')') C WRITE(6,'(10X,'' BY JAMES J. P. STEWART AT THE'',/ C 1 ,10X,'' UNIVERSITY OF TEXAS AT AUSTIN'',/ C 2 ,10X,'' AUSTIN, TEXAS, 78712'')') C WRITE(6,'(10X,'' MODIFIED TO DO ESP CALCULATIONS BY'' C 1 ,10X,'' BRENT H. BESLER AND K. M. MERZ JR. 1989'')') C ENDIF C C INITIALIZE CALCULATION AND WRITE CALCULATION INDEPENDENT INFO C C IF(INDEX(KEYWRD,'0SCF') .NE. 0) THEN C WRITE(6,'(A)')' GEOMETRY IN MOPAC Z-MATRIX FORMAT' CALL GEOUT(6) C IF(INDEX(KEYWRD,' AIGOUT').NE.0)THEN C WRITE(6,'(//,A)')' GEOMETRY IN GAUSSIAN Z-MATRIX FORMAT' C CALL WRTTXT(6) C CALL GEOUTG(6) C ENDIF C GOTO 50 C ENDIF CALL MOLDAT(0) C *** ok, initialization is now done, and we can stop here... RETURN END SUBROUTINE LM7STOP() C *** this is the end part of the original MOPAC main program. C *** this is a subroutine that will run the mopac down... IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /SCFTYP/ EMIN, LIMSCF COMMON /KEYWRD/ KEYWRD COMMON /OKMANY/ ISOK COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /MESAGE/ IFLEPO,ISCF COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ATHEAT/ ATHEAT COMMON /LAST / LAST COMMON /ATOMIC/ EISOL(107),EHEAT(107) COMMON /NUMCAL/ NUMCAL C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /PATH / LATOM,LPARAM,REACT(200) C COSMO change LOGICAL ISEPS, USEPS , UPDA COMMON /ISEPS/ ISEPS, USEPS, UPDA C end of COSMO change CHARACTER*241 KEYWRD, GETNAM*80 LOGICAL ISOK, LIMSCF 40 LAST=1 C IF(IFLEPO.GE.0)CALL WRITMO(TIME0, ESCF) C IF(INDEX(KEYWRD,'POLAR') .NE. 0) THEN C CALL POLAR C ENDIF C IF(INDEX(KEYWRD,' ESP') .NE. 0)THEN C IF YOU WANT TO USE THE ESP PROGRAM, UNCOMMENT THE LINE C "C# CALL ESP", ADD "ESP, " TO MOPAC.OPT, THEN COMPILE ESP AND C MNDO, AND RELINK. C CALL ESP C ENDIF 50 TIM=SECOND()-TIME0 LIMSCF=.FALSE. WRITE(6,'(///,'' TOTAL CPU TIME: '',F16.2,'' SECONDS'')') TIM WRITE(6,'(/,'' == MOPAC DONE =='')') C IF(ISOK) GOTO 10 END SUBROUTINE GETDAT CHARACTER*80 LINE, GETNAM ************************************************************************ * * GETDAT READS ALL THE DATA IN ON CHANNEL 2, AND WRITES IT TO SCRATCH * CHANNEL 5. THIS WAY THE ORIGINAL DATA-SET IS FREED UP AS SOON AS * THE JOB STARTS. * ************************************************************************ SAVE I DATA I/0/ C# WRITE(6,*)GETNAM('FOR005') OPEN(UNIT=2,FILE=GETNAM('FOR005'),STATUS='UNKNOWN') C C CLOSE UNIT 5 IN CASE IT WAS ALREADY PRE-ASSIGNED. C CLOSE (5) OPEN(UNIT=5,STATUS='SCRATCH') REWIND 5 REWIND 2 10 READ(2,'(A80)',END=20,ERR=20)LINE I=I+1 WRITE(5,'(A80)')LINE GOTO 10 20 REWIND 5 IF(I.LT.3)THEN WRITE(6,'(A)')' INPUT FILE MISSING OR EMPTY' STOP ENDIF CLOSE (2) END mopac7-1.15/fortran/quadr.f0000644000175000017500000000124711053302063012502 00000000000000 SUBROUTINE QUADR(F0,F1,F2, X1,X2, A,B,C) IMPLICIT DOUBLE PRECISION (A-H,O-Z) **************************************************** * * * QUADR CALCULATES THE A, B AND C IN THE EQUNS. * * * * A = F0 * * A + B.X0 + C.X0**2 = F1 * * A + B.X2 + C.X2**2 = F2 * * * **************************************************** C=(X2*(F1-F0)-X1*(F2-F0))/(X2*X1**2-X1*X2**2) B=(F1-F0-C*X1**2)/X1 A=F0 RETURN END mopac7-1.15/fortran/datin.f0000644000175000017500000001100311053302063012454 00000000000000 SUBROUTINE DATIN IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' CHARACTER NUMBRS(0:9)*1, PARTYP(25)*5, FILES*64, DUMMY*50, 1 KEYWRD*241, TEXT*50, TXTNEW*50, ELEMNT(107)*2, 2 GETNAM*80 COMMON /ATHEAT/ ATHEAT 1 /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 2 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 3 NCLOSE,NOPEN,NDUMY,FRACT COMMON /ATOMIC/ EISOL(107),EHEAT(107) COMMON /KEYWRD/ KEYWRD DIMENSION IJPARS(5,1000), PARSIJ(1000) SAVE NUMBRS, PARTYP, ELEMNT DATA NUMBRS/' ','1','2','3','4','5','6','7','8','9'/ DATA PARTYP/'USS ','UPP ','UDD ','ZS ','ZP ','ZD ', 1 'BETAS','BETAP','BETAD','GSS ','GSP ','GPP ','GP2 ', 2 'HSP ','AM1 ','EXPC ','GAUSS','ALP ','GSD ','GPD ', 3 'GDD ','FN1 ','FN2 ','FN3 ','ORB '/ DATA (ELEMNT(I),I=1,107)/'H ','HE', 1 'LI','BE','B ','C ','N ','O ','F ','NE', 2 'NA','MG','AL','SI','P ','S ','CL','AR', 3 'K ','CA','SC','TI','V ','CR','MN','FE','CO','NI','CU', 4 'ZN','GA','GE','AS','SE','BR','KR', 5 'RB','SR','Y ','ZR','NB','MO','TC','RU','RH','PD','AG', 6 'CD','IN','SN','SB','TE','I ','XE', 7 'CS','BA','LA','CE','PR','ND','PM','SM','EU','GD','TB','DY', 8 'HO','ER','TM','YB','LU','HF','TA','W ','RE','OS','IR','PT', 9 'AU','HG','TL','PB','BI','PO','AT','RN', 1 'FR','RA','AC','TH','PA','U ','NP','PU','AM','CM','BK','CF','XX', 2 'FM','MD','CB','++','+','--','-','TV'/ I=INDEX(KEYWRD,'EXTERNAL=')+9 J=INDEX(KEYWRD(I:),' ')+I-1 FILES=GETNAM(KEYWRD(I:J)) WRITE(6,'(//5X,'' PARAMETER TYPE ELEMENT PARAMETER'')') OPEN(14,STATUS='UNKNOWN',FILE=FILES) I=0 NPARAS=0 10 READ(14,'(A40)',ERR=90,END=90)TEXT NPARAS=NPARAS+1 IF(TEXT.EQ.' ')GOTO 90 IF(INDEX(TEXT,'END').NE.0)GOTO 90 ILOWA = ICHAR('a') ILOWZ = ICHAR('z') ICAPA = ICHAR('A') ************************************************************************ DO 20 I=1,50 ILINE=ICHAR(TEXT(I:I)) IF(ILINE.GE.ILOWA.AND.ILINE.LE.ILOWZ) THEN TEXT(I:I)=CHAR(ILINE+ICAPA-ILOWA) ENDIF 20 CONTINUE ************************************************************************ IF(INDEX(TEXT,'END') .NE. 0) GOTO 90 DO 30 J=1,25 IF(J.GT.21) THEN IT=INDEX(TEXT,'FN') TXTNEW = TEXT(1:IT+2) IF(INDEX(TXTNEW,PARTYP(J)) .NE. 0) GOTO 40 ENDIF IF(INDEX(TEXT,PARTYP(J)) .NE. 0) GOTO 40 30 CONTINUE WRITE(6,'('' FAULTY LINE:'',A)')TXTNEW WRITE(6,'('' FAULTY LINE:'',A)')TEXT WRITE(6,'('' NAME NOT FOUND'')') STOP 40 IPARAM=J IF(IPARAM.GT.21) THEN I=INDEX(TEXT,'FN') KFN=READA(TEXT,I+3) ELSE KFN=0 I=INDEX(TEXT,PARTYP(J)) ENDIF K=INDEX(TEXT(I:),' ')+1 DUMMY=TEXT(K:) TEXT=DUMMY DO 50 J=1,107 50 IF(INDEX(TEXT,' '//ELEMNT(J)) .NE. 0) GOTO 60 WRITE(6,'('' ELEMENT NOT FOUND '')') WRITE(6,*)' FAULTY LINE: "'//TEXT//'"' STOP 60 IELMNT=J PARAM=READA(TEXT,INDEX(TEXT,ELEMNT(J))) DO 70 I=1,LPARS IF(IJPARS(1,I).EQ.KFN.AND.IJPARS(2,I).EQ.IELMNT.AND. 1IJPARS(3,I).EQ.IPARAM) GOTO 80 70 CONTINUE LPARS=LPARS+1 I=LPARS 80 IJPARS(1,I)=KFN IJPARS(2,I)=IELMNT IJPARS(3,I)=IPARAM PARSIJ(I)=PARAM GOTO 10 90 CONTINUE IF(NPARAS.EQ.0)THEN WRITE(6,'(//10X,A)')' EXTERNAL PARAMETERS FILE MISSING OR EMPTY 1' STOP ENDIF CLOSE(14) DO 120 J=1,107 DO 110 K=1,25 DO 100 I=1,LPARS IPARAM=IJPARS(3,I) KFN=IJPARS(1,I) IELMNT=IJPARS(2,I) IF(IPARAM.NE.K) GOTO 100 IF(IELMNT.NE.J) GOTO 100 PARAM=PARSIJ(I) IF(KFN.NE.0)THEN WRITE(6,'(10X,A6,11X,A2,F17.6)') 1PARTYP(IPARAM)(:3)//NUMBRS(KFN)//' ', 2ELEMNT(IELMNT),PARAM ELSE WRITE(6,'(10X,A6,11X,A2,F17.6)') 1PARTYP(IPARAM)//NUMBRS(KFN), 2ELEMNT(IELMNT),PARAM ENDIF CALL UPDATE(IPARAM,IELMNT,PARAM,KFN) 100 CONTINUE 110 CONTINUE 120 CONTINUE CALL MOLDAT(1) CALL CALPAR ATHEAT=0.D0 ETH=0.D0 DO 130 I=1,NUMAT NI=NAT(I) ATHEAT=ATHEAT+EHEAT(NI) 130 ETH=ETH+EISOL(NI) ATHEAT=ATHEAT-ETH*23.061D0 RETURN END mopac7-1.15/fortran/dgemv.f0000644000175000017500000001647111053302063012475 00000000000000 SUBROUTINE DGEMV ( TRANS, M, N, ALPHA, A, LDA, X, INCX, $ BETA, Y, INCY ) * .. SCALAR ARGUMENTS .. DOUBLE PRECISION ALPHA, BETA INTEGER INCX, INCY, LDA, M, N CHARACTER*1 TRANS * .. ARRAY ARGUMENTS .. DOUBLE PRECISION A( LDA, * ), X( * ), Y( * ) * .. * * PURPOSE * ======= * * DGEMV PERFORMS ONE OF THE MATRIX-VECTOR OPERATIONS * * Y := ALPHA*A*X + BETA*Y, OR Y := ALPHA*A'*X + BETA*Y, * * WHERE ALPHA AND BETA ARE SCALARS, X AND Y ARE VECTORS AND A IS AN * M BY N MATRIX. * * PARAMETERS * ========== * * TRANS - CHARACTER*1. * ON ENTRY, TRANS SPECIFIES THE OPERATION TO BE PERFORMED AS * FOLLOWS: * * TRANS = 'N' OR 'N' Y := ALPHA*A*X + BETA*Y. * * TRANS = 'T' OR 'T' Y := ALPHA*A'*X + BETA*Y. * * TRANS = 'C' OR 'C' Y := ALPHA*A'*X + BETA*Y. * * UNCHANGED ON EXIT. * * M - INTEGER. * ON ENTRY, M SPECIFIES THE NUMBER OF ROWS OF THE MATRIX A. * M MUST BE AT LEAST ZERO. * UNCHANGED ON EXIT. * * N - INTEGER. * ON ENTRY, N SPECIFIES THE NUMBER OF COLUMNS OF THE MATRIX A. * N MUST BE AT LEAST ZERO. * UNCHANGED ON EXIT. * * ALPHA - DOUBLE PRECISION. * ON ENTRY, ALPHA SPECIFIES THE SCALAR ALPHA. * UNCHANGED ON EXIT. * * A - DOUBLE PRECISION ARRAY OF DIMENSION ( LDA, N ). * BEFORE ENTRY, THE LEADING M BY N PART OF THE ARRAY A MUST * CONTAIN THE MATRIX OF COEFFICIENTS. * UNCHANGED ON EXIT. * * LDA - INTEGER. * ON ENTRY, LDA SPECIFIES THE FIRST DIMENSION OF A AS DECLARED * IN THE CALLING (SUB) PROGRAM. LDA MUST BE AT LEAST * MAX( 1, M ). * UNCHANGED ON EXIT. * * X - DOUBLE PRECISION ARRAY OF DIMENSION AT LEAST * ( 1 + ( N - 1 )*ABS( INCX ) ) WHEN TRANS = 'N' OR 'N' * AND AT LEAST * ( 1 + ( M - 1 )*ABS( INCX ) ) OTHERWISE. * BEFORE ENTRY, THE INCREMENTED ARRAY X MUST CONTAIN THE * VECTOR X. * UNCHANGED ON EXIT. * * INCX - INTEGER. * ON ENTRY, INCX SPECIFIES THE INCREMENT FOR THE ELEMENTS OF * X. INCX MUST NOT BE ZERO. * UNCHANGED ON EXIT. * * BETA - DOUBLE PRECISION. * ON ENTRY, BETA SPECIFIES THE SCALAR BETA. WHEN BETA IS * SUPPLIED AS ZERO THEN Y NEED NOT BE SET ON INPUT. * UNCHANGED ON EXIT. * * Y - DOUBLE PRECISION ARRAY OF DIMENSION AT LEAST * ( 1 + ( M - 1 )*ABS( INCY ) ) WHEN TRANS = 'N' OR 'N' * AND AT LEAST * ( 1 + ( N - 1 )*ABS( INCY ) ) OTHERWISE. * BEFORE ENTRY WITH BETA NON-ZERO, THE INCREMENTED ARRAY Y * MUST CONTAIN THE VECTOR Y. ON EXIT, Y IS OVERWRITTEN BY THE * UPDATED VECTOR Y. * * INCY - INTEGER. * ON ENTRY, INCY SPECIFIES THE INCREMENT FOR THE ELEMENTS OF * Y. INCY MUST NOT BE ZERO. * UNCHANGED ON EXIT. * * * LEVEL 2 BLAS ROUTINE. * * -- WRITTEN ON 22-OCTOBER-1986. * JACK DONGARRA, ARGONNE NATIONAL LAB. * JEREMY DU CROZ, NAG CENTRAL OFFICE. * SVEN HAMMARLING, NAG CENTRAL OFFICE. * RICHARD HANSON, SANDIA NATIONAL LABS. * * * .. PARAMETERS .. DOUBLE PRECISION ONE , ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. LOCAL SCALARS .. DOUBLE PRECISION TEMP INTEGER I, INFO, IX, IY, J, JX, JY, KX, KY, LENX, LENY * .. EXTERNAL FUNCTIONS .. LOGICAL LSAME EXTERNAL LSAME * .. EXTERNAL SUBROUTINES .. EXTERNAL XERBLA * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * INFO = 0 IF ( .NOT.LSAME( TRANS, 'N' ).AND. $ .NOT.LSAME( TRANS, 'T' ).AND. $ .NOT.LSAME( TRANS, 'C' ) )THEN INFO = 1 ELSE IF( M.LT.0 )THEN INFO = 2 ELSE IF( N.LT.0 )THEN INFO = 3 ELSE IF( LDA.LT.MAX( 1, M ) )THEN INFO = 6 ELSE IF( INCX.EQ.0 )THEN INFO = 8 ELSE IF( INCY.EQ.0 )THEN INFO = 11 END IF IF( INFO.NE.0 )THEN CALL XERBLA( 'DGEMV ', INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE. * IF( ( M.EQ.0 ).OR.( N.EQ.0 ).OR. $ ( ( ALPHA.EQ.ZERO ).AND.( BETA.EQ.ONE ) ) ) $ RETURN * * SET LENX AND LENY, THE LENGTHS OF THE VECTORS X AND Y, AND SET * UP THE START POINTS IN X AND Y. * IF( LSAME( TRANS, 'N' ) )THEN LENX = N LENY = M ELSE LENX = M LENY = N END IF IF( INCX.GT.0 )THEN KX = 1 ELSE KX = 1 - ( LENX - 1 )*INCX END IF IF( INCY.GT.0 )THEN KY = 1 ELSE KY = 1 - ( LENY - 1 )*INCY END IF * * START THE OPERATIONS. IN THIS VERSION THE ELEMENTS OF A ARE * ACCESSED SEQUENTIALLY WITH ONE PASS THROUGH A. * * FIRST FORM Y := BETA*Y. * IF( BETA.NE.ONE )THEN IF( INCY.EQ.1 )THEN IF( BETA.EQ.ZERO )THEN DO 10, I = 1, LENY Y( I ) = ZERO 10 CONTINUE ELSE DO 20, I = 1, LENY Y( I ) = BETA*Y( I ) 20 CONTINUE END IF ELSE IY = KY IF( BETA.EQ.ZERO )THEN DO 30, I = 1, LENY Y( IY ) = ZERO IY = IY + INCY 30 CONTINUE ELSE DO 40, I = 1, LENY Y( IY ) = BETA*Y( IY ) IY = IY + INCY 40 CONTINUE END IF END IF END IF IF( ALPHA.EQ.ZERO ) $ RETURN IF( LSAME( TRANS, 'N' ) )THEN * * FORM Y := ALPHA*A*X + Y. * JX = KX IF( INCY.EQ.1 )THEN DO 60, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) DO 50, I = 1, M Y( I ) = Y( I ) + TEMP*A( I, J ) 50 CONTINUE END IF JX = JX + INCX 60 CONTINUE ELSE DO 80, J = 1, N IF( X( JX ).NE.ZERO )THEN TEMP = ALPHA*X( JX ) IY = KY DO 70, I = 1, M Y( IY ) = Y( IY ) + TEMP*A( I, J ) IY = IY + INCY 70 CONTINUE END IF JX = JX + INCX 80 CONTINUE END IF ELSE * * FORM Y := ALPHA*A'*X + Y. * JY = KY IF( INCX.EQ.1 )THEN DO 100, J = 1, N TEMP = ZERO DO 90, I = 1, M TEMP = TEMP + A( I, J )*X( I ) 90 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP JY = JY + INCY 100 CONTINUE ELSE DO 120, J = 1, N TEMP = ZERO IX = KX DO 110, I = 1, M TEMP = TEMP + A( I, J )*X( IX ) IX = IX + INCX 110 CONTINUE Y( JY ) = Y( JY ) + ALPHA*TEMP JY = JY + INCY 120 CONTINUE END IF END IF * RETURN * * END OF DGEMV . * END mopac7-1.15/fortran/swap.f0000644000175000017500000000342511053302064012341 00000000000000 SUBROUTINE SWAP(C,N,MDIM,NOCC,IFILL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C(MDIM,MDIM) C****************************************************************** C C SWAP ENSURES THAT A NAMED MOLECULAR ORBITAL IFILL IS FILLED C ON INPUT C C = EIGENVECTORS IN A MDIM*MDIM MATRIX C N = NUMBER OF ORBITALS C NOCC = NUMBER OF OCCUPIED ORBITALS C IFILL = FILLED ORBITAL C****************************************************************** COMMON /SWAP0/ PSI(MAXORB), STDPSI(MAXORB) IF(IFILL.GT.0) GOTO 20 C C WE NOW DEFINE THE FILLED ORBITAL C IFILL=-IFILL DO 10 I=1,N STDPSI(I)=C(I,IFILL) 10 PSI(I)=C(I,IFILL) RETURN 20 CONTINUE C C FIRST FIND THE LOCATION OF IFILL C SUM=0.D0 DO 30 I=1,N 30 SUM=SUM+PSI(I)*C(I,IFILL) IF(ABS(SUM).GT.0.7071D0) GOTO 90 C C IFILL HAS MOVED! C SUMMAX=0.D0 DO 50 IFILL=1,N SUM=0.D0 DO 40 I=1,N 40 SUM=SUM+STDPSI(I)*C(I,IFILL) SUM=ABS(SUM) IF(SUM.GT.SUMMAX)JFILL=IFILL IF(SUM.GT.SUMMAX)SUMMAX=SUM IF(SUM.GT.0.7071D0) GOTO 90 50 CONTINUE DO 70 IFILL=1,N SUM=0.D0 DO 60 I=1,N 60 SUM=SUM+PSI(I)*C(I,IFILL) SUM=ABS(SUM) IF(SUM.GT.SUMMAX)JFILL=IFILL IF(SUM.GT.SUMMAX)SUMMAX=SUM IF(SUM.GT.0.7071D0) GOTO 90 70 CONTINUE WRITE(6,80)SUMMAX,JFILL 80 FORMAT(/,' CAUTION !!! SUM IN SWAP VERY SMALL, SUMMAX =',F10.5, 1' JFILL=',I3) IFILL=JFILL 90 CONTINUE IF(IFILL.LE.NOCC) RETURN C C ITS EMPTY, SO SWAP IT WITH THE HIGHEST FILLED C DO 100 I=1,N X=C(I,NOCC) C(I,NOCC)=C(I,IFILL) C(I,IFILL)=X 100 CONTINUE RETURN END mopac7-1.15/fortran/delmol.f0000644000175000017500000001724311053302063012645 00000000000000 SUBROUTINE DELMOL(COORD,I,J,NI,NJ,IA,ID,JA,JD,IX,RIJ,TOMB,ISP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION COORD(3,25) COMMON /DERIVS/ DS(16),DG(22),DR(100),TDX(3),TDY(3),TDZ(3) COMMON /EXTRA/ G(22),TX(3),TY(3),TZ(3) IF(NI.GT.1.OR.NJ.GT.1) CALL ROTAT(COORD,I,J,IX,RIJ,TOMB,2) IB=MAX(IA,ID) JB=MAX(JA,JD) DO 10 K=IA,IB KK=K-IA DO 10 L=K,IB LL=L-IA DO 10 M=JA,JB MM=M-JA DO 10 N=M,JB NN=N-JA ISP=ISP+1 IF(NN.EQ.0)THEN IF(LL.EQ.0) THEN C (SS/SS) DR(ISP)=DG(1) ELSEIF(KK.EQ.0) THEN C (SP/SS) DR(ISP)=DG(2)*TX(LL)+G(2)*TDX(LL) ELSE C (PP/SS) DR(ISP)=DG(3)*TX(KK)*TX(LL) 1 +G(3)*(TDX(KK)*TX(LL)+TX(KK)*TDX(LL)) 2 +DG(4)*(TY(KK)*TY(LL)+TZ(KK)*TZ(LL)) 3 +G(4)*(TDY(KK)*TY(LL)+TY(KK)*TDY(LL) 4 +TDZ(KK)*TZ(LL)+TZ(KK)*TDZ(LL)) ENDIF ELSEIF(MM.EQ.0) THEN IF(LL.EQ.0) THEN C (SS/SP) DR(ISP)=DG(5)*TX(NN)+G(5)*TDX(NN) ELSEIF(KK.EQ.0) THEN C (SP/SP) DR(ISP)=DG(6)*TX(LL)*TX(NN) 1 +G(6)*(TDX(LL)*TX(NN)+TX(LL)*TDX(NN)) 2 +DG(7)*(TY(LL)*TY(NN)+TZ(LL)*TZ(NN)) 3 +G(7)*(TDY(LL)*TY(NN)+TY(LL)*TDY(NN) 4 +TDZ(LL)*TZ(NN)+TZ(LL)*TDZ(NN)) ELSE C (PP/SP) DR(ISP)=DG(8)*TX(KK)*TX(LL)*TX(NN) 1 +G(8)*(TDX(KK)*TX(LL)*TX(NN)+TX(KK)*TDX(LL)*TX(NN) 2 +TX(KK)*TX(LL)*TDX(NN)) 3 +DG(9)*(TY(KK)*TY(LL)+TZ(KK)*TZ(LL))*TX(NN) 4 +G(9)*((TDY(KK)*TY(LL)+TY(KK)*TDY(LL) 5 +TDZ(KK)*TZ(LL)+TZ(KK)*TDZ(LL))*TX(NN) 6 +(TY(KK)*TY(LL)+TZ(KK)*TZ(LL))*TDX(NN)) 7 +DG(10)*(TX(KK)*(TY(LL)*TY(NN)+TZ(LL)*TZ(NN)) 8 +TX(LL)*(TY(KK)*TY(NN)+TZ(KK)*TZ(NN))) 9 +G(10)*(TDX(KK)*(TY(LL)*TY(NN)+TZ(LL)*TZ(NN)) 1 +TDX(LL)*(TY(KK)*TY(NN)+TZ(KK)*TZ(NN)) 2 +TX(KK)*(TDY(LL)*TY(NN)+TY(LL)*TDY(NN) 3 +TDZ(LL)*TZ(NN)+TZ(LL)*TDZ(NN)) 4 +TX(LL)*(TDY(KK)*TY(NN)+TY(KK)*TDY(NN) 5 +TDZ(KK)*TZ(NN)+TZ(KK)*TDZ(NN))) ENDIF ELSEIF(LL.EQ.0) THEN C (SS/PP) DR(ISP)=DG(11)*TX(MM)*TX(NN) 1 +G(11)*(TDX(MM)*TX(NN)+TX(MM)*TDX(NN)) 2 +DG(12)*(TY(MM)*TY(NN)+TZ(MM)*TZ(NN)) 3 +G(12)*(TDY(MM)*TY(NN)+TY(MM)*TDY(NN) 4 +TDZ(MM)*TZ(NN)+TZ(MM)*TDZ(NN)) ELSEIF(KK.EQ.0) THEN C (SP/PP) DR(ISP)=DG(13)*TX(LL)*TX(MM)*TX(NN) 1 +G(13)*(TDX(LL)*TX(MM)*TX(NN)+TX(LL)*TDX(MM)*TX(NN) 2 +TX(LL)*TX(MM)*TDX(NN)) 3 +DG(14)*TX(LL)*(TY(MM)*TY(NN)+TZ(MM)*TZ(NN)) 4 +G(14)*(TDX(LL)*(TY(MM)*TY(NN)+TZ(MM)*TZ(NN)) 5 +TX(LL)*(TDY(MM)*TY(NN)+TY(MM)*TDY(NN) 6 +TDZ(MM)*TZ(NN)+TZ(MM)*TDZ(NN))) 7 +DG(15)*(TY(LL)*(TY(MM)*TX(NN)+TY(NN)*TX(MM)) 8 +TZ(LL)*(TZ(MM)*TX(NN)+TZ(NN)*TX(MM))) 9 +G(15)*(TDY(LL)*(TY(MM)*TX(NN)+TY(NN)*TX(MM)) 1 +TDZ(LL)*(TZ(MM)*TX(NN)+TZ(NN)*TX(MM)) 2 +TY(LL)*(TDY(MM)*TX(NN)+TY(MM)*TDX(NN) 3 +TDY(NN)*TX(MM)+TY(NN)*TDX(MM)) 4 +TZ(LL)*(TDZ(MM)*TX(NN)+TZ(MM)*TDX(NN) 5 +TDZ(NN)*TX(MM)+TZ(NN)*TDX(MM))) ELSE C (PP/PP) DR(ISP)=DG(16)*TX(KK)*TX(LL)*TX(MM)*TX(NN) 1 +G(16)*(TDX(KK)*TX(LL)*TX(MM)*TX(NN) 2 +TX(KK)*TDX(LL)*TX(MM)*TX(NN) 3 +TX(KK)*TX(LL)*TDX(MM)*TX(NN) 4 +TX(KK)*TX(LL)*TX(MM)*TDX(NN)) 5 +DG(17)*(TY(KK)*TY(LL)+TZ(KK)*TZ(LL))*TX(MM)*TX(NN) 6 +G(17)*((TDY(KK)*TY(LL)+TY(KK)*TDY(LL) 7 +TDZ(KK)*TZ(LL)+TZ(KK)*TDZ(LL))*TX(MM)*TX(NN) 8 +(TY(KK)*TY(LL)+TZ(KK)*TZ(LL)) 9 *(TDX(MM)*TX(NN)+TX(MM)*TDX(NN))) 1 +DG(18)*TX(KK)*TX(LL)*(TY(MM)*TY(NN)+TZ(MM)*TZ(NN)) 2 +G(18)*((TDX(KK)*TX(LL)+TX(KK)*TDX(LL)) 3 *(TY(MM)*TY(NN)+TZ(MM)*TZ(NN)) 4 +TX(KK)*TX(LL)*(TDY(MM)*TY(NN)+TY(MM)*TDY(NN) 5 +TDZ(MM)*TZ(NN)+TZ(MM)*TDZ(NN))) DR(ISP)=DR(ISP) 1 +DG(19)*(TY(KK)*TY(LL)*TY(MM)*TY(NN) 2 +TZ(KK)*TZ(LL)*TZ(MM)*TZ(NN)) 3 +G(19)*(TDY(KK)*TY(LL)*TY(MM)*TY(NN) 4 +TY(KK)*TDY(LL)*TY(MM)*TY(NN) 5 +TY(KK)*TY(LL)*TDY(MM)*TY(NN) 6 +TY(KK)*TY(LL)*TY(MM)*TDY(NN) 7 +TDZ(KK)*TZ(LL)*TZ(MM)*TZ(NN) 8 +TZ(KK)*TDZ(LL)*TZ(MM)*TZ(NN) 9 +TZ(KK)*TZ(LL)*TDZ(MM)*TZ(NN) 1 +TZ(KK)*TZ(LL)*TZ(MM)*TDZ(NN)) 2 +DG(20)*(TX(KK)*(TX(MM)*(TY(LL)*TY(NN)+TZ(LL)*TZ(NN)) 3 +TX(NN)*(TY(LL)*TY(MM)+TZ(LL)*TZ(MM))) 4 +TX(LL)*(TX(MM)*(TY(KK)*TY(NN)+TZ(KK)*TZ(NN)) 5 +TX(NN)*(TY(KK)*TY(MM)+TZ(KK)*TZ(MM)))) C TO AVOID COMPILER DIFFICULTIES THIS IS DIVIDED TEMP1= TDX(KK)*(TX(MM)*(TY(LL)*TY(NN)+TZ(LL 1)*TZ(NN)) +TX(NN)*(TY(LL)*TY(MM)+TZ(LL)*T 2Z(MM))) +TDX(LL)*(TX(MM)*(TY(KK)*TY(NN)+TZ(KK)*TZ( 3NN)) +TX(NN)*(TY(KK)*TY(MM)+TZ(KK)*TZ(MM) 4)) +TX(KK)*(TDX(MM)*(TY(LL)*TY(NN)+TZ(LL)*TZ(NN)) 5 +TDX(NN)*(TY(LL)*TY(MM)+TZ(LL)*TZ(MM))) 6 +TX(LL)*(TDX(MM)*(TY(KK)*TY(NN)+TZ(KK)*TZ(NN)) 7 +TDX(NN)*(TY(KK)*TY(MM)+TZ(KK)*TZ(MM))) TEMP2= TX(KK)*(TX(MM)*(TDY(LL)*TY(NN)+TY 1(LL)*TDY(NN) +TDZ(LL)*TZ(NN)+TZ(LL 2)*TDZ(NN)) +TX(NN)*(TDY(LL)*TY(MM)+TY(LL)* 3TDY(MM) +TDZ(LL)*TZ(MM)+TZ(LL)*TDZ 4(MM))) +TX(LL)*(TX(MM)*(TDY(KK)*TY(NN)+TY(KK)*TDY( 5NN) +TDZ(KK)*TZ(NN)+TZ(KK)*TDZ(NN) 6) +TX(NN)*(TDY(KK)*TY(MM)+TY(KK)*TDY(MM) 7 +TDZ(KK)*TZ(MM)+TZ(KK)*TDZ(MM))) DR(ISP)=DR(ISP)+G(20)*(TEMP1+TEMP2) DR(ISP)=DR(ISP) 1 +DG(21)*(TY(KK)*TY(LL)*TZ(MM)*TZ(NN) 2 +TZ(KK)*TZ(LL)*TY(MM)*TY(NN)) 3 +G(21)*(TDY(KK)*TY(LL)*TZ(MM)*TZ(NN) 4 +TY(KK)*TDY(LL)*TZ(MM)*TZ(NN) 5 +TY(KK)*TY(LL)*TDZ(MM)*TZ(NN) 6 +TY(KK)*TY(LL)*TZ(MM)*TDZ(NN) 7 +TDZ(KK)*TZ(LL)*TY(MM)*TY(NN) 8 +TZ(KK)*TDZ(LL)*TY(MM)*TY(NN) 9 +TZ(KK)*TZ(LL)*TDY(MM)*TY(NN) 1 +TZ(KK)*TZ(LL)*TY(MM)*TDY(NN)) DR(ISP)=DR(ISP) 1 +DG(22)*(TY(KK)*TZ(LL)+TZ(KK)*TY(LL)) 2 *(TY(MM)*TZ(NN)+TZ(MM)*TY(NN)) 3 +G(22)*((TDY(KK)*TZ(LL)+TY(KK)*TDZ(LL) 4 +TDZ(KK)*TY(LL)+TZ(KK)*TDY(LL)) 5 *(TY(MM)*TZ(NN)+TZ(MM)*TY(NN)) 6 +(TY(KK)*TZ(LL)+TZ(KK)*TY(LL)) 7 *(TDY(MM)*TZ(NN)+TY(MM)*TDZ(NN) 8 +TDZ(MM)*TY(NN)+TZ(MM)*TDY(NN))) ENDIF 10 CONTINUE RETURN END mopac7-1.15/fortran/symtrz.f_ALT10000644000175000017500000015412311053302064013522 00000000000000C C C SUBROUTINE SYMTRZ (COORD,C,NORB,NMOS,FLAG,FLAG2) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C************************************************************** C * C DETERMINE POINT GROUP & SYMMETRIZE ORBITALS * C * C************************************************************** INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) C --------------------------------------------------------------- COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, 2 FRACT COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB COMMON/VECTOR/CDUM(MORB2),EIGS(MAXORB),CBDUM(MORB2),EIGB(MAXORB) COMMON /S00002/ NUNUM,NONORB,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON/S00004/SHIFT(3),R(3,3),VECT(2,MXDIM) CHARACTER*4 NAME, NAMO, NAM, ISTA LOGICAL FLAG,FLAG2 DIMENSION RSAV(3,3),COTIM(3,NUMATM) DIMENSION V1(MAXORB),V2(MAXORB),V3(MAXORB),V4(MAXORB) DIMENSION COORD(3,NUMATM),C(MAXORB,MAXORB) DIMENSION IOPSYM(7),IMAGE(NUMATM,7) DATA IOPSYM /1,1,1,1,1,1,1/ NUNUM = NUMAT NONORB = NORBS DO K=1,3 DO L=1,NUMAT COTIM(K,L)=COORD(K,L) ENDDO ENDDO DO I=1,3 DO J=1,3 RSAV(I,J)=R(I,J) ENDDO ENDDO NAM=NAME CALL SYMAN1(NUMAT,2,COORD,NAT,1,MAXORB) IF(FLAG2) CALL SYMAN2(NORBS,NORBS,C,0,1,MAXORB) DO I=1,3 DO J=1,3 R(I,J)=RSAV(I,J) ENDDO ENDDO DO K=1,3 DO L=1,numat COORD(K,L)=COTIM(K,L) ENDDO ENDDO RETURN END C C================================================================ C SUBROUTINE SYMAN1(NUM1,NUM2,ARRAY,LINEAR,JUMP,idim) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C*************************************************************** C * C SYMMETRY PACKAGE FROM UMNDO PROGRAM OF PETER BISCHOF * C WAS REWRITTEN BY DAVID DANOVICH FOR MOPAC SYSTEM * C * C*************************************************************** INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) DIMENSION LINEAR(NUMATM),NUSS(MXDIM),ICOUNT(12),ARRAY(3,NUMATM) COMMON /S00001/T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00020/ NIMM(2,MXDIM),NOCC(2) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) CHARACTER*4 IFRA, NAME, ISTA, NAMO, NIMM COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB DATA IFRA / '????' / WRITE(6,'('' == symtrz.f SYMAN1 =='')') IF(NUM1.LT.2) GOTO 12 IF(NUM2.LT.2) GOTO 12 IF(NUM1.GT.MXDIM) GOTO 12 C ** MOLECULAR SYMMETRY 1 IERROR=0 LCALL=0 IVIB=0 NBASE=0 NUMAT=NUM1 NAME=IFRA ISTA(1)=' ' ISTA(2)=IFRA DO 2 I=1,MXDIM 2 NAMO(I)=IFRA CALL R00001(LINEAR,ARRAY) IF(IERROR.LT.1) CALL R00009(LINEAR,ARRAY) IF(IERROR.LT.1) CALL R00016 DO 3 I=1,NUMAT 3 INDEX(I)=LINEAR(I) RETURN 12 IERROR=1 WRITE(6,600)NUM1,NUM2 RETURN 600 FORMAT(' ILLEGAL SYMA - ARGUMENTS: NUM1 = ',I10,' NUM2 = ',I10) END C C====================================================================== C SUBROUTINE SYMAN2(NUM1,NUM2,ARRAY,LINEAR,JUMP,idim) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) DIMENSION NUSS(MXDIM),ICOUNT(12),array(num1,num1) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00020/ NIMM(2,MXDIM),NOCC(2) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) CHARACTER*4 IFRA, NAME, ISTA, NAMO, NIMM COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB DATA IFRA / '????' / WRITE(6,'('' == symtrz.f SYMAN2 =='')') IF(NUM1.LT.2) GOTO 12 IF(NUM2.LT.2) GOTO 12 IF(NUM1.GT.MXDIM) GOTO 12 C ** ORBITAL SYMMETRY IF(IERROR.GT.0) THEN RETURN ENDIF LCALL=0 IF(LINEAR.GT.0) GOTO 6 IF(LCALL.GT.0) GOTO 8 KORB=0 NQZ=1 DO 5 I=1,NUMAT JJ=1 IF(INDEX(I).GT.1) JJ=4 DO 5 J=1,JJ KORB=KORB+1 NUSS(KORB)=100*I+10*NQZ+J-1 5 CONTINUE GOTO 8 6 DO 7 I=1,NUM1 7 NUSS(I)=LINEAR 8 NORBS=NUM1 NCDIM=NUM2 NCDUM=NUM2 CALL R00010(ARRAY,NUSS,ICOUNT,num1) IF(IERROR.GT.0) RETURN NBASE=0 DO 9 I=1,I1 IF(ICOUNT(I).LT.1) GOTO 9 NBASE=NBASE+1 IBASE(1,NBASE)=ICOUNT(I) IBASE(2,NBASE)=JX(1,I) 9 CONTINUE LCALL=LCALL+1 IF(LCALL.GT.2) LCALL=1 DO 10 I=1,NORBS NIMM(LCALL,I)=NAMO(I) 10 NIMM(2,I)=NAMO(I) RETURN 12 IERROR=1 WRITE(6,600)NUM1,NUM2 RETURN 600 FORMAT(' ILLEGAL SYMA - ARGUMENTS: NUM1 = ',I10,' NUM2 = ',I10) END C C========================================================================== C SUBROUTINE R00001(NAT,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,NAMO,ISTA COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) COMMON /ATMASS/ ATMASS(NUMATM) LOGICAL PLANAR,LINEAR,CUBIC,AXIS DIMENSION NAT(NUMATM),COORD(3,NUMATM),F(6),EW(3),HELP(3) DIMENSION RHELP(3,3) DIMENSION ICYC(6) DATA TOLER,BIG/ 0.1D0,1.D35 / WRITE(6,'('' == symtrz.f R00001 =='')') DO 2 I=1,3 DO 1 J=1,3 1 CUB(I,J)=0.D0 2 CUB(I,I)=1.D0 DO 3 I=1,20 CALL R00006(I,I) 3 IELEM(I)=0 DO 4 I=1,3 4 SHIFT(I)=0.D0 WMOL=0.D0 DO 5 I=1,NUMAT WMOL=WMOL+ATMASS(I) DO 5 K=1,3 5 SHIFT(K)=SHIFT(K)+ATMASS(I)*COORD(K,I) IJ=0 DO 7 I=1,3 SHIFT(I)=SHIFT(I)/WMOL DO 6 K=1,NUMAT 6 COORD(I,K)=COORD(I,K)-SHIFT(I) DO 7 J=1,I IJ=IJ+1 F(IJ)=0.D0 DO 7 K=1,NUMAT TERM=ATMASS(K)*COORD(I,K)*COORD(J,K) 7 F(IJ)=F(IJ)+TERM TRANS=25.98160821D0 + 2.97975D0*DLOG(WMOL) CALL R00015(F,R,EW) R(1,3)=R(2,1)*R(3,2)-R(3,1)*R(2,2) R(2,3)=R(3,1)*R(1,2)-R(1,1)*R(3,2) R(3,3)=R(1,1)*R(2,2)-R(2,1)*R(1,2) PLANAR=(EW(1).LT.TOLER) LINEAR=(EW(2).LT.TOLER) CUBIC=((EW(3)-EW(1)).LT.TOLER) IF(.NOT.LINEAR) GOTO 8 CALL R00005(COORD,1) IELEM(20)=1 GOTO 22 8 IF(CUBIC.OR.((EW(3)-EW(2)).GT.TOLER)) GOTO 10 DO 9 I=1,3 BUFF=-R(I,1) R(I,1)=R(I,3) 9 R(I,3)=BUFF BUFF=EW(1) EW(1)=EW(3) EW(3)=BUFF 10 AXIS=(ABS(EW(1)-EW(2)).LT.TOLER) CALL R00005(COORD,1) IF(CUBIC) CALL R00003(NAT,COORD,1) IF(.NOT.AXIS) GOTO 16 ITURN=7 DO 11 I=8,18 CALL R00007(NAT,COORD,I) IF((IELEM(I).EQ.1).AND.(I.LT.14)) ITURN=I 11 CONTINUE ITURN=ITURN-5 DO 13 I=1,NUMAT DIST=COORD(1,I)**2+COORD(2,I)**2 IF(DIST.LT.TOLER) GOTO 13 BUFF1=BIG JNDEX=0 IPLUS=I+1 DO 12 J=IPLUS,NUMAT BUFF=COORD(1,J)**2+COORD(2,J)**2 IF(ABS(BUFF-DIST).GT.TOLER) GOTO 12 BUFF=(COORD(1,I)-COORD(1,J))**2+(COORD(2,I)-COORD(2,J))**2 IF(BUFF.GT.BUFF1) GOTO 12 JNDEX=J BUFF1=BUFF 12 CONTINUE GOTO 14 13 CONTINUE 14 IF(JNDEX.LT.1) IERROR=1 IF(IERROR.GT.0) GOTO 25 HELP(1)=COORD(1,I)+COORD(1,JNDEX) HELP(2)=COORD(2,I)+COORD(2,JNDEX) DIST=SQRT(HELP(1)**2+HELP(2)**2) SINA=HELP(2)/DIST COSA=HELP(1)/DIST CALL R00002(COORD,SINA,COSA,1,2) CALL R00007(NAT,COORD,5) IF(IELEM(5).EQ.1) GOTO 16 CALL R00007(NAT,COORD,1) IF(IELEM(1).EQ.0) GOTO 16 DIST=1.5707963268D0/FLOAT(ITURN) SINA=SIN(DIST) COSA=COS(DIST) ICHECK=0 15 CALL R00002(COORD,SINA,COSA,1,2) IF(ICHECK.GT.0) GOTO 16 CALL R00007(NAT,COORD,5) IF(IELEM(5).GT.0) GOTO 16 ICHECK=1 SINA=-SINA GOTO 15 16 IF(CUBIC) CALL R00003(NAT,COORD,2) IF(AXIS) GOTO 22 DO 17 I=1,6 CALL R00007(NAT,COORD,I) 17 ICYC(I)=(1+IQUAL)*IELEM(I) NAXES=IELEM(1)+IELEM(2)+IELEM(3) IF(NAXES.GT.1) GOTO 18 IZ=1 IF(IELEM(1).EQ.1) GOTO 19 IZ=2 IF(IELEM(2).EQ.1) GOTO 19 IZ=3 IF(IELEM(3).EQ.1) GOTO 19 IF(ICYC(5).GT.ICYC(4)) IZ=2 IF(ICYC(6).GT.ICYC(7-IZ)) IZ=1 GOTO 19 18 IZ=1 IF(ICYC(2).GT.ICYC(1)) IZ=2 IF(ICYC(3).GT.ICYC(IZ)) IZ=3 19 ICYC(7-IZ)=-1 IX=1 IF(ICYC(5).GT.ICYC(6)) IX=2 IF(ICYC(4).GT.ICYC(7-IX)) IX=3 IY=6-IX-IZ DO 20 I=1,3 RHELP(I,1)=R(I,IX) 20 RHELP(I,2)=R(I,IY) RHELP(1,3)=R(2,IX)*R(3,IY)-R(3,IX)*R(2,IY) RHELP(2,3)=R(3,IX)*R(1,IY)-R(1,IX)*R(3,IY) RHELP(3,3)=R(1,IX)*R(2,IY)-R(2,IX)*R(1,IY) CALL R00005(COORD,-1) DO 21 I=1,3 DO 21 J=1,3 21 R(I,J)=RHELP(I,J) CALL R00005(COORD,1) 22 DO 23 I=1,7 CALL R00007(NAT,COORD,I) 23 CONTINUE NCODE=0 J=1 DO 24 I=1,20 NCODE=NCODE+IELEM(I)*J 24 J=2*J 25 CALL R00005(COORD,-1) TOTAL=EW(1)+EW(2)+EW(3) DO 26 I=1,3 EW(I)=TOTAL-EW(I) DO 26 J=1,NUMAT 26 COORD(I,J)=COORD(I,J)+SHIFT(I) JGROUP = 0 CALL R00008(JGROUP,NCODE) IF(JGROUP.LT.1) IERROR=2 TOTAL=EW(1)*EW(2)*EW(3)/(SIG*SIG) IF(LINEAR) RTR= 6.970686D0 + 1.9865D0*DLOG(EW(1)/SIG) IF(.NOT.LINEAR) RTR=11.592852D0 + 0.98325D0*DLOG(TOTAL) RETURN END C C================================================================== C SUBROUTINE R00002(COORD,SINA,COSA,I,J) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM) WRITE(6,'('' == symtrz.f R00002 =='')') CALL R00005(COORD,-1) DO 1 K=1,3 BUFF=-SINA*R(K,I)+COSA*R(K,J) R(K,I)=COSA*R(K,I)+SINA*R(K,J) 1 R(K,J)=BUFF CALL R00005(COORD,1) RETURN END C C==================================================================== C SUBROUTINE R00003(NAT,COORD,JUMP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM),NAT(NUMATM),WINK(2) DATA BIG,TOLER / 1.D35,0.1/ DATA WINK(1),WINK(2)/ 0.955316618125D0, 0.6523581398D0 / WRITE(6,'('' == symtrz.f R00003 =='')') GOTO (1,5),JUMP 1 IELEM(19)=1 INDEX=0 XMIN=BIG DO 2 I=1,NUMAT DIST=COORD(1,I)**2+COORD(2,I)**2+COORD(3,I)**2 IF(DIST.LT.TOLER) GOTO 2 IF(DIST.GT.XMIN) GOTO 2 INDEX=I XMIN=DIST 2 CONTINUE DIST=SQRT(XMIN) CALL R00005(COORD,-1) R(1,3)=COORD(1,INDEX)/DIST R(2,3)=COORD(2,INDEX)/DIST R(3,3)=COORD(3,INDEX)/DIST BUFF=SQRT(R(1,3)**2+R(2,3)**2) BUFF1=SQRT(R(1,3)**2+R(3,3)**2) IF(BUFF.GT.BUFF1) GOTO 3 R(1,1)= R(3,3)/BUFF1 R(2,1)=0.D0 R(3,1)=-R(1,3)/BUFF1 GOTO 4 3 R(1,1)= R(2,3)/BUFF R(2,1)=-R(1,3)/BUFF R(3,1)=0.D0 4 R(1,2)= R(2,3)*R(3,1)-R(2,1)*R(3,3) R(2,2)= R(3,3)*R(1,1)-R(3,1)*R(1,3) R(3,2)= R(1,3)*R(2,1)-R(1,1)*R(2,3) CALL R00005(COORD,1) RETURN 5 WINK2=0.D0 IF(IELEM(8).LT.1) GOTO 8 DO 6 I=1,2 JOTA=18-4*I WINK2=WINK(I) SINA=SIN(WINK2) COSA=COS(WINK2) CALL R00002(COORD,SINA,COSA,1,3) CALL R00007(NAT,COORD,JOTA) IF(IELEM(JOTA).GT.0) GOTO 7 WINK2=-WINK2 SINB=SIN(2.D0*WINK2) COSB=COS(2.D0*WINK2) CALL R00002(COORD,SINB,COSB,1,3) CALL R00007(NAT,COORD,JOTA) IF(IELEM(JOTA).GT.0) GOTO 7 CALL R00002(COORD,SINA,COSA,1,3) 6 CONTINUE 7 CALL R00007(NAT,COORD,9) IF(IELEM(10).GT.0) CALL R00007(NAT,COORD,17) GOTO 10 8 WINK2=-WINK(1) IF(IELEM(10).GT.0) WINK2=-WINK(2) SINA=-SIN(WINK2) COSA=COS(WINK2) CALL R00002(COORD,SINA,COSA,1,3) CALL R00007(NAT,COORD,8) CALL R00002(COORD,-SINA,COSA,1,3) IF(IELEM(8).GT.0) GOTO 10 IF(IELEM(9).GT.0) GOTO 9 WINK2=-WINK2 GOTO 10 9 CALL R00002(COORD,0.707106781186D0,0.707106781186D0,1,2) 10 CUB(1,1)=COS(WINK2) CUB(3,3)=CUB(1,1) CUB(1,3)=SIN(WINK2) CUB(3,1)=-CUB(1,3) CALL R00004(CUB,8) CALL R00004(CUB,15) CALL R00007(NAT,COORD,8) CALL R00007(NAT,COORD,15) RETURN END C C===================================================================== C SUBROUTINE R00004(FMAT,IPLACE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DIMENSION HELP(3,3),FMAT(3,3) WRITE(6,'('' == symtrz.f R00004 =='')') DO 1 I=1,3 DO 1 J=1,3 HELP(I,J)=0.D0 DO 1 K=1,3 DO 1 L=1,3 1 HELP(I,J)=HELP(I,J)+FMAT(I,L)*FMAT(J,K)*ELEM(L,K,IPLACE) DO 2 I=1,3 DO 2 J=1,3 2 ELEM(I,J,IPLACE)=HELP(I,J) RETURN END C C========================================================================== C SUBROUTINE R00005(COORD,JUMP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM),HELP(3) WRITE(6,'('' == symtrz.f R00005 =='')') IF(JUMP.LT.0) GOTO 3 DO 2 I=1,NUMAT DO 1 J=1,3 1 HELP(J)=COORD(J,I) DO 2 J=1,3 COORD(J,I)=0.D0 DO 2 K=1,3 2 COORD(J,I)=COORD(J,I)+R(K,J)*HELP(K) RETURN 3 DO 5 I=1,NUMAT DO 4 J=1,3 4 HELP(J)=COORD(J,I) DO 5 J=1,3 COORD(J,I)=0.D0 DO 5 K=1,3 5 COORD(J,I)=COORD(J,I)+R(J,K)*HELP(K) RETURN END C C======================================================================== C SUBROUTINE R00006(IOPER,IPLACE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DIMENSION J(3,20) DATA J(1, 1),J(2, 1),J(3, 1) / 1 , -1 , -1 / DATA J(1, 2),J(2, 2),J(3, 2) / -1 , 1 , -1 / DATA J(1, 3),J(2, 3),J(3, 3) / -1 , -1 , 1 / DATA J(1, 4),J(2, 4),J(3, 4) / 1 , 1 , -1 / DATA J(1, 5),J(2, 5),J(3, 5) / 1 , -1 , 1 / DATA J(1, 6),J(2, 6),J(3, 6) / -1 , 1 , 1 / DATA J(1, 7),J(2, 7),J(3, 7) / -1 , -1 , -1 / DATA J(1, 8),J(2, 8),J(3, 8) / 3 , 0 , 1 / DATA J(1, 9),J(2, 9),J(3, 9) / 4 , 0 , 1 / DATA J(1,10),J(2,10),J(3,10) / 5 , 0 , 1 / DATA J(1,11),J(2,11),J(3,11) / 6 , 0 , 1 / DATA J(1,12),J(2,12),J(3,12) / 7 , 0 , 1 / DATA J(1,13),J(2,13),J(3,13) / 8 , 0 , 1 / DATA J(1,14),J(2,14),J(3,14) / 4 , 0 , -1 / DATA J(1,15),J(2,15),J(3,15) / 6 , 0 , -1 / DATA J(1,16),J(2,16),J(3,16) / 8 , 0 , -1 / DATA J(1,17),J(2,17),J(3,17) / 10 , 0 , -1 / DATA J(1,18),J(2,18),J(3,18) / 12 , 0 , -1 / DATA J(1,19),J(2,19),J(3,19) / 5 , 0 , -1 / DATA J(1,20),J(2,20),J(3,20) / 0 , 0 , -1 / DATA TWOPI / 6.283185308D0 / WRITE(6,'('' == symtrz.f R00006 =='')') DO 2 I=1,3 DO 1 K=1,3 1 ELEM(I,K,IPLACE)=0. 2 ELEM(I,I,IPLACE)=J(I,IOPER) IF(IOPER.EQ.20) GOTO 4 IF(J(1,IOPER).LT.2) GOTO 3 ANGLE=TWOPI/FLOAT(J(1,IOPER)) ELEM(1,1,IPLACE)=COS(ANGLE) ELEM(2,2,IPLACE)=ELEM(1,1,IPLACE) ELEM(2,1,IPLACE)=SIN(ANGLE) ELEM(1,2,IPLACE)=-ELEM(2,1,IPLACE) 3 IF((IOPER.EQ.8).OR.(IOPER.EQ.15)) CALL R00004(CUB,IPLACE) RETURN 4 ELEM(1,2,IPLACE)=1.D0 ELEM(2,1,IPLACE)=1.D0 RETURN END C C====================================================================== C SUBROUTINE R00007(NAT,COORD,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION NAT(NUMATM),COORD(3,NUMATM),HELP(3),E(3,3) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DATA TOLER / 0.01 D0/ WRITE(6,'('' == symtrz.f R00007 =='')') IRESUL=1 IQUAL=0 DO 2 I=1,NUMAT HELP(1)=COORD(1,I)*ELEM(1,1,IOPER)+COORD(2,I)*ELEM(1,2,IOPER) . +COORD(3,I)*ELEM(1,3,IOPER) HELP(2)=COORD(1,I)*ELEM(2,1,IOPER)+COORD(2,I)*ELEM(2,2,IOPER) . +COORD(3,I)*ELEM(2,3,IOPER) HELP(3)=COORD(1,I)*ELEM(3,1,IOPER)+COORD(2,I)*ELEM(3,2,IOPER) . +COORD(3,I)*ELEM(3,3,IOPER) DO 1 J=1,NUMAT IF(NAT(I).NE.NAT(J)) GOTO 1 IF(ABS(COORD(1,J)-HELP(1)).GT.TOLER) GOTO 1 IF(ABS(COORD(2,J)-HELP(2)).GT.TOLER) GOTO 1 IF(ABS(COORD(3,J)-HELP(3)).GT.TOLER) GOTO 1 JELEM(IOPER,I)=J IF(I.EQ.J) IQUAL=IQUAL+1 GOTO 2 1 CONTINUE IRESUL=0 2 CONTINUE IELEM(IOPER)=IRESUL RETURN END C C===================================================================== C SUBROUTINE R00008(IGROUP,NCODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) INTEGER C1(3),CS(7),CI(7),C2(7),C3(9),C4(16),C5(19),C6(29), . C7(33),C8(46),D2(21),D3(13),D4(31),D5(21),D6(43), . C2V(21),C3V(13),C4V(31),C5V(21),C6V(43), . C2H(21),C3H(29),C4H(55),C5H(67),C6H(105), . D2H(73),D3H(43),D4H(111),D5H(73),D6H(157), . D2D(31),D3D(43),D4D(57),D5D(73),D6D(91), . S4(16),S6(29),S8(46), . TD(31),OH(111),IH(111),CV(10),DH(25) DIMENSION J(43),JTAB(1844),ISIGMA(43) EQUIVALENCE (JTAB( 1),C1(1)),(JTAB( 4),CS(1)) EQUIVALENCE (JTAB( 11),CI(1)),(JTAB( 18),C2(1)) EQUIVALENCE (JTAB( 25),C3(1)),(JTAB( 34),C4(1)) EQUIVALENCE (JTAB( 50),C5(1)),(JTAB( 69),C6(1)) EQUIVALENCE (JTAB( 98),C7(1)),(JTAB( 131),C8(1)) EQUIVALENCE (JTAB( 177),D2(1)),(JTAB( 198),D3(1)) EQUIVALENCE (JTAB( 211),D4(1)),(JTAB( 242),D5(1)) EQUIVALENCE (JTAB( 263),D6(1)),(JTAB( 306),C2V(1)) EQUIVALENCE (JTAB( 327),C3V(1)),(JTAB( 340),C4V(1)) EQUIVALENCE (JTAB( 371),C5V(1)),(JTAB( 392),C6V(1)) EQUIVALENCE (JTAB( 435),C2H(1)),(JTAB( 456),C3H(1)) EQUIVALENCE (JTAB( 485),C4H(1)),(JTAB( 540),C5H(1)) EQUIVALENCE (JTAB( 607),C6H(1)),(JTAB( 712),D2H(1)) EQUIVALENCE (JTAB( 785),D3H(1)),(JTAB( 828),D4H(1)) EQUIVALENCE (JTAB( 939),D5H(1)),(JTAB(1012),D6H(1)) EQUIVALENCE (JTAB(1169),D2D(1)),(JTAB(1200),D3D(1)) EQUIVALENCE (JTAB(1243),D4D(1)),(JTAB(1300),D5D(1)) EQUIVALENCE (JTAB(1373),D6D(1)),(JTAB(1464),S4(1)) EQUIVALENCE (JTAB(1480),S6(1)),(JTAB(1509),S8(1)) EQUIVALENCE (JTAB(1555),TD(1)),(JTAB(1586),OH(1)) EQUIVALENCE (JTAB(1697),IH(1)) EQUIVALENCE (JTAB(1808),CV(1)),(JTAB(1818),DH(1)) DATA J( 1),J( 2),J( 3),J( 4)/ 1010001, 2020004, 2020011, 2020018 / DATA J( 5),J( 6),J( 7),J( 8)/ 3020025, 4030034, 5030050, 6040069 / DATA J( 9),J(10),J(11),J(12)/ 7040098, 8050131, 4040177, 3030198 / DATA J(13),J(14),J(15),J(16)/ 5050211, 4040242, 6060263, 4040306 / DATA J(17),J(18),J(19),J(20)/ 3030327, 5050340, 4040371, 6060392 / DATA J(21),J(22),J(23),J(24)/ 4040435, 6040456, 8060485,10060540 / DATA J(25),J(26),J(27),J(28)/12080607, 8080712, 6060785,10100828 / DATA J(29),J(30),J(31),J(32)/ 8080939,12121012, 5051169, 6061200 / DATA J(33),J(34),J(35),J(36)/ 7071243, 8081300, 9091373, 4031464 / DATA J(37),J(38),J(39),J(40)/ 6041480, 8051509, 5051555,10101586 / DATA J(41),J(42),J(43) /10101697, 2031808, 3061818 / DATA ISIGMA / 1,1,1,2,3,4,5,6,7,8,4,6,8,10,12,2,3,4,5,6,2,3,4,5,6, . 4,6,8,10,12,4,6,8,10,12,2,3,4,12,24,60,1,2 / DATA C1 ./ 2HC1, .4HA , 0 / DATA CS ./ 2HCS, .4HA , 8 , 20104 , .4HA , 1 , -1 / DATA CI ./ 2HCI, .4HAG , 64 , 10107 , .4HAU , 1 , -1 / DATA C2 ./ 2HC2, .4HA , 4 , 2140103 , .4HB , 1 , -1 / DATA C3 ./ 2HC3, .4HA , 128 , 3140108 , 3240122 , .4HE , 2 , -1 , -1 / DATA C4 ./ 2HC4, .4HA , 260 ,4140109 ,2140103 ,4340123 , .4HB , 1 , -1 , 1 , -1 , .4HE , 2 , 0 , -2 , 0 / DATA C5 ./ 2HC5, .2HA , 512 , 5140110 , 5240122 , 5340123 ,5440124, .2HE1 , 2 , 51 , 52 , 52 , 51 , .2HE2 , 2 , 52 , 51 , 51 , 52 / DATA C6 ./ 2HC6, .2HA , 1156 ,6140111 ,3140108 ,2140103 ,3240133 ,6540125 , .2HB , 1 , -1 , 1 , -1 , 1 , -1 , .2HE1 , 2 , 1 , -1 , -2 , -1 , 1 , .2HE2 , 2 , -1 , -1 , 2 , -1 , -1 / DATA C7 ./ 2HC7, .2HA ,2048,7140112,7240122,7340123,7440124,7540125,7640126, .2HE1 , 2 , 71 , 72 , 73 , 73 , 72 , 71 , .2HE2 , 2 , 72 , 73 , 71 , 71 , 73 , 72 , .2HE3 , 2 , 73 , 71 , 72 , 72 , 71 , 73 / DATA C8 ./ 2HC8, .2HA ,4356,8140113,4140109,2140103,4340134,8340123,8540124,8740125, .2HB , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , .2HE1 , 2 , 81 , 0 , -2 , 0 , 83 , 83 , 81 , .2HE2 , 2 , 0 , -2 , 2 , -2 , 0 , 0 , 0 , .2HE3 , 2 , 83 , 0 , -2 , 0 , 81 , 81 , 83 / DATA D2 ./ 2HD2, .4HA , 7 ,2140103 ,2140102 ,2140101 , .4HB1 , 1 , 1 , -1 , -1 , .4HB2 , 1 , -1 , 1 , -1 , .4HB3 , 1 , -1 , -1 , 1 / DATA D3 ./ 2HD3, .4HA1 , 129 , 3140208 , 2140301 , .4HA2 , 1 , 1 , -1 , .4HE , 2 , -1 , 0 / DATA D4 ./ 2HD4, .2HA1 , 263 , 4140209 , 2140103 ,2140201 ,2140220 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA D5 ./ 2HD5, .4HA1 , 513 ,5140210 ,5240222 , 2140501 , .4HA2 , 1 , 1 , 1 , -1 , .4HE1 , 2 , 51 , 52 , 0 , .4HE2 , 2 , 52 , 51 , 0 / DATA D6 ./ 2HD6, .2HA1 , 1159 ,6140211 ,3140208 ,2140103 ,2140301 ,2140302 , .2HA2 , 1 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , -1 , 1 , .2HE1 , 2 , 1 , -1 , -2 , 0 , 0 , .2HE2 , 2 , -1 , -1 , 2 , 0 , 0 / DATA C2V ./ 3HC2V, .4HA1 , 52 ,2140103 , 20105 , 20106 , .4HA2 , 1 , 1 , -1 , -1 , .4HB1 , 1 , -1 , 1 , -1 , .4HB2 , 1 , -1 , -1 , 1 / DATA C3V ./ 3HC3V, .4HA1 , 144 ,3140208 , 20305 , .4HA2 , 1 , 1 , -1 , .4HE , 2 , -1 , 0 / DATA C4V ./ 3HC4V, .2HA1 , 308 ,4140209 ,2140103 , 20205 ,20224 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA C5V ./ 3HC5V, .4HA1 , 528 , 5140210 , 5240222 , 20505 , .4HA2 , 1 , 1 , 1 , -1 , .4HE1 , 2 , 51 , 52 , 0 , .4HE2 , 2 , 52 , 51 , 0 / DATA C6V ./ 3HC6V, .2HA1 , 1204 , 6140211, 3140208,2140103 , 20305 , 20306 , .2HA2 , 1 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , -1 , 1 , .2HE1 , 2 , 1 , -1 , -2 , 0 , 0 , .2HE2 , 2 , -1 , -1 , 2 , 0 , 0 / DATA C2H ./ 3HC2H, .4HAG , 76 ,2140103 , 10107 , 20104 , .4HBG , 1 , -1 , 1 , -1 , .4HAU , 1 , 1 , -1 , -1 , .4HBU , 1 , -1 , -1 , 1 / DATA C3H ./ 3HC3H, .2HA , 136 , 3140108, 3240122, 20104, 3130124,3530143 , .2HE , 2 , -1 , -1 , 2 , -1 , -1 , .2HA , 1 , 1 , 1 , -1 , -1 , -1 , .2HE , 2 , -1 , -1 , -2 , 1 , 1 / DATA C4H ./ 3HC4H, .2HAG ,8524,4140109,2140103,4340123,10107,4330152,20104,4130114, .2HBG , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HEG , 2 , 0 , -2 , 0 , 2 , 0 , -2 , 0 , .2HAU , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .2HBU , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , .2HEU , 2 , 0 , -2 , 0 , -2 , 0 , 2 , 0 / DATA C5H ./ 3HC5H, .2HA ,520,5140110,5240122,5340123,5440124,20104,5130119,5730163, . 5330164,5930165, .3HE1 , 2 , 51 , 52 ,52 , 51 , 2 , 51 , 52 , 52 , 51 , .3HE2 , 2 , 52 , 51 ,51 , 52 , 2 , 52 , 51 , 51 , 52 , .2HA , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HE1 , 2 , 51 , 52 ,52 , 51 , -2 ,103 ,101 ,101 ,103 , .3HE2 , 2 , 52 , 51 ,51 , 52 , -2 ,101 ,103 ,103 ,101 / DATA C6H ./ 3HC6H, .2HAG ,17612,6140111,3140108,2140103,3240133,6540125,10107,20104, . 3530127,6530137,6130115,3130183, .3HBG , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , .3HE1G, 2 , 1 , -1 , -2 , -1 , 1 , 2 , -2 , 1 , -1 , -1 , 1 , .3HE2G, 2 , -1 , -1 , 2 , -1 , -1 , 2 , 2 , -1 , -1 , -1 , -1 , .3HAU , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , .3HBU , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , .3HE1U, 2 , 1 , -1 , -2 , -1 , 1 , -2 , 2 , -1 , 1 , 1 , -1 , .3HE2U, 2 , -1 , -1 , 2 , -1 , -1 , -2 , -2 , 1 , 1 , 1 , 1 / DATA D2H ./ 3HD2H, .2HAG, 127,2140103,2140102,2140101, 10107, 20104,20105,20106, .3HB1G, 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1, .3HB2G, 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1, .3HB3G, 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1, .3HAU , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1, .3HB1U, 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1, .3HB2U, 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1, .3HB3U, 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1/ DATA D3H ./ 3HD3H, .3HA1 , 153 ,3140208 ,2140301 , 20104 ,3130224 , 20305 , .3HA2 , 1 , 1 , -1 , 1 , 1 , -1 , .3HE , 2 , -1 , 0 , 2 , -1 , 0 , .3HA1 , 1 , 1 , 1 , -1 , -1 , -1 , .3HA2 , 1 , 1 , -1 , -1 , -1 , 1 , .3HE , 2 , -1 , 0 , -2 , 1 , 0 / DATA D4H ./ 3HD4H, .3HA1G ,8575,4140209,2140103,2140201,2140220,10107,4130214,20104, . 20205,20229, .3HA2G , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , .3HB1G , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , .3HB2G , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , .3HEG , 2 , 0 , -2 , 0 , 0 , 2 , 0 , -2 , 0 , 0 , .3HA1U , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , .3HB1U , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , .3HB2U , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , .3HEU , 2 , 0 , -2 , 0 , 0 , -2 , 0 , 2 , 0 , 0 / DATA D5H ./ 3HD5H, .3HA1 ,537, 5140210, 5240222,2140501,20104,5130219, 5330263,20505, .3HA2 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , .3HE1 , 2 , 51 , 52 , 0 , 2 , 51 , 52 , 0 , .3HE2 , 2 , 52 , 51 , 0 , 2 , 52 , 51 , 0 , .3HA1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .3HA2 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , .3HE1 , 2 , 51 , 52 , 0 , -2 , 103 , 101 , 0 , .3HE2 , 2 , 52 , 51 , 0 , -2 , 101 , 103 , 0 / DATA D6H ./ 3HD6H, .3HA1G ,17663,6140211,3140208,2140103,2140301,2140302,10107,20104, . 6130215,3130238,20306,20305, .3HA2G , 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, .3HB1G , 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, .3HB2G , 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, .3HE1G , 2, 1, -1, -2, 0, 0, 2, -2, -1, 1, 0, 0, .3HE2G , 2, -1, -1, 2, 0, 0, 2, 2, -1, -1, 0, 0, .3HA1U , 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, .3HA2U , 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, .3HB1U , 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, .3HB2U , 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, .3HE1U , 2, 1, -1, -2, 0, 0, -2, 2, 1, -1, 0, 0, .3HE2U , 2, -1, -1, 2, 0, 0, -2, -2, 1, 1, 0, 0/ DATA D2D ./ 3HD2D, .2HA1 , 8244 ,4130214 , 2140103 ,2140220 ,20205 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA D3D ./ 3HD3D, .3HA1G,16594 ,3140208 ,2140302 , 10107 ,6130215 , 20305 , .3HA2G, 1 , 1 , -1 , 1 , 1 , -1 , .3HEG , 2 , -1 , 0 , 2 , -1 , 0 , .3HA1U, 1 , 1 , 1 , -1 , -1 , -1 , .3HA2U, 1 , 1 , -1 , -1 , -1 , 1 , .3HEU , 2 , -1 , 0 , -2 , 1 , 0 / DATA D4D ./ 3HD4D, .3HA1 ,33076,8130216 ,4140209, 8330223,2140103,20405,2140426, .3HA2 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , .3HB1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , .3HB2 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , .3HE1 , 2 , 81 , 0 , 83 , -2 , 0 , 0 , .3HE2 , 2 , 0 , -2 , 0 , 2 , 0 , 0 , .3HE3 , 2 , 83 , 0 , 81 , -2 , 0 , 0 / DATA D5D ./ 3HD5D, .3HA1G ,66130,5140210,5240222,2140502,10107,10130217, . 10330226,20505, .3HA2G , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , .3HE1G , 2 , 51 , 52 , 0 , 2 , 52 , 51 , 0 , .3HE2G , 2 , 52 , 51 , 0 , 2 , 51 , 52 , 0 , .3HA1U , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , .3HE1U , 2 , 51 , 52 , 0 , -2 , 101 , 103 , 0 , .3HE2U , 2 , 52 , 51 , 0 , -2 , 103 , 101 , 0 / DATA D6D ./ 3HD6D, .2HA1 ,140468,12130218,6140211,4130214,3140208,12530225,2140103, . 20605,2140620, .3HA2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,-1 ,-1 , .3HB1 , 1 , -1 , 1 ,-1 , 1 , -1 , 1 ,-1 , 1 , .3HB2 , 1 , -1 , 1 ,-1 , 1 , -1 , 1 , 1 ,-1 , .3HE1 , 2 , 121 , 1 , 0 ,-1 , 125 ,-2 , 0 , 0 , .3HE2 , 2 , 1 ,-1 ,-2 ,-1 , 1 , 2 , 0 , 0 , .3HE3 , 2 , 0 ,-2 , 0 , 2 , 0 ,-2 , 0 , 0 , .3HE4 , 2 , -1 ,-1 , 2 ,-1 , -1 , 2 , 0 , 0 , .3HE5 , 2 , 125 , 1 , 0 ,-1 , 121 ,-2 , 0 , 0 / DATA S4 ./ 3HS4 , .4HA , 8196 , 4130114, 2140103, 4330123 , .4HB , 1 , -1 , 1 , -1 , .4HE , 2 , 0 , -2 , 0 / DATA S6 ./ 3HS6 , .3HAG ,16576 ,3140108 ,3240122 , 10107 , 6530124 , 6130115 , .3HEG , 2 , -1 , -1 , 2 , -1 , -1 , .3HAU , 1 , 1 , 1 , -1 , -1 , -1 , .3HEU , 2 , -1 , -1 , -2 , 1 , 1 / DATA S8 ./ 3HS8 , .3HA ,33028,8130116,4140109,8330123,2140103,8530125,4340135, . 8730127, .3HB , 1, -1 , 1, -1 , 1, -1 , 1, -1 , .3HE1 , 2, 81 , 0, 83 ,-2, 83 , 0, 81 , .3HE2 , 2, 0 ,-2, 0 , 2, 0 ,-2, 0 , .3HE3 , 2, 83 , 0, 81 ,-2, 81 , 0, 83 / DATA TD ./ 3HTD , .2HA1 ,270516 , 3140808, 2140303, 4130614, 20605 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HE , 2 , -1 , 2 , 0 , 0 , .2HT1 , 3 , 0 , -1 , 1 , -1 , .2HT2 , 3 , 0 , -1 , -1 , 1 / DATA OH ./ 3HOH , .3HA1G ,287231,3140808,2140601,4140609,2140303,10107,4130614, . 6130815,20304,20605, .3HA2G , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , .3HEG , 2 , -1 , 0 , 0 , 2 , 2 , 0 , -1 , 2 , 0 , .3HT1G , 3 , 0 , -1 , 1 , -1 , 3 , 1 , 0 , -1 , -1 , .3HT2G , 3 , 0 , 1 , -1 , -1 , 3 , -1 , 0 , -1 , 1 , .3HA1U , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , .3HEU , 2 , -1 , 0 , 0 , 2 , -2 , 0 , 1 , -2 , 0 , .3HT1U , 3 , 0 , -1 , 1 , -1 , -3 , -1 , 0 , 1 , 1 , .3HT2U , 3 , 0 , 1 , -1 , -1 , -3 , 1 , 0 , 1 , -1 / DATA IH ./ 3HIH , .3HAG ,344786,5141210,5241222,3142008,2141502,10107,10131217, . 10331227,6132015,21505, .3HT1G,3, 101 , 103 , 0,-1, 3, 103 , 101 , 0 ,-1 , .3HT2G,3, 103 , 101 , 0,-1, 3, 101 , 103 , 0 ,-1 , .3HGG ,4, -1 , -1 , 1, 0, 4, -1 , -1 , 1 , 0 , .3HHG ,5, 0 , 0 ,-1, 1, 5, 0 , 0 ,-1 , 1 , .3HAU ,1, 1 , 1 , 1, 1,-1, -1 , -1 ,-1 ,-1 , .3HT1U,3, 101 , 103 , 0,-1,-3, 51 , 52 , 0 , 1 , .3HT2U,3, 103 , 101 , 0,-1,-3, 52 , 51 , 0 , 1 , .3HGU ,4, -1 , -1 , 1, 0,-4, 1 , 1 ,-1 , 0 , .3HHU ,5, 0 , 0 ,-1, 1,-5, 0 , 0 , 1 ,-1 / DATA CV ./ 3HC*V, .3HSI , 524340 , 4140109 , .3HPI , 2 , 0 , .3HDE , 2 , -2 / DATA DH ./ 3HD*H, .3HSIG , 524415 , 4140109 , 10107 , .3HPIG , 2 , 0 , 2 , .3HDEG , 2 , -2 , 2 , .3HSIU , 1 , 1 , -1 , .3HPIU , 2 , 0 , -2 , .3HDEU , 2 , -2 , -2 / WRITE(6,'('' == symtrz.f R00008 =='')') SIG=1.D0 I=IGROUP IF(NCODE.LT.0) GOTO 2 IGROUP=0 DO 1 I=1,43 ICHECK=J(I)/10000 ICHECK=J(I)-10000*ICHECK+2 ICHECK=JTAB(ICHECK) IF(ICHECK.EQ.NCODE) GOTO 2 1 CONTINUE RETURN 2 IGROUP=I JGROUP=J(IGROUP) J1=JGROUP/1000000 KDIM=JGROUP-1000000*J1 I1=KDIM/10000 JGROUP=KDIM-10000*I1 NAME=JTAB(JGROUP) SIG=ISIGMA(IGROUP) J2=0 DO 4 I=1,I1 JGROUP=JGROUP+1 JX(1,I)=JTAB(JGROUP) DO 4 K=1,J1 JGROUP=JGROUP+1 BUFF=JTAB(JGROUP) IF(I.GT.1) GOTO 3 JX(2,K)=JTAB(JGROUP)/100 JX(3,K)=JTAB(JGROUP)-100*JX(2,K) JX(4,K)=JX(2,K)/100 JX(5,K)=JX(2,K)-100*JX(4,K) JX(2,K)=JX(5,K) JX(5,K)=JX(4,K)/10 JX(4,K)=JX(4,K)-10*JX(5,K) JX(2,1)=1 JX(3,1)=0 J2=J2+JX(2,K) BUFF=1.D0 3 IF(BUFF.LT.10.) GOTO 4 NZZ=JTAB(JGROUP) NZ=NZZ/10 FZ=NZ FN=NZZ-10*NZ BUFF=2.D0*COS(6.283185307179D0*FN/FZ) 4 T(I,K)=BUFF LINA=IGROUP-41 RETURN END C C================================================================ C SUBROUTINE R00009(NAT,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION HELP(3,3),NAT(NUMATM),COORD(3,NUMATM) WRITE(6,'('' == symtrz.f R00009 =='')') DO 1 I=1,3 DO 1 J=1,NUMAT 1 COORD(I,J)=COORD(I,J)-SHIFT(I) CALL R00005(COORD,1) IF(J1.LT.2) RETURN DO 5 I=2,J1 JOTA=JX(3,I) JOT=1 IF(JOTA.LE.20) GOTO 2 JOTB=JOTA/10 JOT=JOTA-10*JOTB JOTA=JX(3,JOTB) 2 CALL R00006(JOTA,I) IF(JOT.EQ.1) GOTO 5 DO 3 J=1,3 DO 3 K=1,3 HELP(J,K)=0.D0 DO 3 L=1,3 3 HELP(J,K)=HELP(J,K)+ELEM(J,L,JOT)*ELEM(L,K,I) DO 4 J=1,3 DO 4 K=1,3 4 ELEM(J,K,I)=HELP(J,K) 5 CONTINUE DO 6 I=2,J1 CALL R00007(NAT,COORD,I) JX(6,I)=IQUAL IF(IELEM(I).LT.1) IERROR=5 6 CONTINUE CALL R00005(COORD,-1) DO 7 I=1,3 DO 7 J=1,NUMAT 7 COORD(I,J)=COORD(I,J)+SHIFT(I) RETURN END C C=================================================================== C SUBROUTINE R00010(COEFF,NTYPE,ICOUNT,NCDUM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) C CHARACTER*4 NAME,ISTA C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; NAME is not used... CHARACTER*4 ISTA COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) DIMENSION NTYPE(MXDIM),COEFF(NCDUM,NCDUM) DIMENSION CHAR(12),ICOUNT(12) C DATA TOLER,IFRA / 0.1, '????'/ C ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ INTEGER NAMES DATA TOLER,IFRA / 0.1, 0 / C WRITE(6,'('' == symtrz.f R00010 =='')') NDORBS=0 DO 1 I=1,I1 1 ICOUNT(I)=0 NAMES=IFRA IF(J1.EQ.1) NAMES=JX(1,1) DO 2 I=1,NORBS INDEX(I)=I 2 NAMO(I)=NAMES IF(J1.EQ.1) RETURN IF(IERROR.GT.0) RETURN IFOUND=0 I=0 3 IK=I+1 DO 4 J=1,J1 4 CHAR(J)=0.D0 5 I=I+1 IF(I.GT.NORBS) GOTO 10 DO 6 J=1,J1 CHAR(J)=CHAR(J)+R00011(COEFF,NTYPE,I,J,NCDUM) IF(CHAR(J).GT.10.) GOTO 3 6 CONTINUE DO 9 K=1,I1 DO 7 J=1,J1 CHECK=ABS(CHAR(J)-T(K,J)) IF(CHECK.GT.TOLER) GOTO 9 7 CONTINUE ICOUNT(K)=ICOUNT(K)+1 DO 8 J=IK,I IFOUND=IFOUND+1 INDEX(J)=ICOUNT(K) 8 NAMO(J)=JX(1,K) GOTO 3 9 CONTINUE GOTO 5 10 IF(IFOUND.NE.NORBS) IERROR=99 RETURN END C C====================================================================== C FUNCTION R00011(COEFF,NTYPE,JORB,IOPER,NCDUM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION NTYPE(MXDIM),COEFF(NCDUM,NCDUM),E(3,3,20) DIMENSION H(5),P(3),D(5),IP(2,3),ID(2,5),LOC(2,50) EQUIVALENCE (ELEM(1,1,1),E(1,1,1)) WRITE(6,'('' == symtrz.f R00011 =='')') R00011=1.D0 IF(IOPER.EQ.1) RETURN DO 1 I=1,NORBS VECT(1,I)=0.D0 1 VECT(2,I)=0.D0 DO 13 IATOM=1,NUMAT JATOM=JELEM(IOPER,IATOM) KI=0 KJ=0 DO 3 I=1,NORBS ICHECK=NTYPE(I)/100 IF(ICHECK.NE.IATOM) GOTO 2 KI=KI+1 LOC(1,KI)=I 2 IF(ICHECK.NE.JATOM) GOTO 3 KJ=KJ+1 LOC(2,KJ)=I 3 CONTINUE IBASE=KI DO 4 I=1,IBASE ICHECK=LOC(1,I) ITEST=NTYPE(ICHECK)-10*(NTYPE(ICHECK)/10) IF(ITEST.GT.0) GOTO 4 JCHECK=LOC(2,I) LOC(1,I)=0 KI=KI-1 VECT(1,ICHECK)=COEFF(ICHECK,JORB) VECT(2,JCHECK)=COEFF(ICHECK,JORB) 4 CONTINUE MINUS=100*IATOM 5 IF(KI.LT.3) GOTO 13 DO 6 I=1,3 IP(1,I)=0 6 ID(1,I)=0 ID(1,4)=0 ID(1,5)=0 NQZP=-1 NQZD=-1 DO 9 I=1,IBASE IF(LOC(1,I).LT.1) GOTO 9 ICHECK=LOC(1,I) ITEST=NTYPE(ICHECK) INQZ=(ITEST-MINUS)/10 ILQZ=ITEST-10*(ITEST/10) IF(ILQZ.GT.8) GOTO 8 IF(ILQZ.GT.3) GOTO 7 IF(NQZP.LT.0) NQZP=INQZ IF(INQZ.NE.NQZP) GOTO 9 P(ILQZ)=COEFF(ICHECK,JORB) IP(1,ILQZ)=LOC(1,I) IP(2,ILQZ)=LOC(2,I) GOTO 8 7 IF(NQZD.LT.0) NQZD=INQZ IF(INQZ.NE.NQZD) GOTO 9 ILQZ=ILQZ-3 D(ILQZ)=COEFF(ICHECK,JORB) ID(1,ILQZ)=LOC(1,I) ID(2,ILQZ)=LOC(2,I) 8 LOC(1,I)=0 KI=KI-1 9 CONTINUE IF(NQZP.LT.0) GOTO 11 H(1)=R(1,1)*P(1)+R(2,1)*P(2)+R(3,1)*P(3) H(2)=R(1,2)*P(1)+R(2,2)*P(2)+R(3,2)*P(3) H(3)=R(1,3)*P(1)+R(2,3)*P(2)+R(3,3)*P(3) P(1)=E(1,1,IOPER)*H(1)+E(1,2,IOPER)*H(2)+E(1,3,IOPER)*H(3) P(2)=E(2,1,IOPER)*H(1)+E(2,2,IOPER)*H(2)+E(2,3,IOPER)*H(3) P(3)=E(3,1,IOPER)*H(1)+E(3,2,IOPER)*H(2)+E(3,3,IOPER)*H(3) DO 10 I=1,3 IF(IP(1,I).LT.1) GOTO 16 II=IP(1,I) JJ=IP(2,I) VECT(1,II)=H(I) 10 VECT(2,JJ)=P(I) 11 IF(NQZD.LT.0) GOTO 5 CALL R00012(D,H,IOPER) DO 12 I=1,5 IF(ID(1,I).LT.1) GOTO 16 II=ID(1,I) JJ=ID(2,I) VECT(1,II)=H(I) 12 VECT(2,JJ)=D(I) KI=KI-5 GOTO 5 13 CONTINUE C1=0.D0 C2=0.D0 DO 14 I=1,NORBS C1=C1+VECT(1,I)*VECT(1,I) 14 C2=C2+VECT(1,I)*VECT(2,I) IF(ABS(C1).LT.1.E-5) GOTO 15 R00011=C2/C1 RETURN 15 R00011=100.D0 RETURN 16 IERROR=98 RETURN END C C======================================================================= C SUBROUTINE R00012(D,H,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION D(5),H(5),T1(5,5,12),S(3,3) CHARACTER JX*4 WRITE(6,'('' == symtrz.f R00012 =='')') IF(NDORBS.GT.0) GOTO 4 NDORBS=1 DO 1 I=1,3 DO 1 J=1,3 1 S(I,J)=R(I,J) CALL R00013(S,T1,1) DO 3 K=2,J1 DO 2 I=1,3 DO 2 J=1,3 2 S(I,J)=ELEM(I,J,K) CALL R00013(S,T1,K) 3 CONTINUE 4 DO 5 I=1,5 H(I)=0.D0 DO 5 J=1,5 5 H(I)=H(I)+T1(I,J,1)*D(J) DO 6 I=1,5 D(I)=0.D0 DO 6 J=1,5 6 D(I)=D(I)+T1(I,J,IOPER)*H(J) RETURN END C C================================================================= C SUBROUTINE R00013(R,T,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION R(3,3),T(5,5,12),F(2,4) LOGICAL RIGHT DATA PI,TOL,S12 / 3.1415926536D0 ,0.001D0,3.46410161513D0 / DATA S3,ONE / 1.73205080756D0 , 1.D0 / WRITE(6,'('' == symtrz.f R00013 =='')') R1=R(2,1)*R(3,2)-R(3,1)*R(2,2) R2=R(3,1)*R(1,2)-R(1,1)*R(3,2) R3=R(1,1)*R(2,2)-R(2,1)*R(1,2) CHECK=R1*R(1,3)+R2*R(2,3)+R3*R(3,3) RIGHT=CHECK.GT.0. R(1,3)=R1 R(2,3)=R2 R(3,3)=R3 ARG=R3 IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) B= ACOS(ARG) SINA=SQRT(1.D0-ARG*ARG) IF(SINA.LT.TOL) GOTO 1 ARG=R(3,2)/SINA IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) G= ASIN(ARG) ARG=R(2,3)/SINA IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) A= ASIN(ARG) GOTO 2 1 ARG=R(1,2) IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) G= ASIN(ARG) A=0.D0 2 F(1,1)=A F(1,2)=A F(1,3)=PI-A F(1,4)=PI-A F(2,1)=G F(2,3)=G F(2,2)=PI-G F(2,4)=PI-G DO 3 I=1,4 A=F(1,I) G=F(2,I) CHECK=ABS(SIN(B)*COS(A)+R(1,3)) IF(CHECK.GT.TOL) GOTO 3 CHECK=-SIN(G)*COS(B)*SIN(A)+COS(G)*COS(A) IF(ABS(CHECK-R(2,2)).GT.TOL) GOTO 3 CHECK=SIN(A)*COS(G)+COS(A)*COS(B)*SIN(G) IF(ABS(CHECK-R(1,2)).LE.TOL) GOTO 4 3 CONTINUE 4 G=-G A=-A B=-B E1=COS(B*0.5D0) X1=-SIN(B*0.5D0) E2=E1*E1 E3=E1*E2 E4=E2*E2 X2=X1*X1 X3=X1*X2 X4=X2*X2 TA=2.D0*A TG=2.D0*G T(1,1,IOPER)=E4*COS(TA+TG)+X4*COS(TA-TG) T(1,2,IOPER)=2.D0*E3*X1*COS(A+TG)-2.D0*E1*X3*COS(A-TG) T(1,3,IOPER)=2.D0*S3*E2*X2*COS(TG) T(1,4,IOPER)=2.D0*E3*X1*SIN(A+TG)-2.D0*E1*X3*SIN(A-TG) T(1,5,IOPER)=E4*SIN(TA+TG)+X4*SIN(TA-TG) T(2,1,IOPER)=2.D0*E1*X3*COS(TA-G)-2.D0*E3*X1*COS(TA+G) T(2,2,IOPER)=(E4-3.D0*E2*X2)*COS(A+G)-(3.D0*E2*X2-X4)*COS(A-G) T(2,3,IOPER)=2.D0*S3*(E3*X1-E1*X3)*COS(G) T(2,4,IOPER)=(E4-3.D0*E2*X2)*SIN(A+G)-(3.D0*E2*X2-X4)*SIN(A-G) T(2,5,IOPER)=-2.D0*E3*X1*SIN(TA+G)+2.D0*E1*X3*SIN(TA-G) T(3,1,IOPER)=S12*E2*X2*COS(TA) T(3,2,IOPER)=-S12*(E3*X1-E1*X3)*COS(A) T(3,3,IOPER)=E4-4.D0*E2*X2+X4 T(3,4,IOPER)=-S12*(E3*X1-E1*X3)*SIN(A) T(3,5,IOPER)=S12*E2*X2*SIN(TA) T(4,1,IOPER)=2.D0*E1*X3*SIN(TA-G)+2.D0*E3*X1*SIN(TA+G) T(4,2,IOPER)=-(E4-3.D0*E2*X2)*SIN(A+G)-(3.D0*E2*X2-X4)*SIN(A-G) T(4,3,IOPER)=-2.D0*S3*(E3*X1-E1*X3)*SIN(G) T(4,4,IOPER)=(E4-3.D0*E2*X2)*COS(A+G)+(3.D0*E2*X2-X4)*COS(A-G) T(4,5,IOPER)=-2.D0*E3*X1*COS(TA+G)-2.D0*E1*X3*COS(TA-G) T(5,1,IOPER)=-E4*SIN(TA+TG)+X4*SIN(TA-TG) T(5,2,IOPER)=-2.D0*E3*X1*SIN(A+TG)-2.D0*E1*X3*SIN(A-TG) T(5,3,IOPER)=-2.D0*S3*E2*X2*SIN(TG) T(5,4,IOPER)=2.D0*E3*X1*COS(A+TG)+2.D0*E1*X3*COS(A-TG) T(5,5,IOPER)=E4*COS(TA+TG)-X4*COS(TA-TG) IF(RIGHT) RETURN DO 5 I=1,5 T(2,I,IOPER)=-T(2,I,IOPER) 5 T(4,I,IOPER)=-T(4,I,IOPER) RETURN END C C====================================================================== C SUBROUTINE R00015(F,V,EW) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION F(6),A(3,3),V(3,3),EW(3) DATA TOLER /1.E-6 / WRITE(6,'('' == symtrz.f R00015 =='')') N=3 IJ=0 DO 2 J=1,N DO 1 I=1,J IJ=IJ+1 A(I,J)=F(IJ) A(J,I)=F(IJ) V(I,J)=0.D0 1 V(J,I)=0.D0 2 V(J,J)=1.D0 N1=N-1 ZETA=10.D0 3 SS=0.D0 DO 4 J=1,N1 DO 4 I=J,N1 IRG=I+1 4 SS=SS+ABS(A(IRG,J)) IF(SS-TOLER) 21,21,5 5 TAU=0.D0 DO 20 I=1,N I1=I+1 IF(N-I1) 20,6,6 6 DO 19 J=I1,N IF(ABS(A(J,I)).LT.1.E-30) GOTO 19 THETA=0.5D0*(A(J,J)-A(I,I))/A(J,I) IF(ABS(THETA)-ZETA) 7,7,19 7 T=1.D0 IF(THETA) 8,9,9 8 T=-1.D0 9 T=1.D0/(THETA+T*SQRT(1.D0+THETA*THETA)) C=1.D0/SQRT(1.D0+T*T) S=C*T H=2.D0*A(J,I) HC=S*H*(S*THETA-C) A(I,I)=A(I,I)+HC A(J,J)=A(J,J)-HC A(J,I)=-H*C*(S*THETA-0.5D0*(C-S*S/C)) TAU=TAU+1.D0 IF(I.LT.2) GOTO 11 DO 10 IG=2,I IRS=IG-1 H=C*A(I,IRS)-S*A(J,IRS) A(J,IRS)=S*A(I,IRS)+C*A(J,IRS) 10 A(I,IRS)=H 11 L=J-1 IF(L-I1) 14,12,12 12 DO 13 IG=I1,L H=C*A(IG,I)-S*A(J,IG) A(J,IG)=S*A(IG,I)+C*A(J,IG) 13 A(IG,I)=H 14 IF(N1-J) 17,15,15 15 DO 16 IG=J,N1 ILG=IG+1 H=C*A(ILG,I)-S*A(ILG,J) A(ILG,J)=S*A(ILG,I)+C*A(ILG,J) 16 A(ILG,I)=H 17 DO 18 IG=1,N H=C*V(IG,I)-S*V(IG,J) V(IG,J)=S*V(IG,I)+C*V(IG,J) 18 V(IG,I)=H 19 CONTINUE 20 CONTINUE H=0.5D0*FLOAT(N*(N-1)) ZETA=ZETA**(2.5D0-TAU/H) GOTO 3 21 DO 22 J=1,N 22 EW(J)=A(J,J) N1=N-1 23 NT=0 DO 26 J=1,N1 JRG=J+1 IF(EW(J)-EW(JRG)) 26,26,24 24 BUFFER=EW(J) EW(J)=EW(JRG) EW(JRG)=BUFFER DO 25 I=1,N BUFFER=V(I,JRG) V(I,JRG)=V(I,J) 25 V(I,J)=BUFFER NT=1 26 CONTINUE N1=N1-1 IF(NT) 23,27,23 27 RETURN END C C=================================================================== C SUBROUTINE R00016 IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,NAMO,ISTA COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) DIMENSION CHAR(12),COEFF(12) WRITE(6,'('' == symtrz.f R00016 =='')') IVIBRA=3*NUMAT-6 IF(LINA.GT.0) GOTO 8 CHAR(1)=IVIBRA IVIB=0 IF(J1.LT.2) RETURN DO 5 I=2,J1 JUMP=JX(4,I) GOTO (1,2,3,4),JUMP 1 CHAR(I)=-3*JX(6,I) GOTO 5 2 CHAR(I)=JX(6,I) GOTO 5 3 JP=JX(5,I)/10 JK=JX(5,I)-10*JP ANGLE=2.D0*COS(6.283185308D0*DBLE(JK)/DBLE(JP)) CHAR(I)=DBLE(JX(6,I))*(ANGLE-1.D0) GOTO 5 4 JP=JX(5,I)/10 JK=JX(5,I)-10*JP ANGLE=2.D0*COS(6.283185308D0*DBLE(JK)/DBLE(JP)) CHAR(I)=DBLE(JX(6,I)-2)*(ANGLE+1.D0) 5 CHAR(I)=CHAR(I)*DBLE(JX(2,I)) ORDER=DBLE(J2) DO 7 I=1,I1 COEFF(I)=0.1D0 DO 6 J=1,J1 6 COEFF(I)=COEFF(I)+CHAR(J)*T(I,J)/ORDER IF(COEFF(I).LT.1.) GOTO 7 IDEGEN= T(I,1)+0.1D0 IVIB=IVIB+1 IVIBRO(1,IVIB)= COEFF(I) IF(I1.NE.J1) IVIBRO(1,IVIB)= COEFF(I) /IDEGEN IVIBRO(2,IVIB)=JX(1,I) 7 CONTINUE RETURN 8 IVIBRA=IVIBRA+1 GOTO(9,10),LINA 9 IVIBRO(1,1)=NUMAT-1 IVIBRO(2,1)=JX(1,1) IVIBRO(1,2)=NUMAT-2 IVIBRO(2,2)=JX(1,2) IVIB=2 IF(NUMAT.LT.3) IVIB=1 RETURN 10 ICENT=JX(6,3) IVIBRO(1,1)=(NUMAT-ICENT)/2 IVIBRO(2,1)=JX(1,1) IVIB=2 IVIBRO(1,2)=(NUMAT-2-ICENT)/2 IVIBRO(2,2)=JX(1,2) IF(IVIBRO(1,2).GT.0) IVIB=3 IVIBRO(1,IVIB)=(NUMAT-2+ICENT)/2 IVIBRO(2,IVIB)=JX(1,4) IF(IVIBRO(1,IVIB).GT.0) IVIB=IVIB+1 IVIBRO(1,IVIB)=(NUMAT-2+ICENT)/2 IVIBRO(2,IVIB)=JX(1,5) IF(IVIBRO(1,IVIB).LT.1) IVIB=IVIB-1 RETURN END mopac7-1.15/fortran/ffhpol.f0000644000175000017500000003572611053302063012655 00000000000000 SUBROUTINE FFHPOL (HEAT0,ATPOL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) CHARACTER*1 AXIS(3) LOGICAL DEBUG INCLUDE 'SIZES' C*********************************************************************** C SUBROUTINE FOR THE FINITE FIELD CALCULATION OF ELECTRIC RESPONSE C PROPERTIES (DIPOLE MOMENT, POLARIZABILITY, AND 1ST AND 2ND C HYPERPOLARIZABILITY. C C HENRY A. KURTZ, DEPARTMENT OF CHEMISTRY C MEMPHIS STATE UNIVERSITY C MEMPHIS, TN 38152 C C*********************************************************************** COMMON /CORE / CORE(107) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORS,NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /COORD / COORD(3,NUMATM) COMMON /KEYWRD/ KEYWRD COMMON /FIELD / EFIELD(3) COMMON /EULER / TVEC(3,3),IDTVEC CHARACTER*241 KEYWRD C C C DIPE4 AND DIPDP HOLD THE CALCULATED DIPOLE MOMENTS C C APOLE4 AND APOLDP HOLD THE POLARIZABILITY TENSOR AS C A PACKED ARRAY XX,XY,YY,XZ,YZ,ZZ C C BETAE4 AND BETAEP HOLD THE FIRST HYPERPOLARIZABILITY C 1. XXX C 2. YYY 6. YXX C 3. ZZZ 7. YZZ C 4. XYY 8. ZXX C 5. XZZ 9. ZYY C DIMENSION HEATE(3,2), 1 DIPE4(3),APOLE4(6),BETAE4(9),GAMME4(6), 2 DIPDP(3),APOLDP(6),BETADP(9),GAMMDP(6), 3 DIP1P(3),DIP1M(3),DIP2P(3),DIP2M(3) DIMENSION IPTBD(6), GRAD(MAXPAR) DATA IPTBD /5,7,4,9,6,8/ C Energy: a.u. to kcal/mole AUTOKC = 23.061D+00*27.2107D+00 C Dipole: a.u. to debye AUTODB = 2.541563D+00 C Electric Field: a.u. to volt/meter AUTOVM = 51.4257D+00 NBDIP = 1 NBCNT = 4 NGCNT = 4 C DATA AXIS/'X','Y','Z'/ DEBUG = (INDEX(KEYWRD,'DEBUG').NE.0) C C FIELD STRENGTH IN A.U. C EFVAL=0.001D0 IDIP=1 C modification for variable field strength IF(INDEX(KEYWRD,'POLAR=').NE.0) 1EFVAL=READA(KEYWRD,INDEX(KEYWRD,'POLAR=')) WRITE (6,10) EFVAL 10 FORMAT (//' APPLIED ELECTRIC FIELD MAGNITUDE: ',F15.5) SFE = 1.D00/EFVAL WRITE (6,20) 6.74834D0*ATPOL 20 FORMAT (//' ATOMIC CONTRIBUTION TO THE POLARIZABILITY: ',F15.6,/, 1 ' (IT IS ONLY APPLIED TO THE E4 RESULT)') C....................................................................... C CALCULATE THE POLARIZABILITY AND HYPERPOLARIZABILITIES ALONG C THE THREE PRINCIPLE AXES. (THESE AXES DEPEND ON YOUR ARBITRARY C ORIENTATION AND MAY NOT BE THE TRUE PRINCIPLE AXES.) C....................................................................... DO 150 ID = 1,3 IF (DEBUG) THEN WRITE (6,30) AXIS(ID) 30 FORMAT (//,' ****** FIELD IN ',A1,' DIRECTION *****',/) ENDIF C C ZERO THE FIELD C DO 40 I = 1,3 EFIELD(I) = 0.0D00 40 CONTINUE HNUC = 0.0D00 DO 50 I = 1,NUMAT HNUC = HNUC + EFVAL*GEO(ID,I)*CORE(NAT(I))*AUTOVM 50 CONTINUE HNUC = HNUC*23.061D00 C +E(ID) EFIELD(ID) = EFVAL CALL COMPFG(GEO,.TRUE.,HEAT1P,.TRUE.,GRAD,.FALSE.) CALL DIPIND (DIP1P) DIIP = DIP1P(ID) C -E(ID) EFIELD(ID) = -EFVAL CALL COMPFG(GEO,.TRUE.,HEAT1M,.TRUE.,GRAD,.FALSE.) CALL DIPIND (DIP1M) DIIM = DIP1M(ID) C +2E(ID) EFIELD(ID) = 2.0D00*EFVAL CALL COMPFG(GEO,.TRUE.,HEAT2P,.TRUE.,GRAD,.FALSE.) CALL DIPIND (DIP2P) C -2E(ID) EFIELD(ID) = -2.0D00*EFVAL CALL COMPFG(GEO,.TRUE.,HEAT2M,.TRUE.,GRAD,.FALSE.) CALL DIPIND (DIP2M) C C CORRECT FOR ELECTRIC FIELD - NUCLEAR INTERACTIONS C HEAT1P = HEAT1P + HNUC HEATE(ID,1) = HEAT1P HEAT1M = HEAT1M - HNUC HEATE(ID,2) = HEAT1M HEAT2P = HEAT2P + HNUC*2.D00 HEAT2M = HEAT2M - HNUC*2.D00 C IF (DEBUG) THEN WRITE (6,60) 60 FORMAT (' FIELDS OF: ',5X,'F',21X,'2F') WRITE (6,70) HEAT1P,HEAT2P,HEAT1M,HEAT2M, 1 DIP1P(ID),DIP2P(ID),DIP1M(ID),DIP2M(ID) 70 FORMAT (' ENERGY:'/, 1 ' + ',2(F20.10,3X),/,' - ',2(F20.10,3X),/, 2 ' DIPOLE:'/, 3 ' + ',2(F20.10,3X),/,' - ',2(F20.10,3X)) ENDIF C C DIPOLE C ETERM = (1.0D00/12.D00)*(HEAT2P - HEAT2M) 1 - (2.0D00/3.0D00)*(HEAT1P - HEAT1M) DIPE4(ID) = ETERM*SFE/AUTOKC C C ALPHA C IVL = (ID*(ID+1))/2 ETERM = 2.5D00*HEAT0 - (4.D00/3.D00)*(HEAT1P + HEAT1M) 1 + (1.D00/12.0D00)*(HEAT2P + HEAT2M) APOLE4(IVL) = ETERM*SFE*SFE/AUTOKC + ATPOL*6.74834D0 C C BETA C ETERM = (HEAT1P - HEAT1M) - 0.5D00*(HEAT2P - HEAT2M) BETAE4(ID) = ETERM*SFE*SFE*SFE/AUTOKC C C GAMMA C ETERM = 4.0D00*(HEAT1P + HEAT1M) - (HEAT2P + HEAT2M) 1 - 6.0D00*HEAT0 GAMME4(ID) = ETERM*SFE*SFE*SFE*SFE/AUTOKC C C DIPOLE CALCULATIONS C DMU = (2.0D00/3.0D00)*(DIP1P(ID) + DIP1M(ID)) 1 - (1.D00/6.0D00)*(DIP2P(ID) + DIP2M(ID)) DIPDP(ID) = DMU/AUTODB AE = (2.0D00/3.0D00)*(DIP1P(ID) - DIP1M(ID)) 1 - (1.0D00/12.D00)*(DIP2P(ID) - DIP2M(ID)) APOLDP(IVL) = AE*SFE/AUTODB BE = (1.D00/3.0D00)*(DIP2P(ID) + DIP2M(ID) 1 - DIP1P(ID) - DIP1M(ID)) BETADP(ID) = BE*SFE*SFE/AUTODB GE = 0.5D00*(DIP2P(ID) - DIP2M(ID)) 1 - (DIP1P(ID) - DIP1M(ID)) GAMMDP(ID) = GE*SFE*SFE*SFE/AUTODB DO 80 KD = 1,3 IF (KD.LT.ID) THEN KVL = (ID*(ID-1))/2 + KD AKI = (2.0D00/3.0D00)*(DIP1P(KD) - DIP1M(KD)) 1 - (1.0D00/12.0D00)*(DIP2P(KD) - DIP2M(KD)) APOLDP(KVL) = AKI*SFE/AUTODB ENDIF IF (KD.NE.ID) THEN BKII = (1.0D00/3.0D00)*(DIP2P(KD) + DIP2M(KD) 1 - DIP1P(KD) - DIP1M(KD)) NBD = IPTBD(NBDIP) BETADP(NBD) = BKII*SFE*SFE/AUTODB NBDIP = NBDIP + 1 ENDIF 80 CONTINUE C....................................................................... C C NOW CALCULATE THE OFF AXIS RESULTS. C C....................................................................... IDM1 = ID - 1 DO 140 JD = 1,IDM1 HNUCJ = 0.0D00 DO 90 I = 1,NUMAT HNUCJ = HNUCJ + EFVAL*GEO(JD,I)*CORE(NAT(I))*51.4257D0 90 CONTINUE HNUCJ = HNUCJ*23.061D0 DO 100 I = 1,3 EFIELD(I) = 0.0D00 100 CONTINUE C C DIAGONAL FIELDS WITH COMPONENTS EQUAL TO EFVAL C EFIELD(ID) = EFVAL EFIELD(JD) = EFVAL CALL COMPFG(GEO,.TRUE.,HPP,.TRUE.,GRAD,.FALSE.) CALL DIPIND (DIP1P) DPP = DIP1P(ID) EFIELD(JD) = -EFVAL CALL COMPFG(GEO,.TRUE.,HPM,.TRUE.,GRAD,.FALSE.) CALL DIPIND (DIP1P) DPM = DIP1P(ID) EFIELD(ID) = -EFVAL CALL COMPFG(GEO,.TRUE.,HMM,.TRUE.,GRAD,.FALSE.) CALL DIPIND (DIP1P) DMM = DIP1P(ID) EFIELD(JD) = EFVAL CALL COMPFG(GEO,.TRUE.,HMP,.TRUE.,GRAD,.FALSE.) CALL DIPIND (DIP1P) DMP = DIP1P(ID) HPP = HPP + HNUC + HNUCJ HPM = HPM + HNUC - HNUCJ HMM = HMM - HNUC - HNUCJ HMP = HMP - HNUC + HNUCJ IF (DEBUG) THEN WRITE (6,110) 110 FORMAT (/,' ',12X,'+,+',15X,'+,-',15X,'-,+',15X,'-,-') WRITE (6,120) HPP,HPM,HMP,HMM 120 FORMAT (' E ',4F15.6) ENDIF C C DIAGONAL FIELDS WITH COMPONENTS EQUAL TO 2*EFVAL C EFIELD(ID) = EFVAL*2.D00 EFIELD(JD) = EFVAL*2.D00 CALL COMPFG(GEO,.TRUE.,H2PP,.TRUE.,GRAD,.FALSE.) EFIELD(JD) = -EFVAL*2.D00 CALL COMPFG(GEO,.TRUE.,H2PM,.TRUE.,GRAD,.FALSE.) EFIELD(ID) = -EFVAL*2.D00 CALL COMPFG(GEO,.TRUE.,H2MM,.TRUE.,GRAD,.FALSE.) EFIELD(JD) = EFVAL*2.D00 CALL COMPFG(GEO,.TRUE.,H2MP,.TRUE.,GRAD,.FALSE.) H2PP = H2PP + 2.0D00*(HNUC + HNUCJ) H2PM = H2PM + 2.0D00*(HNUC - HNUCJ) H2MM = H2MM - 2.0D00*(HNUC + HNUCJ) H2MP = H2MP - 2.0D00*(HNUC - HNUCJ) IF (DEBUG) THEN WRITE (6,130) H2PP,H2PM,H2MP,H2MM 130 FORMAT (' 2E ',4F15.6) ENDIF C ATERM = (1.0D00/48.0D00)*(H2PP - H2PM - H2MP + H2MM) 1 - (1.0D00/3.0D00)*(HPP - HPM - HMP + HMM) AIJ = ATERM*SFE*SFE/AUTOKC IVL = (ID*(ID-1))/2 + JD APOLE4(IVL) = AIJ BTERM = 0.5D00*(HMM - HPP + HPM - HMP) 1 + HEATE(JD,1) - HEATE(JD,2) BJII = BTERM*SFE*SFE*SFE/AUTOKC BETAE4(NBCNT) = BJII NBCNT = NBCNT + 1 BTERM = 0.5D00*(HMM - HPP + HMP - HPM) 1 + HEATE(ID,1) - HEATE(ID,2) BIJJ = BTERM*SFE*SFE*SFE/AUTOKC BETAE4(NBCNT) = BIJJ NBCNT = NBCNT + 1 C GTERM = -(HPP + HMM + HPM + HMP) - 4.0D00*HEAT0 1 + 2.0D00*(HEATE(ID,1) + HEATE(ID,2)) 2 + 2.0D00*(HEATE(JD,1) + HEATE(JD,2)) GIIJJ = GTERM*SFE*SFE*SFE*SFE/AUTOKC GAMME4(NGCNT) = GIIJJ GDIP = 0.5D00*(DPP - DMP + DPM - DMM) - (DIIP - DIIM) GAMMDP(NGCNT) = GDIP*SFE*SFE*SFE/AUTODB NGCNT = NGCNT + 1 140 CONTINUE C 150 CONTINUE C----------------------------------------------------------------------- C SUMMARIZE THE RESULTS C----------------------------------------------------------------------- WRITE (6,160) 160 FORMAT (//,' ',30('*'),' DIPOLE ',30('*'),//) DIPE4T = SQRT(DIPE4(1)*DIPE4(1) + DIPE4(2)*DIPE4(2) 1 + DIPE4(3)*DIPE4(3)) DIPE4D = DIPE4T*AUTODB DIPDPT = SQRT(DIPDP(1)*DIPDP(1) + DIPDP(2)*DIPDP(2) 1 + DIPDP(3)*DIPDP(3)) DIPDPD = DIPDPT*AUTODB WRITE (6,170) 170 FORMAT (21X,'E4',13X,'DIP',/) WRITE (6,180) 'X',DIPE4(1),DIPDP(1) WRITE (6,180) 'Y',DIPE4(2),DIPDP(2) WRITE (6,180) 'Z',DIPE4(3),DIPDP(3) 180 FORMAT (5X,A1,7X,2F15.6) WRITE (6,190) DIPE4T,DIPDPT, 1 DIPE4D,DIPDPD 190 FORMAT (//' MAGNITUDE: ',2F15.6,' (A.U.)',/, 1 ' ',12X,2F15.6,' (DEBYE)') C C FIND EIGENVALUES AND EIGENVECTORS OF POLARIZATION MATRIX. C WRITE (6,200) 200 FORMAT (//,' ',22('*'),' POLARIZABILITY (ALPHA)',21('*'),//) AVGPE4 = (APOLE4(1)+APOLE4(3)+APOLE4(6))/3.0D00 AVGA3 = AVGPE4*0.14818D00 AVGESU = AVGPE4*0.296352D-24 AVGPDP = (APOLDP(1)+APOLDP(3)+APOLDP(6))/3.0D00 AVGA3D = AVGPDP*0.14818D00 AVGESD = AVGPDP*0.296352D-24 WRITE (6,210) 210 FORMAT (' COMPONENT',12X,'E4',13X,'DIP',/) WRITE (6,220) 'XX',APOLE4(1),APOLDP(1), 1 'YY',APOLE4(3),APOLDP(3), 2 'ZZ',APOLE4(6),APOLDP(6), 3 'XY',APOLE4(2),APOLDP(2), 4 'XZ',APOLE4(4),APOLDP(4), 5 'YZ',APOLE4(5),APOLDP(5) 220 FORMAT (' ',5X,A4,5X,2F15.6) WRITE (6,230) AVGPE4,AVGPDP,AVGA3,AVGA3D,AVGESU,AVGESD 230 FORMAT (//,' AVERAGE POLARIZABILITY:',8X,'E4',13X,'DIP',/, 1 ' ',24X,2F15.6,' A.U.',/, 2 ' ',24X,2F15.6,' ANG.**3',/, 3 ' ',24X,2(1PD15.6),' ESU') C C CALCULATE "EXPERIMENTAL" HYPERPOLARIZABILITIES C C 8.65710D-33 is a.u. to e.s.u. conversion WRITE (6,240) 240 FORMAT (//,' ',30('*'),' SECOND-ORDER (BETA)',25('*'),//) BX4 = 0.6D00*(BETAE4(1) + BETAE4(4) + BETAE4(6)) BY4 = 0.6D00*(BETAE4(2) + BETAE4(5) + BETAE4(8)) BZ4 = 0.6D00*(BETAE4(3) + BETAE4(7) + BETAE4(9)) B4MU = (BX4*DIPE4(1) + BY4*DIPE4(2) + BZ4*DIPE4(3))/DIPE4T B4ESU = B4MU*8.65710D-03 BXD = 0.6D00*(BETADP(1) + BETADP(4) + BETADP(6)) BYD = 0.6D00*(BETADP(2) + BETADP(5) + BETADP(8)) BZD = 0.6D00*(BETADP(3) + BETADP(7) + BETADP(9)) BDMU = (BXD*DIPDP(1) + BYD*DIPDP(2) + BZD*DIPDP(3))/DIPDPT BDESU = BDMU*8.65710D-03 C WRITE(6,'(29X,A2,25X,A6)')'1X','(1/2)X' WRITE (6,250) 250 FORMAT (' COMPONENT',2(12X,'E4',10X,'DIP',2X),/) WRITE (6,260) 'XXX',BETAE4(1),BETADP(1),BETAE4(1)/2,BETADP(1)/2 WRITE (6,260) 'XYY',BETAE4(4),BETADP(4),BETAE4(4)/2,BETADP(4)/2 WRITE (6,260) 'XZZ',BETAE4(6),BETADP(6),BETAE4(6)/2,BETADP(6)/2 WRITE (6,260) 'YYY',BETAE4(2),BETADP(2),BETAE4(2)/2,BETADP(2)/2 WRITE (6,260) 'YXX',BETAE4(5),BETADP(5),BETAE4(5)/2,BETADP(5)/2 WRITE (6,260) 'YZZ',BETAE4(8),BETADP(8),BETAE4(8)/2,BETADP(8)/2 WRITE (6,260) 'ZZZ',BETAE4(3),BETADP(3),BETAE4(3)/2,BETADP(3)/2 WRITE (6,260) 'ZXX',BETAE4(7),BETADP(7),BETAE4(7)/2,BETADP(7)/2 WRITE (6,260) 'ZYY',BETAE4(9),BETADP(9),BETAE4(9)/2,BETADP(9)/2 260 FORMAT (' ',5X,A4,2(5X,2F12.3)) WRITE (6,270) 270 FORMAT (//,' VECTOR COMPONENTS GIVEN BY:',/, 1 ' BI = (2/5)*(BI11+BI22+BI33)'/) WRITE (6,280) 'BX',BX4,BXD,BX4/2,BXD/2 WRITE (6,280) 'BY',BY4,BYD,BY4/2,BYD/2 WRITE (6,280) 'BZ',BZ4,BZD,BZ4/2,BZD/2 280 FORMAT (' ',6X,A2,2(6X,2F12.3)) WRITE (6,290) 290 FORMAT (//' VALUE OF BETA ALONG THE DIPOLE MOMENT:'/) WRITE (6,300) B4MU,BDMU,B4MU/2,BDMU/2,B4ESU,BDESU,B4ESU/2,BDESU/2 300 FORMAT (' ',4X,'B(AU)',2(5X,2F12.3,2X),/, 1 ' ',4X,'B(ESU)',4X,2F12.3,7X,2F12.3,' (X10-30)') C WRITE (6,310) 310 FORMAT (//' ',24('*'),' THIRD-ORDER (GAMMA)',24('*'),//) GAMVAL = (GAMME4(1) + GAMME4(2) + GAMME4(3)) GAMVAL = GAMVAL + 2.0D00*(GAMME4(4) + GAMME4(5) + GAMME4(6)) GAMVAL = GAMVAL/5.0D00 C 5.05116D-40 is the a.u. to e.s.u. conversion GAMESU = GAMVAL*5.05116D-04 GAMDIP = (GAMMDP(1) + GAMMDP(2) + GAMMDP(3)) GAMDIP = GAMDIP + 2.0D00*(GAMMDP(4) + GAMMDP(5) + GAMMDP(6)) GAMDIP = GAMDIP/5.0D00 GAMDES = GAMDIP*5.05116D-04 WRITE(6,'(23X,A2,25X,A6)')'1X','(1/6)X' WRITE (6,320) 320 FORMAT (' ',17X,'E4',8X,'DIP',16X,'E4',8X,'DIP',/) WRITE (6,330) 'XXXX',GAMME4(1),GAMMDP(1),GAMME4(1)/6,GAMMDP(1)/6 WRITE (6,330) 'YYYY',GAMME4(2),GAMMDP(2),GAMME4(2)/6,GAMMDP(2)/6 WRITE (6,330) 'ZZZZ',GAMME4(3),GAMMDP(3),GAMME4(3)/6,GAMMDP(3)/6 WRITE (6,330) 'XXYY',GAMME4(4),GAMMDP(4),GAMME4(4)/6,GAMMDP(4)/6 WRITE (6,330) 'XXZZ',GAMME4(5),GAMMDP(5),GAMME4(5)/6,GAMMDP(5)/6 WRITE (6,330) 'YYZZ',GAMME4(6),GAMMDP(6),GAMME4(6)/6,GAMMDP(6)/6 330 FORMAT (5X,A4,2F12.3,5X,2F12.3) WRITE (6,340) 340 FORMAT (//' AVERAGE GAMMA GIVEN BY:',/, 1 ' (1/5)*[GXXX + GYYY + GZZZ + 2.0*(GXXYY + GXXZZ + GYYZZ)]') WRITE(6,'(/,20X,A2,22X,A6)')'1X','(1/6)X' WRITE (6,350) GAMVAL,GAMDIP,GAMVAL/6,GAMDIP/6, 1 GAMESU,GAMDES,GAMESU/6,GAMDES/6 350 FORMAT (/' ',1PD12.5,1PD12.5,5X,1PD12.5,1PD12.5,' A.U.'/, 1 ' ',8X,1PD12.5,1PD12.5,5X,1PD12.5,1PD12.5,' ESU (X10-36)') C RETURN END mopac7-1.15/fortran/esp.f0000644000175000017500000023104711053302063012160 00000000000000 SUBROUTINE ESP IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C*********************************************************************** C C THIS IS A DRIVER ROUTINE FOR ELECTROSTATIC POTENTIAL GENERATION C WRITTEN BY K.M.MERZ FEB. 1989 AT UCSF C C*********************************************************************** COMMON /KEYWRD/ KEYWRD CHARACTER*241 KEYWRD C C SET STANDARD PARAMETERS FOR THE SURFACE GENERATION C IF(INDEX(KEYWRD,'SCALE=') .NE. 0)THEN SCALE = READA(KEYWRD,INDEX(KEYWRD,'SCALE=')) ELSE SCALE = 1.4D0 ENDIF C IF(INDEX(KEYWRD,'DEN=') .NE. 0)THEN DEN = READA(KEYWRD,INDEX(KEYWRD,'DEN=')) ELSE DEN = 1.0D0 ENDIF C IF(INDEX(KEYWRD,'SCINCR=') .NE. 0)THEN SCINCR = READA(KEYWRD,INDEX(KEYWRD,'SCINCR=')) ELSE SCINCR = 0.20D0 ENDIF C IF(INDEX(KEYWRD,'NSURF=') .NE. 0)THEN N = READA(KEYWRD,INDEX(KEYWRD,'NSURF=')) ELSE N = 4 ENDIF C TIME1=SECOND() C C NOW CALCULATE THE SURFACE POINTS C IF(INDEX(KEYWRD,'WILLIAMS') .NE. 0) THEN CALL PDGRID ELSE DO 10 I = 1,N CALL SURFAC(SCALE,DEN,I) SCALE = SCALE + SCINCR 10 CONTINUE ENDIF C C NEXT CALCULATE THE ESP AT THE POINTS CALCULATED BY SURFAC C CALL POTCAL C C END OF CALCULATION C TIME1=SECOND()-TIME1 WRITE(6,20) 'TIME TO CALCULATE ESP:',TIME1,' SECONDS' 20 FORMAT(/9X,A,F8.2,A) RETURN END SUBROUTINE PDGRID C C ROUTINE TO CALCULATE WILLIAMS SURFACE C IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION IZ(100),XYZ(3,100),VDERW(53),DIST(100) DIMENSION XMIN(3),XMAX(3),COORD(3,NUMATM) COMMON /GEOM/ GEO(3,NUMATM) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), NABC(3*NUMATM) C COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP),WORK1D(4*MESP) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP C DATA VDERW/53*0.0D0/ VDERW(1)=2.4D0 VDERW(5)=3.0D0 VDERW(6)=2.9D0 VDERW(7)=2.7D0 VDERW(8)=2.6D0 VDERW(9)=2.55D0 VDERW(15)=3.1D0 VDERW(16)=3.05D0 VDERW(17)=3.0D0 VDERW(35)=3.15D0 VDERW(53)=3.35D0 SHELL=1.2D0 NESP=0 GRID=0.8D0 CLOSER=0.D0 C CHECK IF VDERW IS DEFINED FOR ALL ATOMS C C CONVERT INTERNAL TO CARTESIAN COORDINATES C CALL GMETRY(GEO,COORD) C C STRIP COORDINATES AND ATOM LABEL FOR DUMMIES (I.E. 99) C ICNTR = 0 DO 20 I=1,NATOMS DO 10 J=1,3 10 CO(J,I) = COORD(J,I) IF(LABELS(I) .EQ. 99) GOTO 20 ICNTR = ICNTR + 1 IAN(ICNTR) = LABELS(I) 20 CONTINUE NATOM=ICNTR C DO 30 I=1,NATOM J=IAN(I) IF (VDERW(J).EQ.0.0D0) GO TO 40 30 CONTINUE GO TO 50 40 CONTINUE WRITE(6,*) 'VAN DER WAALS'' RADIUS NOT DEFINED FOR ATOM',I WRITE(6,*) 'IN WILLIAMS SURFACE ROUTINE PDGRID!' STOP C NOW CREATE LIMITS FOR A BOX 50 DO 100 IX = 1,3 XMIN(IX)= 100000.0D0 XMAX(IX)=-100000.0D0 DO 90 IA = 1,NATOM IF (CO(IX,IA)-XMIN(IX))60,70,70 60 XMIN(IX)=CO(IX,IA) 70 IF (CO(IX,IA)-XMAX(IX))90,90,80 80 XMAX(IX)=CO(IX,IA) 90 CONTINUE 100 CONTINUE C ADD (OR SUBTRACT) THE MAXIMUM VDERW PLUS SHELL VDMAX=0.0D0 DO 110 I=1,53 IF (VDERW(I).GT.VDMAX) VDMAX=VDERW(I) 110 CONTINUE DO 120 I=1,3 XMIN(I)=XMIN(I)-VDMAX-SHELL 120 XMAX(I)=XMAX(I)+VDMAX+SHELL C STEP GRID BACK FROM ZERO TO FIND STARTING POINTS XSTART=0.0D0 130 XSTART=XSTART-GRID IF (XSTART.GT.XMIN(1)) GO TO 130 YSTART=0.0D0 140 YSTART=YSTART-GRID IF (YSTART.GT.XMIN(2)) GO TO 140 ZSTART=0.0D0 150 ZSTART=ZSTART-GRID IF (ZSTART.GT.XMIN(3)) GO TO 150 NPNT=0 ZGRID=ZSTART 160 YGRID=YSTART 170 XGRID=XSTART 180 DO 190 L=1,NATOM JZ=IAN(L) DIST(L)=SQRT((CO(1,L)-XGRID)**2+(CO(2,L)-YGRID)**2+ 1 (CO(3,L)-ZGRID)**2) C REJECT GRID POINT IF ANY ATOM IS TOO CLOSE IF(DIST(L).LT.(VDERW(JZ)-CLOSER)) GO TO 220 190 CONTINUE C BUT AT LEAST ONE ATOM MUST BE CLOSE ENOUGH DO 200 L=1,NATOM JZ=IAN(L) IF(DIST(L).GT.(VDERW(JZ)+SHELL)) GO TO 200 GO TO 210 200 CONTINUE GO TO 220 210 NPNT=NPNT+1 NESP=NESP+1 POTPT(1,NESP)=XGRID POTPT(2,NESP)=YGRID POTPT(3,NESP)=ZGRID 220 XGRID=XGRID+GRID IF (XGRID.LE.XMAX(1)) GO TO 180 YGRID=YGRID+GRID IF (YGRID.LE.XMAX(2)) GO TO 170 ZGRID=ZGRID+GRID IF (ZGRID.LE.XMAX(3)) GO TO 160 RETURN END C*********************************************************************** SUBROUTINE SURFAC(SCALE,DENS,IPT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C*********************************************************************** C C THIS SUBROUTINE CALCULATES THE MOLECULAR SURFACE OF A MOLECULE C GIVEN THE COORDINATES OF ITS ATOMS. VAN DER WAALS' RADII FOR C THE ATOMS AND THE PROBE RADIUS MUST ALSO BE SPECIFIED. C C ON INPUT SCALE = INITIAL VAN DER WAALS' SCALE FACTOR C DENS = DENSITY OF POINTS PER UNIT AREA C C THIS SUBROUTINE WAS LIFTED FROM MICHAEL CONNOLLY'S SURFACE C PROGRAM FOR UCSF GRAPHICS SYSTEM BY U.CHANDRA SINGH AND C P.A.KOLLMAN AND MODIFIED FOR USE IN QUEST. K.M.MERZ C ADAPTED AND CLEANED UP THIS PROGRAM FOR USE IN AMPAC/MOPAC C IN FEB. 1989 AT UCSF. C C*********************************************************************** COMMON /GEOM/ GEO(3,NUMATM) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /KEYWRD/ KEYWRD C COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP),PAD1(2*MESP),RAD(MESP),IAS(MESP) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP C CHARACTER*241 KEYWRD C C CARTESIAN COORDINATE AND ATOM LABELS C DIMENSION COORD(3,NUMATM),VANDER(100) DIMENSION CON(3,1000),ROT(3,3) C C NEIGHBOR ARRAYS C C THIS SAME DIMENSION FOR THE MAXIMUM NUMBER OF NEIGHBORS C IS USED TO DIMENSION ARRAYS IN THE LOGICAL FUNCTION COLLID C DIMENSION INBR(200),CNBR(3,200),RNBR(200) LOGICAL SNBR(200),MNBR(200) C C ARRAYS FOR ALL ATOMS C C IATOM, JATOM AND KATOM COORDINATES C DIMENSION CI(3), IELDAT(56), TEMP0(3) C C GEOMETRIC CONSTRUCTION VECTORS C DIMENSION CW(3,2) C C LOGICAL VARIABLES C LOGICAL SI C C LOGICAL FUNCTIONS C LOGICAL COLLID C C DATA FOR VANDER VALL RADII C CHARACTER MARKER*3, MARKSS*3, MYNAM*3, IELDAT*4, NAMATM*4 DATA VANDER/1.20D0,1.20D0,1.37D0,1.45D0,1.45D0,1.50D0,1.50D0, 1 1.40D0,1.35D0,1.30D0,1.57D0,1.36D0,1.24D0,1.17D0, 2 1.80D0,1.75D0,1.70D0,17*0.0D0,2.3D0,65*0.0D0/ DATA MARKER/'A '/,MARKSS/'SS0'/,MYNAM/'UC '/ C DATA IELDAT/' BQ',' H ',' HE',' LI',' BE',' B ', 1 ' C ',' N ',' O ',' F ',' NE',' NA', 2 ' MG',' AL',' SI',' P ',' S ',' CL', 3 ' AR',' K ',' CA',' SC',' TI',' V ', 4 ' CR',' MN',' FE',' CO',' NI',' CU', 5 ' ZN',' GA',' GE',' AS',' SE',' BR', 6 ' KR',' RB',' SR',' Y',' ZR',' NB', 7 ' MO',' TC',' RU',' RH',' PD',' AG', 8 ' CD',' IN',' SN',' SB',' TE',' I', 9 ' X',' CS'/ PI=4.D0*ATAN(1.D0) C INSERT VAN DER WAAL RADII FOR ZINC VANDER(30)=1.00D0 C C CONVERT INTERNAL TO CARTESIAN COORDINATES C CALL GMETRY(GEO,COORD) C C STRIP COORDINATES AND ATOM LABEL FOR DUMMIES (I.E. 99) C ICNTR = 0 DO 20 I=1,NATOMS DO 10 J=1,3 10 CO(J,I) = COORD(J,I) IF(LABELS(I) .EQ. 99) GOTO 20 ICNTR = ICNTR + 1 IAN(ICNTR) = LABELS(I) 20 CONTINUE C C ONLY VAN DER WAALS' TYPE SURFACE IS GENERATED C IOP = 1 RW =0.0D0 NATOM = ICNTR DEN = DENS DO 30 I=1,NATOM IPOINT = IAN(I) RAD(I) = VANDER(IPOINT)*SCALE IF (RAD(I) .LT. 0.01D0) THEN WRITE(6,'(T2,''VAN DER WAALS'''' RADIUS FOR ATOM '',I3, 1 '' IS ZERO, SUPPLY A VALUE IN SUBROUTINE SURFAC)'' 2 )') ENDIF IAS(I) = 2 30 CONTINUE C C BIG LOOP FOR EACH ATOM C DO 110 IATOM = 1, NATOM IF (IAS(IATOM) .EQ. 0) GO TO 110 C C TRANSFER VALUES FROM LARGE ARRAYS TO IATOM VARIABLES C NAMATM =IELDAT(IAN(IATOM)+1) RI = RAD(IATOM) SI = IAS(IATOM) .EQ. 2 DO 40 K = 1,3 CI(K) = CO(K,IATOM) 40 CONTINUE C C GATHER THE NEIGHBORING ATOMS OF IATOM C NNBR = 0 DO 60 JATOM = 1, NATOM IF (IATOM .EQ. JATOM .OR. IAS(JATOM) .EQ. 0) GO TO 60 D2 = DIST2(CI,CO(1,JATOM)) IF (D2 .GE. (2*RW+RI+RAD(JATOM)) ** 2) GO TO 60 C C WE HAVE A NEW NEIGHBOR C TRANSFER ATOM COORDINATES, RADIUS AND SURFACE REQUEST NUMBER C NNBR = NNBR + 1 IF (NNBR .GT. 200)THEN WRITE (6,'(''ERROR'',2X,''TOO MANY NEIGHBORS:'',I5)')NNBR STOP ENDIF INBR(NNBR) = JATOM DO 50 K = 1,3 CNBR(K,NNBR) = CO(K,JATOM) 50 CONTINUE RNBR(NNBR) = RAD(JATOM) SNBR(NNBR) = IAS(JATOM) .EQ. 2 60 CONTINUE C C CONTACT SURFACE C IF (.NOT. SI) GO TO 110 NCON = (4 * PI * RI ** 2) * DEN IF (NCON .GT. 1000) NCON = 1000 C C THIS CALL MAY DECREASE NCON SOMEWHAT C IF ( NCON .EQ. 0) THEN WRITE(6,'(T2,''VECTOR LENGTH OF ZERO IN SURFAC'')') STOP ENDIF CALL GENUN(CON,NCON) AREA = (4 * PI * RI ** 2) / NCON C C CONTACT PROBE PLACEMENT LOOP C DO 100 I = 1,NCON DO 70 K = 1,3 CW(K,1) = CI(K) + (RI + RW) * CON(K,I) 70 CONTINUE C C CHECK FOR COLLISION WITH NEIGHBORING ATOMS C IF (COLLID(CW(1,1),RW,CNBR,RNBR,MNBR,NNBR,1, 1 JNBR,KNBR)) GO TO 100 DO 80 KK=1,3 TEMP0(KK) =CI(KK)+RI*CON(KK,I) 80 CONTINUE C C STORE POINT IN POTPT AND INCREMENT NESP C NESP = NESP + 1 IF (NESP .GT. MESP) THEN WRITE(6,90) 90 FORMAT(/'ERROR - TO MANY POINTS GENERATED IN SURFAC') WRITE(6,'('' REDUCE NSURF, SCALE, DEN, OR SCINCR'')') STOP ENDIF POTPT(1,NESP) = TEMP0(1) POTPT(2,NESP) = TEMP0(2) POTPT(3,NESP) = TEMP0(3) 100 CONTINUE 110 CONTINUE RETURN END C**************************************************************** FUNCTION DIST2(A,B) C C DETERMINE DISTANCES BETWEEN NEIGHBORING ATOMS C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION A(3) DIMENSION B(3) DIST2 = (A(1)-B(1))**2 + (A(2)-B(2))**2 + (A(3)-B(3))**2 RETURN END C**************************************************************** LOGICAL FUNCTION COLLID(CW,RW,CNBR,RNBR,MNBR,NNBR,ISHAPE, 1JNBR,KNBR) C**************************************************************** C C COLLISION CHECK OF PROBE WITH NEIGHBORING ATOMS C USED BY SURFAC ONLY. C C**************************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION CW(3) DIMENSION CNBR(3,200) DIMENSION RNBR(200) LOGICAL MNBR(200) IF (NNBR .LE. 0) GO TO 20 C C CHECK WHETHER PROBE IS TOO CLOSE TO ANY NEIGHBOR C DO 10 I = 1, NNBR IF (ISHAPE .GT. 1 .AND. I .EQ. JNBR) GO TO 10 IF (ISHAPE .EQ. 3 .AND. (I .EQ. KNBR .OR. .NOT. MNBR(I))) 1 GO TO 10 SUMRAD = RW + RNBR(I) VECT1 = DABS(CW(1) - CNBR(1,I)) IF (VECT1 .GE. SUMRAD) GO TO 10 VECT2 = DABS(CW(2) - CNBR(2,I)) IF (VECT2 .GE. SUMRAD) GO TO 10 VECT3 = DABS(CW(3) - CNBR(3,I)) IF (VECT3 .GE. SUMRAD) GO TO 10 SR2 = SUMRAD ** 2 DD2 = VECT1 ** 2 + VECT2 ** 2 + VECT3 ** 2 IF (DD2 .LT. SR2) GO TO 30 10 CONTINUE 20 CONTINUE COLLID = .FALSE. GO TO 40 30 CONTINUE COLLID = .TRUE. 40 CONTINUE RETURN END C**************************************************************** SUBROUTINE GENUN(U,N) C**************************************************************** C C GENERATE UNIT VECTORS OVER SPHERE. USED BY SURFAC ONLY. C C**************************************************************** IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U(3,N) PI=4.D0*ATAN(1.D0) NEQUAT = SQRT(N * PI) NVERT = NEQUAT/2 NU = 0 DO 20 I = 1,NVERT+1 FI = (PI * (I-1)) / NVERT Z = COS(FI) XY = SIN(FI) NHOR = NEQUAT * XY IF (NHOR .LT. 1) NHOR = 1 DO 10 J = 1,NHOR FJ = (2.D0 * PI * (J-1)) / NHOR X = DCOS(FJ) * XY Y = DSIN(FJ) * XY IF (NU .GE. N) GO TO 30 NU = NU + 1 U(1,NU) = X U(2,NU) = Y U(3,NU) = Z 10 CONTINUE 20 CONTINUE 30 CONTINUE N = NU RETURN END C*********************************************************************** SUBROUTINE POTCAL IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C*********************************************************************** C C THIS SUBROUTINE CALCULATES THE TOTAL ELECTROSTATIC POTENTIAL C THE NUCLEAR CONTRIBUTION IS EVALUATED BY NUCPOT C THE ELECTRONIC CONTRIBUTION IS EVALUATED BY ELESP C ESPFIT FITS THE QUANTUM POTENTIAL TO A CLASSICAL POINT CHARGE C MODEL. C THIS SUBROUTINE WAS WRITTEN BY B.H.BESLER AND K.M.MERZ IN FEB. C 1989 AT UCSF C C*********************************************************************** COMMON /KEYWRD/ KEYWRD COMMON /CORE/ TORE(107) COMMON /ELEMTS/ ELEMNT(107) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /DIPSTO/ UX,UY,UZ,CH(NUMATM) COMMON /ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),QSC(NUMATM+4),CF, ESPFD(MAXORB**2-NUMATM-5) CHARACTER*241 KEYWRD CHARACTER *2 ELEMNT LOGICAL DEBUG,WRTESP,CEQUIV(NUMATM,NUMATM) C C DEBUG PRINTING - RESULTS IN COPIOUS OUTPUT C DEBUG = (INDEX(KEYWRD,'DEBUG') .NE. 0) C C CALL ELESP BOHR = 0.529167D00 C C NOW FIT THE ELECTROSTATIC POTENTIAL C WRITE(6,'(//12X,''ELECTROSTATIC POTENTIAL CHARGES'',/)') IZ=0 IF(INDEX(KEYWRD,'CHARGE=') .NE. 0) IZ=READA(KEYWRD,INDEX(KEYWRD, 1'CHARGE=')) C C DIPOLAR CONSTRAINTS IF DESIRED C IF(INDEX(KEYWRD,'DIPOLE') .NE. 0) THEN IDIP = 1 IF(IZ .NE. 0)THEN IDIP = 0 WRITE(6,'(/12X,'' DIPOLE CONSTRAINTS NOT USED'')') WRITE(6,'(12X,'' CHARGED MOLECULE'',/)') ENDIF ELSE IDIP = 0 ENDIF IF (IDIP .EQ. 1) THEN WRITE(6,'(/12X,''DIPOLE CONSTRAINTS WILL BE USED'',/)') ENDIF C C GET X,Y,Z DIPOLE COMPONENTS IF DESIRED C IF(INDEX(KEYWRD,'DIPX=') .NE. 0) THEN DX = READA(KEYWRD,INDEX(KEYWRD,'DIPX=')) ELSE DX = UX ENDIF IF(INDEX(KEYWRD,'DIPY=') .NE. 0) THEN DY = READA(KEYWRD,INDEX(KEYWRD,'DIPY=')) ELSE DY = UY ENDIF IF(INDEX(KEYWRD,'DIPZ=') .NE. 0) THEN DZ = READA(KEYWRD,INDEX(KEYWRD,'DIPZ=')) ELSE DZ = UZ ENDIF CALL ESPFIT(IDIP,NATOM,NESP,IZ,ESP,POTPT,CO,DX,DY,DZ,RMS,RRMS) C C WRITE OUT OUR RESULTS TO CHANNEL 6 C THE CHARGES ARE SCALED TO REPRODUCE 6-31G* CHARGES FOR MNDO ONLY C AM1 AND MINDO/3 CHARGES ARE NOT SCALED DUE TO THE LOW COORELATION C COEFFICIENT. SEE BESLER,MERZ,KOLLMAN IN J. COMPUT. CHEM. C (IN PRESS) C IF((INDEX(KEYWRD,'AM1') .NE. 0) .OR. 1(INDEX(KEYWRD,'MINDO') .NE. 0) .OR. 2(INDEX(KEYWRD,'PM3') .NE. 0))THEN WRITE(6,'(15X,''ATOM NO. TYPE CHARGE'')') DO 10 I=1,NATOM WRITE(6,'(17X,I2,9X,A2,1X,F10.4)')I,ELEMNT(IAN(I)),Q(I) 10 CONTINUE ELSE C C MNDO CALCULATION-SCALE THE CHARGES. TEST FOR SLOPE KEYWORD C IF(INDEX(KEYWRD,'SLOPE=') .NE. 0) THEN SLOPE = READA(KEYWRD,INDEX(KEYWRD,'SLOPE=')) ELSE SLOPE = 1.422D0 ENDIF DO 20 I=1,NATOM QSC(I) = SLOPE*Q(I) 20 CONTINUE WRITE(6,'(7X,''ATOM NO. TYPE CHARGE SCALED CHARGE'')') DO 30 I=1,NATOM WRITE(6,'(9X,I2,9X,A2,1X,F10.4,2X,F10.4)')I,ELEMNT(IAN(I 1)), Q(I),QSC(I) 30 CONTINUE ENDIF WRITE(6,'(/12X,A,4X,I6)') 'THE NUMBER OF POINTS IS:',NESP WRITE(6,'(12X,A,4X,F9.4)') 'THE RMS DEVIATION IS:',RMS WRITE(6,'(12X,A,3X,F9.4)') 'THE RRMS DEVIATION IS:',RRMS C C CALCULATE DIPOLE MOMENT IF NEUTRAL MOLECULE C IF (IZ .NE. 0) THEN GO TO 60 ELSE WRITE(6,40) 40 FORMAT (//5X,'DIPOLE MOMENT EVALUATED FROM ' 1,'THE POINT CHARGES',/) DO 50 I=1,NATOM DIPX=DIPX+CO(1,I)*Q(I)/BOHR DIPY=DIPY+CO(2,I)*Q(I)/BOHR DIPZ=DIPZ+CO(3,I)*Q(I)/BOHR 50 CONTINUE DIP=SQRT(DIPX**2+DIPY**2+DIPZ**2) WRITE(6,'(12X,'' X Y Z TOTAL'')') WRITE(6,'(8X,4F9.4)')DIPX*CF,DIPY*CF,DIPZ*CF,DIP*CF ENDIF 60 CONTINUE C DETERMINE WHICH CHARGES SHOULD BE EQUIVALENT BY SYMMETRY AND C AVERAGE THEM IF DESIRED IF(INDEX(KEYWRD,'SYMAVG') .NE. 0) THEN DO 70 I=1,NATOM DO 70 J=1,NATOM CEQUIV(I,J)=.FALSE. IF(ABS(ABS(CH(I))-ABS(CH(J))) .LT. 1.D-5) CEQUIV(I,J)=.T 1RUE. 70 CONTINUE DO 90 I=1,NATOM IEQ=0 QSC(I)=0.D0 DO 80 J=1,NATOM IF(CEQUIV(I,J)) THEN QSC(I)=QSC(I)+ABS(Q(J)) IEQ=IEQ+1 ENDIF 80 CONTINUE CH(I)=Q(I)/ABS(Q(I))*QSC(I)/IEQ 90 CONTINUE WRITE(6,*) ' ' WRITE(6,*)' ELECTROSTATIC POTENTIAL CHARGES AVERAGED FOR' WRITE(6,*)' SYMMETRY EQUIVALENT ATOMS' WRITE(6,*) ' ' IF((INDEX(KEYWRD,'AM1') .NE. 0) .OR. 1(INDEX(KEYWRD,'MINDO') .NE. 0) .OR. 2(INDEX(KEYWRD,'PM3') .NE. 0))THEN WRITE(6,'(7X,''ATOM NO. TYPE CHARGE'')') DO 100 I=1,NATOM WRITE(6,'(9X,I2,9X,A2,1X,F10.4)')I,ELEMNT(IAN(I)), 1 CH(I) 100 CONTINUE ELSE WRITE(6,'(7X,''ATOM NO. TYPE CHARGE SCALED CHARGE'') 1') DO 110 I=1,NATOM WRITE(6,'(9X,I2,9X,A2,1X,F10.4,2X,F10.4)')I,ELEMNT(IA 1N(I)), CH(I),CH(I)*SLOPE 110 CONTINUE ENDIF ENDIF RETURN END SUBROUTINE ELESP IMPLICIT DOUBLE PRECISION (A-H,O-Z) C*********************************************************************** C ELESP LOADS THE STO-6G BASIS SET ONTO THE ATOMS, PERFOMS THE C DEORTHOGONALIZATION OF THE COEFFICIENTS AND EVALUATES THE C ELECTRONIC CONTRIBUTION TO THE ESP. IT WAS WRITTEN BY B.H.BESLER C AND K.M.MERZ IN FEB. 1989 AT UCSF. C C*********************************************************************** CHARACTER*241 KEYWRD DOUBLE PRECISION NORM,OVL LOGICAL CALLED,POTWRT,RST,STO3G INCLUDE 'SIZES' COMMON/ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),CESPM(MAXORB,MAXORB) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) COMMON /VECTOR/ C(MORB2*2+MAXORB*2) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /KEYWRD/ KEYWRD COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1 EX(MAXPR),ESPI(MAXORB,MAXORB), 2 FV(0:8,821),FAC(0:7), 3 DEX(-1:96),TF(0:2),TEMP(MAXPR),ITEMP(MAXPR), 4 OVL(MAXORB,MAXORB),FC(MAXPR*6) 6 /CORE / TORE(107) 7 /EXPONT/ ZS(107),ZP(107),ZD(107) * * END OF MINDO/3 COMMON BLOCKS * COMMON /INDX/ INDC(MAXORB) DIMENSION CESPM2(MAXORB,MAXORB),SLA(10) DIMENSION CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB) DATA BOHR/0.529167D0/ PI=4.D0*ATAN(1.D0) C C PUT STO-6G BASIS SET ON ATOM CENTERS C DO 10 I=-1,10 DEX(I)=DEX2(I) 10 CONTINUE DO 20 I=0,7 FAC(I)=1.D0/FAC(I) 20 CONTINUE DO 30 M=0,8 K=1 FV(M,1)=1.D0/(2.D0*M+1.D0) DO 30 T=0.05D0,41.D0,0.05D0 K=K+1 CALL FSUB(M,T,FVAL) FV(M,K)=FVAL 30 CONTINUE C C LOAD BASIS FUNCTIONS INTO ARRAYS C STO3G=(INDEX(KEYWRD,'STO3G') .NE. 0) IF(STO3G) THEN ICD=3 CALL SETUP3 ELSE ICD=6 CALL SETUPG ENDIF NC=0 NPR=0 DO 80 I=1,NATOM IF (IAN(I) .LE. 2) THEN DO 40 J=1,ICD CC(NPR+J)=ALLC(J,1,1) EX(NPR+J)=ALLZ(J,1,1)*ZS(1)**2 CEN(NPR+J,1)=CO(1,I)/BOHR CEN(NPR+J,2)=CO(2,I)/BOHR CEN(NPR+J,3)=CO(3,I)/BOHR IAM(NPR+J,1)=0 IAM(NPR+J,2)=0 FC(NPR+J)=I 40 CONTINUE NC=NC+1 NPR=NPR+ICD ELSE C DETERMINE PRINCIPAL QUANTUM NUMBER(NQN) C OF ORBITALS TO BE USED C NQN=2 IF(IAN(I) .GT. 10 .AND. IAN(I) .LE. 18) NQN=3 IF(IAN(I) .GT. 18 .AND. IAN(I) .LE. 36) NQN=4 IF(IAN(I) .GT. 36 .AND. IAN(I) .LE. 54) NQN=5 C DO 50 J=1,ICD CC(NPR+J)=ALLC(J,NQN,1) EX(NPR+J)=ALLZ(J,NQN,1)*ZS(IAN(I))**2 CEN(NPR+J,1)=CO(1,I)/BOHR CEN(NPR+J,2)=CO(2,I)/BOHR CEN(NPR+J,3)=CO(3,I)/BOHR IAM(NPR+J,1)=0 IAM(NPR+J,2)=0 50 CONTINUE NC=NC+1 NPR=NPR+ICD DO 70 K=1,3 DO 60 J=1,ICD CC(NPR+J)=ALLC(J,NQN,2) EX(NPR+J)=ALLZ(J,NQN,2)*ZP(IAN(I))**2 CEN(NPR+J,1)=CO(1,I)/BOHR CEN(NPR+J,2)=CO(2,I)/BOHR CEN(NPR+J,3)=CO(3,I)/BOHR IAM(NPR+J,1)=1 IAM(NPR+J,2)=K 60 CONTINUE NC=NC+1 NPR=NPR+ICD 70 CONTINUE ENDIF 80 CONTINUE C C CALCULATE NORMALIZATION CONSTANTS AND INCLUDE C THEM IN THE CONTRACTION COEFFICIENTS C DO 90 I=1,NPR NORM=(2.D0*EX(I)/PI)**0.75D0*(4.D0*EX(I))**(IAM(I,1)/2.D0)/ 1 SQRT(DEX(2*IAM(I,1)-1)) CC(I)=CC(I)*NORM 90 CONTINUE IPR=0 C C PERFORM SORT OF PRIMITIVES BY ANGULAR MOMENTUM C IS=0 IP=0 IPC=0 ISC=0 J=0 DO 100 I=1,NPR IF (IAM(I,1) .EQ. 0) THEN IS=IS+1 IND(IS)=I ENDIF 100 CONTINUE IP=IS DO 110 I=1,NPR IF (IAM(I,1) .EQ. 1 .AND. IAM(I,2) .EQ. 1) THEN IP=IP+1 IND(IP)=I ENDIF 110 CONTINUE DO 120 I=1,NPR IF (IAM(I,1) .EQ. 1 .AND. IAM(I,2) .EQ. 2) THEN IP=IP+1 IND(IP)=I ENDIF 120 CONTINUE DO 130 I=1,NPR IF (IAM(I,1) .EQ. 1 .AND. IAM(I,2) .EQ. 3) THEN IP=IP+1 IND(IP)=I ENDIF 130 CONTINUE DO 140 I=1,NC IN=I*ICD-ICD+1 IF (IAM(IN,1) .EQ. 0) THEN ISC=ISC+1 INDC(ISC)=I ENDIF 140 CONTINUE IPC=ISC DO 150 I=1,NC IN=I*ICD-ICD+1 IF (IAM(IN,1) .EQ. 1 .AND. IAM(IN,2) .EQ. 1) THEN IPC=IPC+1 INDC(IPC)=I ENDIF 150 CONTINUE DO 160 I=1,NC IN=I*ICD-ICD+1 IF (IAM(IN,1) .EQ. 1 .AND. IAM(IN,2) .EQ. 2) THEN IPC=IPC+1 INDC(IPC)=I ENDIF 160 CONTINUE DO 170 I=1,NC IN=I*ICD-ICD+1 IF (IAM(IN,1) .EQ. 1 .AND. IAM(IN,2) .EQ. 3) THEN IPC=IPC+1 INDC(IPC)=I ENDIF 170 CONTINUE DO 180 I=1,NPR TEMP(I)=CC(IND(I)) 180 CONTINUE DO 190 I=1,NPR CC(I)=TEMP(I) 190 CONTINUE DO 200 I=1,NPR TEMP(I)=EX(IND(I)) 200 CONTINUE DO 210 I=1,NPR EX(I)=TEMP(I) 210 CONTINUE DO 220 I=1,NPR TEMP(I)=CEN(IND(I),1) 220 CONTINUE DO 230 I=1,NPR CEN(I,1)=TEMP(I) 230 CONTINUE DO 240 I=1,NPR TEMP(I)=CEN(IND(I),2) 240 CONTINUE DO 250 I=1,NPR CEN(I,2)=TEMP(I) 250 CONTINUE DO 260 I=1,NPR TEMP(I)=CEN(IND(I),3) 260 CONTINUE DO 270 I=1,NPR CEN(I,3)=TEMP(I) 270 CONTINUE DO 280 I=1,NPR ITEMP(I)=IAM(IND(I),1) 280 CONTINUE DO 290 I=1,NPR IAM(I,1)=ITEMP(I) 290 CONTINUE DO 300 I=1,NPR ITEMP(I)=IAM(IND(I),2) 300 CONTINUE DO 310 I=1,NPR IAM(I,2)=ITEMP(I) 310 CONTINUE C CALCULATE OVERLAP MATRIX OF STO-6G FUNCTIONS C DO 320 J=1,NC CALL OVLP(J,1,IS,IP,NPR,NC,ICD) 320 CONTINUE C DO 330 J=1,NC DO 330 K=1,NC CESPM2(INDC(J),INDC(K))=OVL(J,K) 330 CONTINUE DO 340 J=1,NC DO 340 K=1,NC OVL(J,K)=CESPM2(J,K) 340 CONTINUE L=0 DO 350 I=1,NC DO 350 J=1,I L=L+1 CESP(L)=OVL(I,J) 350 CONTINUE C C DEORTHOGONALIZE THE COEFFICIENTS AND REFORM THE DENSITY MATRIX C CALL RSP(CESP,NC,1,TEMP,CESPML) DO 360 I=1,NC DO 360 J=1,I SUM=0.D0 DO 360 K=1,NC SUM=SUM+CESPML(I+(K-1)*NC)/SQRT(TEMP(K))*CESPML(J+(K-1)*N 1C) CESP(I+(J-1)*NC)=SUM CESP(J+(I-1)*NC)=SUM 360 CONTINUE CALL MULT(C,CESP,CESPML,NC) CALL DENSIT(CESPML,NC,NC,NCLOSE,NOPEN,FRACT,CESP,2) C C NOW CALCULATE THE ELECTRONIC CONTRIBUTION TO THE ELECTROSTATIC POT C L=0 DO 370 I=1,NC DO 370 J=1,I L=L+1 CESPM(I,J)=CESP(L) CESPM(J,I)=CESP(L) 370 CONTINUE IPX=(NPR-IS)/3 IPE=IS+IPX DO 380 I=1,NESP ES(I)=0.D0 380 CONTINUE CALL NAICAS(ISC,IS,IP,NPR,NC,IPE,IPX,ICD) CALL NAICAP(ISC,IS,IP,NPR,NC,IPE,IPX,ICD) C CALCULATE TOTAL ESP AND FORM ARRAYS FOR ESPFIT DO 400 I=1,NESP ESP(I)=0.D0 DO 390 J=1,NATOM RA=SQRT((CO(1,J)-POTPT(1,I))**2+(CO(2,J)-POTPT(2,I))**2+(CO( 13,J)-POTPT(3,I))**2) ESP(I)=ESP(I)+TORE(IAN(J))/(RA/BOHR) 390 CONTINUE ESP(I)=ESP(I)-ES(I) DO 400 J=1,NATOM RIJ=SQRT((CO(1,J)-POTPT(1,I))**2+(CO(2,J)-POTPT(2,I))**2 1+(CO(3,J)-POTPT(3,I))**2)/BOHR B(J)=B(J)+ESP(I)*1.D0/RIJ 400 CONTINUE C C IF REQUESTED WRITE OUT ELECTRIC POTENTIAL DATA TO C UNIT 21 C POTWRT=(INDEX(KEYWRD,'POTWRT') .NE. 0) IF(POTWRT) THEN OPEN(UNIT=21) WRITE(21,'(I5)') NESP DO 410 I=1,NESP 410 WRITE(21,420) ESP(I),POTPT(1,I)/BOHR,POTPT(2,I)/BOHR, 1POTPT(3,I) ENDIF 420 FORMAT(1X,4E16.7) RETURN END DOUBLE PRECISION FUNCTION DEX2(M) IMPLICIT DOUBLE PRECISION (A-H,O-Z) IF(M .LT. 2) THEN DEX2=1 ELSE DEX2=1 DO 10 I=1,M,2 10 DEX2=DEX2*I ENDIF RETURN END BLOCK DATA ESPBLO IMPLICIT DOUBLE PRECISION (A-H, O-Z) INCLUDE 'SIZES' COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1 EX(MAXPR),ESPI(MAXORB,MAXORB), 2 FV(0:8,821),FAC(0:7), 3 DEX(-1:96),TF(0:2),TEMP(MAXPR),ITEMP(MAXPR), 4 OVL(MAXORB,MAXORB),FC(MAXPR*6) DATA TF/33.D0,37.D0,41.D0/ DATA FAC/1.D0,1.D0,2.D0,6.D0,24.D0,120.D0,720.D0,5040.D0/ END C*********************************************************************** SUBROUTINE ESPFIT(IDIP,NATOM,NESP,IZ,ESP,POTPT,CO, 1DX,DY,DZ,RMS,RRMS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C*********************************************************************** C C THIS ROUTINE FITS THE ELECTROSTATIC POTENTIAL TO A MONOPOLE C EXPANSION. FITTING TO THE DIPOLE MONENT CAN ALSO BE DONE. C THIS ROUTINE WAS WRITTEN BY B.H.BESLER AND K.M.MERZ C IN FEB. 1989 AT UCSF. C C ON INPUT: IDIP = FLAG TO INDICATE IF THE DIPOLE IS FIT C NATOM = NUMBER OF ATOMS C NESP = NUMBER OF ESP POINTS C IZ = MOLECULAR CHARGE C ESP = TOTAL ESP AT THE POINTS C POTPT = ESP POINTS C CO = COORDINATES C DX = X COMPONENT OF THE DIPOLE C DY = Y COMPONENT OF THE DIPOLE C DZ = Z COMPONENT OF THE DIPOLE C C ON OUTPUT: Q = ESP CHARGES C RMS = ROOT MEAN SQUARE FIT C RRMS = RELATIVE ROOT MEAN SQUARE FIT C C FOR MORE DETAILS SEE: BESLER,MERZ,KOLLMAN J. COMPUT. CHEM. C (IN PRESS) C*********************************************************************** COMMON/ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),QSC(NUMATM+4),CF, ESPFD(MAXORB**2-NUMATM-5) DIMENSION CO(3,*),ESP(*),POTPT(3,*) BOHR = 0.529167D00 C CONVERSION FACTOR FOR DEBYE TO ATOMIC UNITS CF=5.2917715D-11*1.601917D-19/3.33564D-30 C C THE FOLLOWING SETS UP THE LINEAR EQUATION A*Q=B C SET UP THE A(J,K) ARRAY C DO 20 K=1,NATOM DO 10 J=1,NATOM DO 10 I=1,NESP RIK=SQRT((CO(1,K)-POTPT(1,I))**2+(CO(2,K)-POTPT(2,I))**2 1 +(CO(3,K)-POTPT(3,I))**2)/BOHR RIJ=SQRT((CO(1,J)-POTPT(1,I))**2+(CO(2,J)-POTPT(2,I))**2 1 +(CO(3,J)-POTPT(3,I))**2)/BOHR A(J,K)=A(J,K)+1.D0/RIK*1.D0/RIJ 10 CONTINUE A(NATOM+1,K)=1.D0 A(K,NATOM+1)=1.D0 A(NATOM+1,NATOM+1)=0.D0 IF(IDIP .EQ. 1) THEN A(NATOM+2,K)=CO(1,K)/BOHR A(K,NATOM+2)=CO(1,K)/BOHR A(NATOM+2,NATOM+2)=0.D0 A(NATOM+3,K)=CO(2,K)/BOHR A(K,NATOM+3)=CO(2,K)/BOHR A(NATOM+3,NATOM+3)=0.D0 A(NATOM+4,K)=CO(3,K)/BOHR A(K,NATOM+4)=CO(3,K)/BOHR A(NATOM+4,NATOM+4)=0.D0 ENDIF 20 CONTINUE B(NATOM+1)=FLOAT(IZ) B(NATOM+2)=DX/CF B(NATOM+3)=DY/CF B(NATOM+4)=DZ/CF C C INSERT CHARGE AND DIPOLAR (IF DESIRED) CONSTRAINTS C IF(IDIP .EQ. 1) THEN L=0 DO 30 I=1,NATOM+4 DO 30 J=1,NATOM+4 L=L+1 30 AL(L)=A(I,J) ELSE L=0 DO 40 I=1,NATOM+1 DO 40 J=1,NATOM+1 L=L+1 40 AL(L)=A(I,J) ENDIF IF (IDIP .EQ. 1) THEN CALL OSINV(AL,NATOM+4,DET) ELSE CALL OSINV(AL,NATOM+1,DET) ENDIF IF(IDIP .EQ. 1) THEN L=0 DO 50 I=1,NATOM+4 DO 50 J=1,NATOM+4 L=L+1 50 A(I,J)=AL(L) ELSE L=0 DO 60 I=1,NATOM+1 DO 60 J=1,NATOM+1 L=L+1 60 A(I,J)=AL(L) ENDIF C C SOLVE FOR THE CHARGES C IF(IDIP .EQ. 1) THEN DO 70 I=1,NATOM+4 DO 70 J=1,NATOM+4 Q(I)=Q(I)+A(I,J)*B(J) 70 CONTINUE ELSE DO 80 I=1,NATOM+1 DO 80 J=1,NATOM+1 Q(I)=Q(I)+A(I,J)*B(J) 80 CONTINUE ENDIF C C CALCULATE ROOT MEAN SQUARE FITS AND RELATIVE ROOT MEAN SQUARE FITS C CTOT=0.0 DO 100 I=1,NESP ESPC=0.D0 DO 90 J=1,NATOM RIJ=SQRT((CO(1,J)-POTPT(1,I))**2+(CO(2,J)-POTPT(2,I))**2 1 +(CO(3,J)-POTPT(3,I))**2)/BOHR 90 ESPC=ESPC+Q(J)/RIJ RMS=RMS+(ESPC-ESP(I))**2 100 RRMS=RRMS+ESP(I)**2 RMS=SQRT(RMS/NESP) RRMS=RMS/SQRT(RRMS/NESP) RMS=RMS*627.51D0 RETURN END C*********************************************************************** SUBROUTINE FSUB(N,X,FVAL) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C*********************************************************************** C C CALCULATE THE FM(T). KINDLY SUPPLIED BY RUS PITZER AND CLEANED UP C BY K.M.MERZ IN FEB. 1989 AT UCSF. C C ON INPUT: N = INDEX C X = EXPONENT C ON OUTPUT: FVAL = VALUE OF THE FUNCTION C C FOR MORE DETAILS SEE: OBARA AND SAIKA J. CHEM. PHYS. 1986,84,3963 C*********************************************************************** DIMENSION FF(21),TERM(200),A(10),RT(10) DATA A0, A1S2, PIE4, A1 1 /0.0D0,0.5D0,0.7853981633974483096156608D0,1.0D0/ DATA XSW /24.0D0/ E=A1S2*EXP(-X) FAC0=N FAC0=FAC0+A1S2 IF(X.GT.XSW) GO TO 50 C C USE POWER SERIES C 10 FAC=FAC0 TERM0=E/FAC SUM=TERM0 KU=(X-FAC0) IF(KU.LT.1) GO TO 30 C C SUM INCREASING TERMS FORWARDS C DO 20 K=1,KU FAC=FAC+A1 TERM0=TERM0*X/FAC SUM=SUM+TERM0 20 CONTINUE 30 I=1 FAC=FAC+A1 TERM(1)=TERM0*X/FAC SUMA=SUM+TERM(1) IF(SUM.EQ.SUMA) GO TO 90 40 I=I+1 FAC=FAC+A1 TERM(I)=TERM(I-1)*X/FAC SUM1=SUMA SUMA=SUMA+TERM(I) IF(SUM1-SUMA) 40,90,40 C C USE ASYMPTOTIC SERIES C 50 SUM=SQRT(PIE4/X) IF(N.EQ.0) GO TO 70 FAC=-A1S2 DO 60 K=1,N FAC=FAC+A1 SUM=SUM*FAC/X 60 CONTINUE 70 I=1 TERM(1)=-E/X SUMA=SUM+TERM(1) IF(SUM.EQ.SUMA) GO TO 90 FAC=FAC0 KU=(X+FAC0-A1) DO 80 I=2,KU FAC=FAC-A1 TERM(I)=TERM(I-1)*FAC/X SUM1=SUMA SUMA=SUMA+TERM(I) IF(SUM1.EQ.SUMA) GO TO 90 80 CONTINUE C C XSW SET TOO LOW. USE POWER SERIES. C GO TO 10 C C SUM DECREASING TERMS BACKWARDS C 90 SUM1=A0 DO 100 K=1,I SUM1=SUM1+TERM(I+1-K) 100 CONTINUE FF(N+1)=SUM+SUM1 C C USE RECURRENCE RELATION C IF(N.EQ.0) GOTO 120 DO 110 K=1,N FAC0=FAC0-A1 FF(N+1-K)=(E+X*FF(N+2-K))/FAC0 110 CONTINUE 120 FVAL=FF(N+1) RETURN END SUBROUTINE SETUP3 IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /NATYPE/ NZTYPE(107),MTYPE(30),LTYPE COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) C SET-UP THE STEWART'S STO-3G EXPANSIONS C FROM J. CHEM. PHYS. 52 431. C 1S ALLZ(1,1,1) =2.227660584D00 ALLZ(2,1,1) =4.057711562D-01 ALLZ(3,1,1) =1.098175104D-01 C ALLC(1,1,1) =1.543289673D-01 ALLC(2,1,1) =5.353281423D-01 ALLC(3,1,1) =4.446345422D-01 C 2S ALLZ(1,2,1) =2.581578398D00 ALLZ(2,2,1) =1.567622104D-01 ALLZ(3,2,1) =6.018332272D-02 C ALLC(1,2,1) =-5.994474934D-02 ALLC(2,2,1) =5.960385398D-01 ALLC(3,2,1) =4.581786291D-01 C 2P ALLZ(1,2,2) =9.192379002D-01 ALLZ(2,2,2) =2.359194503D-01 ALLZ(3,2,2) =8.009805746D-02 C ALLC(1,2,2) =1.623948553D-01 ALLC(2,2,2) =5.661708862D-01 ALLC(3,2,2) =4.223071752D-01 C 3S ALLZ(1,3,1) =5.641487709D-01 ALLZ(2,3,1) =6.924421391D-02 ALLZ(3,3,1) =3.269529097D-02 C ALLC(1,3,1) =-1.782577972D-01 ALLC(2,3,1) =8.612761663D-01 ALLC(3,3,1) =2.261841969D-01 C 3P ALLZ(1,3,2) =2.692880368D00 ALLZ(2,3,2) =1.489359592D-01 ALLZ(3,3,2) =5.739585040D-02 C ALLC(1,3,2) =-1.061945788D-02 ALLC(2,3,2) =5.218564264D-01 ALLC(3,3,2) =5.450015143D-01 C 4S ALLZ(1,4,1) =2.267938753D-01 ALLZ(2,4,1) =4.448178019D-02 ALLZ(3,4,1) =2.195294664D-02 C ALLC(1,4,1) =-3.349048323D-01 ALLC(2,4,1) =1.056744667D00 ALLC(3,4,1) =1.256661680D-01 C 4P ALLZ(1,4,2) =4.859692220D-01 ALLZ(2,4,2) =7.430216918D-02 ALLZ(3,4,2) =3.653340923D-02 C ALLC(1,4,2) =-6.147823411D-02 ALLC(2,4,2) =6.604172234D-01 ALLC(3,4,2) =3.932639495D-01 C 5S ALLZ(1,5,1) =1.080198458D-01 ALLZ(2,5,1) =4.408119382D-02 ALLZ(3,5,1) =2.610811810D-02 C ALLC(1,5,1) =-6.617401158D-01 ALLC(2,5,1) =7.467595004D-01 ALLC(3,5,1) =7.146490945D-01 C 5P ALLZ(1,5,2) =2.127482317D-01 ALLZ(2,5,2) =4.729648620D-02 ALLZ(3,5,2) =2.604865324D-02 C ALLC(1,5,2) =-1.389529695D-01 ALLC(2,5,2) =8.076691064D-01 ALLC(3,5,2) =2.726029342D-01 C RETURN END SUBROUTINE OVLP(IC,IESP,IS,IP,NPR,NC,ICD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C*********************************************************************** C C OVLP CALCULATES THE OVERLAP INTEGRALS FOR A STO-6G BASIS SET. C THE RESULTING INTEGRALS ARE USED IN THE DEORTHOGONALIZATION C PROCESS. C THE CODE WAS WRITTEN BY B.H.BESLER AND K.M.MERZ IN FEB. 1989 C AT UCSF. C C ON INPUT: IC = LOOP INDEX C IESP = LOOP INDEX C IS = NUMBER OF S ORBITALS C IP = NUMBER OF P ORBITALS C NPR = NUMBER OF PRIMITIVES C NC = NUMBER OF CONTRACTED FUNCTIONS C C ON OUTPUT: OVL IS FILLED WITH THE OVERLAP INTEGRAL VALUE C C FOR FURTHER INFO SEE: OBARA & SAIKA J.CHEM.PHYS. 1986,84,3963 C*********************************************************************** LOGICAL CALLED DOUBLE PRECISION NAI,NAI1,NAI2 INCLUDE 'SIZES' COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /EXPONT/ ZS(107),ZP(107),ZD(107) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1EX(MAXPR),ESPI(MAXORB,MAXORB),FV(0:8,821), 2FAC(0:7),DEX(-1:96),TF(0:2), 3TEMP(MAXPR),ITEMP(MAXPR),OVL(MAXORB,MAXORB),XDMY(MAXPR*6) COMMON/X/ DX(MAXPR),DY(MAXPR),DZ(MAXPR),F1(MAXPR,6),F2(MAXPR,6), 1TD(MAXPR),CE(MAXPR,6),U(MAXPR,6),EXS(MAXPR,6),EXPN(MAXPR,6), 2NAI(MAXPR,6),EWCX(MAXPR,6),EWCY(MAXPR,6),EWCZ(MAXPR,6),F0(MAXPR,6) 3,NAI1(MAXPR,6),NAI2(MAXPR,6) DATA BOHR/0.529167D0/ C C CALCULATE DISTANCE ARRAYS C PI=4.D0*ATAN(1.D0) IPR=IC*ICD-ICD+1 ISTART=IPR DO 10 I=ISTART,NPR DX(I)=CEN(IPR,1)-CEN(I,1) DY(I)=CEN(IPR,2)-CEN(I,2) DZ(I)=CEN(IPR,3)-CEN(I,3) TD(I)=DX(I)**2+DY(I)**2+DZ(I)**2 10 CONTINUE C C CALCULATE EXPONENT SUM C DO 20 I=ISTART,NPR DO 20 J=1,ICD EXS(I,J)=1.D0/(EX(IPR+J-1)+EX(I)) CE(I,J)=EX(IPR+J-1)*EX(I)*EXS(I,J) 20 CONTINUE C C CALCULATE EXPONENT WEIGHTED CENTERS C DO 30 I=ISTART,NPR DO 30 J=1,ICD EWCX(I,J)=(EX(I)*CEN(I,1)+EX(IPR+J-1) 1*CEN(IPR+J-1,1))*EXS(I,J) EWCY(I,J)=(EX(I)*CEN(I,2)+EX(IPR+J-1) 1*CEN(IPR+J-1,2))*EXS(I,J) EWCZ(I,J)=(EX(I)*CEN(I,3)+EX(IPR+J-1) 1*CEN(IPR+J-1,3))*EXS(I,J) 30 CONTINUE DO 40 I=1,NPR DO 40 J=1,ICD EXPN(I,J)=EXP(-CE(I,J)*TD(I)) NAI(I,J)=(PI*EXS(I,J))**1.5D0*EXPN(I,J) EXPN(I,J)=NAI(I,J) 40 CONTINUE C C CALCULATE (S||P) ESP INTEGRALS C IF((IAM(IPR,1) .EQ. 0) .AND. (IS .NE. IP)) THEN NP=IS+1 DO 80 I=NP,NPR DO 80 J=1,ICD GO TO (50,60,70),IAM(I,2) 50 NAI(I,J)=(EWCX(I,J)-CEN(I,1))*EXPN(I,J) go TO 80 60 NAI(I,J)=(EWCY(I,J)-CEN(I,2))*EXPN(I,J) GO TO 80 70 NAI(I,J)=(EWCZ(I,J)-CEN(I,3))*EXPN(I,J) 80 CONTINUE ENDIF C C CALCULATE (P||S) ESP INTEGRALS C IF((IAM(IPR,1) .EQ. 1) .AND. (IS .NE. IP)) THEN NP=IS+1 DO 120 I= ISTART,NPR DO 120 J=1,ICD GO TO (90,100,110),IAM(IPR+J-1,2) 90 NAI(I,J)=(EWCX(I,J)-CEN(IPR+J-1,1))*EXPN(I,J) GO TO 120 100 NAI(I,J)=(EWCY(I,J)-CEN(IPR+J-1,2))*EXPN(I,J) GO TO 120 110 NAI(I,J)=(EWCZ(I,J)-CEN(IPR+J-1,3))*EXPN(I,J) 120 CONTINUE ENDIF C C CALCULATE (P||P) ESP INTEGRALS C IF((IAM(IPR,1) .EQ. 1) .AND. (IS .NE. IP)) THEN DO 160 I=ISTART,NPR DO 160 J=1,ICD GO TO (130,140,150),IAM(I,2) 130 NAI(I,J)=(EWCX(I,J)-CEN(I,1))*NAI(I,J) IF(IAM(IPR+J-1,2) .EQ. IAM(I,2)) 1NAI(I,J)=NAI(I,J)+EXS(I,J)*0.5D0 2 *EXPN(I,J) GO TO 160 140 NAI(I,J)=(EWCY(I,J)-CEN(I,2))*NAI(I,J) IF(IAM(IPR+J-1,2) .EQ. IAM(I,2)) 1NAI(I,J)=NAI(I,J)+EXS(I,J)*0.5D0 2 *EXPN(I,J) GO TO 160 150 NAI(I,J)=(EWCZ(I,J)-CEN(I,3))*NAI(I,J) IF(IAM(IPR+J-1,2) .EQ. IAM(I,2)) 1NAI(I,J)=NAI(I,J)+EXS(I,J)*0.5D0 2 *EXPN(I,J) 160 CONTINUE ENDIF IPS=IC*ICD-ICD+1 DO 180 I=IC,NC JPS=I*ICD-ICD+1 OVL(IC,I)=0.D0 DO 170 J=JPS,JPS+ICD-1 DO 170 K=IPS,IPS+ICD-1 OVL(IC,I)=OVL(IC,I)+CC(J)*CC(K)*NAI(J,K-IPS+1) 170 CONTINUE OVL(I,IC)=OVL(IC,I) 180 CONTINUE RETURN END SUBROUTINE NAICAS(ISC,IS,IP,NPR,NC,IPE,IPX,ICD) IMPLICIT DOUBLE PRECISION(A-H,O-Z) C*********************************************************************** C C THIS SUBROUTINE EVALUATES (S|S) , (S|P) TYPE NUCLEAR ATTRACTION C INTEGRALS FOR A STO-NG BASIS SET C WRITTEN BY B.H. BESLER AT FORD SCIENTIFIC RESEARCH LABS IN C DECEMBER 1989. C C ON INPUT: IC = LOOP INDEX OF THE GAUSSIAN C IESP = LOOP INDEX OF THE ESP POINT C IPE = INDEX OF LAST Px PRIMITIVE C IPX = NUMBER OF Px PRIMITIVES C IS = NUMBER OS S ORBITALS C ISC = NUMBER OF CONTRACTED S ORBITALS C IP = NUMBER OF P ORBITALS C NPR = NUMBER OF PRIMITIVES C NC = NUMBER OF CONTRACTED FUNCTIONS C C C FOR MORE INFO SEE: OBARA&SAIKA J.CHEM.PHYS. 1986,84,3963. C*********************************************************************** INCLUDE 'SIZES' DOUBLE PRECISION NAI,NAI1,NAI2 CHARACTER*241 KEYWRD COMMON/KEYWRD/ KEYWRD COMMON/ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),CESPM(MAXORB,MAXORB) COMMON /INDX/ INDC(MAXORB) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /EXPONT/ ZS(107),ZP(107),ZD(107) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1EX(MAXPR),ESPI(MAXORB,MAXORB),FV(0:8,821), 2FAC(0:7),DEX(-1:96),TF(0:2), 3TEMP(MAXPR),ITEMP(MAXPR),OVL(MAXORB,MAXORB),EXSR(MAXPR,6) COMMON/X/ DX(MAXPR),DY(MAXPR),DZ(MAXPR),F1(MAXPR,6),F2(MAXPR,6), 1TD(MAXPR),CE(MAXPR,6),U(MAXPR,6),EXS(MAXPR,6),EXPN(MAXPR,6), 2NAI(MAXPR,6),EWCX(MAXPR,6),EWCY(MAXPR,6),EWCZ(MAXPR,6),F0(MAXPR,6) 3,NAI1(MAXPR,6),NAI2(MAXPR,6) DATA BOHR/0.529167D0/ C C CALCULATE DISTANCE ARRAYS C C *** it seems that this is not necessary... C WRITE(6,*) PI=4.D0*ATAN(1.D0) IPX2=2*IPX C IF THIS IS A RESTART RUN, READ IN RESTART INFO C *** skip all restart stuff, we don't need that... C IF(INDEX(KEYWRD,'ESPRST') .NE. 0) THEN C OPEN(UNIT=15,FILE='ESP.DUMP',STATUS='OLD',FORM='UNFORMATTED') C READ(15) JSTART,IESPS C IF(JSTART .EQ. ISC*2) THEN C CLOSE(15) C RETURN C ENDIF C DO 10 I=1,NESP C READ(15) ES(I) C 10 CONTINUE C CLOSE(15) CC C JSTART=JSTART+1 C ELSE JSTART=1 C ENDIF NP=IS+1 DO 200 IC=JSTART,ISC IPR=IC*ICD-ICD+1 ISTART=IPR DO 20 I=ISTART,IPE DX(I)=CEN(IPR,1)-CEN(I,1) DY(I)=CEN(IPR,2)-CEN(I,2) DZ(I)=CEN(IPR,3)-CEN(I,3) TD(I)=DX(I)**2+DY(I)**2+DZ(I)**2 20 CONTINUE C C CALCULATE EXPONENT SUM C DO 30 I=ISTART,IPE DO 30 J=1,ICD EXSR(I,J)=EX(IPR+J-1)+EX(I) EXS(I,J)=1.D0/EXSR(I,J) CE(I,J)=EX(IPR+J-1)*EX(I)*EXS(I,J) EXPN(I,J)=EXP(-CE(I,J)*TD(I)) 30 CONTINUE C C CALCULATE EXPONENT WEIGHTED CENTERS C DO 40 I=ISTART,IPE DO 40 J=1,ICD EWCX(I,J)=(EX(I)*CEN(I,1)+EX(IPR+J-1) 1*CEN(IPR+J-1,1))*EXS(I,J) EWCY(I,J)=(EX(I)*CEN(I,2)+EX(IPR+J-1) 1*CEN(IPR+J-1,2))*EXS(I,J) EWCZ(I,J)=(EX(I)*CEN(I,3)+EX(IPR+J-1) 1*CEN(IPR+J-1,3))*EXS(I,J) 40 CONTINUE C C BEGIN LOOP OVER ESP POINTS C DO 180 IESP=1,NESP POTP1=POTPT(1,IESP)/BOHR POTP2=POTPT(2,IESP)/BOHR POTP3=POTPT(3,IESP)/BOHR C C BEGIN LOOP OVER COMPONENTS OF CONTRACTED FUNCTION IC C DO 150 J=1,ICD C C CALCULATE DISTANCE BETWEEN EXPONENT WEIGHTED AND PROBE POINT C DO 50 I=ISTART,IPE U(I,J)=((EWCX(I,J)-POTP1)**2+(EWCY(I,J)-POTP2)**2+ 1 (EWCZ(I,J)-POTP3)**2)*EXSR(I,J) NAI(I,J)=SQRT(PI/U(I,J)) 50 CONTINUE C C CALCULATE ESP INTEGRALS C DO 70 I=ISTART,IPE IF(U(I,J) .LE. TF(0)) THEN IREF=DNINT(U(I,J)*20.D0) REF=0.05D0*IREF RES=U(I,J)-REF TERM=1.D0 F0(I,J)=0.D0 DO 60 K=0,6 F=FV(K,IREF+1) TS=F*TERM*FAC(K) TERM=-TERM*RES F0(I,J)=F0(I,J)+TS 60 CONTINUE ELSE F0(I,J)=NAI(I,J)*0.5D0 ENDIF 70 CONTINUE DO 90 I=NP,IPE IF(U(I,J) .LE. TF(1)) THEN IREF=DNINT(U(I,J)*20.D0) REF=0.05D0*IREF RES=U(I,J)-REF TERM1=1.D0 F1(I,J)=0.D0 DO 80 K=0,6 FI=FV(K+1,IREF+1) TS1=FI*TERM1*FAC(K) TERM1=-TERM1*RES F1(I,J)=F1(I,J)+TS1 80 CONTINUE ELSE F1(I,J)=NAI(I,J)*0.25D0/U(I,J) ENDIF 90 CONTINUE DO 100 I=ISTART,IS 100 U(I,J)=2.D0*PI*EXS(I,J)*EXPN(I,J)*F0(I,J) NP=IS+1 DO 110 I=NP,IPE NAI(I,J)=2.D0*PI*EXS(I,J)*EXPN(I,J)*F0(I,J) NAI1(I,J)=2.D0*PI*EXS(I,J)*EXPN(I,J)*F1(I,J) 110 CONTINUE C C CALCULATE (S||P) ESP INTEGRALS C IF((IAM(IPR,1) .EQ. 0) .AND. (IS .NE. IP)) THEN DO 120 I=NP,IPE 120 U(I,J)=(EWCX(I,J)-CEN(I,1))*NAI(I,J) 1-(EWCX(I,J)-POTP1)*NAI1(I,J) DO 130 I=IPE+1,IPE+1+IPX 130 U(I,J)=(EWCY(I-IPX,J)-CEN(I-IPX,2))*NAI(I-IPX,J) 1-(EWCY(I-IPX,J)-POTP2)*NAI1(I-IPX,J) DO 140 I=IPE+1+IPX,NPR 140 U(I,J)=(EWCZ(I-IPX2,J)-CEN(I-IPX2,3))*NAI(I-IPX2,J) 1-(EWCZ(I-IPX2,J)-POTP3)*NAI1(I-IPX2,J) ENDIF 150 CONTINUE IPS=IC*ICD-ICD+1 DO 170 I=IC,NC JPS=I*ICD-ICD+1 ESPI(I,IC)=0.D0 DO 160 J=JPS,JPS+ICD-1 DO 160 K=IPS,IPS+ICD-1 ESPI(I,IC)=ESPI(I,IC)+CC(J)*CC(K)*U(J,K-IPS+1) 160 CONTINUE ES(IESP)=ES(IESP)+2.D0*CESPM(INDC(I),INDC(IC))*ESPI(I,IC) 170 CONTINUE ES(IESP)=ES(IESP)-CESPM(INDC(IC),INDC(IC))*ESPI(IC,IC) 180 CONTINUE C WRITE OUT RESTART INFORMATION C *** no dumps please... C *** no dumps please... C *** no dumps please... C OPEN(UNIT=15,FILE='ESP.DUMP',STATUS='UNKNOWN',FORM='UNFORMATTED C 1') C IESPS=0 C WRITE(15) IC,IESPS C DO 190 I=1,NESP C WRITE(15) ES(I) C 190 CONTINUE C CLOSE(15) C C WRITE(6,'(A,F6.2,A)') C 1'NAICAS DUMPED: ',100.D0/ISC*IC,' PERCENT COMPLETE' 200 CONTINUE RETURN END SUBROUTINE NAICAP(ISC,IS,IP,NPR,NC,IPE,IPX,ICD) IMPLICIT DOUBLE PRECISION(A-H,O-Z) C*********************************************************************** C THIS ROUTINE EVALUATES (P|P) NUCLEAR ATTRACTION INTEGRALS OVER C C A STO-NG BASIS SET. C WRITTEN BY B.H. BESLER AT FORD SCIENTIFIC RESEARCH LABS IN C SEPT. 1989 C C ON INPUT: IC = LOOP INDEX OF THE GAUSSIAN C ICD = CONTRACTION DEPTH OF BASIS SET C IESP = LOOP INDEX OF THE ESP POINT C IS = NUMBER OS S PRIMITIVES C IPE = INDEX OF LAST PX PRIMITIVE C IPX = NUMBER OF PX PRIMITIVES C IS = NUMBER OS S PRIMITIVES C ISC = NUMBER OF CONTRACTED C NPR = NUMBER OF PRIMITIVES C NC = NUMBER OF CONTRACTED FUNCTIONS C C C FOR MORE INFO SEE: OBARA&SAIKA J.CHEM.PHYS. 1986,84,3963. C*********************************************************************** INCLUDE 'SIZES' DOUBLE PRECISION NAI,NAI1,NAI2 CHARACTER*241 KEYWRD COMMON /KEYWRD/ KEYWRD COMMON/ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),CESPM(MAXORB,MAXORB) COMMON /INDX/ INDC(MAXORB) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /EXPONT/ ZS(107),ZP(107),ZD(107) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1EX(MAXPR),ESPI(MAXORB,MAXORB),FV(0:8,821), 2FAC(0:7),DEX(-1:96),TF(0:2), 3TEMP(MAXPR),ITEMP(MAXPR),OVL(MAXORB,MAXORB),EXSR(MAXPR,6) COMMON/X/ DX(MAXPR),DY(MAXPR),DZ(MAXPR),F1(MAXPR,6),F2(MAXPR,6), 1TD(MAXPR),CE(MAXPR,6),U(MAXPR,6),EXS(MAXPR,6),EXPN(MAXPR,6), 2NAI(MAXPR,6),EWCX(MAXPR,6),EWCY(MAXPR,6),EWCZ(MAXPR,6),F0(MAXPR,6) 3,NAI1(MAXPR,6),NAI2(MAXPR,6) COMMON/FP/ PF0(MAXHES),PF1(MAXHES),PF2(MAXHES),ID(MAXPAR), 1PEXS(MAXHES),PCE(MAXHES),PEXPN(MAXHES),PTD(MAXHES), 2PEWCX(MAXHES),PEWCY(MAXHES),PEWCZ(MAXHES),IRD(MAXHES) DATA BOHR/0.529167D0/ C SET NUMBER OF EQUALLY SPACED DUMPS IDN=10 C IDC=0 C *** it seems that this is not necessary... C WRITE(6,*) IPX2=2*IPX PI=4.D0*ATAN(1.D0) NP=IS+1 C SETUP INDEX ARRAY DO 10 I=NP,IPE IRD(I)=I-IS IRD(I+IPX)=I-IS IRD(I+IPX2)=I-IS 10 CONTINUE C C CALCULATE QUANTITIES INVARIANT WITH ESP POINT FOR C (P|P) ESP INTEGRALS C IL=L L=0 DO 30 I=NP,IPE DO 20 J=I,IPE L=L+1 PTD(L)=(CEN(I,1)-CEN(J,1))**2+(CEN(I,2)-CEN(J,2))**2+ 1(CEN(I,3)-CEN(J,3))**2 PEXS(L)=1.d0/(EX(I)+EX(J)) PCE(L)=EX(I)*EX(J)*PEXS(L) PEXPN(L)=EXP(-PCE(L)*PTD(L)) PEWCX(L)=(EX(I)*CEN(I,1)+EX(J)*CEN(J,1))*PEXS(L) PEWCY(L)=(EX(I)*CEN(I,2)+EX(J)*CEN(J,2))*PEXS(L) PEWCZ(L)=(EX(I)*CEN(I,3)+EX(J)*CEN(J,3))*PEXS(L) 20 CONTINUE C C SET UP OTHER INDEX ARRAY FOR PACKED SYMMETRIC ARRAY C STORAGE C ID(I-IS)=L-IPX 30 CONTINUE C C READ IN RESTART INFORMATION IF THIS IS A RESTART C C *** skip all restart stuff, we don't need that... C IF(INDEX(KEYWRD,'ESPRST') .NE. 0) THEN C OPEN(UNIT=15,FILE='ESP.DUMP',STATUS='UNKNOWN',FORM='UNFORMATTED C 1') C READ(15) JSTART,IESPS C IF(JSTART .NE. ISC*2) THEN C IESPS=0 C CLOSE(15) C GOTO 50 C ENDIF C DO 40 I=1,NESP C READ(15) ES(I) C 40 CONTINUE C CLOSE(15) C IDC=FLOAT(IESPS)/FLOAT(NESP)*10 C ELSE IESPS=0 C ENDIF 50 CONTINUE C C LOOP OVER ESP PROBE POINTS C DO 250 IESP=IESPS+1,NESP POTP1=POTPT(1,IESP)/BOHR POTP2=POTPT(2,IESP)/BOHR POTP3=POTPT(3,IESP)/BOHR C CALCULATE QUANTITY U C L=0 DO 60 I=NP,IPE DO 60 J=I,IPE L=L+1 PTD(L)=((PEWCX(L)-POTP1)**2+(PEWCY(L)-POTP2)**2+ 1 (PEWCZ(L)-POTP3)**2)/PEXS(L) PCE(L)=SQRT(PI/PTD(L)) 60 CONTINUE C C CALCULATE F0, F1, AND F2(U) USING TAYLOR SERIES C OR ASYMPTOTIC EXPANSION C IL=L L=0 DO 100 I=1,IL IF(PTD(I) .LE. TF(0)) THEN IREF=DNINT(PTD(I)*20.D0) REF=0.05D0*IREF RES=PTD(I)-REF TERM=1.D0 PF0(I)=0.D0 DO 70 K=0,6 F=FV(K,IREF+1) TS=F*TERM*FAC(K) TERM=-TERM*RES PF0(I)=PF0(I)+TS 70 CONTINUE ELSE PF0(I)=PCE(I)*0.5D0 ENDIF IF(PTD(I) .LE. TF(1)) THEN IREF=DNINT(PTD(I)*20.D0) REF=0.05D0*IREF RES=PTD(I)-REF TERM1=1.D0 PF1(I)=0.D0 DO 80 K=0,6 FI=FV(K+1,IREF+1) TS1=FI*TERM1*FAC(K) TERM1=-TERM1*RES PF1(I)=PF1(I)+TS1 80 CONTINUE ELSE PF1(I)=PCE(I)*0.25D0/PTD(I) ENDIF IF(PTD(I) .LE. TF(2)) THEN IREF=DNINT(PTD(I)*20.D0) REF=0.05D0*IREF RES=PTD(I)-REF TERM2=1.D0 PF2(I)=0.D0 DO 90 K=0,6 FII=FV(K+2,IREF+1) TS2=FII*TERM2*FAC(K) TERM2=-TERM2*RES PF2(I)=PF2(I)+TS2 90 CONTINUE ELSE PF2(I)=PCE(I)*0.375D0/(PTD(I)*PTD(I)) ENDIF 100 CONTINUE C C CALCULATE (S||S) TYPE INTEGRALS C DO 110 I=1,IL PF0(I)=2.D0*PI*PEXS(I)*PEXPN(I)*PF0(I) PTD(I)=PF0(I) PF1(I)=2.D0*PI*PEXS(I)*PEXPN(I)*PF1(I) PF2(I)=2.D0*PI*PEXS(I)*PEXPN(I)*PF2(I) 110 CONTINUE C DO 230 IC=ISC+1,NC IPR=IC*ICD-ICD+1 ISTART=IPR DO 200 J=1,ICD C C CALCULATE (P||S) ESP INTEGRALS C IF((IAM(IPR,1) .EQ. 1) .AND. (IS .NE. IP)) THEN DO 150 I=ISTART,NPR IN=IPR+J-1 IR=IRD(I)+ID(IRD(IN)) IR2=ID(IRD(I))+IRD(IN) IF(IR2 .LE. IR ) IR=IR2 GO TO (120,130,140),IAM(IN,2) 120 NAI2(I,J)=(PEWCX(IR)-CEN(IN,1))*PF1(IR)-PF2(IR)* 1 (PEWCX(IR)-POTP1) NAI(I,J)=(PEWCX(IR)-CEN(IN,1))*PF0(IR)-PF1(IR)* 1 (PEWCX(IR)-POTP1) GO TO 150 130 NAI2(I,J)=(PEWCY(IR)-CEN(IN,2))*PF1(IR)-PF2(IR)* 1 (PEWCY(IR)-POTP2) NAI(I,J)=(PEWCY(IR)-CEN(IN,2))*PF0(IR)-PF1(IR)* 1 (PEWCY(IR)-POTP2) GO TO 150 140 NAI2(I,J)=(PEWCZ(IR)-CEN(IN,3))*PF1(IR)-PF2(IR)* 1 (PEWCZ(IR)-POTP3) NAI(I,J)=(PEWCZ(IR)-CEN(IN,3))*PF0(IR)-PF1(IR)* 1 (PEWCZ(IR)-POTP3) 150 CONTINUE ENDIF C C CALCULATE (P||P) ESP INTEGRALS C IF((IAM(IPR,1) .EQ. 1) .AND. (IS .NE. IP)) THEN DO 190 I=ISTART,NPR IN=IPR+J-1 IR=IRD(I)+ID(IRD(IN)) IR2=ID(IRD(I))+IRD(IN) IF(IR2 .LE. IR ) IR=IR2 GO TO (160,170,180),IAM(I,2) 160 NAI(I,J)=(PEWCX(IR)-CEN(I,1))*NAI(I,J)-(PEWCX(IR)-P 1OTP1)* NAI2(I,J) IF(IAM(IN,2) .EQ. IAM(I,2)) NAI(I,J)=NAI(I,J)+PEXS( 1IR)* 0.5D0*(PTD(IR)-PF1(IR)) GO TO 190 170 NAI(I,J)=(PEWCY(IR)-CEN(I,2))*NAI(I,J)-(PEWCY(IR)-P 1OTP2)* NAI2(I,J) IF(IAM(IN,2) .EQ. IAM(I,2)) NAI(I,J)=NAI(I,J)+PEXS( 1IR)* 0.5D0*(PTD(IR)-PF1(IR)) GO TO 190 180 NAI(I,J)=(PEWCZ(IR)-CEN(I,3))*NAI(I,J)-(PEWCZ(IR)-P 1OTP3)* NAI2(I,J) IF(IAM(IN,2) .EQ. IAM(I,2)) NAI(I,J)=NAI(I,J)+PEXS( 1IR)* 0.5D0*(PTD(IR)-PF1(IR)) 190 CONTINUE ENDIF 200 CONTINUE C C FORM INTEGRALS OVER CONTRACTED FUNCTIONS C IPS=IC*ICD-ICD+1 DO 220 I=IC,NC JPS=I*ICD-ICD+1 ESPI(I,IC)=0.D0 DO 210 J=JPS,JPS+ICD-1 DO 210 K=IPS,IPS+ICD-1 ESPI(I,IC)=ESPI(I,IC)+CC(J)*CC(K)*NAI(J,K-IPS+1) 210 CONTINUE ES(IESP)=ES(IESP)+2.D0*CESPM(INDC(I),INDC(IC))*ESPI(I,IC) 220 CONTINUE ES(IESP)=ES(IESP)-CESPM(INDC(IC),INDC(IC))*ESPI(IC,IC) 230 CONTINUE C C WRITE OUT RESTART INFORMATION EVERY NESP/10 POINTS C C *** no dumps please... C *** no dumps please... C *** no dumps please... C IF(MOD(IESP,NESP/IDN) .EQ. 0) THEN C OPEN(UNIT=15,FILE='ESP.DUMP',STATUS='UNKNOWN',FORM='UNFORMAT C 1TED') C JSTART=ISC*2 C WRITE(15) JSTART,IESP C DO 240 I=1,NESP C WRITE(15) ES(I) C 240 CONTINUE C CLOSE(15) C IDC=IDC+1 C WRITE(6,'(A,F6.2,A)') C 1'NAICAP DUMPED: ',100.D0/IDN*IDC,' PERCENT COMPLETE' C ENDIF 250 CONTINUE RETURN END C *** extensions for "miniMOPAC" plotting start here... C *** extensions for "miniMOPAC" plotting start here... C *** extensions for "miniMOPAC" plotting start here... SUBROUTINE GETGEOM C *** this is a start of PDGRID subroutine with small modifications. C *** this will just copy the geometry data for orginal ELESP. C C ROUTINE TO CALCULATE WILLIAMS SURFACE C IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION IZ(100),XYZ(3,100),VDERW(53),DIST(100) DIMENSION XMIN(3),XMAX(3),COORD(3,NUMATM) COMMON /GEOM/ GEO(3,NUMATM) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), NABC(3*NUMATM) C COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), WORK1D(4*MESP) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP C DATA VDERW/53*0.0D0/ VDERW(1)=2.4D0 VDERW(5)=3.0D0 VDERW(6)=2.9D0 VDERW(7)=2.7D0 VDERW(8)=2.6D0 VDERW(9)=2.55D0 VDERW(15)=3.1D0 VDERW(16)=3.05D0 VDERW(17)=3.0D0 VDERW(35)=3.15D0 VDERW(53)=3.35D0 SHELL=1.2D0 C NESP=0 GRID=0.8D0 CLOSER=0.D0 C CHECK IF VDERW IS DEFINED FOR ALL ATOMS C C CONVERT INTERNAL TO CARTESIAN COORDINATES C CALL GMETRY(GEO,COORD) C C STRIP COORDINATES AND ATOM LABEL FOR DUMMIES (I.E. 99) C ICNTR = 0 DO 20 I=1,NATOMS DO 10 J=1,3 10 CO(J,I) = COORD(J,I) IF(LABELS(I) .EQ. 99) GOTO 20 ICNTR = ICNTR + 1 IAN(ICNTR) = LABELS(I) 20 CONTINUE NATOM=ICNTR RETURN END SUBROUTINE LM7INIPLT IMPLICIT DOUBLE PRECISION (A-H,O-Z) C *** this is a modification to ELESP. it initializes the ELESP C *** calculation and also stores some extra data for other plots. C*********************************************************************** C ELESP LOADS THE STO-6G BASIS SET ONTO THE ATOMS, PERFOMS THE C DEORTHOGONALIZATION OF THE COEFFICIENTS AND EVALUATES THE C ELECTRONIC CONTRIBUTION TO THE ESP. IT WAS WRITTEN BY B.H.BESLER C AND K.M.MERZ IN FEB. 1989 AT UCSF. C C*********************************************************************** CHARACTER*241 KEYWRD DOUBLE PRECISION NORM,OVL LOGICAL CALLED,POTWRT,RST,STO3G INCLUDE 'SIZES' COMMON/ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),CESPM(MAXORB,MAXORB) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) COMMON /VECTOR/ C(MORB2*2+MAXORB*2) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /KEYWRD/ KEYWRD COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1 EX(MAXPR),ESPI(MAXORB,MAXORB), 2 FV(0:8,821),FAC(0:7), 3 DEX(-1:96),TF(0:2),TEMP(MAXPR),ITEMP(MAXPR), 4 OVL(MAXORB,MAXORB),FC(MAXPR*6) 6 /CORE / TORE(107) 7 /EXPONT/ ZS(107),ZP(107),ZD(107) * * END OF MINDO/3 COMMON BLOCKS * COMMON /INDX/ INDC(MAXORB) C *** an additional common block that carries variables for plotting routines. COMMON /PLOTS/ CESPM2(MAXORB,MAXORB),SLA(10), 1 CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB), 2 INC(MAXPR),NC,NPR,IS,IP,IPC,ISC,ICD,IORB C *** old arrays that are no longer needed are here, commented out. C DIMENSION CESPM2(MAXORB,MAXORB),SLA(10) C DIMENSION CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB) DATA BOHR/0.529167D0/ C *** now we call our GETGEOM subroutine here... CALL GETGEOM PI=4.D0*ATAN(1.D0) C C PUT STO-6G BASIS SET ON ATOM CENTERS C DO 10 I=-1,10 DEX(I)=DEX2(I) 10 CONTINUE DO 20 I=0,7 FAC(I)=1.D0/FAC(I) 20 CONTINUE DO 30 M=0,8 K=1 FV(M,1)=1.D0/(2.D0*M+1.D0) DO 30 T=0.05D0,41.D0,0.05D0 K=K+1 CALL FSUB(M,T,FVAL) FV(M,K)=FVAL 30 CONTINUE C C LOAD BASIS FUNCTIONS INTO ARRAYS C STO3G=(INDEX(KEYWRD,'STO3G') .NE. 0) IF(STO3G) THEN ICD=3 CALL SETUP3 ELSE ICD=6 CALL SETUPG ENDIF C *** NC is number of contractions C *** NPR is number of primitives NC=0 NPR=0 C *** the new array INC() will store the contraction indices... C *** the new array INC() will store the contraction indices... C *** the new array INC() will store the contraction indices... DO 80 I=1,NATOM IF (IAN(I) .LE. 2) THEN NC=NC+1 DO 40 J=1,ICD CC(NPR+J)=ALLC(J,1,1) EX(NPR+J)=ALLZ(J,1,1)*ZS(1)**2 CEN(NPR+J,1)=CO(1,I)/BOHR CEN(NPR+J,2)=CO(2,I)/BOHR CEN(NPR+J,3)=CO(3,I)/BOHR IAM(NPR+J,1)=0 IAM(NPR+J,2)=0 INC(NPR+J)=NC FC(NPR+J)=I 40 CONTINUE NPR=NPR+ICD ELSE C DETERMINE PRINCIPAL QUANTUM NUMBER(NQN) C OF ORBITALS TO BE USED C NQN=2 IF(IAN(I) .GT. 10 .AND. IAN(I) .LE. 18) NQN=3 IF(IAN(I) .GT. 18 .AND. IAN(I) .LE. 36) NQN=4 IF(IAN(I) .GT. 36 .AND. IAN(I) .LE. 54) NQN=5 C NC=NC+1 DO 50 J=1,ICD CC(NPR+J)=ALLC(J,NQN,1) EX(NPR+J)=ALLZ(J,NQN,1)*ZS(IAN(I))**2 CEN(NPR+J,1)=CO(1,I)/BOHR CEN(NPR+J,2)=CO(2,I)/BOHR CEN(NPR+J,3)=CO(3,I)/BOHR IAM(NPR+J,1)=0 IAM(NPR+J,2)=0 INC(NPR+J)=NC 50 CONTINUE NPR=NPR+ICD DO 70 K=1,3 NC=NC+1 DO 60 J=1,ICD CC(NPR+J)=ALLC(J,NQN,2) EX(NPR+J)=ALLZ(J,NQN,2)*ZP(IAN(I))**2 CEN(NPR+J,1)=CO(1,I)/BOHR CEN(NPR+J,2)=CO(2,I)/BOHR CEN(NPR+J,3)=CO(3,I)/BOHR IAM(NPR+J,1)=1 IAM(NPR+J,2)=K INC(NPR+J)=NC 60 CONTINUE NPR=NPR+ICD 70 CONTINUE ENDIF 80 CONTINUE C C CALCULATE NORMALIZATION CONSTANTS AND INCLUDE C THEM IN THE CONTRACTION COEFFICIENTS C DO 90 I=1,NPR NORM=(2.D0*EX(I)/PI)**0.75D0*(4.D0*EX(I))**(IAM(I,1)/2.D0)/ 1 SQRT(DEX(2*IAM(I,1)-1)) CC(I)=CC(I)*NORM 90 CONTINUE IPR=0 C C PERFORM SORT OF PRIMITIVES BY ANGULAR MOMENTUM C C *** IS is count of S primitives??? C *** IP is count of P primitives??? IS=0 IP=0 IPC=0 ISC=0 J=0 DO 100 I=1,NPR IF (IAM(I,1) .EQ. 0) THEN IS=IS+1 IND(IS)=I ENDIF 100 CONTINUE IP=IS DO 110 I=1,NPR IF (IAM(I,1) .EQ. 1 .AND. IAM(I,2) .EQ. 1) THEN IP=IP+1 IND(IP)=I ENDIF 110 CONTINUE DO 120 I=1,NPR IF (IAM(I,1) .EQ. 1 .AND. IAM(I,2) .EQ. 2) THEN IP=IP+1 IND(IP)=I ENDIF 120 CONTINUE DO 130 I=1,NPR IF (IAM(I,1) .EQ. 1 .AND. IAM(I,2) .EQ. 3) THEN IP=IP+1 IND(IP)=I ENDIF 130 CONTINUE DO 140 I=1,NC IN=I*ICD-ICD+1 IF (IAM(IN,1) .EQ. 0) THEN ISC=ISC+1 INDC(ISC)=I ENDIF 140 CONTINUE IPC=ISC DO 150 I=1,NC IN=I*ICD-ICD+1 IF (IAM(IN,1) .EQ. 1 .AND. IAM(IN,2) .EQ. 1) THEN IPC=IPC+1 INDC(IPC)=I ENDIF 150 CONTINUE DO 160 I=1,NC IN=I*ICD-ICD+1 IF (IAM(IN,1) .EQ. 1 .AND. IAM(IN,2) .EQ. 2) THEN IPC=IPC+1 INDC(IPC)=I ENDIF 160 CONTINUE DO 170 I=1,NC IN=I*ICD-ICD+1 IF (IAM(IN,1) .EQ. 1 .AND. IAM(IN,2) .EQ. 3) THEN IPC=IPC+1 INDC(IPC)=I ENDIF 170 CONTINUE DO 180 I=1,NPR TEMP(I)=CC(IND(I)) 180 CONTINUE DO 190 I=1,NPR CC(I)=TEMP(I) 190 CONTINUE DO 200 I=1,NPR TEMP(I)=EX(IND(I)) 200 CONTINUE DO 210 I=1,NPR EX(I)=TEMP(I) 210 CONTINUE DO 220 I=1,NPR TEMP(I)=CEN(IND(I),1) 220 CONTINUE DO 230 I=1,NPR CEN(I,1)=TEMP(I) 230 CONTINUE DO 240 I=1,NPR TEMP(I)=CEN(IND(I),2) 240 CONTINUE DO 250 I=1,NPR CEN(I,2)=TEMP(I) 250 CONTINUE DO 260 I=1,NPR TEMP(I)=CEN(IND(I),3) 260 CONTINUE DO 270 I=1,NPR CEN(I,3)=TEMP(I) 270 CONTINUE DO 280 I=1,NPR ITEMP(I)=IAM(IND(I),1) 280 CONTINUE DO 290 I=1,NPR IAM(I,1)=ITEMP(I) 290 CONTINUE DO 300 I=1,NPR ITEMP(I)=IAM(IND(I),2) 300 CONTINUE DO 310 I=1,NPR IAM(I,2)=ITEMP(I) 310 CONTINUE C *** also arrange our new array INC() like the others... C *** also arrange our new array INC() like the others... C *** also arrange our new array INC() like the others... DO 315 I=1,NPR ITEMP(I)=INC(IND(I)) 315 CONTINUE DO 316 I=1,NPR INC(I)=ITEMP(I) 316 CONTINUE C CALCULATE OVERLAP MATRIX OF STO-6G FUNCTIONS C DO 320 J=1,NC CALL OVLP(J,1,IS,IP,NPR,NC,ICD) 320 CONTINUE C DO 330 J=1,NC DO 330 K=1,NC CESPM2(INDC(J),INDC(K))=OVL(J,K) 330 CONTINUE DO 340 J=1,NC DO 340 K=1,NC OVL(J,K)=CESPM2(J,K) 340 CONTINUE L=0 DO 350 I=1,NC DO 350 J=1,I L=L+1 CESP(L)=OVL(I,J) 350 CONTINUE C C DEORTHOGONALIZE THE COEFFICIENTS AND REFORM THE DENSITY MATRIX C CALL RSP(CESP,NC,1,TEMP,CESPML) DO 360 I=1,NC DO 360 J=1,I SUM=0.D0 DO 360 K=1,NC SUM=SUM+CESPML(I+(K-1)*NC)/SQRT(TEMP(K))*CESPML(J+(K-1)*N 1C) CESP(I+(J-1)*NC)=SUM CESP(J+(I-1)*NC)=SUM 360 CONTINUE CALL MULT(C,CESP,CESPML,NC) CALL DENSIT(CESPML,NC,NC,NCLOSE,NOPEN,FRACT,CESP,2) C *** does CESPML now contain the eigenvectors??? and TEMP the eigenvalues??? C *** does CESPML now contain the eigenvectors??? and TEMP the eigenvalues??? C *** does CESPML now contain the eigenvectors??? and TEMP the eigenvalues??? RETURN END SUBROUTINE GETESP IMPLICIT DOUBLE PRECISION (A-H,O-Z) C *** this is the end part of ELESP subroutine. C *** this is the end part of ELESP subroutine. C *** this is the end part of ELESP subroutine. CHARACTER*241 KEYWRD DOUBLE PRECISION NORM,OVL LOGICAL CALLED,POTWRT,RST,STO3G INCLUDE 'SIZES' COMMON/ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),CESPM(MAXORB,MAXORB) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) COMMON /VECTOR/ C(MORB2*2+MAXORB*2) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /KEYWRD/ KEYWRD COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1 EX(MAXPR),ESPI(MAXORB,MAXORB), 2 FV(0:8,821),FAC(0:7), 3 DEX(-1:96),TF(0:2),TEMP(MAXPR),ITEMP(MAXPR), 4 OVL(MAXORB,MAXORB),FC(MAXPR*6) 6 /CORE / TORE(107) 7 /EXPONT/ ZS(107),ZP(107),ZD(107) * * END OF MINDO/3 COMMON BLOCKS * COMMON /INDX/ INDC(MAXORB) C *** an additional common block that carries variables for plotting routines. COMMON /PLOTS/ CESPM2(MAXORB,MAXORB),SLA(10), 1 CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB), 2 INC(MAXPR),NC,NPR,IS,IP,IPC,ISC,ICD,IORB C *** old arrays that are no longer needed are here, commented out. C DIMENSION CESPM2(MAXORB,MAXORB),SLA(10) C DIMENSION CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB) DATA BOHR/0.529167D0/ C *** end of ELESP starts here... C C NOW CALCULATE THE ELECTRONIC CONTRIBUTION TO THE ELECTROSTATIC POT C L=0 DO 370 I=1,NC DO 370 J=1,I L=L+1 CESPM(I,J)=CESP(L) CESPM(J,I)=CESP(L) 370 CONTINUE IPX=(NPR-IS)/3 IPE=IS+IPX DO 380 I=1,NESP ES(I)=0.D0 380 CONTINUE CALL NAICAS(ISC,IS,IP,NPR,NC,IPE,IPX,ICD) CALL NAICAP(ISC,IS,IP,NPR,NC,IPE,IPX,ICD) C CALCULATE TOTAL ESP AND FORM ARRAYS FOR ESPFIT DO 400 I=1,NESP ESP(I)=0.D0 DO 390 J=1,NATOM RA=SQRT((CO(1,J)-POTPT(1,I))**2+(CO(2,J)-POTPT(2,I))**2+(CO( 13,J)-POTPT(3,I))**2) ESP(I)=ESP(I)+TORE(IAN(J))/(RA/BOHR) 390 CONTINUE ESP(I)=ESP(I)-ES(I) DO 400 J=1,NATOM RIJ=SQRT((CO(1,J)-POTPT(1,I))**2+(CO(2,J)-POTPT(2,I))**2 1+(CO(3,J)-POTPT(3,I))**2)/BOHR B(J)=B(J)+ESP(I)*1.D0/RIJ 400 CONTINUE C C IF REQUESTED WRITE OUT ELECTRIC POTENTIAL DATA TO C UNIT 21 C POTWRT=(INDEX(KEYWRD,'POTWRT') .NE. 0) IF(POTWRT) THEN OPEN(UNIT=21) WRITE(21,'(I5)') NESP DO 410 I=1,NESP 410 WRITE(21,420) ESP(I),POTPT(1,I)/BOHR,POTPT(2,I)/BOHR, 1POTPT(3,I) ENDIF 420 FORMAT(1X,4E16.7) RETURN END SUBROUTINE GETORB IMPLICIT DOUBLE PRECISION (A-H,O-Z) C *** this will calculate values for orbital plots... C *** this will calculate values for orbital plots... C *** this will calculate values for orbital plots... CHARACTER*241 KEYWRD DOUBLE PRECISION NORM,OVL LOGICAL CALLED,POTWRT,RST,STO3G INCLUDE 'SIZES' COMMON/ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),CESPM(MAXORB,MAXORB) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) COMMON /VECTOR/ C(MORB2*2+MAXORB*2) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /KEYWRD/ KEYWRD COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1 EX(MAXPR),ESPI(MAXORB,MAXORB), 2 FV(0:8,821),FAC(0:7), 3 DEX(-1:96),TF(0:2),TEMP(MAXPR),ITEMP(MAXPR), 4 OVL(MAXORB,MAXORB),FC(MAXPR*6) 6 /CORE / TORE(107) 7 /EXPONT/ ZS(107),ZP(107),ZD(107) * * END OF MINDO/3 COMMON BLOCKS * COMMON /INDX/ INDC(MAXORB) C *** an additional common block that carries variables for plotting routines. COMMON /PLOTS/ CESPM2(MAXORB,MAXORB),SLA(10), 1 CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB), 2 INC(MAXPR),NC,NPR,IS,IP,IPC,ISC,ICD,IORB C *** old arrays that are no longer needed are here, commented out. C DIMENSION CESPM2(MAXORB,MAXORB),SLA(10) C DIMENSION CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB) DATA BOHR/0.529167D0/ ESP(1)=0.D0 C *** variable I loops over all gaussian primitives. C *** we calculate value of the primitive to PRIM and weight it according to the eigenvector. C *** eigenvector contains weights for contracted functions; the array INC() contains contraction indices. DO 500 I=1,NPR DX=POTPT(1,1)-CEN(I,1) DY=POTPT(2,1)-CEN(I,2) DZ=POTPT(3,1)-CEN(I,3) TD=DX**2+DY**2+DZ**2 PRIM=CC(I)*EXP(-EX(I)*TD) IF(IAM(I,2) .EQ. 1) THEN PRIM=PRIM*DX ENDIF IF(IAM(I,2) .EQ. 2) THEN PRIM=PRIM*DY ENDIF IF(IAM(I,2) .EQ. 3) THEN PRIM=PRIM*DZ ENDIF ESP(1)=ESP(1)+CESPML(INC(I)+(IORB-1)*NC)*PRIM 500 CONTINUE RETURN END SUBROUTINE GETELDENS IMPLICIT DOUBLE PRECISION (A-H,O-Z) C *** this will calculate values for the electron density plot... C *** this will calculate values for the electron density plot... C *** this will calculate values for the electron density plot... CHARACTER*241 KEYWRD DOUBLE PRECISION NORM,OVL LOGICAL CALLED,POTWRT,RST,STO3G INCLUDE 'SIZES' COMMON/ESPF/ AL((NUMATM+4)**2),A(NUMATM,NUMATM),B(NUMATM), 1Q(NUMATM+4),CESPM(MAXORB,MAXORB) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /POTESP/ XC,YC,ZC,ESPNUC,ESPELE,NESP COMMON /ABC/ CO(3,NUMATM),IAN(NUMATM),NATOM COMMON /WORK1/ POTPT(3,MESP), ES(MESP), ESP(MESP), WORK1D(2*MESP) COMMON /STO6G/ ALLC(6,6,2),ALLZ(6,6,2) COMMON /VECTOR/ C(MORB2*2+MAXORB*2) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /KEYWRD/ KEYWRD COMMON /ESPC/ CC(MAXPR),CEN(MAXPR,3),IAM(MAXPR,2),IND(MAXPR), 1 EX(MAXPR),ESPI(MAXORB,MAXORB), 2 FV(0:8,821),FAC(0:7), 3 DEX(-1:96),TF(0:2),TEMP(MAXPR),ITEMP(MAXPR), 4 OVL(MAXORB,MAXORB),FC(MAXPR*6) 6 /CORE / TORE(107) 7 /EXPONT/ ZS(107),ZP(107),ZD(107) * * END OF MINDO/3 COMMON BLOCKS * COMMON /INDX/ INDC(MAXORB) C *** an additional common block that carries variables for plotting routines. COMMON /PLOTS/ CESPM2(MAXORB,MAXORB),SLA(10), 1 CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB), 2 INC(MAXPR),NC,NPR,IS,IP,IPC,ISC,ICD,IORB C *** old arrays that are no longer needed are here, commented out. C DIMENSION CESPM2(MAXORB,MAXORB),SLA(10) C DIMENSION CESPML(MAXORB*MAXORB),CESP(MAXORB*MAXORB) DATA BOHR/0.529167D0/ ESP(1)=0.D0 C *** this is quite similar to GETORB, we just loop over all occupied orbitals here... C *** here we assume that we have an open-shell RHF model... ILOOP=NELECS/2 C *** variable I loops over all gaussian primitives. C *** we calculate value of the primitive to PRIM and weight it according to the eigenvector. C *** eigenvector contains weights for contracted functions; the array INC() contains contraction indices. DO 500 I=1,NPR DX=POTPT(1,1)-CEN(I,1) DY=POTPT(2,1)-CEN(I,2) DZ=POTPT(3,1)-CEN(I,3) TD=DX**2+DY**2+DZ**2 DO 600 J=1,ILOOP PRIM=CC(I)*EXP(-EX(I)*TD) IF(IAM(I,2) .EQ. 1) THEN PRIM=PRIM*DX ENDIF IF(IAM(I,2) .EQ. 2) THEN PRIM=PRIM*DY ENDIF IF(IAM(I,2) .EQ. 3) THEN PRIM=PRIM*DZ ENDIF ORB=CESPML(INC(I)+(J-1)*NC)*PRIM C *** here we assume that we have an open-shell RHF model... ESP(1)=ESP(1)+ORB*ORB*2.0D0 600 CONTINUE 500 CONTINUE RETURN END mopac7-1.15/fortran/meci.f0000644000175000017500000003577611053302064012322 00000000000000 FUNCTION MECI(EIGS,COEFF) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION EIGS(NORBS), COEFF(NORBS,NORBS) *********************************************************************** * * PROGRAM MECI * * A MULTI-ELECTRON CONFIGURATION INTERACTION CALCULATION * * WRITTEN BY JAMES J. P. STEWART, AT THE * FRANK J. SEILER RESEARCH LABORATORY * USAFA, COLORADO SPRINGS, CO 80840 * * 1985 * *********************************************************************** C DOUBLE PRECISION MECI C C MATRICES FOR PERMUTATION WORK C DIMENSION NFA(2*NMECI), NPERMA(NMECI,6*NMECI), 1NPERMB(NMECI,6*NMECI), EIGA(NMECI) C C MATRICES FOR ONE AND TWO ELECTRON INTEGRALS C COMMON /RJKS /RJKAB(NMECI,NMECI), RJKAA(NMECI,NMECI) C C SPIN MATRICES C DIMENSION SPIN(NMECI**2) LOGICAL DEBUG, LARGE, PRNT, LSPIN, LSPIN1, 1 FIRST1, BIGPRT, SING, DOUB, TRIP, QUAR, QUIN, SEXT, 2 PRNT2, GEOOK CHARACTER KEYWRD*241, TSPIN(7)*8, LINE*80 COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS, 2 NDUMMY(2), NCLOSE, NOPEN, NDUMY, FRACT COMMON /LAST / LAST COMMON /SPQR/ ISPQR(NMECI**2,NMECI),IS,I,K COMMON /KEYWRD/ KEYWRD C C MATRICES FOR SEC.DET., VECTORS, AND EIGENVALUES. C COMMON /WORK2 / CIMAT(NMECI**4), EIG(NMECI**2), DIAG(2*NMECI**3) COMMON /BASEOC/ OCCA(NMECI) 1 /WORK3 / DIJKL(MPACK*4) COMMON /CIVECT/ VECTCI(NMECI**2),CONF(NMECI**4+1) COMMON /NALMAT/ NALPHA(NMECI**2) COMMON /MICROS/ MICROA(NMECI,4*NMECI**2), MICROB(NMECI,4*NMECI**2) COMMON /CIBITS/ NMOS,LAB,NELEC, NBO(3) COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) COMMON /NUMCAL/ NUMCAL SAVE FIRST1, TSPIN SAVE J,L, DEBUG, PRNT2,MDIM, LSPIN1 SAVE LARGE, LROOT, SING, DOUB, QUAR, QUIN, SEXT, SMULT, NE SAVE GEOOK DATA ICALCN/0/ DATA TSPIN/'SINGLET ','DOUBLET ','TRIPLET ','QUARTET ','QUINTET ', 1'SEXTET ','SEPTET '/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL FIRST1=.TRUE. MDIM=NMECI**2 GEOOK=(INDEX(KEYWRD,'GEO-OK').NE.0) LSPIN1=(INDEX(KEYWRD,'ESR').NE.0) DEBUG=(INDEX(KEYWRD,'DEBUG').NE.0) PRNT2=(INDEX(KEYWRD,'MECI').NE.0) DEBUG=(DEBUG.AND.PRNT2) LARGE=(INDEX(KEYWRD,'LARGE').NE.0) NDOUBL=99 IF(INDEX(KEYWRD,'C.I.=(').NE.0)THEN NDOUBL=READA(KEYWRD,INDEX(KEYWRD,'C.I.=(')+7) NMOS=READA(KEYWRD,INDEX(KEYWRD,'C.I.=(')+5) ELSEIF (INDEX(KEYWRD,'C.I.=').NE.0)THEN NMOS=READA(KEYWRD,INDEX(KEYWRD,'C.I.=')+5) ELSE NMOS=NOPEN-NCLOSE ENDIF LROOT=1 IF(INDEX(KEYWRD,'EXCI').NE.0)LROOT=2 I=INDEX(KEYWRD,'ROOT') IF(I.NE.0)LROOT=READA(KEYWRD,I) IF(NDOUBL.EQ.99)THEN J=MAX(MIN((NCLOSE+NOPEN+1)/2-(NMOS-1)/2,NORBS-NMOS+1),1) ELSE J=NCLOSE-NDOUBL+1 IF(FRACT.GT.1.99D0)J=J+1 ENDIF L=0 DO 10 I=J,NCLOSE L=L+1 10 OCCA(L)=1 DO 20 I=NCLOSE+1,NOPEN L=L+1 20 OCCA(L)=FRACT*0.5D0 DO 30 I=NOPEN+1,J+NMOS-1 L=L+1 30 OCCA(L)=0.D0 C# WRITE(6,'('' INITIAL ORBITAL OCCUPANCIES'')') C# WRITE(6,'(6F12.6)')(OCCA(L),L=1,NMOS) SING=(INDEX(KEYWRD,'SING')+ 1 INDEX(KEYWRD,'EXCI')+ 2 INDEX(KEYWRD,'BIRAD').NE.0) DOUB=(INDEX(KEYWRD,'DOUB').NE.0) TRIP=(INDEX(KEYWRD,'TRIP').NE.0) QUAR=(INDEX(KEYWRD,'QUAR').NE.0) QUIN=(INDEX(KEYWRD,'QUIN').NE.0) SEXT=(INDEX(KEYWRD,'SEXT').NE.0) C C DEFINE MAGNETIC COMPONENT OF SPIN C MSDEL=INDEX(KEYWRD,' MS') IF(MSDEL.NE.0)THEN MSDEL=1.0001D0*READA(KEYWRD,INDEX(KEYWRD,' MS')) ELSE IF(TRIP.OR.QUAR)MSDEL=1 IF(QUIN.OR.SEXT)MSDEL=2 ENDIF SMULT=-.5D0 IF(SING) SMULT=0.00D0 IF(DOUB) SMULT=0.75D0 IF(TRIP) SMULT=2.00D0 IF(QUAR) SMULT=3.75D0 IF(QUIN) SMULT=6.00D0 IF(SEXT) SMULT=8.75D0 X=0.D0 DO 40 J=1,NMOS 40 X=X+OCCA(J) XX=X+X NE=XX+0.5D0 NELEC=(NELECS-NE+1)/2 ENDIF PRNT=(DEBUG.OR.LAST.EQ.3.AND.PRNT2) BIGPRT=(PRNT.AND.LARGE) C C TEST TO SEE IF THE SET OF ENERGY LEVELS USED IN MECI IS COMPLETE, C I.E., ALL COMPONENTS OF DEGENERATE IRREDUCIBLE REPRESENTATIONS C ARE USED. IF NOT, THEN RESULTS WILL BE NONSENSE. GIVE USERS A C CHANCE TO REALLY FOUL THINGS UP BY ALLOWING JOB TO CONTINUE IF C 'GEO-OK' IS SPECIFIED. C DO 50 I=1,NMOS IN=I+NELEC 50 EIGA(I)=EIGS(IN) LSPIN=(LSPIN1.AND. LAST.EQ.3) IF(BIGPRT)THEN WRITE(6,'('' INITIAL EIGENVALUES'')') WRITE(6,'(5F12.6)')(EIGA(I),I=1,NMOS) WRITE(6,'(//10X,''NUMBER OF ELECTRONS IN C.I. ='',F5.1)')XX ENDIF IF(.NOT.GEOOK.AND.NELEC.GT.0)THEN IF(ABS(EIGS(NELEC+1)-EIGS(NELEC)).LT.1.D-1.OR. 1ABS(EIGS(NELEC+1+NMOS)-EIGS(NELEC+NMOS)).LT.1.D-1)THEN WRITE(6,'(///10X,A)')'DEGENERATE ENERGY LEVELS DETECTED IN M 1ECI' WRITE(6,'(10X,A)')'SOME OF THESE LEVELS WOULD BE TREATED BY' 1//' MECI,' WRITE(6,'(10X,A)')'WHILE OTHERS WOULD NOT. THIS WOULD RESUL 1T IN' WRITE(6,'(10X,A)')'NON-REPRODUCIBLE ELECTRONIC ENERGIES.' WRITE(6,'(10X,A)')' JOB STOPPED. TO CONTINUE, SPECIFY "GEO 1-OK"' STOP ENDIF ENDIF IF( BIGPRT ) THEN WRITE(6,'(//10X,''EIGENVECTORS'',/)') DO 60 I=1,NORBS 60 WRITE(6,'(6F12.6)')(COEFF(I,J+NELEC),J=1,NMOS) ENDIF NFA(2)=1 NFA(1)=1 DO 70 I=3,NMECI+1 70 NFA(I)=NFA(I-1)*(I-1) CALL IJKL(COEFF(1,NELEC+1),COEFF,NELEC,NMOS,DIJKL) DO 80 I=1,NMOS DO 80 J=1,NMOS RJKAA(I,J)=XY(I,I,J,J)-XY(I,J,I,J) 80 RJKAB(I,J)=XY(I,I,J,J) DO 100 I=1,NMOS X=0.0D0 DO 90 J=1,NMOS X=X+(RJKAA(I,J)+RJKAB(I,J))*OCCA(J) 90 CONTINUE EIGA(I)=EIGA(I)-X C# IF(ABS(OCCA(I)-0.5).LT.1.D-4)EIGA(I)=EIGA(I)+XY(I,I,I,I)*0.25D0 100 CONTINUE IF(BIGPRT) THEN WRITE(6,110) 110 FORMAT(/,5X,'EIGENVALUES AFTER REMOVAL OF INTER-ELECTRONIC INTE 1RACTIONS',/) WRITE(6,'(6F12.6)')(EIGA(I),I=1,NMOS) WRITE(6,'(///10X,''TWO-ELECTRON J-INTEGRALS'',/)') DO 120 I1=1,NMOS 120 WRITE(6,'(10F10.4)')(RJKAB(I1,J1),J1=1,NMOS) WRITE(6,'(///10X,''TWO-ELECTRON K-INTEGRALS'',/)') DO 130 I1=1,NMOS 130 WRITE(6,'(10F10.4)')(RJKAB(I1,J1)-RJKAA(I1,J1),J1=1,NMOS) ENDIF NATOMS=NUMAT DO 140 I=1,NMOS DO 140 J=1,NMOS RJKAA(I,J)=RJKAA(I,J)*0.5D0 140 CONTINUE IF(FIRST1) THEN I=INDEX(KEYWRD,'MICROS') IF(I.NE.0)THEN K=READA(KEYWRD,I) LAB=K IF(PRNT)WRITE(6,'('' MICROSTATES READ IN'')') NTOT=XX+0.5D0 REWIND 5 DO 150 I=1,1000 READ(5,'(A)')LINE 150 IF(INDEX(LINE,'MICRO').NE.0)GOTO 160 160 DO 170 I=1,1000 READ(5,'(A)')LINE 170 IF(INDEX(LINE,'MICRO').NE.0)GOTO 180 180 DO 210 I=1,LAB READ(5,'(A)')LINE IZERO=MAX(0,MIN(INDEX(LINE,'0'),INDEX(LINE,'1'))-1) DO 190 J=1,NMOS IF(LINE(J+IZERO:J+IZERO).NE.'1') 1 LINE(J+IZERO:J+IZERO)='0' IF(LINE(J+NMOS+IZERO:J+NMOS+IZERO).NE.'1') 1 LINE(J+NMOS+IZERO:J+NMOS+IZERO)='0' MICROA(J,I)=ICHAR(LINE(J+IZERO:J+IZERO))- 1 ICHAR('0') MICROB(J,I)=ICHAR(LINE(J+NMOS+IZERO:J+NMOS+IZERO))- 1 ICHAR('0') 190 CONTINUE IF(PRNT)WRITE(6,'(20I6)')(MICROA(J,I),J=1,NMOS), 1 (MICROB(J,I),J=1,NMOS) K=0 DO 200 J=1,NMOS 200 K=K+MICROA(J,I)+MICROB(J,I) IF(K.NE.NTOT)THEN NTOT=K XX=K WRITE(6,'(/,''NUMBER OF ELECTRONS IN C.I. REDEFINED TO 1:'',I4,/)')K ENDIF 210 CONTINUE FIRST1=.FALSE. GOTO 260 ENDIF NUPP=(NE+1)/2 +MSDEL NDOWN=NE-NUPP AMS=(NUPP-NDOWN)*0.5D0 IF(PRNT)WRITE(6,220) AMS 220 FORMAT(10X,'COMPONENT OF SPIN = ',F4.1) IF(NUPP*NDOWN.LT.0) THEN WRITE(6,'(/10X,''IMPOSSIBLE VALUE OF DELTA S'')') STOP ENDIF LIMA=NFA(NMOS+1)/(NFA(NUPP+1)*NFA(NMOS-NUPP+1)) LIMB=NFA(NMOS+1)/(NFA(NDOWN+1)*NFA(NMOS-NDOWN+1)) LAB=LIMA*LIMB IF(PRNT)WRITE(6,230) LAB 230 FORMAT(//10X,35H NO OF CONFIGURATIONS CONSIDERED = ,I4) C# IF(LAB.LT.101) GOTO 240 C# WRITE(6,230) C# 230 FORMAT(10X,24H TOO MANY CONFIGURATIONS/) C# GOTO 160 C# 240 CONTINUE CALL PERM(NPERMA, NUPP, NMOS, NMECI, LIMA) CALL PERM(NPERMB, NDOWN, NMOS, NMECI, LIMB) K=0 DO 240 I=1,LIMA DO 240 J=1,LIMB K=K+1 DO 240 L=1,NMOS MICROA(L,K)=NPERMA(L,I) 240 MICROB(L,K)=NPERMB(L,J) 250 FORMAT(10I1) 260 CONTINUE LIMA=LAB LIMB=LAB ENDIF GSE=0.0D0 DO 270 I=1,NMOS GSE=GSE+EIGA(I)*OCCA(I)*2.D0 GSE=GSE+XY(I,I,I,I)*OCCA(I)*OCCA(I) DO 270 J=I+1,NMOS 270 GSE=GSE+2.D0*(2.D0*XY(I,I,J,J) - XY(I,J,I,J))*OCCA(I)*OCCA(J) J=0 DO 280 I=1,LAB DIAG(I)=DIAGI(MICROA(1,I),MICROB(1,I),EIGA,XY,NMOS)-GSE 280 CONTINUE 290 CONTINUE IF(LAB.LE.MDIM) GOTO 330 X=-100.D0 DO 300 I=1,LAB IF(DIAG(I).GT.X)THEN X=DIAG(I) J=I ENDIF 300 CONTINUE IF(J.NE.LAB) THEN DO 320 I=J,LAB I1=I+1 DO 310 K=1,NMOS MICROA(K,I)=MICROA(K,I1) 310 MICROB(K,I)=MICROB(K,I1) 320 DIAG(I)=DIAG(I1) ENDIF LAB=LAB-1 GOTO 290 330 CONTINUE C C BUILD SPIN AND NUMBER OF ALPHA SPIN TABLES. C ------------------------------------------- DO 350 I=1,LAB K=0 X=0.D0 DO 340 J=1,NMOS X=X+MICROA(J,I)*MICROB(J,I) 340 K=K+MICROA(J,I) NALPHA(I)=K 350 SPIN(I)=4.D0*X-(XX-2*NALPHA(I))**2 C C BEFORE STARTING, CHECK THAT THE ROOT WANTED CAN EXIST C IF(LAB.LT.LROOT)THEN WRITE(6,'(//10X,''C.I. IS OF SIZE LESS THAN ROOT SPECIFIED'')') WRITE(6,'(10X,''MODIFY SIZE OF C.I. OR ROOT NUMBER'')') WRITE(6,'(A,I4,A,I4)')' SIZE OF C.I.:',LAB,' ROOT REQUIRED:', +LROOT STOP ENDIF IF(PRNT)THEN WRITE(6,'(/,'' CONFIGURATIONS CONSIDERED IN C.I. '',/ 1 '' M.O. NUMBER : '',10I4)')(I,I=NELEC+1,NELEC+NMOS) WRITE(6,'('' ENERGY'')') DO 360 I=1,LAB WRITE(6,'(/10X,I4,6X,10I4)') I,(MICROA(K,I),K=1,NMOS) 360 WRITE(6,'(6X,F10.4,4X,10I4)')DIAG(I),(MICROB(K,I),K=1,NMOS) ENDIF CALL MECIH(DIAG,CIMAT,NMOS,LAB) IF(BIGPRT)THEN WRITE(6,'(//,'' C.I. MATRIX'')') I=MIN(LAB,MAXORB) IF(I.NE.LAB)WRITE(6,'('' (OUTPUT HAS BEEN TRUNCATED)'')') CALL VECPRT(CIMAT,-I) ELSE IF(PRNT)WRITE(6,'(//,'' DIAGONAL OF C.I. MATRIX'')') IF(PRNT)WRITE(6,'(5F13.6)')(CIMAT((I*(I+1))/2),I=1,LAB) ENDIF C# CALL TIMER('SEC. DET. CONSTRUCTED') LABSIZ=MIN(LAB,LROOT+10) CALL HQRII(CIMAT,LAB,LABSIZ,EIG,CONF) C# CALL TIMER('DIAG. DONE') C C DECIDE WHICH ROOT TO EXTRACT C KROOT=0 IF(SMULT.LT.-0.1D0)THEN MECI=EIG(LROOT) DO 370 J=1,LAB 370 VECTCI(J)=CONF(J+LAB*(LROOT-1)) KROOT=LROOT ENDIF IF(BIGPRT) THEN WRITE(6,'(//20X,''STATE VECTORS'',//)') I=MIN(LAB,NORBS) J=MIN(LABSIZ,NORBS) CALL MATOUT(CONF,EIG,J,-I,LAB) ENDIF IF(PRNT)THEN WRITE(6,380) 380 FORMAT(///,' STATE ENERGIES ' 1,' EXPECTATION VALUE OF S**2 S FROM S**2=S(S+1)',//) ENDIF IROOT=0 DO 390 I=1,9 390 CIMAT(I)=0.1D0 DO 440 I=1,LABSIZ X=0.5D0*XX II=(I-1)*LAB DO 420 J=1,LAB JI=J+II X=X-CONF(JI)*CONF(JI)*SPIN(J)*0.25D0 K=ISPQR(J,1) IF(K.EQ.1) GOTO 410 DO 400 L=2,K LI=ISPQR(J,L)+II 400 X=X+CONF(JI)*CONF(LI)*2.D0 410 CONTINUE 420 CONTINUE Y=(-1.D0+SQRT(1.D0+4.D0*X))*0.5D0 IF(ABS(SMULT-X).LT.0.01)THEN IROOT=IROOT+1 IF(IROOT.EQ.LROOT) THEN KROOT=I MECI=EIG(I) DO 430 J=1,LAB 430 VECTCI(J)=CONF(J+LAB*(I-1)) ENDIF ENDIF J=Y*2.D0+1.5D0 CIMAT(J)=CIMAT(J)+1 440 IF(PRNT)WRITE(6,460) I,EIG(I),TSPIN(J),X,Y IF(KROOT.EQ.0)THEN WRITE(6,'(//10X,''THE STATE REQUIRED IS NOT PRESENT IN THE'')') WRITE(6,'(10X, '' SET OF CONFIGURATIONS AVAILABLE'')') WRITE(6,'(/ 4X,''NUMBER OF STATES ACCESSIBLE USING CURRENT KEY- 1WORDS'',/)') DO 450 I=1,7 450 IF(CIMAT(I).GT.0.5D0) 1WRITE(6,'((24X,A8,I4))')TSPIN(I),NINT(CIMAT(I)) STOP ENDIF 460 FORMAT(I5,F12.6,3X,A8,F15.5,F10.5) 470 CONTINUE MAXVEC=0 IF(LSPIN)MAXVEC=MIN(4,LAB) IF(LSPIN.AND.(NE/2)*2.EQ.NE) THEN WRITE(6,'('' ESR SPECIFIED FOR AN EVEN-ELECTRON SYSTEM'')') ENDIF C# DO 570 I=1,NMOS C# DO 570 J=1,NORBS C# 570 COEFF(J,I+NELEC)=COEFF(J,I+NELEC)**2 DO 540 IUJ=1,MAXVEC IOFSET=(IUJ-1)*LAB WRITE(6,'(//,'' MICROSTATE CONTRIBUTIONS TO '', 1''STATE EIGENFUNCTION'',I3)')IUJ WRITE(6,'(5F13.6)')(CONF(I+IOFSET),I=1,LAB) DO 480 I=1,LAB 480 CONF(I)=VECTCI(I+IOFSET)**2 C SECOND VECTOR! DO 500 I=1,NMOS SUM=0.D0 DO 490 J=1,LAB 490 SUM=SUM+(MICROA(I,J)-MICROB(I,J))*CONF(J) 500 EIGA(I)=SUM WRITE(6,'(/,'' SPIN DENSITIES FROM EACH M.O., ENERGY:'' 1,F7.3)')EIG(IUJ) WRITE(6,'(5F12.6)') (EIGA(I),I=1,NMOS) WRITE(6,*) WRITE(6,*)' SPIN DENSITIES FROM EACH ATOMIC ORBITAL' WRITE(6,*)' S PX '// 1'PY PZ TOTAL' DO 530 I=1,NATOMS IL=NFIRST(I) IU=NLAST(I) L=0 SUMM=0.D0 DO 520 K=IL,IU L=L+1 SUM=0.D0 DO 510 J=1,NMOS 510 SUM=SUM+COEFF(K,J+NELEC)**2*EIGA(J) SUMM=SUMM+SUM 520 EIGS(L)=SUM IF(L.EQ.4)THEN WRITE(6,'('' ATOM'',I4,'' SPIN DENSITY '',5F10.7)') 1I,(EIGS(K),K=1,L),SUMM ELSE WRITE(6,'('' ATOM'',I4,'' SPIN DENSITY '',F10.7,30X, 1F10.7)')I,EIGS(1),SUMM ENDIF 530 CONTINUE 540 CONTINUE RETURN END mopac7-1.15/fortran/diag.f0000644000175000017500000001072211053302063012270 00000000000000 SUBROUTINE DIAG(FAO,VECTOR,NOCC,EIG,MDIM,N) IMPLICIT DOUBLE PRECISION(A-H,O-Z) INCLUDE 'SIZES' DIMENSION FAO(*),VECTOR(MDIM,*),EIG(*),WS(MAXORB) C*********************************************************************** C C "FAST" DIAGONALISATION PROCEDURE. C C ON INPUT FAO CONTAINS THE LOWER HALF TRIANGLE OF THE MATRIX TO BE C DIAGONALISED, PACKED. C VECTOR CONTAINS THE OLD EIGENVECTORS ON INPUT, THE NEW C VECTORS ON EXITING. C NOCC = NUMBER OF OCCUPIED MOLECULAR ORBITALS. C EIG = EIGENVALUES FROM AN EXACT DIAGONALISATION C MDIM = DECLARED SIZE OF MATRIX "C". C N = NUMBER OF ATOMIC ORBITALS IN BASIS SET C C DIAG IS A PSEUDO-DIAGONALISATION PROCEDURE, IN THAT THE VECTORS THAT C ARE GENERATED BY IT ARE MORE NEARLY ABLE TO BLOCK-DIAGONALISE C THE FOCK MATRIX OVER MOLECULAR ORBITALS THAN THE STARTING C VECTORS. IT MUST BE CONSIDERED PSEUDO FOR SEVERAL REASONS: C (A) IT DOES NOT GENERATE EIGENVECTORS - THE SECULAR DETERMINANT C IS NOT DIAGONALISED, ONLY THE OCCUPIED-VIRTUAL INTERSECTION. C (B) MANY SMALL ELEMENTS IN THE SEC.DET. ARE IGNORED AS BEING TOO C SMALL COMPARED WITH THE LARGEST ELEMENT. C (C) WHEN ELEMENTS ARE ELIMINATED BY ROTATION, THE REST OF THE C SEC. DET. IS ASSUMED NOT TO CHANGE, I.E. ELEMENTS CREATED C ARE IGNORED. C (D) THE ROTATION REQUIRED TO ELIMINATE THOSE ELEMENTS CONSIDERED C SIGNIFICANT IS APPROXIMATED TO USING THE EIGENVALUES OF THE C EXACT DIAGONALISATION THROUGHOUT THE REST OF THE ITERATIVE C PROCEDURE. C C (NOTE:- IN AN ITERATIVE PROCEDURE ALL THE APPROXIMATIONS PRESENT IN C DIAG BECOME VALID AT SELF-CONSISTENCY, SELF-CONSISTENCY IS C NOT SLOWED DOWN BY USE OF THESE APPROXIMATIONS) C C REFERENCE: C "FAST SEMIEMPIRICAL CALCULATIONS", C STEWART. J.J.P., CSASZAR, P., PULAY, P., J. COMP. CHEM., C 3, 227, (1982) C C*********************************************************************** COMMON /SCRACH/ FMO(MORB2), XDUMY(MAXPAR**2-MORB2) C FMO IS A WORK-SPACE OF SIZE (N-NOCC)*NOCC, IT WILL HOLD C THE FOCK MOLECULAR ORBITAL INTERACTION MATRIX. C C FIRST, CONSTRUCT THAT PART OF A SECULAR DETERMINANT OVER MOLECULAR C ORBITALS WHICH CONNECTS THE OCCUPIED AND VIRTUAL SETS. C C*********************************************************************** C LOGICAL FIRST DATA FIRST /.TRUE./ IF(FIRST)THEN FIRST=.FALSE. C C EPS IS THE SMALLEST NUMBER WHICH, WHEN ADDED TO 1.D0, IS NOT C EQUAL TO 1.D0 CALL EPSETA(EPS,ETA) C C INCREASE EPS TO ALLOW FOR A LOT OF ROUND-OFF C BIGEPS=10.D0*SQRT(EPS) ENDIF TINY=0.D0 LUMO=NOCC+1 IJ=0 C# CALL TIMER('SQUARING') DO 60 I=LUMO,N KK=0 DO 30 J=1,N SUM=0.D0 DO 10 K=1,J KK=KK+1 10 SUM=SUM+FAO(KK)*VECTOR(K,I) IF(J.EQ.N) GOTO 30 J1=J+1 K2=KK DO 20 K=J1,N K2=K2+K-1 20 SUM=SUM+FAO(K2)*VECTOR(K,I) 30 WS(J)=SUM DO 50 J=1,NOCC IJ=IJ+1 SUM=0.D0 DO 40 K=1,N 40 SUM=SUM+WS(K)*VECTOR(K,J) IF(TINY.LT.ABS(SUM)) TINY=ABS(SUM) 50 FMO(IJ)=SUM 60 CONTINUE TINY=0.05D0*TINY C*********************************************************************** C C NOW DO A CRUDE 2 BY 2 ROTATION TO "ELIMINATE" SIGNIFICANT ELEMENTS C C*********************************************************************** C# CALL TIMER('ROTATING') IJ=0 DO 90 I=LUMO,N DO 80 J=1,NOCC IJ=IJ+1 IF(ABS(FMO(IJ)).LT.TINY) GOTO 80 C C BEGIN 2 X 2 ROTATIONS C A=EIG(J) B=EIG(I) C=FMO(IJ) D=A-B C C USE BIGEPS TO DETERMINE WHETHER TO DO A 2 BY 2 ROTATION C IF(ABS(C/D).LT.BIGEPS) GOTO 80 C C AT THIS POINT WE KNOW THAT E=SIGN(SQRT(4.D0*C*C+D*D),D) ALPHA=SQRT(0.5D0*(1.D0+D/E)) BETA=-SIGN(SQRT(1.D0-ALPHA*ALPHA),C) C C ROTATION OF PSEUDO-EIGENVECTORS C DO 70 M=1,N A=VECTOR(M,J) B=VECTOR(M,I) VECTOR(M,J)=ALPHA*A+BETA*B VECTOR(M,I)=ALPHA*B-BETA*A 70 CONTINUE 80 CONTINUE 90 CONTINUE C# CALL TIMER('RETURNING') RETURN END mopac7-1.15/fortran/freqcy.f0000644000175000017500000001356411053302064012665 00000000000000 SUBROUTINE FREQCY(FMATRX,FREQ,CNORML,REDMAS,TRAVEL,EORC,DELDIP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION FMATRX(*), REDMAS(*), FREQ(*), CNORML(*), TRAVEL(*) +,DELDIP(3,*) LOGICAL EORC ********************************************************************* * * FRCE CALCULATES THE FORCE CONSTANTS AND VIBRATIONAL FREQUENCIES * FOR A MOLECULE. IT USES THE ISOTOPIC MASSES TO WEIGHT THE * FORCE MATRIX * * ON INPUT FMATRX = FORCE MATRIX, OF SIZE NUMAT*3*(NUMAT*3+1)/2. * ********************************************************************* COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /NLLCOM/ FMAT2D(2*MAXPAR**2), VEC(MAXPAR**2) COMMON /SYMOPS/ R(14,120), NSYM, IPO(NUMATM,120), NENT COMMON /ATMASS/ ATMASS(NUMATM) COMMON /KEYWRD/ KEYWRD COMMON /SCRACH/ OLDF(MAXPAR**2) COMMON /WORK1 / DUMMY1(NPULAY*4), DUMMY2(NPULAY*2), . DUMMY3(NPULAY*2), ALBAND(NPULAY*13) CHARACTER KEYWRD*241 DIMENSION WTMASS(MAXPAR), SHIFT(6), SEC(MAXPAR**2) COMPLEX SEC, VEC EQUIVALENCE (SEC,OLDF) SAVE FACT DATA FACT/6.023D23/ C C CONVERSION FACTOR FOR SPEED OF LIGHT AND 2 PI. C C2PI=1.D0/(2.998D10*3.141592653598D0*2.D0) C NOW TO CALCULATE THE VIBRATIONAL FREQUENCIES C C FIND CONVERSION CONSTANTS FOR MASS WEIGHTED SYSTEM IF(INDEX(KEYWRD,' GROUP').NE.0) THEN CALL SYMT(FMATRX, DELDIP) IF(INDEX(KEYWRD,' FREQCY').NE.0)THEN WRITE(6,'(A)')' SYMMETRIZED HESSIAN MATRIX' C# I=-N3 C# CALL VECPRT(FMATRX,I) C C THE FORCE MATRIX IS PRINTED AS AN ATOM-ATOM MATRIX RATHER THAN C AS A 3N*3N MATRIX, AS THE 3N MATRIX IS VERY CONFUSING! C IJ=0 IU=0 DO 159 I=1,NUMAT IL=IU+1 IU=IL+2 IM1=I-1 JU=0 DO 149 J=1,IM1 JL=JU+1 JU=JL+2 SUM=0.D0 C$DOIT ASIS DO 139 II=IL,IU C$DOIT ASIS DO 139 JJ=JL,JU 139 SUM=SUM+FMATRX((II*(II-1))/2+JJ)**2 IJ=IJ+1 149 CNORML(IJ)=SQRT(SUM) IJ=IJ+1 159 CNORML(IJ)=SQRT( 1FMATRX(((IL+0)*(IL+1))/2)**2+ 2FMATRX(((IL+1)*(IL+2))/2)**2+ 3FMATRX(((IL+2)*(IL+3))/2)**2+2.D0*( 4FMATRX(((IL+1)*(IL+2))/2-1)**2+ 5FMATRX(((IL+2)*(IL+3))/2-2)**2+ 6FMATRX(((IL+2)*(IL+3))/2-1)**2)) I=-NUMAT CALL VECPRT(CNORML,I) ENDIF ENDIF N3=3*NUMAT L=0 DO 10 I=1,NUMAT WEIGHT=1.4142136D0/SQRT(ATMASS(I)) WTMASS(L+1)=WEIGHT WTMASS(L+2)=WEIGHT WTMASS(L+3)=WEIGHT L=L+3 10 WTMASS(L)=WEIGHT C CONVERT TO MASS WEIGHTED FMATRX LINEAR=0 DO 20 I=1,N3 DO 20 J=1,I LINEAR=LINEAR+1 OLDF(LINEAR)= FMATRX(LINEAR)*1.D5 20 FMATRX(LINEAR)=FMATRX(LINEAR)*WTMASS(I)*WTMASS(J) C C 1.D5 IS TO CONVERT FROM MILLIDYNES/ANGSTROM TO DYNES/CM. C C DIAGONALIZE I=INDEX(KEYWRD,' K=') IF(I.NE.0)THEN C C GO INTO BRILLOUIN ZONE MODE C STEP=READA(KEYWRD,I) MONO3=READA(KEYWRD(I:),INDEX(KEYWRD(I:),','))*3 CALL BRLZON(FMATRX, FMAT2D, N3, SEC, VEC, ALBAND, MONO3, STEP,1 1) RETURN ENDIF CALL FRAME(FMATRX,NUMAT,1, SHIFT) CALL RSP(FMATRX,N3,N3,FREQ,CNORML) DO 30 I=1,N3 J=(FREQ(I)+50.D0)*0.01D0 30 FREQ(I)=FREQ(I)-DBLE(J*100) DO 40 I=1,N3 40 FREQ(I)=FREQ(I)*1.D5 C C CALCULATE REDUCED MASSES, STORE IN REDMAS C DO 80 I=1,N3 II=(I-1)*N3 SUM=0.D0 DO 70 J=1,N3 JII=J+II JJ=(J*(J-1))/2 DO 50 K=1,J 50 SUM=SUM+CNORML(JII)*OLDF(JJ+K)*CNORML(K+II) DO 60 K=J+1,N3 60 SUM=SUM+CNORML(JII)*OLDF((K*(K-1))/2+J)*CNORML(K+II) 70 CONTINUE SUM1=SUM*2.D0 IF(ABS(FREQ(I)).GT.ABS(SUM)*1.D-20) THEN SUM=1.D0*SUM/FREQ(I) ELSE SUM=0.D0 ENDIF FREQ(I)=SIGN(SQRT(FACT*ABS(FREQ(I)))*C2PI,FREQ(I)) IF(ABS(FREQ(I)).LT.ABS(SUM1)*1.D+20) THEN SUM1=SQRT(ABS(FREQ(I)/(SUM1*1.D-5))) ELSE SUM1=0.D0 ENDIF IF(SUM.LT.0.D0.OR.SUM.GT.100)SUM=0.D0 C C 0.0063024=SQRT(2*A*B*C/N) WHERE C A=1.196D8 = CONVERSION OF CM**(-1) TO (ERGS = DYNE.ANGSTROMS) C B=1000.0 = MILLIDYNES TO DYNES C C=1.D8 = CENTIMETERS TO ANGSTROMS C N=6.02205D23 = AVOGADRO'S NUMBER TRAVEL(I)=SUM1*0.0063024D0 IF(TRAVEL(I).GT.1.D0)TRAVEL(I)=0.D0 C# WRITE(6,*)TRAVEL(I) 80 REDMAS(I)=SUM IF(INDEX(KEYWRD,' GROUP').NE.0) CALL SYMA(FREQ, CNORML) IF(EORC) THEN C C CONVERT NORMAL VECTORS TO CARTESIAN COORDINATES C (DELETED) AND NORMALIZE SO THAT THE TOTAL MOVEMENT IS 1.0 ANGSTROM. C IJ=0 DO 110 I=1,N3 SUM=0.D0 J=0 DO 90 JJ=1,NUMAT SUM1=0.D0 CNORML(IJ+1)=CNORML(IJ+1)*WTMASS(J+1) SUM1=SUM1+CNORML(IJ+1)**2 C CNORML(IJ+2)=CNORML(IJ+2)*WTMASS(J+2) SUM1=SUM1+CNORML(IJ+2)**2 C CNORML(IJ+3)=CNORML(IJ+3)*WTMASS(J+3) SUM1=SUM1+CNORML(IJ+3)**2 C J=J+3 IJ=IJ+3 90 SUM=SUM+SQRT(SUM1) SUM=1.D0/SQRT(SUM) IJ=IJ-N3 DO 100 J=1,N3 IJ=IJ+1 100 CNORML(IJ)=CNORML(IJ)*SUM 110 CONTINUE C C RETURN HESSIAN IN MILLIDYNES/ANGSTROM IN FMATRX C DO 120 I=1,LINEAR 120 FMATRX(I)=OLDF(I)*1.D-5 ELSE C C RETURN HESSIAN AS MASS-WEIGHTED FMATRIX LINEAR=0 C DO 130 I=1,N3 DO 130 J=1,I LINEAR=LINEAR+1 130 FMATRX(LINEAR)=OLDF(LINEAR)*1.D-5*WTMASS(I)*WTMASS(J) ENDIF RETURN END mopac7-1.15/fortran/addnuc.f0000644000175000017500000000221011053302064012614 00000000000000 SUBROUTINE ADDNUC (ENUCLR) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 BH(LENABC) 4 /SOLVI/ IATSP(LENABC+1),NAR(LENABC), NN(2,NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /CORE / CORE(107) ENCLR=0.D0 I0=NPS2+NDEN*NPS IDEN=0 DO 20 I=1,NUMAT IA=NFIRST(I) IDEL=NLAST(I)-IA I1=I0+(IDEN*(IDEN+1))/2 COREI = CORE(NAT(I)) DO 10 J=1,I-1 JA=NFIRST(J) JDEL=NLAST(J)-JA I1=I1+1 ENCLR = ENCLR + 2 * COREI * ABCMAT(I1) * CORE(NAT(J)) I1=I1+JDEL**2 10 CONTINUE I1=I1+1 ENCLR = ENCLR + COREI * ABCMAT(I1) * COREI IDEN=IDEN+1+IDEL**2 20 CONTINUE ENUCLR = ENUCLR+ENCLR RETURN END mopac7-1.15/fortran/dcart.f0000644000175000017500000002545011053302063012465 00000000000000 SUBROUTINE DCART (COORD,DXYZ) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COORD(3,*), DXYZ(3,*) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) C*********************************************************************** C C DCART CALCULATES THE DERIVATIVES OF THE ENERGY WITH RESPECT TO THE C CARTESIAN COORDINATES. THIS IS DONE BY FINITE DIFFERENCES. C C THE MAIN ARRAYS IN DCART ARE: C DXYZ ON EXIT CONTAINS THE CARTESIAN DERIVATIVES. C C*********************************************************************** COMMON /KEYWRD/ KEYWRD COMMON /EULER / TVEC(3,3), ID COMMON /MOLMEC/ HTYPE(4),NHCO(4,20),NNHCO,ITYPE COMMON /UCELL / L1L,L2L,L3L,L1U,L2U,L3U COMMON /DCARTC/ K1L,K2L,K3L,K1U,K2U,K3U COMMON /NUMCAL/ NUMCAL C COSMO change LOGICAL ISEPS, USEPS , UPDA COMMON /ISEPS/ ISEPS, USEPS, UPDA C end of COSMO change CHARACTER*241 KEYWRD DIMENSION PDI(171),PADI(171),PBDI(171), 1CDI(3,2),NDI(2),LSTOR1(6), LSTOR2(6), ENG(3) LOGICAL DEBUG, FORCE, MAKEP, ANADER, LARGE EQUIVALENCE (LSTOR1(1),L1L), (LSTOR2(1), K1L) SAVE CHNGE, CHNGE2, ANADER, DEBUG, FORCE DATA ICALCN/0/ DATA CHNGE /1.D-4/ CHNGE2=CHNGE*0.5D0 * * CHNGE IS A MACHINE-PRECISION DEPENDENT CONSTANT * CHNGE2=CHNGE/2 * IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL LARGE = (INDEX(KEYWRD,'LARGE') .NE. 0) ANADER= (INDEX(KEYWRD,'ANALYT') .NE. 0) DEBUG = (INDEX(KEYWRD,'DCART') .NE. 0) FORCE = (INDEX(KEYWRD,'PREC')+INDEX(KEYWRD,'FORCE') .NE. 0) ENDIF NCELLS=(L1U-L1L+1)*(L2U-L2L+1)*(L3U-L3L+1) DO 10 I=1,6 LSTOR2(I)=LSTOR1(I) 10 LSTOR1(I)=0 IOFSET=(NCELLS+1)/2 NUMTOT=NUMAT*NCELLS DO 20 I=1,NUMTOT DO 20 J=1,3 20 DXYZ(J,I)=0.D0 IF(ANADER) REWIND 2 DO 130 II=1,NUMAT III=NCELLS*(II-1)+IOFSET IM1=II IF=NFIRST(II) IM=NMIDLE(II) IL=NLAST(II) NDI(2)=NAT(II) DO 30 I=1,3 30 CDI(I,2)=COORD(I,II) DO 130 JJ=1,IM1 JJJ=NCELLS*(JJ-1) C FORM DIATOMIC MATRICES JF=NFIRST(JJ) JM=NMIDLE(JJ) JL=NLAST(JJ) C GET FIRST ATOM NDI(1)=NAT(JJ) MAKEP=.TRUE. DO 120 IK=K1L,K1U DO 120 JK=K2L,K2U DO 120 KL=K3L,K3U JJJ=JJJ+1 * KKK=KKK-1 DO 40 L=1,3 40 CDI(L,1)=COORD(L,JJ)+TVEC(L,1)*IK+TVEC(L,2)*JK+TVEC 1(L,3)*KL IF(.NOT. MAKEP) GOTO 90 MAKEP=.FALSE. IJ=0 DO 50 I=JF,JL K=I*(I-1)/2+JF-1 DO 50 J=JF,I IJ=IJ+1 K=K+1 PADI(IJ)=PA(K) PBDI(IJ)=PB(K) 50 PDI(IJ)=P(K) C GET SECOND ATOM FIRST ATOM INTERSECTION DO 80 I=IF,IL L=I*(I-1)/2 K=L+JF-1 DO 60 J=JF,JL IJ=IJ+1 K=K+1 PADI(IJ)=PA(K) PBDI(IJ)=PB(K) 60 PDI(IJ)=P(K) K=L+IF-1 DO 70 L=IF,I K=K+1 IJ=IJ+1 PADI(IJ)=PA(K) PBDI(IJ)=PB(K) 70 PDI(IJ)=P(K) 80 CONTINUE 90 CONTINUE IF(II.EQ.JJ) GOTO 120 IF(ANADER)THEN CALL ANALYT(PDI,PADI,PBDI,CDI,NDI,JF,JL,IF,IL 1, ENG) DO 100 K=1,3 DXYZ(K,III)=DXYZ(K,III)-ENG(K) 100 DXYZ(K,JJJ)=DXYZ(K,JJJ)+ENG(K) ELSE IF( .NOT. FORCE) THEN CDI(1,1)=CDI(1,1)+CHNGE2 CDI(2,1)=CDI(2,1)+CHNGE2 CDI(3,1)=CDI(3,1)+CHNGE2 CALL DHC(PDI,PADI,PBDI,CDI,NDI,JF,JM,JL,IF,IM 1,IL, AA,1) ENDIF DO 110 K=1,3 IF( FORCE )THEN CDI(K,2)=CDI(K,2)-CHNGE2 CALL DHC(PDI,PADI,PBDI,CDI,NDI,JF,JM,JL,IF 1,IM,IL, AA,1) ENDIF CDI(K,2)=CDI(K,2)+CHNGE CALL DHC(PDI,PADI,PBDI,CDI,NDI,JF,JM,JL,IF,IM 1,IL, EE,2) CDI(K,2)=CDI(K,2)-CHNGE2 IF( .NOT. FORCE) CDI(K,2)=CDI(K,2)-CHNGE2 DERIV=(AA-EE)*23.061D0/CHNGE DXYZ(K,III)=DXYZ(K,III)-DERIV DXYZ(K,JJJ)=DXYZ(K,JJJ)+DERIV 110 CONTINUE ENDIF 120 CONTINUE 130 CONTINUE IF(NNHCO.NE.0)THEN C C NOW ADD IN MOLECULAR-MECHANICS CORRECTION TO THE H-N-C=O TORSION C DEL=1.D-8 DO 160 I=1,NNHCO DO 150 J=1,4 DO 140 K=1,3 COORD(K,NHCO(J,I))=COORD(K,NHCO(J,I))-DEL CALL DIHED(COORD,NHCO(1,I),NHCO(2,I),NHCO(3,I),NHCO(4, 1I),ANGLE) REFH=HTYPE(ITYPE)*SIN(ANGLE)**2 COORD(K,NHCO(J,I))=COORD(K,NHCO(J,I))+DEL*2.D0 CALL DIHED(COORD,NHCO(1,I),NHCO(2,I),NHCO(3,I),NHCO(4, 1I),ANGLE) COORD(K,NHCO(J,I))=COORD(K,NHCO(J,I))-DEL HEAT=HTYPE(ITYPE)*SIN(ANGLE)**2 SUM=(REFH-HEAT)/(2.D0*DEL) DXYZ(K,NHCO(J,I))=DXYZ(K,NHCO(J,I))-SUM 140 CONTINUE 150 CONTINUE 160 CONTINUE ENDIF C COSMO change A. Klamt C analytic calculation of the gradient of the dielectric energy A.Klamt IF (USEPS) CALL DIEGRD(COORD,DXYZ) C DO 170 I=1,6 C 170 LSTOR1(I)=LSTOR2(I) IF ( .NOT. DEBUG) RETURN IW = 6 WRITE(IW,'(//10X,''CARTESIAN COORDINATE DERIVATIVES'',//3X, 1''NUMBER ATOM '',5X,''X'',12X,''Y'',12X,''Z'',/)') IF(NCELLS.EQ.1)THEN WRITE(IW,'(2I6,F13.6,2F13.6)') 1 (I,NAT(I),(DXYZ(J,I),J=1,3),I=1,NUMTOT) ELSEIF(LARGE)THEN WRITE(IW,'(2I6,F13.6,2F13.6)') 1 (I,NAT((I-1)/NCELLS+1),(DXYZ(J,I),J=1,3),I=1,NUMTOT) ELSE WRITE(IW,'(2I6,F13.6,2F13.6)') 1 (I,NAT((I-1)/NCELLS+1),(DXYZ(J,I)+DXYZ(J,I+1)+DXYZ(J,I+2) 2,J=1,3),I=1,NUMTOT,3) ENDIF IROT = 2 IF (ANADER) REWIND IROT C end of COSMO (A. Klamt) changes IF ( .NOT. DEBUG) RETURN WRITE(6,'(//10X,''CARTESIAN COORDINATE DERIVATIVES'',//3X, 1''NUMBER ATOM '',5X,''X'',12X,''Y'',12X,''Z'',/)') IF(NCELLS.EQ.1)THEN WRITE(6,'(2I6,F13.6,2F13.6)') 1 (I,NAT(I),(DXYZ(J,I),J=1,3),I=1,NUMTOT) ELSEIF(LARGE)THEN WRITE(6,'(2I6,F13.6,2F13.6)') 1 (I,NAT((I-1)/NCELLS+1),(DXYZ(J,I),J=1,3),I=1,NUMTOT) ELSE WRITE(6,'(2I6,F13.6,2F13.6)') 1 (I,NAT((I-1)/NCELLS+1),(DXYZ(J,I)+DXYZ(J,I+1)+DXYZ(J,I+2) 2,J=1,3),I=1,NUMTOT,3) ENDIF IF (ANADER) REWIND 2 RETURN END SUBROUTINE DHC (P,PA,PB,XI,NAT,IF,IM,IL,JF,JM,JL,DENER,MODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION P(*), PA(*), PB(*) DIMENSION XI(3,*),NFIRST(2),NMIDLE(2),NLAST(2),NAT(*) C*********************************************************************** C C DHC CALCULATES THE ENERGY CONTRIBUTIONS FROM THOSE PAIRS OF ATOMS C THAT HAVE BEEN MOVED BY SUBROUTINE DERIV. C C*********************************************************************** COMMON /KEYWRD/ KEYWRD 1 /ONELEC/ USS(107),UPP(107),UDD(107) COMMON /EULER / TVEC(3,3), ID COMMON /NUMCAL/ NUMCAL SAVE ICALCN, WLIM, UHF CHARACTER*241 KEYWRD LOGICAL UHF, CUTOFF DIMENSION H(171), SHMAT(9,9), F(171), 1 WJ(100), E1B(10), E2A(10), WK(100), W(100), 2 WJS(100), WKS(100) DOUBLE PRECISION WJS, WKS DATA ICALCN /0/ IF( ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL WLIM=4.D0 IF(ID.EQ.0)WLIM=0.D0 UHF=(INDEX(KEYWRD,'UHF') .NE. 0) ENDIF NFIRST(1)=1 NMIDLE(1)=IM-IF+1 NLAST(1)=IL-IF+1 NFIRST(2)=NLAST(1)+1 NMIDLE(2)=NFIRST(2)+JM-JF NLAST(2)=NFIRST(2)+JL-JF LINEAR=(NLAST(2)*(NLAST(2)+1))/2 DO 10 I=1,LINEAR F(I)=0.D0 10 H(I)=0.0D00 DO 20 I=1,LINEAR 20 F(I)=H(I) JA=NFIRST(2) JB=NLAST(2) JC=NMIDLE(2) IA=NFIRST(1) IB=NLAST(1) IC=NMIDLE(1) J=2 I=1 NJ=NAT(2) NI=NAT(1) CALL H1ELEC(NI,NJ,XI(1,1),XI(1,2),SHMAT) IF(NAT(1).EQ.102.OR.NAT(2).EQ.102) THEN K=(JB*(JB+1))/2 DO 30 J=1,K 30 H(J)=0.D0 ELSE J1=0 DO 40 J=JA,JB JJ=J*(J-1)/2 J1=J1+1 I1=0 DO 40 I=IA,IB JJ=JJ+1 I1=I1+1 H(JJ)=SHMAT(I1,J1) F(JJ)=SHMAT(I1,J1) 40 CONTINUE ENDIF KR=1 IF(ID.EQ.0)THEN CALL ROTATE (NJ,NI,XI(1,2),XI(1,1),W(KR),KR,E2A,E1B,ENUCLR,100. 1D0) ELSE CALL SOLROT (NJ,NI,XI(1,2),XI(1,1),WJ,WK,KR,E2A,E1B,ENUCLR,100. 1D0) IF(MODE.EQ.1)CUTOFF=(WJ(1).LT.WLIM) IF(CUTOFF)THEN DO 50 I=1,KR-1 50 WK(I)=0.D0 ENDIF DO 60 I=1,KR-1 WJS(I)=WJ(I) WKS(I)=WK(I) 60 CONTINUE ENDIF C C * ENUCLR IS SUMMED OVER CORE-CORE REPULSION INTEGRALS. C I2=0 DO 70 I1=IA,IC II=I1*(I1-1)/2+IA-1 DO 70 J1=IA,I1 II=II+1 I2=I2+1 H(II)=H(II)+E1B(I2) 70 F(II)=F(II)+E1B(I2) DO 80 I1=IC+1,IB II=(I1*(I1+1))/2 F(II)=F(II)+E1B(1) 80 H(II)=H(II)+E1B(1) I2=0 DO 90 I1=JA,JC II=I1*(I1-1)/2+JA-1 DO 90 J1=JA,I1 II=II+1 I2=I2+1 H(II)=H(II)+E2A(I2) 90 F(II)=F(II)+E2A(I2) DO 100 I1=JC+1,JB II=(I1*(I1+1))/2 F(II)=F(II)+E2A(1) 100 H(II)=H(II)+E2A(1) CALL FOCK2(F,P,PA,W, WJS, WKS,2,NAT,NFIRST,NMIDLE,NLAST) EE=HELECT(NLAST(2),PA,H,F) IF( UHF ) THEN DO 110 I=1,LINEAR 110 F(I)=H(I) CALL FOCK2(F,P,PB,W, WJS, WKS,2,NAT,NFIRST,NMIDLE,NLAST) EE=EE+HELECT(NLAST(2),PB,H,F) ELSE EE=EE*2.D0 ENDIF DENER=EE+ENUCLR RETURN C END mopac7-1.15/fortran/depvar.f0000644000175000017500000000241011053302064012641 00000000000000 SUBROUTINE DEPVAR (A,I,W,L) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION A(3,*) C*********************************************************************** C C IN SUBROUTINE HADDON WHEN M, THE SYMMETRY OPERATION, IS 18 DEPVAR IS C CALLED. DEPVAR SHOULD THEN CONTAIN A USER-WRITTEN SYMMETRY OPERATION. C SEE HADDON TO GET THE IDEA ON HOW TO WRITE DEPVAR. C C ON INPUT: C A = ARRAY OF INTERNAL COORDINATES C I = ADDRESS OF REFERENCE ATOM C ON OUTPUT: C L = 1 (IF A BOND-LENGTH IS THE DEPENDENT FUNCTION) C = 2 (IF AN ANGLE IS THE DEPENDENT FUNCTION) C = 3 (IF A DIHEDRAL ANGLE IS THE DEPENDENT FUNCTION) C W = VALUE OF THE FUNCTION C C NOTE: IT IS THE WRITER'S RESPONSIBILITY TO MAKE CERTAIN THAT THE C SUBROUTINE DOES NOT CONTAIN ANY ERRORS! C*********************************************************************** COMMON /KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL SAVE FACT CHARACTER*241 KEYWRD DATA ICALCN/0/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL FACT=READA(KEYWRD,INDEX(KEYWRD,'DEPVAR')) WRITE(6,'('' UNIT CELL LENGTH ='',F14.7, 1'' TIMES BOND LENGTH'')')FACT ENDIF W=A(1,I)*FACT L=1 RETURN END mopac7-1.15/fortran/matpak.f0000644000175000017500000000745211053302063012647 00000000000000CCCCCCCCCCCCCCCCCC MATHEMATICAL PACKAGE CCCCCCCCCCCCCCCCCCCCCCC CCCCCCC MOST OF THESE ROUTINE ARE FULLY VECTORIZED ON CRAY-1 CCCCCC CCCCCCC THEY ARE ROUGHLY RESPONSIBLE OF 70% OF THE CPU TIME CCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DOUBLE PRECISION FUNCTION SDOT (N,X,IX,Y,IY) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION X(*),Y(*) C SDOT=DOT PRODUCT OF VECTOR X, STEP IX, BY VECTOR Y, STEP IY, C N ELEMENTS. C SIMULATE ROUTINE ON CRAY (SAME NAME AND CALLING SEQUENCE). J=1 SDOT=0.D0 DO 10 I=1,(N-1)*IX+1,IX SDOT=SDOT+X(I)*Y(J) 10 J=J+IY RETURN END SUBROUTINE SCOPY (N,X,IX,Y,IY) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C COPY VECTOR X, STEP IX ONTO VECTOR Y, STEP IY, N ELEMENTS. C SIMULATE ROUTINE ON CRAY (SAME NAME AND CALLING SEQUENCE). DIMENSION X(*),Y(*) I=1 DO 10 J=1,IY*(N-1)+1,IY Y(J)=X(I) 10 I=I+IX RETURN END SUBROUTINE SAXPY(N,A,X,IX,Y,IY) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C VECTOR INCREMENT Y=Y+A*X WITH X & Y VECTORS OF LENGTH N, A SCALAR. C IX STEP OF X, IY STEP OF Y. C SIMULATE ROUTINE ON CRAY (SAME NAME AND CALLING SEQUENCE). DIMENSION X(*),Y(*) I=1 DO 10 J=1,IY*(N-1)+1,IY Y(J)=Y(J)+A*X(I) 10 I=I+IX RETURN END SUBROUTINE MXM(A,NAR,B,NBR,C,NCC) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C RECTANGULAR MATRIX PRODUCT C=A*B. C EACH MATRIX IS ENTIRELY FULLFILLED AND PACKED. C SIMULATE ROUTINE ON CRAY (SAME NAME AND CALLING SEQUENCE). DIMENSION A(NAR,NBR),B(NBR,NCC),C(NAR,NCC) DO 20 J=1,NCC DO 10 I=1,NAR 10 C(I,J)=0.D0 DO 20 K=1,NBR DO 20 I=1,NAR 20 C(I,J)=C(I,J)+A(I,K)*B(K,J) RETURN END SUBROUTINE MXMT (A,NAR,B,NBR,C,NCC) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C MATRIX PRODUCT C(NAR,NCC) = A(NAR,NBR) * (B(NCC,NBR))' C ALL MATRICES RECTANGULAR , PACKED. DIMENSION A(NAR,NBR),B(NCC,NBR),C(NAR,NCC) DO 20 J=1,NCC DO 10 I=1,NAR 10 C(I,J)=0.D0 DO 20 K=1,NBR DO 20 I=1,NAR 20 C(I,J)=C(I,J)+A(I,K)*B(J,K) RETURN END SUBROUTINE MTXM (A,NAR,B,NBR,C,NCC) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C MATRIX PRODUCT C(NAR,NCC) = (A(NBR,NAR))' * B(NBR,NCC) C ALL MATRICES RECTANGULAR , PACKED. DIMENSION A(NBR,NAR),B(NBR,NCC),C(NAR,NCC) DO 20 J=1,NCC DO 10 I=1,NAR 10 C(I,J)=0.D0 DO 20 K=1,NBR DO 20 I=1,NAR 20 C(I,J)=C(I,J)+A(K,I)*B(K,J) RETURN END SUBROUTINE MTXMC (A,NAR,B,NBR,C) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C MATRIX PRODUCT C(NAR,NAR) = (A(NBR,NAR))' * B(NBR,NAR) C A AND B RECTANGULAR , PACKED, C C LOWER LEFT TRIANGLE ONLY, PACKED IN CANONICAL ORDER. DIMENSION A(NBR,NAR),B(NBR,NAR),C(*) C NOTE ... THIS IS THE BEST VERSION ON CRAY 1. L=1 DO 10 I=1,NAR CALL MXM (A(1,I),1,B,NBR,C(L),I) 10 L=L+I RETURN END SUBROUTINE SUPDOT(S,H,G,N,IG) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C (S)=(H)*(G) WITH H IN PACKED FORM (CANONICAL ORDER). C IG IS THE INCREMENT FOR THE VECTOR G. DIMENSION S(*),H(*),G(*) C CRAY-1 VERSION CCC K=1 CCC L=1 CCC DO 10 I=1,N CCC S(I)=SDOT(I,H(K),1,G,IG,I) CCC IF(I.GT.1) THEN CCC L=L+IG CCC CALL SAXPY(I-1,G(L),H(K),1,S,1) CCC ENDIF CCC 10 K=K+I CCC RETURN CCC END C SCALAR VERSION OK WITH IG=1 ONLY. K=0 DO 20 I=1,N SUM=0.D0 DO 10 J=1,I 10 SUM=SUM+G(J)*H(K+J) S(I)=SUM 20 K=K+I IF (N.EQ.1) RETURN K=1 DO 40 I=2,N GI=G(I) DO 30 J=1,I-1 30 S(J)=S(J)+H(K+J)*GI 40 K=K+I RETURN END mopac7-1.15/fortran/libmopac7.c0000644000175000017500000001146211053302063013240 00000000000000/* libmopac7.c ; written by Tommi Hassinen 2005 as a part of mopac7 package */ /* this is a set of C wrapper functions NOT contained in the fortran sources */ #include "mopac7f2c.h" /* these come from MOPAC7/compfg.c */ struct { integer natoms, labels[120], na[120], nb[120], nc[120]; } geokst_; #define geokst_1 geokst_ struct { integer nvar, loc[720] /* was [2][360] */, idumy; doublereal dumy[360]; } geovar_; #define geovar_1 geovar_ struct { doublereal elect; } elect_; #define elect_1 elect_ struct { doublereal enuclr; } enuclr_; #define enuclr_1 enuclr_ struct { integer numat, nat[120], nfirst[120], nmidle[120], nlast[120], norbs, nelecs, nalpha, nbeta, nclose, nopen, ndumy; doublereal fract; } molkst_; #define molkst_1 molkst_ struct { doublereal c__[90000], eigs[300], cbeta[90000], eigb[300]; } vector_; #define vector_1 vector_ /* these come from MOPAC7/force.c */ struct { doublereal grad[360], gnorm; } gradnt_; #define gradnt_1 gradnt_ /* these come from MOPAC7/esp.c */ union { struct { doublereal potpt[150000] /* was [3][50000] */, work1d[200000]; } _1; struct { doublereal potpt[150000] /* was [3][50000] */, pad1[100000], rad[50000]; integer ias[50000]; } _2; struct { doublereal potpt[150000] /* was [3][50000] */, es[50000], esp[50000], work1d[100000]; } _3; } work1_; #define work1_1 (work1_._1) #define work1_2 (work1_._2) #define work1_3 (work1_._3) struct { doublereal xc, yc, zc, espnuc, espele; integer nesp; } potesp_; #define potesp_1 potesp_ struct { doublereal cespm2[90000] /* was [300][300] */, sla[10], cespml[90000], cesp[90000]; integer inc[1800], nc, npr, is, ip, ipc, isc, icd, iorb; } plots_; #define plots_1 plots_ /****************************************************/ /* these are some definitions that do not change!!! */ /****************************************************/ static logical c_true = TRUE_; /* the idea is that these are CONST */ static logical c_false = FALSE_; /* the idea is that these are CONST */ extern int compfg_(doublereal *, logical *, doublereal *, logical *, doublereal *, logical *); /**************************************************/ /* these are the libmopac7.c utility functions!!! */ /**************************************************/ void lm7_ini_full_xyz(void) { int var_i; /* by default, MOPAC changes the molecule orientation, and limits the available variables. we will change it here, by writing our own variable table. THIS IS FOR XYZ MODE ONLY! */ geovar_1.nvar = geokst_1.natoms * 3; for (var_i = 0;var_i < geovar_1.nvar;var_i++) { geovar_1.loc[var_i * 2 + 0] = (var_i / 3) + 1; } for (var_i = 0;var_i < geovar_1.nvar;var_i++) { geovar_1.loc[var_i * 2 + 1] = (var_i % 3) + 1; } /* ok, but now we still have to update the geometry before doing calculations... that will happen on each call of the energy functions separately. */ } int lm7_get_atom_count(void) { return geokst_1.natoms; } int lm7_get_electron_count(void) { return molkst_1.nelecs; /* for an RHF case... */ } void lm7_set_atom_crd(int atm_i, double * xyz) { const double cf = 10.0; /* conversion factor for [nm] -> [Å] */ geovar_1.dumy[atm_i * 3 + 0] = xyz[0] * cf; geovar_1.dumy[atm_i * 3 + 1] = xyz[1] * cf; geovar_1.dumy[atm_i * 3 + 2] = xyz[2] * cf; } void lm7_call_compfg(double * e, double * hf, int comp_grad) { static doublereal escf; const double cf = 96.4853; /* conversion factor for [eV] -> [kJ/mol] */ if (comp_grad == 0) /* energy was requested... */ { compfg_(geovar_1.dumy, &c_true, &escf, &c_true, gradnt_1.grad, &c_false); (* e) = (elect_1.elect + enuclr_1.enuclr) * cf; (* hf) = escf; } else /* both energy and gradient were requested... */ { compfg_(geovar_1.dumy, &c_true, &escf, &c_true, gradnt_1.grad, &c_true); (* e) = (elect_1.elect + enuclr_1.enuclr) * cf; (* hf) = escf; } } void lm7_get_atom_grad(int atm_i, double * xyz) { const double cf = 41.868; /* conversion factors for [cal] -> [J] and [nm] -> [Å] */ xyz[0] = gradnt_1.grad[atm_i * 3 + 0] * cf; xyz[1] = gradnt_1.grad[atm_i * 3 + 1] * cf; xyz[2] = gradnt_1.grad[atm_i * 3 + 2] * cf; } int lm7_get_orbital_count(void) { return molkst_1.norbs; /* for an RHF case... */ /* cout << "norbs = " << molkst_1.norbs << endl; cout << "nalpha = " << molkst_1.nalpha << endl; */ } void lm7_set_plots_orbital_index(int orb_i) { plots_1.iorb = orb_i; } double lm7_get_orbital_energy(int orb_i) { return vector_1.eigs[orb_i]; } void lm7_set_num_potesp(int n_potesp) { potesp_1.nesp = n_potesp; } void lm7_set_crd_potesp(int potesp_i, double * xyz) { work1_3.potpt[potesp_i * 3 + 0] = xyz[0]; work1_3.potpt[potesp_i * 3 + 1] = xyz[1]; work1_3.potpt[potesp_i * 3 + 2] = xyz[2]; } double lm7_get_val_potesp(int potesp_i) { return work1_3.esp[potesp_i]; } /* END */ mopac7-1.15/fortran/forsav.f0000644000175000017500000000476211053302064012674 00000000000000 SUBROUTINE FORSAV(TIME,DELDIP,IPT,FMATRX, COORD,NVAR,REFH, 1 EVECS,JSTART,FCONST) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION FMATRX(*), DELDIP(3,*), COORD(*), EVECS(*), FCONST(*) ************************************************************************ * * FORSAV SAVES AND RESTORES DATA USED IN THE FORCE CALCULATION. * * ON INPUT TIME = TOTAL TIME ELAPSED SINCE THE START OF THE CALCULATION. * IPT = LINE OF FORCE MATRIX REACHED, IF IN WRITE MODE, * = 0 IF IN READ MODE. * FMATRX = FORCE MATRIX ************************************************************************ COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT CHARACTER*80 GETNAM OPEN(UNIT=9,FILE=GETNAM('FOR009') + ,STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 9 OPEN(UNIT=10,FILE=GETNAM('FOR010') + ,STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 10 IR=9 IW=9 IF( IPT .EQ. 0 ) THEN C C READ IN FORCE DATA C READ(IR,END=20,ERR=20)TIME,IPT,REFH LINEAR=(NVAR*(NVAR+1))/2 READ(IR)(COORD(I),I=1,NVAR) READ(IR,END=10,ERR=10)(FMATRX(I),I=1,LINEAR) READ(IR)((DELDIP(J,I),J=1,3),I=1,IPT) N33=NVAR*NVAR READ(IR)(EVECS(I),I=1,N33) READ(IR)JSTART,(FCONST(I),I=1,NVAR) RETURN ELSE C C WRITE FORCE DATA C REWIND IW IF(TIME.GT.1.D6)TIME=TIME-1.D6 WRITE(IW)TIME,IPT,REFH LINEAR=(NVAR*(NVAR+1))/2 WRITE(IW)(COORD(I),I=1,NVAR) WRITE(IW)(FMATRX(I),I=1,LINEAR) WRITE(IW)((DELDIP(J,I),J=1,3),I=1,IPT) N33=NVAR*NVAR WRITE(IR)(EVECS(I),I=1,N33) WRITE(IR)JSTART,(FCONST(I),I=1,NVAR) LINEAR=(NORBS*(NORBS+1))/2 WRITE(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)WRITE(10)(PB(I),I=1,LINEAR) CLOSE(9) CLOSE(10) ENDIF RETURN 10 WRITE(6,'(10X,''INSUFFICIENT DATA ON DISK FILES FOR A FORCE '', 1''CALCULATION'',/10X,''RESTART. PERHAPS THIS STARTED OF AS A '', 2''FORCE CALCULATION '')') WRITE(6,'(10X,''BUT THE GEOMETRY HAD TO BE OPTIMIZED FIRST, '', 1''IN WHICH CASE '',/10X,''REMOVE THE KEY-WORD "FORCE".'')') STOP 20 WRITE(6,'(//10X,''NO RESTART FILE EXISTS!'')') STOP END mopac7-1.15/fortran/mult.f0000644000175000017500000000131411053302063012342 00000000000000 SUBROUTINE MULT(C,S,VECS,N) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION C(N,*), S(N,*), VECS(N,*) *********************************************************************** * * MULT IS USED IN THE MULLIKEN ANALYSIS ONLY. IT PERFORMS THE * OPERATION:- * VECS=BACK-TRANSFORMED EIGENVECTORS * VECS = C*S C =UN-BACK-TRANSFORMED VECTORS * S =1/SQRT(OVERLAP MATRIX) * *********************************************************************** DO 20 I=1,N DO 20 J=1,N SUM=0.D0 DO 10 K=1,N 10 SUM=SUM+C(K,I)*S(J,K) 20 VECS(J,I)=SUM RETURN END mopac7-1.15/fortran/formxy.f0000644000175000017500000001746511053302063012723 00000000000000 SUBROUTINE FORMXY(W,KR,WCA,WCB,CA,NA,CB,NB) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION W(100), WCA(NA), WCB(NB), CA(NA), CB(NB) C*********************************************************************** C C EACH OF THE NA ELEMENTS OF WCA WILL ADD ON THE NB ELECTROSTATIC C TERMS FROM ATOM B IN CB C C EACH OF THE NB ELEMENTS OF WCB WILL ADD ON THE NA ELECTROSTATIC C TERMS FROM ATOM A IN CA C C BOTH SUMS WILL INVOLVE THE NA*NB TERMS IN ARRAY W. ONCE USED, C W WILL BE INCREMENTED BY NA*NB. C C NA=1 IF ATOM 'A' IS A HYDROGEN, NA=10 IF ATOM 'A' IS NOT A HYDROGEN C NB=1 IF ATOM 'B' IS A HYDROGEN, NB=10 IF ATOM 'B' IS NOT A HYDROGEN C C*********************************************************************** COMMON /KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL LOGICAL MINDO3 CHARACTER KEYWRD*241 DATA ICALCN/0/ IF(ICALCN.NE.NUMCAL)THEN ICALCN=NUMCAL MINDO3=(INDEX(KEYWRD,'MINDO').NE.0) ENDIF IF(MINDO3)THEN W1=W(1)*0.25D0 C C CALCULATE THE TOTAL NUMBER OF ELECTRONS ON ATOMS A AND B C PA=CA(1) PB=CB(1) IF(NA.GT.1.AND.NB.GT.1)THEN PWA=(PA+CA(3)+CA(6)+CA(10))*W1 PWB=(PB+CB(3)+CB(6)+CB(10))*W1 WCA(1)=WCA(1)+PWB WCA(3)=WCA(3)+PWB WCA(6)=WCA(6)+PWB WCA(10)=WCA(10)+PWB WCB(1)=WCB(1)+PWA WCB(3)=WCB(3)+PWA WCB(6)=WCB(6)+PWA WCB(10)=WCB(10)+PWA ELSEIF(NA.GT.1)THEN PWB=PB*W1 WCA(1)=WCA(1)+PWB WCA(3)=WCA(3)+PWB WCA(6)=WCA(6)+PWB WCA(10)=WCA(10)+PWB WCB(1)=WCB(1)+(PA+CA(3)+CA(6)+CA(10))*W1 ELSEIF(NB.GT.1)THEN PWA=PA*W1 WCA(1)=WCA(1)+(PB+CB(3)+CB(6)+CB(10))*W1 WCB(1)=WCB(1)+PWA WCB(3)=WCB(3)+PWA WCB(6)=WCB(6)+PWA WCB(10)=WCB(10)+PWA ELSE WCA(1)=WCA(1)+PB*W1 WCB(1)=WCB(1)+PA*W1 ENDIF KR=KR+1 RETURN ENDIF IF(NA.GT.1.AND.NB.GT.1)THEN C C BOTH ATOMS 'A' AND 'B' ARE HEAVY ATOMS C C C THIS COMMENTED-OUT CODE RUNS SLOWER ON A SCALAR MACHINE THAN THE C EXPLICIT CODE ACTUALLY USED HERE. THE CODE COMMENTED OUT IS PROVIDED C FOR USERS WHO WANT TO VECTORIZE THE CODE C C# IJP=0 C# DO 3 II=1,4 C# DO 4 JJ=1,II C# IJ=IJP*10 C# IJP=IJP+1 C# KL=-10+IJP C# SUM1=0.D0 C# SUM2=0.D0 C# JI=0 C# DO 10 I=1,4 C# DO 10 J=1,I C# JI=JI+1 C# IJ=IJ+1 C# KL=KL+10 C# FACT=1.D0 C# IF(I.EQ.J)FACT=0.5D0 C# SUM1=SUM1+CB(JI)*W(IJ)*FACT C# 10 SUM2=SUM2+CA(JI)*W(KL)*FACT C# IF(II.EQ.JJ)THEN C# SUM1=SUM1*0.5D0 C# SUM2=SUM2*0.5D0 C# ENDIF C# WCA(IJP)=WCA(IJP)+SUM1 C# WCB(IJP)=WCB(IJP)+SUM2 C# 4 CONTINUE C# 3 CONTINUE C C START OF EXPLICIT CODE C WCA(1)=WCA(1)+ 10.25D0*(CB(1)*W(1) + CB(3)*W(3) + CB(6)*W(6) + CB(10)*W(10)) + 20.5D0*( CB(2)*W(2) + CB(4)*W(4) + CB(5)*W(5) + 3 CB(7)*W(7) + CB(8)*W(8) + CB(9)*W(9)) WCA(2)=WCA(2)+ 10.5D0*(CB(1)*W(11) + CB(3)*W(13) + CB(6)*W(16) + CB(10)*W(20)) + 2CB(2)*W(12) + CB(4)*W(14) + CB(5)*W(15) + 3CB(7)*W(17) + CB(8)*W(18) + CB(9)*W(19) WCA(3)=WCA(3)+ 10.25D0*(CB(1)*W(21) + CB(3)*W(23) + CB(6)*W(26) + CB(10)*W(30)) + 20.5D0*(CB(2)*W(22) + CB(4)*W(24) + CB(5)*W(25) + 3 CB(7)*W(27) + CB(8)*W(28) + CB(9)*W(29)) WCA(4)=WCA(4)+ 10.5D0*(CB(1)*W(31) + CB(3)*W(33) + CB(6)*W(36) + CB(10)*W(40)) + 2CB(2)*W(32) + CB(4)*W(34) + CB(5)*W(35) + 3CB(7)*W(37) + CB(8)*W(38) + CB(9)*W(39) WCA(5)=WCA(5)+ 10.5D0*(CB(1)*W(41) + CB(3)*W(43) + CB(6)*W(46) + CB(10)*W(50)) + 2CB(2)*W(42) + CB(4)*W(44) + CB(5)*W(45) + 3CB(7)*W(47) + CB(8)*W(48) + CB(9)*W(49) WCA(6)=WCA(6)+ 10.25D0*(CB(1)*W(51) + CB(3)*W(53) + CB(6)*W(56) + CB(10)*W(60)) + 20.5D0*(CB(2)*W(52) + CB(4)*W(54) + CB(5)*W(55) + 3 CB(7)*W(57) + CB(8)*W(58) + CB(9)*W(59)) WCA(7)=WCA(7)+ 10.5D0*(CB(1)*W(61) + CB(3)*W(63) + CB(6)*W(66) + CB(10)*W(70)) + 2CB(2)*W(62) + CB(4)*W(64) + CB(5)*W(65) + 3CB(7)*W(67) + CB(8)*W(68) + CB(9)*W(69) WCA(8)=WCA(8)+ 10.5D0*(CB(1)*W(71) + CB(3)*W(73) + CB(6)*W(76) + CB(10)*W(80)) + 2CB(2)*W(72) + CB(4)*W(74) + CB(5)*W(75) + 3CB(7)*W(77) + CB(8)*W(78) + CB(9)*W(79) WCA(9)=WCA(9)+ 10.5D0*(CB(1)*W(81) + CB(3)*W(83) + CB(6)*W(86) + CB(10)*W(90)) + 2CB(2)*W(82) + CB(4)*W(84) + CB(5)*W(85) + 3CB(7)*W(87) + CB(8)*W(88) + CB(9)*W(89) WCA(10)=WCA(10)+ 10.25D0*(CB(1)*W(91) + CB(3)*W(93) + CB(6)*W(96) + CB(10)*W(100)) + 20.5D0*(CB(2)*W(92) + CB(4)*W(94) + CB(5)*W(95) + 3 CB(7)*W(97) + CB(8)*W(98) + CB(9)*W(99)) WCB(1)=WCB(1)+ 10.25D0*(CA(1)*W(1) + CA(3)*W(21) + CA(6)*W(51) + CA(10)*W(91)) + 20.5D0*(CA(2)*W(11) + CA(4)*W(31) + CA(5)*W(41) + 3 CA(7)*W(61) + CA(8)*W(71) + CA(9)*W(81)) WCB(2)=WCB(2)+ 10.5D0*(CA(1)*W(2) + CA(3)*W(22) + CA(6)*W(52) + CA(10)*W(92)) + 2CA(2)*W(12) + CA(4)*W(32) + CA(5)*W(42) + 3CA(7)*W(62) + CA(8)*W(72) + CA(9)*W(82) WCB(3)=WCB(3)+ 10.25D0*(CA(1)*W(3) + CA(3)*W(23) + CA(6)*W(53) + CA(10)*W(93)) + 20.5D0*(CA(2)*W(13) + CA(4)*W(33) + CA(5)*W(43) + 3 CA(7)*W(63) + CA(8)*W(73) + CA(9)*W(83)) WCB(4)=WCB(4)+ 10.5D0*(CA(1)*W(4) + CA(3)*W(24) + CA(6)*W(54) + CA(10)*W(94)) + 2CA(2)*W(14) + CA(4)*W(34) + CA(5)*W(44) + 3CA(7)*W(64) + CA(8)*W(74) + CA(9)*W(84) WCB(5)=WCB(5)+ 10.5D0*(CA(1)*W(5) + CA(3)*W(25) + CA(6)*W(55) + CA(10)*W(95)) + 2CA(2)*W(15) + CA(4)*W(35) + CA(5)*W(45) + 3CA(7)*W(65) + CA(8)*W(75) + CA(9)*W(85) WCB(6)=WCB(6)+ 10.25D0*(CA(1)*W(6) + CA(3)*W(26) + CA(6)*W(56) + CA(10)*W(96)) + 20.5D0*(CA(2)*W(16) + CA(4)*W(36) + CA(5)*W(46) + 3 CA(7)*W(66) + CA(8)*W(76) + CA(9)*W(86)) WCB(7)=WCB(7)+ 10.5D0*(CA(1)*W(7) + CA(3)*W(27) + CA(6)*W(57) + CA(10)*W(97)) + 2CA(2)*W(17) + CA(4)*W(37) + CA(5)*W(47) + 3CA(7)*W(67) + CA(8)*W(77) + CA(9)*W(87) WCB(8)=WCB(8)+ 10.5D0*(CA(1)*W(8) + CA(3)*W(28) + CA(6)*W(58) + CA(10)*W(98)) + 2CA(2)*W(18) + CA(4)*W(38) + CA(5)*W(48) + 3CA(7)*W(68) + CA(8)*W(78) + CA(9)*W(88) WCB(9)=WCB(9)+ 10.5D0*(CA(1)*W(9) + CA(3)*W(29) + CA(6)*W(59) + CA(10)*W(99)) + 2CA(2)*W(19) + CA(4)*W(39) + CA(5)*W(49) + 3CA(7)*W(69) + CA(8)*W(79) + CA(9)*W(89) WCB(10)=WCB(10)+ 10.25D0*(CA(1)*W(10) + CA(3)*W(30) + CA(6)*W(60) + CA(10)*W(100)) + 20.5D0*(CA(2)*W(20) + CA(4)*W(40) + CA(5)*W(50) + 3 CA(7)*W(70) + CA(8)*W(80) + CA(9)*W(90)) C C END OF EXPLICIT CODE C ELSEIF(NA.GT.1)THEN C C ATOM 'A' IS NOT A HYDROGEN, ATOM 'B' IS A HYDROGEN C SUM=0.D0 IJ=0 DO 20 I=1,4 DO 10 J=1,I-1 IJ=IJ+1 SUM=SUM+CA(IJ)*W(IJ) 10 WCA(IJ)=WCA(IJ)+CB(1)*W(IJ)*0.5D0 IJ=IJ+1 SUM=SUM+CA(IJ)*W(IJ)*0.5D0 20 WCA(IJ)=WCA(IJ)+CB(1)*W(IJ)*0.25D0 WCB(1) =WCB(1)+SUM*0.5D0 ELSEIF(NB.GT.1)THEN C SUM=0.D0 IJ=0 DO 40 I=1,4 DO 30 J=1,I-1 IJ=IJ+1 SUM=SUM+CB(IJ)*W(IJ) 30 WCB(IJ)=WCB(IJ)+CA(1)*W(IJ)*0.5D0 IJ=IJ+1 SUM=SUM+CB(IJ)*W(IJ)*0.5D0 40 WCB(IJ)=WCB(IJ)+CA(1)*W(IJ)*0.25D0 WCA(1) =WCA(1)+SUM*0.5D0 ELSEIF(NB.GT.1)THEN C C ATOM 'A' IS A HYDROGEN, ATOM 'B' IS NOT A HYDROGEN C ELSE C C BOTH ATOMS 'A' AND 'B' ARE HYDROGENS C WCB(1)=WCB(1)+CA(1)*W(1)*0.25D0 WCA(1)=WCA(1)+CB(1)*W(1)*0.25D0 ENDIF KR=KR+NA*NB RETURN END mopac7-1.15/fortran/mamult.f0000644000175000017500000000132311053302064012661 00000000000000 SUBROUTINE MAMULT(A,B,C,N,ONE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION A(*),B(*),C(*) ************************************************************************ * * MAMULT MULTIPLIES A BY B AND PUTS THE RESULT IN C * ************************************************************************ L=0 DO 40 I=1,N II=((I-1)*I)/2 DO 40 J=1,I JJ=((J-1)*J)/2 L=L+1 SUM=0.D0 DO 10 K=1,J 10 SUM=SUM+A(II+K)*B(JJ+K) DO 20 K=J+1,I 20 SUM=SUM+A(II+K)*B(((K-1)*K)/2+J) DO 30 K=I+1,N KK=(K*(K-1))/2 30 SUM=SUM+A(KK+I)*B(KK+J) 40 C(L)=SUM+ONE*C(L) RETURN END mopac7-1.15/fortran/getsym.f0000644000175000017500000000653611053302064012705 00000000000000 SUBROUTINE GETSYM IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) C*********************************************************************** C C GETSYM READS IN THE SYMMETRY DEPENDENCE RELATIONSHIPS. C C ON EXIT NDEP = NUMBER OF SYMMETRY RELATIONS. C LOCPAR = ARRAY OF REFERENCE FUNCTION INDICES. C IDEPFN = ARRAY OF REFERENCE ATOM LOCATIONS. C LOCDEP = ARRAY OF DEPENDENT ATOM LOCATIONS. C C*********************************************************************** C C LOCDEP IS THE ATOM WHOSE COORDINATES DEPEND ON THE COORDINATES OF C LOCPAR. C LOCPAR IS THE ATOM WHOSE COORDINATES ARE USED TO CALCULATE THOSE C OF LOCDEP C IDEPFN POINTS TO THE PARTICULAR FUNCTION TO BE USED (SEE NDDO) C C*********************************************************************** DIMENSION IVALUE(40),VALUE(40) CHARACTER TEXT(18)*60, LINE*80 SAVE TEXT DATA TEXT/ 1' BOND LENGTH IS SET EQUAL TO THE REFERENCE BOND LENGTH ', 2' BOND ANGLE IS SET EQUAL TO THE REFERENCE BOND ANGLE ', 3' DIHEDRAL ANGLE IS SET EQUAL TO THE REFERENCE DIHEDRAL ANGLE', 4' DIHEDRAL ANGLE VARIES AS 90 DEGREES - REFERENCE DIHEDRAL ', 5' DIHEDRAL ANGLE VARIES AS 90 DEGREES + REFERENCE DIHEDRAL ', 6' DIHEDRAL ANGLE VARIES AS 120 DEGREES - REFERENCE DIHEDRAL ', 7' DIHEDRAL ANGLE VARIES AS 120 DEGREES + REFERENCE DIHEDRAL ', 8' DIHEDRAL ANGLE VARIES AS 180 DEGREES - REFERENCE DIHEDRAL ', 9' DIHEDRAL ANGLE VARIES AS 180 DEGREES + REFERENCE DIHEDRAL ', 1' DIHEDRAL ANGLE VARIES AS 240 DEGREES - REFERENCE DIHEDRAL ', 2' DIHEDRAL ANGLE VARIES AS 240 DEGREES + REFERENCE DIHEDRAL ', 3' DIHEDRAL ANGLE VARIES AS 270 DEGREES - REFERENCE DIHEDRAL ', 4' DIHEDRAL ANGLE VARIES AS 270 DEGREES - REFERENCE DIHEDRAL ', 5' DIHEDRAL ANGLE VARIES AS - REFERENCE DIHEDRAL ', 6' BOND LENGTH VARIES AS HALF THE REFERENCE BOND LENGTH ', 7' BOND ANGLE VARIES AS HALF THE REFERENCE BOND ANGLE ', 8' BOND ANGLE VARIES AS 180 DEGREES - REFERENCE BOND ANGLE ', 9' THE USER HAS TO SUPPLY THIS FUNCTION IN DEPVAR '/ C C TITLE OUTPUT WRITE (6,10) 10 FORMAT (///5X,25HPARAMETER DEPENDENCE DATA// 1' REFERENCE ATOM FUNCTION NO. DEPENDENT ATOM(S)') C C INPUT SYMMETRY : FUNCTION, REFERANCE PARAMETER, AND DEPENDENT ATOMS C NDEP=0 20 READ(5,'(A)',END=70) LINE CALL NUCHAR(LINE,VALUE,NVALUE) C INTEGER VALUES DO 30 I=1,NVALUE 30 IVALUE(I)=VALUE(I) C FILL THE LOCDEP ARRAY IF(NVALUE.EQ.0.OR.IVALUE(3).EQ.0) GO TO 70 DO 40 I=3,NVALUE IF(IVALUE(I).EQ.0) GOTO 50 NDEP=NDEP+1 LOCDEP(NDEP)=IVALUE(I) LOCPAR(NDEP)=IVALUE(1) IDEPFN(NDEP)=IVALUE(2) 40 CONTINUE 50 LL=I-1 WRITE(6,60)IVALUE(1),IVALUE(2),(IVALUE(J),J=3,LL) 60 FORMAT(I13,I19,I14,11I3,10(/,43X,12I3)) GO TO 20 C C CLEAN UP 70 CONTINUE WRITE(6,80) 80 FORMAT(/10X,' DESCRIPTIONS OF THE FUNCTIONS USED',/) DO 120 J=1,18 DO 90 I=1,NDEP IF(IDEPFN(I).EQ.J) GOTO 100 90 CONTINUE GOTO 120 100 WRITE(6,110)J,TEXT(J) 110 FORMAT(I4,5X,A) 120 CONTINUE RETURN END mopac7-1.15/fortran/axis.f0000644000175000017500000001174411053302063012335 00000000000000 SUBROUTINE AXIS(COORD,NUMAT,A,B,C,SUMW, MASS,EVEC) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COORD(3,NUMAT) COMMON /KEYWRD/ KEYWRD ************************************************************************ * * AXIS CALCULATES THE THREE MOMENTS OF INERTIA AND THE MOLECULAR * WEIGHT. THE MOMENTS OF INERTIA ARE RETURNED IN A, B, AND C. * THE MOLECULAR WEIGHT IN SUMW. * THE UNITS OF INERTIA ARE 10**(-40)GRAM-CM**2, * AND MOL.WEIGHT IN ATOMIC-MASS-UNITS. (AMU'S) ************************************************************************ COMMON /NUMCAL/ NUMCAL COMMON /ATMASS/ ATMASS(NUMATM) DIMENSION T(6), X(NUMATM), Y(NUMATM), 1 Z(NUMATM), ROT(3), XYZMOM(3), EIG(3), EVEC(3,3) LOGICAL FIRST CHARACTER*241 KEYWRD SAVE ICALCN, T, FIRST, EIG, ROT, XYZMOM DATA T /6*0.D0/ DATA ICALCN /0/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL FIRST=.TRUE. ENDIF ************************************************************************ * CONST1 = 10**40/(N*A*A) * N = AVERGADRO'S NUMBER * A = CM IN AN ANGSTROM * 10**40 IS TO ALLOW UNITS TO BE 10**(-40)GRAM-CM**2 * ************************************************************************ CONST1 = 1.66053D0 ************************************************************************ * * CONST2 = CONVERSION FACTOR FROM ANGSTROM-AMU TO CM**(-1) * * = (PLANCK'S CONSTANT*N*10**16)/(8*PI*PI*C) * = 6.62618*10**(-27)[ERG-SEC]*6.02205*10**23*10**16/ * (8*(3.1415926535)**2*2.997925*10**10[CM/SEC]) * ************************************************************************ CONST2=16.8576522D0 C FIRST WE CENTRE THE MOLECULE ABOUT THE CENTRE OF GRAVITY, C THIS DEPENDS ON THE ISOTOPIC MASSES, AND THE CARTESIAN GEOMETRY. C SUMW=1.D-20 SUMWX=0.D0 SUMWY=0.D0 SUMWZ=0.D0 C IF(MASS.GT.0) THEN DO 10 I=1,NUMAT SUMW=SUMW+ATMASS(I) SUMWX=SUMWX+ATMASS(I)*COORD(1,I) SUMWY=SUMWY+ATMASS(I)*COORD(2,I) SUMWZ=SUMWZ+ATMASS(I)*COORD(3,I) 10 CONTINUE ELSE SUMW=SUMW+DBLE(NUMAT) DO 20 I=1,NUMAT SUMWX=SUMWX+COORD(1,I) SUMWY=SUMWY+COORD(2,I) SUMWZ=SUMWZ+COORD(3,I) 20 CONTINUE ENDIF C IF(MASS.GT.0.AND.FIRST) 1 WRITE(6,'(/10X,''MOLECULAR WEIGHT ='',F8.2,/)') 2MIN(99999.99D0,SUMW) SUMWX=SUMWX/SUMW SUMWY=SUMWY/SUMW SUMWZ=SUMWZ/SUMW DO 30 I=1,NUMAT X(I)=COORD(1,I)-SUMWX Y(I)=COORD(2,I)-SUMWY 30 Z(I)=COORD(3,I)-SUMWZ ************************************************************************ * * MATRIX FOR MOMENTS OF INERTIA IS OF FORM * * | Y**2+Z**2 | * | -Y*X Z**2+X**2 | -I =0 * | -Z*X -Z*Y X**2+Y**2 | * ************************************************************************ C C$DOIT ASIS DO 40 I=1,6 40 T(I)=DBLE(I)*1.0D-10 C IF(MASS.GT.0) THEN DO 50 I=1,NUMAT T(1)=T(1)+ATMASS(I)*(Y(I)**2+Z(I)**2) T(2)=T(2)-ATMASS(I)*X(I)*Y(I) T(3)=T(3)+ATMASS(I)*(Z(I)**2+X(I)**2) T(4)=T(4)-ATMASS(I)*Z(I)*X(I) T(5)=T(5)-ATMASS(I)*Y(I)*Z(I) T(6)=T(6)+ATMASS(I)*(X(I)**2+Y(I)**2) 50 CONTINUE ELSE DO 60 I=1,NUMAT T(1)=T(1)+(Y(I)**2+Z(I)**2) T(2)=T(2)-X(I)*Y(I) T(3)=T(3)+(Z(I)**2+X(I)**2) T(4)=T(4)-Z(I)*X(I) T(5)=T(5)-Y(I)*Z(I) T(6)=T(6)+(X(I)**2+Y(I)**2) 60 CONTINUE ENDIF C CALL RSP(T,3,3,EIG,EVEC) IF(MASS.GT.0.AND. FIRST.AND.INDEX(KEYWRD,'RC=').EQ.0) THEN WRITE(6,'(//10X,'' PRINCIPAL MOMENTS OF INERTIA IN CM(-1)'',/)' 1) C$DOIT ASIS DO 70 I=1,3 IF(EIG(I).LT.3.D-4) THEN EIG(I)=0.D0 ROT(I)=0.D0 ELSE ROT(I)=CONST2/EIG(I) ENDIF 70 XYZMOM(I)=EIG(I)*CONST1 WRITE(6,'(10X,''A ='',F12.6,'' B ='',F12.6, 1'' C ='',F12.6,/)')(ROT(I),I=1,3) IF(INDEX(KEYWRD,'RC=').EQ.0) 1WRITE(6,'(//10X,'' PRINCIPAL MOMENTS OF INERTIA IN '', 2''UNITS OF 10**(-40)*GRAM-CM**2'',/)') WRITE(6,'(10X,''A ='',F12.6,'' B ='',F12.6, 1'' C ='',F12.6,/)')(XYZMOM(I),I=1,3) C=ROT(1) B=ROT(2) A=ROT(3) ENDIF C C NOW TO ORIENT THE MOLECULE SO THE CHIRALITY IS PRESERVED C SUM=EVEC(1,1)*(EVEC(2,2)*EVEC(3,3)-EVEC(3,2)*EVEC(2,3)) + 1 EVEC(1,2)*(EVEC(2,3)*EVEC(3,1)-EVEC(2,1)*EVEC(3,3)) + 2 EVEC(1,3)*(EVEC(2,1)*EVEC(3,2)-EVEC(2,2)*EVEC(3,1)) IF( SUM .LT. 0) THEN C$DOIT ASIS DO 80 J=1,3 80 EVEC(J,1)=-EVEC(J,1) ENDIF DO 90 I=1,NUMAT COORD(1,I)=X(I) COORD(2,I)=Y(I) COORD(3,I)=Z(I) 90 CONTINUE IF(MASS.GT.0)FIRST=.FALSE. END mopac7-1.15/fortran/dgetri.f0000644000175000017500000001244111053302064012643 00000000000000 SUBROUTINE DGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO ) * * -- LAPACK ROUTINE (VERSION 1.0B) -- * UNIV. OF TENNESSEE, UNIV. OF CALIFORNIA BERKELEY, NAG LTD., * COURANT INSTITUTE, ARGONNE NATIONAL LAB, AND RICE UNIVERSITY * JUNE 30, 1992 * * .. SCALAR ARGUMENTS .. INTEGER INFO, LDA, LWORK, N * .. * .. ARRAY ARGUMENTS .. INTEGER IPIV( * ) DOUBLE PRECISION A( LDA, * ), WORK( LWORK ) * .. * * PURPOSE * ======= * * DGETRI COMPUTES THE INVERSE OF A MATRIX USING THE LU FACTORIZATION * COMPUTED BY DGETRF. * * THIS METHOD INVERTS U AND THEN COMPUTES INV(A) BY SOLVING THE SYSTEM * INV(A)*L = INV(U) FOR INV(A). * * ARGUMENTS * ========= * * N (INPUT) INTEGER * THE ORDER OF THE MATRIX A. N >= 0. * * A (INPUT/OUTPUT) DOUBLE PRECISION ARRAY, DIMENSION (LDA,N) * ON ENTRY, THE FACTORS L AND U FROM THE FACTORIZATION * A = P*L*U AS COMPUTED BY DGETRF. * ON EXIT, IF INFO = 0, THE INVERSE OF THE ORIGINAL MATRIX A. * * LDA (INPUT) INTEGER * THE LEADING DIMENSION OF THE ARRAY A. LDA >= MAX(1,N). * * IPIV (INPUT) INTEGER ARRAY, DIMENSION (N) * THE PIVOT INDICES FROM DGETRF; FOR 1<=I<=N, ROW I OF THE * MATRIX WAS INTERCHANGED WITH ROW IPIV(I). * * WORK (WORKSPACE) DOUBLE PRECISION ARRAY, DIMENSION (LWORK) * IF INFO RETURNS 0, THEN WORK(1) RETURNS N*NB, THE MINIMUM * VALUE OF LWORK REQUIRED TO USE THE OPTIMAL BLOCKSIZE. * * LWORK (INPUT) INTEGER * THE DIMENSION OF THE ARRAY WORK. LWORK >= MAX(1,N). * FOR OPTIMAL PERFORMANCE LWORK SHOULD BE AT LEAST N*NB, * WHERE NB IS THE OPTIMAL BLOCKSIZE RETURNED BY ILAENV. * * INFO (OUTPUT) INTEGER * = 0: SUCCESSFUL EXIT * < 0: IF INFO = -K, THE K-TH ARGUMENT HAD AN ILLEGAL VALUE * > 0: IF INFO = K, U(K,K) IS EXACTLY ZERO; THE MATRIX IS * SINGULAR AND ITS INVERSE COULD NOT BE COMPUTED. * * ===================================================================== * * .. PARAMETERS .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. LOCAL SCALARS .. INTEGER I, IWS, J, JB, JJ, JP, LDWORK, NB, NBMIN, NN * .. * .. EXTERNAL FUNCTIONS .. INTEGER ILAENV EXTERNAL ILAENV * .. * .. EXTERNAL SUBROUTINES .. EXTERNAL DGEMM, DGEMV, DSWAP, DTRSM, DTRTRI, XERBLA * .. * .. INTRINSIC FUNCTIONS .. INTRINSIC MAX, MIN * .. * .. EXECUTABLE STATEMENTS .. * * TEST THE INPUT PARAMETERS. * INFO = 0 WORK( 1 ) = MAX( N, 1 ) IF( N.LT.0 ) THEN INFO = -1 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -3 ELSE IF( LWORK.LT.MAX( 1, N ) ) THEN INFO = -6 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGETRI', -INFO ) RETURN END IF * * QUICK RETURN IF POSSIBLE * IF( N.EQ.0 ) $ RETURN * * FORM INV(U). IF INFO > 0 FROM DTRTRI, THEN U IS SINGULAR, * AND THE INVERSE IS NOT COMPUTED. * CALL DTRTRI( 'UPPER', 'NON-UNIT', N, A, LDA, INFO ) IF( INFO.GT.0 ) $ RETURN * * DETERMINE THE BLOCK SIZE FOR THIS ENVIRONMENT. * NB = ILAENV( 1, 'DGETRI', ' ', N, -1, -1, -1 ) NBMIN = 2 LDWORK = N IF( NB.GT.1 .AND. NB.LT.N ) THEN IWS = MAX( LDWORK*NB, 1 ) IF( LWORK.LT.IWS ) THEN NB = LWORK / LDWORK NBMIN = MAX( 2, ILAENV( 2, 'DGETRI', ' ', N, -1, -1, -1 ) ) END IF ELSE IWS = N END IF * * SOLVE THE EQUATION INV(A)*L = INV(U) FOR INV(A). * IF( NB.LT.NBMIN .OR. NB.GE.N ) THEN * * USE UNBLOCKED CODE. * DO 20 J = N, 1, -1 * * COPY CURRENT COLUMN OF L TO WORK AND REPLACE WITH ZEROS. * DO 10 I = J + 1, N WORK( I ) = A( I, J ) A( I, J ) = ZERO 10 CONTINUE * * COMPUTE CURRENT COLUMN OF INV(A). * IF( J.LT.N ) $ CALL DGEMV( 'NO TRANSPOSE', N, N-J, -ONE, A( 1, J+1 ), $ LDA, WORK( J+1 ), 1, ONE, A( 1, J ), 1 ) 20 CONTINUE ELSE * * USE BLOCKED CODE. * NN = ( ( N-1 ) / NB )*NB + 1 DO 50 J = NN, 1, -NB JB = MIN( NB, N-J+1 ) * * COPY CURRENT BLOCK COLUMN OF L TO WORK AND REPLACE WITH * ZEROS. * DO 40 JJ = J, J + JB - 1 DO 30 I = JJ + 1, N WORK( I+( JJ-J )*LDWORK ) = A( I, JJ ) A( I, JJ ) = ZERO 30 CONTINUE 40 CONTINUE * * COMPUTE CURRENT BLOCK COLUMN OF INV(A). * IF( J+JB.LE.N ) $ CALL DGEMM( 'NO TRANSPOSE', 'NO TRANSPOSE', N, JB, $ N-J-JB+1, -ONE, A( 1, J+JB ), LDA, $ WORK( J+JB ), LDWORK, ONE, A( 1, J ), LDA ) CALL DTRSM( 'RIGHT', 'LOWER', 'NO TRANSPOSE', 'UNIT', N, JB, $ ONE, WORK( J ), LDWORK, A( 1, J ), LDA ) 50 CONTINUE END IF * * APPLY COLUMN INTERCHANGES. * DO 60 J = N - 1, 1, -1 JP = IPIV( J ) IF( JP.NE.J ) $ CALL DSWAP( N, A( 1, J ), 1, A( 1, JP ), 1 ) 60 CONTINUE * WORK( 1 ) = IWS RETURN * * END OF DGETRI * END mopac7-1.15/fortran/nuchar.f0000644000175000017500000000233111053302063012641 00000000000000 SUBROUTINE NUCHAR(LINE,VALUE,NVALUE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ************************************************************************ * * NUCHAR DETERMINS AND RETURNS THE REAL VALUES OF ALL NUMBERS * FOUND IN 'LINE'. ALL CONNECTED SUBSTRINGS ARE ASSUMED * TO CONTAIN NUMBERS * ON ENTRY LINE = CHARACTER STRING * ON EXIT VALUE = ARRAY OF NVALUE REAL VALUES * ************************************************************************ DIMENSION VALUE(40),ISTART(40) CHARACTER*80 LINE CHARACTER*1 TAB,COMMA,SPACE LOGICAL LEADSP SAVE COMMA, SPACE DATA COMMA,SPACE/',',' '/ TAB=CHAR(9) * * CLEAN OUT TABS AND COMMAS * DO 10 I=1,80 10 IF(LINE(I:I).EQ.TAB.OR.LINE(I:I).EQ.COMMA)LINE(I:I)=SPACE * * FIND INITIAL DIGIT OF ALL NUMBERS, CHECK FOR LEADING SPACES FOLLOWED * BY A CHARACTER * LEADSP=.TRUE. NVALUE=0 DO 20 I=1,80 IF (LEADSP.AND.LINE(I:I).NE.SPACE) THEN NVALUE=NVALUE+1 ISTART(NVALUE)=I ENDIF LEADSP=(LINE(I:I).EQ.SPACE) 20 CONTINUE * * FILL NUMBER ARRAY * DO 30 I=1,NVALUE VALUE(I)=READA(LINE,ISTART(I)) 30 CONTINUE RETURN END mopac7-1.15/fortran/rotate.f0000644000175000017500000005747311053302063012700 00000000000000 SUBROUTINE ROTATE (NI,NJ,XI,XJ,W,KR,E1B,E2A,ENUC,CUTOFF) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C*********************************************************************** C C..IMPROVED SCALAR VERSION C..WRITTEN BY ERNEST R. DAVIDSON, INDIANA UNIVERSITY. C C C ROTATE CALCULATES THE TWO-PARTICLE INTERACTIONS. C C ON INPUT NI = ATOMIC NUMBER OF FIRST ATOM. C NJ = ATOMIC NUMBER OF SECOND ATOM. C XI = COORDINATE OF FIRST ATOM. C XJ = COORDINATE OF SECOND ATOM. C C ON OUTPUT W = ARRAY OF TWO-ELECTRON REPULSION INTEGRALS. C E1B,E2A= ARRAY OF ELECTRON-NUCLEAR ATTRACTION INTEGRALS, C E1B = ELECTRON ON ATOM NI ATTRACTING NUCLEUS OF NJ. C ENUC = NUCLEAR-NUCLEAR REPULSION TERM. C C C *** THIS ROUTINE COMPUTES THE REPULSION AND NUCLEAR ATTRACTION C INTEGRALS OVER MOLECULAR-FRAME COORDINATES. THE INTEGRALS OVER C LOCAL FRAME COORDINATES ARE EVALUATED BY SUBROUTINE REPP AND C STORED AS FOLLOWS (WHERE P-SIGMA = O, AND P-PI = P AND P* ) C IN RI C (SS/SS)=1, (SO/SS)=2, (OO/SS)=3, (PP/SS)=4, (SS/OS)=5, C (SO/SO)=6, (SP/SP)=7, (OO/SO)=8, (PP/SO)=9, (PO/SP)=10, C (SS/OO)=11, (SS/PP)=12, (SO/OO)=13, (SO/PP)=14, (SP/OP)=15, C (OO/OO)=16, (PP/OO)=17, (OO/PP)=18, (PP/PP)=19, (PO/PO)=20, C (PP/P*P*)=21, (P*P/P*P)=22. C C*********************************************************************** COMMON /NUMCAL/ NUMCAL SAVE ANALYT, ICALCN COMMON /MOLMEC/ HTYPE(4),NHCO(4,20),NNHCO,ITYPE CHARACTER*241 KEYWRD LOGICAL SI,SJ, ANALYT COMMON /NATORB/ NATORB(107) COMMON /TWOEL3/ F03(107) COMMON /ALPHA3/ ALP3(153) COMMON /ALPHA / ALP(107) COMMON /CORE / TORE(107) COMMON /IDEAS / FN1(107,10),FN2(107,10),FN3(107,10) COMMON /ALPTM / ALPTM(30), EMUDTM(30) COMMON /ROTDUM/ CSS1,CSP1,CPPS1,CPPP1,CSS2,CSP2,CPPS2,CPPP2 COMMON /ROTDU2/ X(3),Y(3),Z(3) COMMON /KEYWRD/ KEYWRD DIMENSION XI(3),XJ(3),W(100),E1B(10),E2A(10) DIMENSION RI(22),CCORE(4,2), BORON1(3,4), BORON2(3,4), BORON3(3,4) EQUIVALENCE (CCORE(1,1),CSS1) DATA ICALCN/0/ DATA BORON1/ 0.182613D0, 0.118587D0, -0.073280D0, 1 0.412253D0, -0.149917D0, 0.000000D0, 2 0.261751D0, 0.050275D0, 0.000000D0, 3 0.359244D0, 0.074729D0, 0.000000D0/ DATA BORON2/ 6.D0, 6.D0, 5.D0, 1 10.D0, 6.D0, 0.D0, 2 8.D0, 5.D0, 0.D0, 3 9.D0, 9.D0, 0.D0/ DATA BORON3/ 0.727592D0, 1.466639D0, 1.570975D0, 1 0.832586D0, 1.186220D0, 0.000000D0, 2 1.063995D0, 1.936492D0, 0.000000D0, 3 0.819351D0, 1.574414D0, 0.000000D0/ C IF(ICALCN.NE.NUMCAL)THEN ICALCN=NUMCAL ANALYT=(INDEX(KEYWRD,'ANALYT') .NE. 0) IF(ANALYT)THEN OPEN(UNIT=2,STATUS='SCRATCH',FORM='UNFORMATTED') REWIND 2 ENDIF ENDIF C X(1)=XI(1)-XJ(1) X(2)=XI(2)-XJ(2) X(3)=XI(3)-XJ(3) RIJ=X(1)*X(1)+X(2)*X(2)+X(3)*X(3) IF (RIJ.LT.0.00002D0) THEN C C SMALL RIJ CASE C DO 10 I=1,10 E1B(I)=0.D0 E2A(I)=0.D0 10 CONTINUE W(KR)=0.D0 ENUC=0.D0 C ELSE IF (ITYPE.EQ.4) THEN C C MINDO CASE C SUM=14.399D0/SQRT(RIJ+(7.1995D0/F03(NI)+7.1995D0/F03(NJ))**2) W(1)=SUM KR=KR+1 DO 20 L=1,10 E1B(L)=0.D0 E2A(L)=0.D0 20 CONTINUE E1B(1) = -SUM*TORE(NJ) E1B(3) = E1B(1) E1B(6) = E1B(1) E1B(10)= E1B(1) E2A(1) = -SUM*TORE(NI) E2A(3) = E2A(1) E2A(6) = E2A(1) E2A(10)= E2A(1) II = MAX(NI,NJ) NBOND = (II*(II-1))/2+NI+NJ-II RIJ = SQRT(RIJ) IF(NBOND.LT.154) THEN IF(NBOND.EQ.22 .OR. NBOND .EQ. 29) THEN C NBOND = 22 IS C-H CASE C NBOND = 29 IS N-H CASE SCALE=ALP3(NBOND)*EXP(-RIJ) ELSE C NBOND < 154 IS NI < 18 AND NJ < 18 CASE SCALE=EXP(-ALP3(NBOND)*RIJ) ENDIF ELSE C NBOND > 154 INVOLVES NI OR NJ > 18 SCALE = 0 IF(NATORB(NI).EQ.0) SCALE= EXP(-ALP(NI)*RIJ) IF(NATORB(NJ).EQ.0) SCALE=SCALE+EXP(-ALP(NI)*RIJ) ENDIF IF (ABS(TORE(NI)).GT.20.D0 .AND. ABS(TORE(NJ)).GT.20.D0) THEN ENUC=0.D0 ELSE IF (RIJ.LT.1.D0 .AND. NATORB(NI)*NATORB(NJ).EQ.0) THEN ENUC=0.D0 ELSE ENUC = TORE(NI)*TORE(NJ)*SUM 1 + ABS(TORE(NI)*TORE(NJ)*(14.399D0/RIJ-SUM)*SCALE) ENDIF C C MNDO AND AM1 CASES C C *** THE REPULSION INTEGRALS OVER MOLECULAR FRAME (W) ARE STORED IN THE C ORDER IN WHICH THEY WILL LATER BE USED. IE. (I,J/K,L) WHERE C J.LE.I AND L.LE.K AND L VARIES MOST RAPIDLY AND I LEAST C RAPIDLY. (ANTI-NORMAL COMPUTER STORAGE) C ELSE C RIJX = SQRT(RIJ) RIJ = MIN(RIJX,CUTOFF) C C *** COMPUTE INTEGRALS IN DIATOMIC FRAME C CALL REPP(NI,NJ,RIJ,RI,CCORE) IF(ANALYT)WRITE(2)(RI(I),I=1,22) C GAM = RI(1) A=1.D0/RIJX X(1) = X(1)*A X(2) = X(2)*A X(3) = X(3)*A IF (ABS(X(3)).GT.0.99999999D0) THEN X(3) = SIGN(1.D0,X(3)) Y(1) = 0.D0 Y(2) = 1.D0 Y(3) = 0.D0 Z(1) = 1.D0 Z(2) = 0.D0 Z(3) = 0.D0 ELSE Z(3)=SQRT(1.D0-X(3)*X(3)) A=1.D0/Z(3) Y(1)=-A*X(2)*SIGN(1.D0,X(1)) Y(2)=ABS(A*X(1)) Y(3)=0.D0 Z(1)=-A*X(1)*X(3) Z(2)=-A*X(2)*X(3) ENDIF SI = (NATORB(NI).GT.1) SJ = (NATORB(NJ).GT.1) IF ( SI .OR. SJ) THEN XX11 = X(1)*X(1) XX21 = X(2)*X(1) XX22 = X(2)*X(2) XX31 = X(3)*X(1) XX32 = X(3)*X(2) XX33 = X(3)*X(3) YY11 = Y(1)*Y(1) YY21 = Y(2)*Y(1) YY22 = Y(2)*Y(2) ZZ11 = Z(1)*Z(1) ZZ21 = Z(2)*Z(1) ZZ22 = Z(2)*Z(2) ZZ31 = Z(3)*Z(1) ZZ32 = Z(3)*Z(2) ZZ33 = Z(3)*Z(3) YYZZ11 = YY11+ZZ11 YYZZ21 = YY21+ZZ21 YYZZ22 = YY22+ZZ22 XY11 = 2.D0*X(1)*Y(1) XY21 = X(1)*Y(2)+X(2)*Y(1) XY22 = 2.D0*X(2)*Y(2) XY31 = X(3)*Y(1) XY32 = X(3)*Y(2) XZ11 = 2.D0*X(1)*Z(1) XZ21 = X(1)*Z(2)+X(2)*Z(1) XZ22 = 2.D0*X(2)*Z(2) XZ31 = X(1)*Z(3)+X(3)*Z(1) XZ32 = X(2)*Z(3)+X(3)*Z(2) XZ33 = 2.D0*X(3)*Z(3) YZ11 = 2.D0*Y(1)*Z(1) YZ21 = Y(1)*Z(2)+Y(2)*Z(1) YZ22 = 2.D0*Y(2)*Z(2) YZ31 = Y(1)*Z(3) YZ32 = Y(2)*Z(3) ENDIF C C (S S/S S) W(1)=RI(1) KI = 1 IF (SJ) THEN C (S S/PX S) W(2)=RI(5)*X(1) C (S S/PX PX) W(3)=RI(11)*XX11+RI(12)*YYZZ11 C (S S/PY S) W(4)=RI(5)*X(2) C (S S/PY PX) W(5)=RI(11)*XX21+RI(12)*YYZZ21 C (S S/PY PY) W(6)=RI(11)*XX22+RI(12)*YYZZ22 C (S S/PZ S) W(7)=RI(5)*X(3) C (S S/PZ PX) W(8)=RI(11)*XX31+RI(12)*ZZ31 C (S S/PZ PY) W(9)=RI(11)*XX32+RI(12)*ZZ32 C (S S/PZ PZ) W(10)=RI(11)*XX33+RI(12)*ZZ33 KI = 10 ENDIF C IF (SI) THEN C (PX S/S S) W(11)=RI(2)*X(1) IF (SJ) THEN C (PX S/PX S) W(12)=RI(6)*XX11+RI(7)*YYZZ11 C (PX S/PX PX) W(13)=X(1)*(RI(13)*XX11+RI(14)*YYZZ11) 1 +RI(15)*(Y(1)*XY11+Z(1)*XZ11) C (PX S/PY S) W(14)=RI(6)*XX21+RI(7)*YYZZ21 C (PX S/PY PX) W(15)=X(1)*(RI(13)*XX21+RI(14)*YYZZ21) 1 +RI(15)*(Y(1)*XY21+Z(1)*XZ21) C (PX S/PY PY) W(16)=X(1)*(RI(13)*XX22+RI(14)*YYZZ22) 1 +RI(15)*(Y(1)*XY22+Z(1)*XZ22) C (PX S/PZ S) W(17)=RI(6)*XX31+RI(7)*ZZ31 C (PX S/PZ PX) W(18)=X(1)*(RI(13)*XX31+RI(14)*ZZ31) 1 +RI(15)*(Y(1)*XY31+Z(1)*XZ31) C (PX S/PZ PY) W(19)=X(1)*(RI(13)*XX32+RI(14)*ZZ32) 1 +RI(15)*(Y(1)*XY32+Z(1)*XZ32) C (PX S/PZ PZ) W(20)=X(1)*(RI(13)*XX33+RI(14)*ZZ33) 1 +RI(15)*( Z(1)*XZ33) C (PX PX/S S) W(21)=RI(3)*XX11+RI(4)*YYZZ11 C (PX PX/PX S) W(22)=X(1)*(RI(8)*XX11+RI(9)*YYZZ11) 1 +RI(10)*(Y(1)*XY11+Z(1)*XZ11) C (PX PX/PX PX) W(23) = 1 (RI(16)*XX11+RI(17)*YYZZ11)*XX11+RI(18)*XX11*YYZZ11 2 +RI(19)*(YY11*YY11+ZZ11*ZZ11) 3 +RI(20)*(XY11*XY11+XZ11*XZ11) 4 +RI(21)*(YY11*ZZ11+ZZ11*YY11) 5 +RI(22)*YZ11*YZ11 C (PX PX/PY S) W(24)=X(2)*(RI(8)*XX11+RI(9)*YYZZ11) 1 +RI(10)*(Y(2)*XY11+Z(2)*XZ11) C (PX PX/PY PX) W(25) = 1 (RI(16)*XX11+RI(17)*YYZZ11)*XX21+RI(18)*XX11*YYZZ21 2 +RI(19)*(YY11*YY21+ZZ11*ZZ21) 3 +RI(20)*(XY11*XY21+XZ11*XZ21) 4 +RI(21)*(YY11*ZZ21+ZZ11*YY21) 5 +RI(22)*YZ11*YZ21 C (PX PX/PY PY) W(26) = 1 (RI(16)*XX11+RI(17)*YYZZ11)*XX22+RI(18)*XX11*YYZZ22 2 +RI(19)*(YY11*YY22+ZZ11*ZZ22) 3 +RI(20)*(XY11*XY22+XZ11*XZ22) 4 +RI(21)*(YY11*ZZ22+ZZ11*YY22) 5 +RI(22)*YZ11*YZ22 C (PX PX/PZ S) W(27)=X(3)*(RI(8)*XX11+RI(9)*YYZZ11) 1 +RI(10)*( +Z(3)*XZ11) C (PX PX/PZ PX) W(28) = 1 (RI(16)*XX11+RI(17)*YYZZ11)*XX31 2 +(RI(18)*XX11+RI(19)*ZZ11+RI(21)*YY11)*ZZ31 3 +RI(20)*(XY11*XY31+XZ11*XZ31) 4 +RI(22)*YZ11*YZ31 C (PX PX/PZ PY) W(29) = 1 (RI(16)*XX11+RI(17)*YYZZ11)*XX32 2 +(RI(18)*XX11+RI(19)*ZZ11+RI(21)*YY11)*ZZ32 3 +RI(20)*(XY11*XY32+XZ11*XZ32) 4 +RI(22)*YZ11*YZ32 C (PX PX/PZ PZ) W(30) = 1 (RI(16)*XX11+RI(17)*YYZZ11)*XX33 2 +(RI(18)*XX11+RI(19)*ZZ11+RI(21)*YY11)*ZZ33 3 +RI(20)*XZ11*XZ33 C (PY S/S S) W(31)=RI(2)*X(2) C (PY S/PX S) W(32)=RI(6)*XX21+RI(7)*YYZZ21 C (PY S/PX PX) W(33)=X(2)*(RI(13)*XX11+RI(14)*YYZZ11) 1 +RI(15)*(Y(2)*XY11+Z(2)*XZ11) C (PY S/PY S) W(34)=RI(6)*XX22+RI(7)*YYZZ22 C (PY S/PY PX) W(35)=X(2)*(RI(13)*XX21+RI(14)*YYZZ21) 1 +RI(15)*(Y(2)*XY21+Z(2)*XZ21) C (PY S/PY PY) W(36)=X(2)*(RI(13)*XX22+RI(14)*YYZZ22) 1 +RI(15)*(Y(2)*XY22+Z(2)*XZ22) C (PY S/PZ S) W(37)=RI(6)*XX32+RI(7)*ZZ32 C (PY S/PZ PX) W(38)=X(2)*(RI(13)*XX31+RI(14)*ZZ31) 1 +RI(15)*(Y(2)*XY31+Z(2)*XZ31) C (PY S/PZ PY) W(39)=X(2)*(RI(13)*XX32+RI(14)*ZZ32) 1 +RI(15)*(Y(2)*XY32+Z(2)*XZ32) C (PY S/PZ PZ) W(40)=X(2)*(RI(13)*XX33+RI(14)*ZZ33) 1 +RI(15)*( +Z(2)*XZ33) C (PY PX/S S) W(41)=RI(3)*XX21+RI(4)*YYZZ21 C (PY PX/PX S) W(42)=X(1)*(RI(8)*XX21+RI(9)*YYZZ21) 1 +RI(10)*(Y(1)*XY21+Z(1)*XZ21) C (PY PX/PX PX) W(43) = 1 (RI(16)*XX21+RI(17)*YYZZ21)*XX11+RI(18)*XX21*YYZZ11 2 +RI(19)*(YY21*YY11+ZZ21*ZZ11) 3 +RI(20)*(XY21*XY11+XZ21*XZ11) 4 +RI(21)*(YY21*ZZ11+ZZ21*YY11) 5 +RI(22)*YZ21*YZ11 C (PY PX/PY S) W(44)=X(2)*(RI(8)*XX21+RI(9)*YYZZ21) 1 +RI(10)*(Y(2)*XY21+Z(2)*XZ21) C (PY PX/PY PX) W(45) = 1 (RI(16)*XX21+RI(17)*YYZZ21)*XX21+RI(18)*XX21*YYZZ21 2 +RI(19)*(YY21*YY21+ZZ21*ZZ21) 3 +RI(20)*(XY21*XY21+XZ21*XZ21) 4 +RI(21)*(YY21*ZZ21+ZZ21*YY21) 5 +RI(22)*YZ21*YZ21 C (PY PX/PY PY) W(46) = 1 (RI(16)*XX21+RI(17)*YYZZ21)*XX22+RI(18)*XX21*YYZZ22 2 +RI(19)*(YY21*YY22+ZZ21*ZZ22) 3 +RI(20)*(XY21*XY22+XZ21*XZ22) 4 +RI(21)*(YY21*ZZ22+ZZ21*YY22) 5 +RI(22)*YZ21*YZ22 C (PY PX/PZ S) W(47)=X(3)*(RI(8)*XX21+RI(9)*YYZZ21) 1 +RI(10)*( +Z(3)*XZ21) C (PY PX/PZ PX) W(48) = 1 (RI(16)*XX21+RI(17)*YYZZ21)*XX31 2 +(RI(18)*XX21+RI(19)*ZZ21+RI(21)*YY21)*ZZ31 3 +RI(20)*(XY21*XY31+XZ21*XZ31) 4 +RI(22)*YZ21*YZ31 C (PY PX/PZ PY) W(49) = 1 (RI(16)*XX21+RI(17)*YYZZ21)*XX32 2 +(RI(18)*XX21+RI(19)*ZZ21+RI(21)*YY21)*ZZ32 3 +RI(20)*(XY21*XY32+XZ21*XZ32) 4 +RI(22)*YZ21*YZ32 C (PY PX/PZ PZ) W(50) = 1 (RI(16)*XX21+RI(17)*YYZZ21)*XX33 2 +(RI(18)*XX21+RI(19)*ZZ21+RI(21)*YY21)*ZZ33 3 +RI(20)*XZ21*XZ33 C (PY PY/S S) W(51)=RI(3)*XX22+RI(4)*YYZZ22 C (PY PY/PX S) W(52)=X(1)*(RI(8)*XX22+RI(9)*YYZZ22) 1 +RI(10)*(Y(1)*XY22+Z(1)*XZ22) C (PY PY/PX PX) W(53) = 1 (RI(16)*XX22+RI(17)*YYZZ22)*XX11+RI(18)*XX22*YYZZ11 2 +RI(19)*(YY22*YY11+ZZ22*ZZ11) 3 +RI(20)*(XY22*XY11+XZ22*XZ11) 4 +RI(21)*(YY22*ZZ11+ZZ22*YY11) 5 +RI(22)*YZ22*YZ11 C (PY PY/PY S) W(54)=X(2)*(RI(8)*XX22+RI(9)*YYZZ22) 1 +RI(10)*(Y(2)*XY22+Z(2)*XZ22) C (PY PY/PY PX) W(55) = 1 (RI(16)*XX22+RI(17)*YYZZ22)*XX21+RI(18)*XX22*YYZZ21 2 +RI(19)*(YY22*YY21+ZZ22*ZZ21) 3 +RI(20)*(XY22*XY21+XZ22*XZ21) 4 +RI(21)*(YY22*ZZ21+ZZ22*YY21) 5 +RI(22)*YZ22*YZ21 C (PY PY/PY PY) W(56) = 1 (RI(16)*XX22+RI(17)*YYZZ22)*XX22+RI(18)*XX22*YYZZ22 2 +RI(19)*(YY22*YY22+ZZ22*ZZ22) 3 +RI(20)*(XY22*XY22+XZ22*XZ22) 4 +RI(21)*(YY22*ZZ22+ZZ22*YY22) 5 +RI(22)*YZ22*YZ22 C (PY PY/PZ S) W(57)=X(3)*(RI(8)*XX22+RI(9)*YYZZ22) 1 +RI(10)*( +Z(3)*XZ22) C (PY PY/PZ PX) W(58) = 1 (RI(16)*XX22+RI(17)*YYZZ22)*XX31 2 +(RI(18)*XX22+RI(19)*ZZ22+RI(21)*YY22)*ZZ31 3 +RI(20)*(XY22*XY31+XZ22*XZ31) 4 +RI(22)*YZ22*YZ31 C (PY PY/PZ PY) W(59) = 1 (RI(16)*XX22+RI(17)*YYZZ22)*XX32 2 +(RI(18)*XX22+RI(19)*ZZ22+RI(21)*YY22)*ZZ32 3 +RI(20)*(XY22*XY32+XZ22*XZ32) 4 +RI(22)*YZ22*YZ32 C (PY PY/PZ PZ) W(60) = 1 (RI(16)*XX22+RI(17)*YYZZ22)*XX33 2 +(RI(18)*XX22+RI(19)*ZZ22+RI(21)*YY22)*ZZ33 3 +RI(20)*XZ22*XZ33 C (PZ S/SS) W(61)=RI(2)*X(3) C (PZ S/PX S) W(62)=RI(6)*XX31+RI(7)*ZZ31 C (PZ S/PX PX) W(63)=X(3)*(RI(13)*XX11+RI(14)*YYZZ11) 1 +RI(15)*( +Z(3)*XZ11) C (PZ S/PY S) W(64)=RI(6)*XX32+RI(7)*ZZ32 C (PZ S/PY PX) W(65)=X(3)*(RI(13)*XX21+RI(14)*YYZZ21) 1 +RI(15)*( +Z(3)*XZ21) C (PZ S/PY PY) W(66)=X(3)*(RI(13)*XX22+RI(14)*YYZZ22) 1 +RI(15)*( +Z(3)*XZ22) C (PZ S/PZ S) W(67)=RI(6)*XX33+RI(7)*ZZ33 C (PZ S/PZ PX) W(68)=X(3)*(RI(13)*XX31+RI(14)*ZZ31) 1 +RI(15)*( +Z(3)*XZ31) C (PZ S/PZ PY) W(69)=X(3)*(RI(13)*XX32+RI(14)*ZZ32) 1 +RI(15)*( +Z(3)*XZ32) C (PZ S/PZ PZ) W(70)=X(3)*(RI(13)*XX33+RI(14)*ZZ33) 1 +RI(15)*( +Z(3)*XZ33) C (PZ PX/S S) W(71)=RI(3)*XX31+RI(4)*ZZ31 C (PZ PX/PX S) W(72)=X(1)*(RI(8)*XX31+RI(9)*ZZ31) 1 +RI(10)*(Y(1)*XY31+Z(1)*XZ31) C (PZ PX/PX PX) W(73) = 1 (RI(16)*XX31+RI(17)*ZZ31)*XX11+RI(18)*XX31*YYZZ11 2 +RI(19)*ZZ31*ZZ11 3 +RI(20)*(XY31*XY11+XZ31*XZ11) 4 +RI(21)*ZZ31*YY11 5 +RI(22)*YZ31*YZ11 C (PZ PX/PY S) W(74)=X(2)*(RI(8)*XX31+RI(9)*ZZ31) 1 +RI(10)*(Y(2)*XY31+Z(2)*XZ31) C (PZ PX/PY PX) W(75) = 1 (RI(16)*XX31+RI(17)*ZZ31)*XX21+RI(18)*XX31*YYZZ21 2 +RI(19)*ZZ31*ZZ21 3 +RI(20)*(XY31*XY21+XZ31*XZ21) 4 +RI(21)*ZZ31*YY21 5 +RI(22)*YZ31*YZ21 C (PZ PX/PY PY) W(76) = 1 (RI(16)*XX31+RI(17)*ZZ31)*XX22+RI(18)*XX31*YYZZ22 2 +RI(19)*ZZ31*ZZ22 3 +RI(20)*(XY31*XY22+XZ31*XZ22) 4 +RI(21)*ZZ31*YY22 5 +RI(22)*YZ31*YZ22 C (PZ PX/PZ S) W(77)=X(3)*(RI(8)*XX31+RI(9)*ZZ31) 1 +RI(10)*( +Z(3)*XZ31) C (PZ PX/PZ PX) W(78) = 1 (RI(16)*XX31+RI(17)*ZZ31)*XX31 2 +(RI(18)*XX31+RI(19)*ZZ31)*ZZ31 3 +RI(20)*(XY31*XY31+XZ31*XZ31) 4 +RI(22)*YZ31*YZ31 C (PZ PX/PZ PY) W(79) = 1 (RI(16)*XX31+RI(17)*ZZ31)*XX32 2 +(RI(18)*XX31+RI(19)*ZZ31)*ZZ32 3 +RI(20)*(XY31*XY32+XZ31*XZ32) 4 +RI(22)*YZ31*YZ32 C (PZ PX/PZ PZ) W(80) = 1 (RI(16)*XX31+RI(17)*ZZ31)*XX33 2 +(RI(18)*XX31+RI(19)*ZZ31)*ZZ33 3 +RI(20)*XZ31*XZ33 C (PZ PY/S S) W(81)=RI(3)*XX32+RI(4)*ZZ32 C (PZ PY/PX S) W(82)=X(1)*(RI(8)*XX32+RI(9)*ZZ32) 1 +RI(10)*(Y(1)*XY32+Z(1)*XZ32) C (PZ PY/PX PX) W(83) = 1 (RI(16)*XX32+RI(17)*ZZ32)*XX11+RI(18)*XX32*YYZZ11 2 +RI(19)*ZZ32*ZZ11 3 +RI(20)*(XY32*XY11+XZ32*XZ11) 4 +RI(21)*ZZ32*YY11 5 +RI(22)*YZ32*YZ11 C (PZ PY/PY S) W(84)=X(2)*(RI(8)*XX32+RI(9)*ZZ32) 1 +RI(10)*(Y(2)*XY32+Z(2)*XZ32) C (PZ PY/PY PX) W(85) = 1 (RI(16)*XX32+RI(17)*ZZ32)*XX21+RI(18)*XX32*YYZZ21 2 +RI(19)*ZZ32*ZZ21 3 +RI(20)*(XY32*XY21+XZ32*XZ21) 4 +RI(21)*ZZ32*YY21 5 +RI(22)*YZ32*YZ21 C (PZ PY/PY PY) W(86) = 1 (RI(16)*XX32+RI(17)*ZZ32)*XX22+RI(18)*XX32*YYZZ22 2 +RI(19)*ZZ32*ZZ22 3 +RI(20)*(XY32*XY22+XZ32*XZ22) 4 +RI(21)*ZZ32*YY22 5 +RI(22)*YZ32*YZ22 C (PZ PY/PZ S) W(87)=X(3)*(RI(8)*XX32+RI(9)*ZZ32) 1 +RI(10)*( +Z(3)*XZ32) C (PZ PY/PZ PX) W(88) = 1 (RI(16)*XX32+RI(17)*ZZ32)*XX31 2 +(RI(18)*XX32+RI(19)*ZZ32)*ZZ31 3 +RI(20)*(XY32*XY31+XZ32*XZ31) 4 +RI(22)*YZ32*YZ31 C (PZ PY/PZ PY) W(89) = 1 (RI(16)*XX32+RI(17)*ZZ32)*XX32 2 +(RI(18)*XX32+RI(19)*ZZ32)*ZZ32 3 +RI(20)*(XY32*XY32+XZ32*XZ32) 4 +RI(22)*YZ32*YZ32 C (PZ PY/PZ PZ) W(90) = 1 (RI(16)*XX32+RI(17)*ZZ32)*XX33 2 +(RI(18)*XX32+RI(19)*ZZ32)*ZZ33 3 +RI(20)*XZ32*XZ33 C (PZ PZ/S S) W(91)=RI(3)*XX33+RI(4)*ZZ33 C (PZ PZ/PX S) W(92)=X(1)*(RI(8)*XX33+RI(9)*ZZ33) 1 +RI(10)*( Z(1)*XZ33) C (PZ PZ/PX PX) W(93) = 1 (RI(16)*XX33+RI(17)*ZZ33)*XX11+RI(18)*XX33*YYZZ11 2 +RI(19)*ZZ33*ZZ11 3 +RI(20)*XZ33*XZ11 4 +RI(21)*ZZ33*YY11 C (PZ PZ/PY S) W(94)=X(2)*(RI(8)*XX33+RI(9)*ZZ33) 1 +RI(10)*( +Z(2)*XZ33) C (PZ PZ/PY PX) W(95) = 1 (RI(16)*XX33+RI(17)*ZZ33)*XX21+RI(18)*XX33*YYZZ21 2 +RI(19)*ZZ33*ZZ21 3 +RI(20)*XZ33*XZ21 4 +RI(21)*ZZ33*YY21 C (PZ PZ/PY PY) W(96) = 1 (RI(16)*XX33+RI(17)*ZZ33)*XX22+RI(18)*XX33*YYZZ22 2 +RI(19)*ZZ33*ZZ22 3 +RI(20)*XZ33*XZ22 4 +RI(21)*ZZ33*YY22 C (PZ PZ/PZ S) W(97)=X(3)*(RI(8)*XX33+RI(9)*ZZ33) 1 +RI(10)*( +Z(3)*XZ33) C (PZ PZ/PZ PX) W(98) = 1 (RI(16)*XX33+RI(17)*ZZ33)*XX31 2 +(RI(18)*XX33+RI(19)*ZZ33)*ZZ31 3 +RI(20)*XZ33*XZ31 C (PZ PZ/PZ PY) W(99) = 1 (RI(16)*XX33+RI(17)*ZZ33)*XX32 2 +(RI(18)*XX33+RI(19)*ZZ33)*ZZ32 3 +RI(20)*XZ33*XZ32 C (PZ PZ/PZ PZ) W(100) = 1 (RI(16)*XX33+RI(17)*ZZ33)*XX33 2 +(RI(18)*XX33+RI(19)*ZZ33)*ZZ33 3 +RI(20)*XZ33*XZ33 KI = 100 ELSE C (PX S/S S) W(2)=RI(2)*X(1) C (PX PX/S S) W(3)=RI(3)*XX11+RI(4)*YYZZ11 C (PY S/S S) W(4)=RI(2)*X(2) C (PY PX/S S) W(5)=RI(3)*XX21+RI(4)*YYZZ21 C (PY PY/S S) W(6)=RI(3)*XX22+RI(4)*YYZZ22 C (PZ S/SS) W(7)=RI(2)*X(3) C (PZ PX/S S) W(8)=RI(3)*XX31+RI(4)*ZZ31 C (PZ PY/S S) W(9)=RI(3)*XX32+RI(4)*ZZ32 C (PZ PZ/S S) W(10)=RI(3)*XX33+RI(4)*ZZ33 KI = 10 END IF END IF C C *** NOW ROTATE THE NUCLEAR ATTRACTION INTEGRALS. C *** THE STORAGE OF THE NUCLEAR ATTRACTION INTEGRALS CORE(KL/IJ) IS C (SS/)=1, (SO/)=2, (OO/)=3, (PP/)=4 C E1B(1)=-CSS1 IF(NATORB(NI).EQ.4) THEN E1B(2) = -CSP1 *X(1) E1B(3) = -CPPS1*XX11-CPPP1*YYZZ11 E1B(4) = -CSP1 *X(2) E1B(5) = -CPPS1*XX21-CPPP1*YYZZ21 E1B(6) = -CPPS1*XX22-CPPP1*YYZZ22 E1B(7) = -CSP1 *X(3) E1B(8) = -CPPS1*XX31-CPPP1*ZZ31 E1B(9) = -CPPS1*XX32-CPPP1*ZZ32 E1B(10)= -CPPS1*XX33-CPPP1*ZZ33 END IF E2A(1)=-CSS2 IF(NATORB(NJ).EQ.4) THEN E2A(2) = -CSP2 *X(1) E2A(3) = -CPPS2*XX11-CPPP2*YYZZ11 E2A(4) = -CSP2 *X(2) E2A(5) = -CPPS2*XX21-CPPP2*YYZZ21 E2A(6) = -CPPS2*XX22-CPPP2*YYZZ22 E2A(7) = -CSP2 *X(3) E2A(8) = -CPPS2*XX31-CPPP2*ZZ31 E2A(9) = -CPPS2*XX32-CPPP2*ZZ32 E2A(10)= -CPPS2*XX33-CPPP2*ZZ33 END IF IF(ABS(TORE(NI)).GT.20.D0.AND.ABS(TORE(NJ)).GT.20.D0) THEN C SPARKLE-SPARKLE INTERACTION ENUC=0.D0 RETURN ELSEIF (RIJ.LT.1.D0.AND.NATORB(NI)*NATORB(NJ).EQ.0) THEN ENUC=0.D0 RETURN ENDIF SCALE = EXP(-ALP(NI)*RIJ)+EXP(-ALP(NJ)*RIJ) C IF (NI.EQ.24.AND.NJ.EQ.24) THEN SCALE = EXP(-ALPTM(NI)*RIJ)+EXP(-ALPTM(NJ)*RIJ) ENDIF C NT=NI+NJ IF(NT.EQ.8.OR.NT.EQ.9) THEN IF(NI.EQ.7.OR.NI.EQ.8) SCALE=SCALE+(RIJ-1.D0)*EXP(-ALP(NI)*R 1IJ) IF(NJ.EQ.7.OR.NJ.EQ.8) SCALE=SCALE+(RIJ-1.D0)*EXP(-ALP(NJ)*R 1IJ) ENDIF ENUC = TORE(NI)*TORE(NJ)*GAM SCALE=ABS(SCALE*ENUC) IF(ITYPE.EQ.2.AND.(NI.EQ.5.OR.NJ.EQ.5))THEN C C LOAD IN AM1 BORON GAUSSIANS C NK=NI+NJ-5 C NK IS THE ATOMIC NUMBER OF THE NON-BORON ATOM NL=1 IF(NK.EQ.1)NL=2 IF(NK.EQ.6)NL=3 IF(NK.EQ.9.OR.NK.EQ.17.OR.NK.EQ.35.OR.NK.EQ.53)NL=4 DO 30 I=1,3 FN1(5,I)=BORON1(I,NL) FN2(5,I)=BORON2(I,NL) 30 FN3(5,I)=BORON3(I,NL) ENDIF IF(ITYPE.EQ.2.OR.ITYPE.EQ.3) THEN DO 40 IG=1,10 IF(ABS(FN1(NI,IG)).GT.0.D0) THEN AX = FN2(NI,IG)*(RIJ-FN3(NI,IG))**2 IF(AX .LE. 25.D0) THEN SCALE=SCALE +TORE(NI)*TORE(NJ)/RIJ*FN1(NI,IG)*EXP(- 1AX) ENDIF ENDIF IF(ABS(FN1(NJ,IG)).GT.0.D0) THEN AX = FN2(NJ,IG)*(RIJ-FN3(NJ,IG))**2 IF(AX .LE. 25.D0) THEN SCALE=SCALE +TORE(NI)*TORE(NJ)/RIJ*FN1(NJ,IG)*EXP(- 1AX) ENDIF ENDIF 40 CONTINUE ENDIF ENUC=ENUC+SCALE C IF(NATORB(NI)*NATORB(NJ).EQ.0)KI=0 KR=KR+KI C C ENDIF RETURN END mopac7-1.15/fortran/deri23.f0000644000175000017500000000641111053302063012454 00000000000000 SUBROUTINE DERI23 (F,FD,E,FCI,CMO,EMO,NORBS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION F(*), FD(*), E(*), FCI(*), CMO(NORBS,*), EMO(*) *********************************************************************** * 1) UNPACK THE C.I-ACTIVE M.O. DERIVATIVES IN M.O. BASIS, * DIAGONAL BLOCKS INCLUDED. * 2) EXTRACT THE FOCK EIGENVALUES RELAXATION OVER C.I-ACTIVE M.O. * INPUT * F : UNSCALED SOLUTIONS VECTOR IN M.O. BASIS, * OFF-DIAGONAL BLOCKS PACKED AS DEFINED IN 'DERI21'. * FD : DIAGONAL BLOCKS OF NON-RELAXED FOCK MATRIX * AS DEFINED IN 'DERI1'. * E(NORBS) : FOCK EIGENVALUES. * FCI : DIAGONAL BLOCKS OF RELAXATION OF THE FOCK MATRIX. * NORBS : NUMBER OF M.O * NELEC,NMOS : # OF LAST FROZEN CORE M.O , C.I-ACTIVE BAND LENGTH. * OUTPUT * CMO(N,NELEC+1,...,NELEC+NMOS): C.I-ACTIVE M.O DERIVATIVES * IN M.O BASIS. * EMO( NELEC+1,...,NELEC+NMOS): C.I-ACTIVE FOCK EIGENVALUE RELAXATI * *********************************************************************** COMMON /FOKMAT/ FDUMY(MPACK), SCALAR(MPACK) COMMON /NVOMAT/ DIAG(MPACK/2) COMMON /CIBITS/ NMOS,LAB,NELEC,NBO(3) 1 /MOLKST/ NDUMY(4*NUMATM+8),FRACT C NOPEN =NBO(1)+NBO(2) CONST=1.D-3 C C PART 1. C ------- C COMPUTE AND UNPACK DIAGONAL BLOCKS, DIAGONAL TERMS INCLUDED, C ACCORDING TO CMO(I,J) = (FD(I,J)-FCI(I,J))/(E(I)-E(J)) C AND TAKING CMO(I,J)=0 IF E(I)=E(J) (THRESHOLD 1D-4 EV), C I.E WHEN M.O. DEGENERACY OCCURS. L=1 NEND=0 DO 30 LOOP=1,3 NINIT=NEND+1 NEND =NEND+NBO(LOOP) N1=MAX(NINIT,NELEC+1 ) N2=MIN(NEND ,NELEC+NMOS) IF(N2.LT.N1) GO TO 30 DO 20 I=N1,N2 IF(I.GT.NINIT) THEN DO 10 J=NINIT,I-1 DIFFE=E(I)-E(J) IF(ABS(DIFFE).GT.1.D-4) THEN COM=(FD(L)-FCI(L))/DIFFE ELSE COM=0.D0 ENDIF CMO(I,J)=-COM CMO(J,I)= COM 10 L=L+1 ENDIF 20 CMO(I,I)= 0.D0 30 CONTINUE C C C.I-ACTIVE EIGENVALUES RELAXATION. CALL SCOPY(NMOS,FCI(L),1,EMO(NELEC+1),1) C C PART 2. C ------- C UNPACK THE ANTISYMMETRIC MATRIX F IN CMO, (OFF-DIAGONAL BLOCKS). C L=1 IF(NBO(2).GT.0 .AND. NBO(1).GT.0) THEN C OPEN-CLOSED SCAL=1.D0/(2.D0-FRACT+CONST) DO 40 J=1 ,NBO(1) DO 40 I=NBO(1)+1,NOPEN COM=F(L)*SCAL CMO(I,J)=-COM CMO(J,I)= COM 40 L=L+1 ENDIF IF(NBO(3).GT.0 .AND. NBO(1).GT.0) THEN C VIRTUAL-CLOSED SCAL=0.5D0 DO 50 J=1 ,NBO(1) DO 50 I=NOPEN+1,NORBS COM=F(L)*SCAL CMO(I,J)=-COM CMO(J,I)= COM 50 L=L+1 ENDIF IF(NBO(3).NE.0 .AND. NBO(2).NE.0) THEN C VIRTUAL-OPEN SCAL=1.D0/(FRACT+CONST) DO 60 J=NBO(1)+1,NOPEN DO 60 I=NOPEN+1 ,NORBS COM=F(L)*SCAL CMO(I,J)=-COM CMO(J,I)= COM 60 L=L+1 ENDIF RETURN END mopac7-1.15/fortran/perm.f0000644000175000017500000000523611053302064012334 00000000000000 SUBROUTINE PERM(IPERM,NELS,NMOS,MAXMOS,NPERMS) DIMENSION IPERM(MAXMOS,60), IADD(20), NEL(20) ************************************************************************ * * PERM PERMUTES NELS ENTITIES AMONG NMOS LOCATIONS. THE ENTITIES AND * LOCATIONS ARE EACH INDISTINGUISHABLE. THE PAULI EXCLUSION * PRINCIPLE IS FOLLOWED. THE NUMBER OF STATES PRODUCED IS GIVEN * BY NMOS!/(NELS!*(NMOS-NELS)!). * ON INPUT: NELS = NUMBER OF INDISTINGUISHABLE ENTITIES * NMOS = NUMBER OF INDISTINGUISHABLE LOCATIONS * * ON OUTPUT IPERM = ARRAY OF PERMUTATIONS, A 0 INDICATES NO ENTITY, * A 1 INDICATES AN ENTITY. * NPERM = NUMBER OF PERMUTATIONS. * ************************************************************************ IF(NELS.GT.NMOS)THEN WRITE(6,'('' NUMBER OF PARTICLES,'',I3,'' GREATER THAN NO. '', 1''OF STATES,'',I3)')NELS,NMOS NPERMS=0 RETURN ENDIF NPERMS=1 DO 10 I=1,20 10 NEL(I)=1000 DO 20 I=1,NELS 20 NEL(I)=1 DO 50 I12=1-12+NELS,NMOS,NEL(12) IADD(12)=I12 DO 50 I11=I12+1,NMOS,NEL(11) IADD(11)=I11 DO 50 I10=I11+1,NMOS,NEL(10) IADD(10)=I10 DO 50 I9=I10+1,NMOS,NEL(9) IADD(9)=I9 DO 50 I8=I9+1,NMOS,NEL(8) IADD(8)=I8 DO 50 I7=I8+1,NMOS,NEL(7) IADD(7)=I7 DO 50 I6=I7+1,NMOS,NEL(6) IADD(6)=I6 DO 50 I5=I6+1,NMOS,NEL(5) IADD(5)=I5 DO 50 I4=I5+1,NMOS,NEL(4) IADD(4)=I4 DO 50 I3=I4+1,NMOS,NEL(3) IADD(3)=I3 DO 50 I2=I3+1,NMOS,NEL(2) IADD(2)=I2 DO 50 I1=I2+1,NMOS,NEL(1) IADD(1)=I1 DO 30 J=1,NMOS 30 IPERM(J,NPERMS)=0 DO 40 J=1,NELS 40 IPERM(IADD(J),NPERMS)=1 NPERMS=NPERMS+1 IF(NPERMS.GT.61)THEN WRITE(6,'('' NUMBER OF PERM 1UTATIONS TOO GREAT, LIMIT 60'')') GOTO 60 ENDIF 50 CONTINUE 60 NPERMS=NPERMS-1 RETURN END mopac7-1.15/fortran/fdate.c0000644000175000017500000000107311053302063012443 00000000000000/* NAME fdate - return date and time in an ASCII string SYNOPSIS subroutine fdate(string) character*24 string DESCRIPTION Fdate returns the current date and time as a 24 character string in the format described under ctime(3). Neither `newline' nor NULL will be included. LAST MODIFIACTION June 21, 1995, Istvan Cserny (cserny@atomki.hu) */ #include "mopac7f2c.h" #include #include void fdate_(char *cht, ftnlen cht_len) { static time_t t; time(&t); s_copy(cht,ctime(&t),24L,24L); return; } mopac7-1.15/fortran/dfock2.f0000644000175000017500000002017211053302063012534 00000000000000 SUBROUTINE DFOCK2(F, PTOT, P, W, NUMAT, NFIRST, 1NMIDLE, NLAST, NATI) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION F(*), PTOT(*), NFIRST(*), NMIDLE(*), 1 NLAST(*), P(*), W(*) C*********************************************************************** C C DFOCK2 ADDS THE 2-ELECTRON 2-CENTER REPULSION CONTRIBUTION TO C THE FOCK MATRIX DERIVATIVE WITHIN THE NDDO OR MINDO FORMALISMS. C INPUT C F : 1-ELECTRON CONTRIBUTIONS DERIVATIVES. C PTOT : TOTAL DENSITY MATRIX. C P : ALPHA OR BETA DENSITY MATRIX. = 0.5 * PTOT C W : NON VANISHING TWO-ELECTRON INTEGRAL DERIVATIVES C (ORDERED AS DEFINED IN DHCORE). C NATI : # OF THE ATOM SUPPORTING THE VARYING CARTESIAN COORDINATE. C OUTPUT C F : FOCK MATRIX DERIVATIVE WITH RESPECT TO THE CART. COORD. C C*********************************************************************** COMMON /NUMCAL/ NUMCAL COMMON /WORK4 / PTOT2 COMMON /KEYWRD/ KEYWRD SAVE IFACT,I1FACT, ITYPE DIMENSION IFACT(MAXORB), 1I1FACT(MAXORB), JINDEX(256), KINDEX(256), IJPERM(10), LLPERM(10), 2PK(16), PJA(16), PJB(16), MMPERM(10), 3PTOT2(NUMATM,16), JJNDEX(256) CHARACTER*241 KEYWRD DATA ITYPE /1/ DATA ICALCN/0/ IF(ICALCN.NE.NUMCAL)THEN ICALCN=NUMCAL ITYPE=0 ENDIF 10 CONTINUE GOTO (20,270,70) ITYPE 20 CONTINUE C C SET UP ARRAY OF LOWER HALF TRIANGLE INDICES (PASCAL'S TRIANGLE) C DO 30 I=1,MAXORB IFACT(I)=(I*(I-1))/2 30 I1FACT(I)=IFACT(I)+I C C SET UP GATHER-SCATTER TYPE ARRAYS FOR USE WITH TWO-ELECTRON C INTEGRALS. JINDEX ARE THE INDICES OF THE J-INTEGRALS FOR ATOM I C INTEGRALS. JJNDEX ARE THE INDICES OF THE J-INTEGRALS FOR ATOM J C KINDEX ARE THE INDICES OF THE K-INTEGRALS C M=0 DO 40 I=1,4 DO 40 J=1,4 IJ=MIN(I,J) JI=I+J-IJ DO 40 K=1,4 IK=MIN(I,K) KI=I+K-IK DO 40 L=1,4 M=M+1 KL=MIN(K,L) LK=K+L-KL JL=MIN(J,L) LJ=J+L-JL KINDEX(M)= IFACT(LJ) +JL + 10*( IFACT(KI) +IK) -10 40 JINDEX(M)=(IFACT(JI) + IJ)*10 + IFACT(LK) + KL - 10 L=0 DO 50 I=1,4 I1=(I-1)*4 DO 50 J=1,I I1=I1+1 L=L+1 IJPERM(L)=I1 MMPERM(L)=IJPERM(L)-16 LLPERM(L)=(I1-1)*16 50 CONTINUE L=0 DO 60 I=1,10 M=MMPERM(I) L=LLPERM(I) DO 60 K=1,16 L=L+1 M=M+16 60 JJNDEX(L)=JINDEX(M) IF(INDEX(KEYWRD,'MINDO') .NE. 0) THEN ITYPE=2 ELSE ITYPE=3 ENDIF GOTO 10 70 KK=0 L=0 DO 90 I=1,NUMAT IA=NFIRST(I) IB=NLAST(I) M=0 DO 80 J=IA,IB DO 80 K=IA,IB M=M+1 JK=MIN(J,K) KJ=K+J-JK JK=JK+(KJ*(KJ-1))/2 PTOT2(I,M)=PTOT(JK) 80 CONTINUE 90 CONTINUE II=NATI IA=NFIRST(II) IB=NLAST(II) DO 260 JJ=1,NUMAT IF(II.EQ.JJ) GOTO 260 JA=NFIRST(JJ) JB=NLAST(JJ) * JC=NMIDLE(JJ) IF(IB-IA.GE.3.AND.JB-JA.GE.3)THEN C C HEAVY-ATOM - HEAVY-ATOM C C EXTRACT COULOMB TERMS C DO 100 I=1,16 PJA(I)=PTOT2(II,I) 100 PJB(I)=PTOT2(JJ,I) C C COULOMB TERMS C CALL JAB(IA,JA,LLPERM,JINDEX, JJNDEX, PJA,PJB,W(KK+1), 1F) C C EXCHANGE TERMS C C C EXTRACT INTERSECTION OF ATOMS II AND JJ IN THE SPIN DENSITY MATRIX C IF(IA.GT.JA)THEN L=0 DO 110 I=IA,IB DO 110 J=JA,JB L=L+1 110 PK(L)=P(IFACT(I)+J) ELSE L=0 DO 120 I=IA,IB DO 120 J=JA,JB L=L+1 120 PK(L)=P(IFACT(J)+I) ENDIF I1=IA J1=JA CALL KAB(IA,JA, PK, W(KK+1), KINDEX, F) IA=I1 JA=J1 KK=KK+100 ELSEIF(IB-IA.GE.3)THEN C C LIGHT-ATOM - HEAVY-ATOM C C C COULOMB TERMS C SUMDIA=0.D0 SUMOFF=0.D0 LL=I1FACT(JA) K=0 DO 140 I=0,3 J1=IFACT(IA+I)+IA-1 DO 130 J=0,I-1 K=K+1 J1=J1+1 F(J1)=F(J1)+PTOT(LL)*W(KK+K) 130 SUMOFF=SUMOFF+PTOT(J1)*W(KK+K) J1=J1+1 K=K+1 F(J1)=F(J1)+PTOT(LL)*W(KK+K) 140 SUMDIA=SUMDIA+PTOT(J1)*W(KK+K) F(LL)=F(LL)+SUMOFF*2.D0+SUMDIA C C EXCHANGE TERMS C C C EXTRACT INTERSECTION OF ATOMS II AND JJ IN THE SPIN DENSITY MATRIX C IF(IA.GT.JA)THEN K=0 DO 160 I=IA,IB I1=IFACT(I)+JA SUM=0.D0 DO 150 J=IA,IB K=K+1 J1=IFACT(J)+JA 150 SUM=SUM+P(J1)*W(KK+JINDEX(K)) 160 F(I1)=F(I1)-SUM ELSE K=0 DO 180 I=IA,IB I1=IFACT(JA)+I SUM=0.D0 DO 170 J=IA,IB K=K+1 J1=IFACT(JA)+J 170 SUM=SUM+P(J1)*W(KK+JINDEX(K)) 180 F(I1)=F(I1)-SUM ENDIF KK=KK+10 ELSEIF(JB-JA.GE.3)THEN C C HEAVY-ATOM - LIGHT-ATOM C C C COULOMB TERMS C SUMDIA=0.D0 SUMOFF=0.D0 LL=I1FACT(IA) K=0 DO 200 I=0,3 J1=IFACT(JA+I)+JA-1 DO 190 J=0,I-1 K=K+1 J1=J1+1 F(J1)=F(J1)+PTOT(LL)*W(KK+K) 190 SUMOFF=SUMOFF+PTOT(J1)*W(KK+K) J1=J1+1 K=K+1 F(J1)=F(J1)+PTOT(LL)*W(KK+K) 200 SUMDIA=SUMDIA+PTOT(J1)*W(KK+K) F(LL)=F(LL)+SUMOFF*2.D0+SUMDIA C C EXCHANGE TERMS C C C EXTRACT INTERSECTION OF ATOMS II AND JJ IN THE SPIN DENSITY MATRIX C IF(IA.GT.JA)THEN K=IFACT(IA)+JA J=0 DO 220 I=K,K+3 SUM=0.D0 DO 210 L=K,K+3 J=J+1 210 SUM=SUM+P(L)*W(KK+JINDEX(J)) 220 F(I)=F(I)-SUM ELSE J=0 DO 240 K=JA,JA+3 I=IFACT(K)+IA SUM=0.D0 DO 230 LL=JA,JA+3 L=IFACT(LL)+IA J=J+1 230 SUM=SUM+P(L)*W(KK+JINDEX(J)) 240 F(I)=F(I)-SUM ENDIF KK=KK+10 ELSE C C LIGHT-ATOM - LIGHT-ATOM C I1=I1FACT(IA) J1=I1FACT(JA) F(I1)=F(I1)+PTOT(J1)*W(KK+1) F(J1)=F(J1)+PTOT(I1)*W(KK+1) IF(IA.GT.JA)THEN IJ=I1+JA-IA F(IJ)=F(IJ)-P (IJ)*W(KK+1) ELSE IJ=J1+IA-JA F(IJ)=F(IJ)-P (IJ)*W(KK+1) ENDIF KK=KK+1 ENDIF 260 CONTINUE C RETURN 270 KR=0 II=NATI IA=NFIRST(II) IB=NLAST(II) DO 290 JJ=1,NUMAT IF (JJ.EQ.II) GO TO 290 KR=KR+1 ELREP=W(KR) JA=NFIRST(JJ) JB=NLAST(JJ) DO 280 I=IA,IB KA=IFACT(I) KK=KA+I DO 280 K=JA,JB LL=I1FACT(K) IF (JA.LT.IA) THEN IK=KA+K ELSE IK=LL+I-K ENDIF F(KK)=F(KK)+PTOT(LL)*ELREP F(LL)=F(LL)+PTOT(KK)*ELREP 280 F(IK)=F(IK)-P(IK)*ELREP 290 CONTINUE RETURN END mopac7-1.15/fortran/second.f0000644000175000017500000000367011053302063012643 00000000000000 FUNCTION SECOND() DOUBLE PRECISION SECOND C****************************************************** C C SECOND, ON EXIT, CONTAINS THE NUMBER OF CPU SECONDS C SINCE THE START OF THE CALCULATION. C C****************************************************** LOGICAL SETOK CHARACTER*1 X, GETNAM*80 DIMENSION A(2) SAVE SETOK, SHUT DATA SETOK / .TRUE. /, SHUT/0.D0/ C C IF YOU ARE NOT USING A VAX OR A UNIX COMPUTER, UNCOMMENT THE C NEXT LINE C CPU=0.0 C C IF YOU ARE NOT USING A VAX OR A UNIX COMPUTER, REMOVE THE NEXT LINE Y=ETIME(A) CPU=A(1) *********************************************************************** * * NOW TO SEE IF A FILE LOGICALLY CALLED SHUTDOWN EXISTS, IF IT DOES * THEN INCREMENT CPU TIME BY 1,000,000 SECONDS. * ************************************************************************ OPEN(UNIT=4, FILE=GETNAM('SHUTDOWN'),STATUS='UNKNOWN') READ(4,'(A)',END=10, ERR=10)X * * FILE EXISTS, THEREFORE INCREMENT TIME * SHUT=1.D6 IF( SETOK) THEN WRITE(6,'(///10X,''**** JOB STOPPED BY OPERATOR ****'')') SETOK=.FALSE. ENDIF 10 CONTINUE SECOND=CPU+SHUT CLOSE(4) RETURN END CHARACTER*80 FUNCTION GETNAM(NAMEIN) C C THIS FUNCTION IS DESIGNED FOR USE ON A VMS AND ON A UNIX C SYSTEM. IF YOUR SYSTEM IS VMS, COMMENT OUT THE LINE C " CALL GETENV(NAMEIN, NAMEOUT)", FURTHER ON IN THIS FUNCTION. C IF YOUR SYSTEM IS UNIX, MAKE SURE THE LINE IS NOT C COMMENTED OUT. C ON A UNIX SYSTEM, GETENV WILL CONSULT THE ENVIRONMENT C FOR THE CURRENT ALIAS OF THE CHARACTER STRING CONTAINED IN C 'NAMEIN'. THE ALIAS, IF IT EXISTS, OR THE ORIGINAL NAME IN NAMEIN C WILL BE RETURNED. C CHARACTER*(*) NAMEIN CHARACTER*(80) NAMEOUT NAMEOUT=' ' CALL GETENV(NAMEIN, NAMEOUT) IF (NAMEOUT.EQ.' ') NAMEOUT=NAMEIN GETNAM = NAMEOUT RETURN END mopac7-1.15/fortran/cqden.f0000644000175000017500000000173211053302064012460 00000000000000 SUBROUTINE CQDEN() IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON / SOLV / FEPSI,RDS,DISEX2,NSPA,NPS,NPS2,NDEN, 1 COSURF(3,LENABC), SRAD(NUMATM),ABCMAT(LENAB2), 2 TM(3,3,NUMATM),QDEN(MAXDEN),DIRTM(3,NPPA), 3 BH(LENABC) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /CORE / CORE(107) IDEN=0 DO 30 I=1,NUMAT IA=NFIRST(I) IDEL=NLAST(I)-IA IM=(IA*(IA+1))/2 IDEN=IDEN+1 QDEN(IDEN)=CORE(NAT(I))-P(IM) DO 20 IC=1,IDEL IM=IM+IA-1 DO 10 ID=0,IC IM=IM+1 IDEN=IDEN+1 QDEN(IDEN)=-P(IM) 10 CONTINUE 20 CONTINUE 30 CONTINUE RETURN END mopac7-1.15/fortran/dfpsav.f0000644000175000017500000001517711053302064012661 00000000000000 SUBROUTINE DFPSAV(TOTIME,XPARAM,GD,XLAST,FUNCT1,MDFP,XDFP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XPARAM(*), GD(*), XLAST(*), MDFP(9),XDFP(9) ********************************************************************** * * DFPSAV STORES AND RESTORES DATA USED IN THE D-F-P GEOMETRY * OPTIMISATION. * * ON INPUT TOTIME = TOTAL CPU TIME ELAPSED DURING THE CALCULATION. * XPARAM = CURRENT VALUE OF PARAMETERS. * GD = OLD GRADIENT. * XLAST = OLD VALUE OF PARAMETERS. * FUNCT1 = CURRENT VALUE OF HEAT OF FORMATION. * MDFP = INTEGER CONSTANTS USED IN D-F-P. * XDFP = REAL CONSTANTS USED IN D-F-P. * MDFP(9)= 1 FOR DUMP, 0 FOR RESTORE. ********************************************************************** COMMON /KEYWRD/ KEYWRD COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, DUMY(MAXPAR) COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /ALPARM/ ALPARM(3,MAXPAR),X0, X1, X2, ILOOP COMMON /PPARAM/ CURRT COMMON /GPARAM/ CURRT1,CURRT2 C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /PROFIL/ PROFIL COMMON /PROFIC/ PROFIL C ***************************** at 1994-05-25 ***** COMMON /SURF / SURF COMMON /KLOOP / KLOOP COMMON /IJLP / IJLP, ILP, JLP, JLP1, IONE COMMON /REACTN/ STEP, GEOA(3,NUMATM), GEOVEC(3,NUMATM),CALCST COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /ELEMTS/ ELEMNT(107) CHARACTER KOMENT*81, TITLE*81 COMMON /TITLES/ KOMENT,TITLE COMMON /PATH / LATOM,LPARAM,REACT(200) COMMON /MESH / LATOM1,LPARA1,LATOM2,LPARA2 COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /FMATRX/ HESINV(MAXPAR**2+MAXPAR*3+1), IDUMY2(4) COMMON /ERRFN / ERRFN(MAXPAR), AICORR(MAXPAR) COMMON /NUMCAL/ NUMCAL DIMENSION COORD(3,NUMATM) DIMENSION PROFIL(200) DIMENSION SURF(23*23) CHARACTER ELEMNT*2, KEYWRD*241, GETNAM*80 SAVE FIRST LOGICAL FIRST, INTXYZ DATA ICALCN/0/ FIRST=(ICALCN.EQ.NUMCAL) OPEN(UNIT=9,FILE=GETNAM('FOR009') + ,STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 9 OPEN(UNIT=10,FILE=GETNAM('FOR010') + ,STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 10 IR=9 IF(MDFP(9) .NE. 0) THEN IF(MDFP(9) .EQ. 1) THEN WRITE(6,'(//10X,''- - - - - - - TIME UP - - - - - - -'',//)' 1) IF(INDEX(KEYWRD,'SADDLE') .NE. 0) THEN WRITE(6,'(//10X,'' NO RESTART EXISTS FOR SADDLE'',// 1 10X,'' HERE IS A DATA-FILE FILES THAT MIGHT BE SUITABLE'',/ 2 10X,'' FOR RESTARTING THE CALCULATION'',///)') WRITE(6,'(A)')KEYWRD,KOMENT,TITLE INTXYZ=(NA(1).EQ.0) DO 30 ILOOP=1,2 IF(INTXYZ)THEN GEO(2,1)=0.D0 GEO(3,1)=0.D0 GEO(1,1)=0.D0 GEO(2,2)=0.D0 GEO(3,2)=0.D0 GEO(3,3)=0.D0 DO 10 I=1,NATOMS DO 10 J=1,3 10 COORD(J,I)=GEO(J,I) ELSE CALL XYZINT(GEO,NUMAT,NA,NB,NC,1.D0,COORD) ENDIF CALL GEOUT(-6) DO 20 I=1,NATOMS DO 20 J=1,3 20 GEO(J,I)=GEOA(J,I) NA(1)=99 30 CONTINUE WRITE(6,'(///10X,''CALCULATION TERMINATED HERE'')') STOP ENDIF WRITE(6,'(//10X,'' - THE CALCULATION IS BEING DUMPED TO DISK 1'', /10X,'' RESTART IT USING THE MAGIC WORD "RESTART"'')') WRITE(6,'(//10X,''CURRENT VALUE OF HEAT OF FORMATION ='' 1 ,F12.6)')FUNCT1 ENDIF IF(MDFP(9) .EQ. 1)THEN IF(NA(1) .EQ. 99) THEN C C CONVERT FROM CARTESIAN COORDINATES TO INTERNAL C DO 40 I=1,NATOMS DO 40 J=1,3 40 COORD(J,I)=GEO(J,I) CALL XYZINT(COORD,NUMAT,NA,NB,NC,1.D0,GEO) ENDIF GEO(2,1)=0.D0 GEO(3,1)=0.D0 GEO(1,1)=0.D0 GEO(2,2)=0.D0 GEO(3,2)=0.D0 GEO(3,3)=0.D0 NA(1)=0 CALL GEOUT(6) ENDIF WRITE(IR)MDFP,XDFP,TOTIME,FUNCT1 WRITE(IR)(XPARAM(I),I=1,NVAR),(GD(I),I=1,NVAR) WRITE(IR)(XLAST(I),I=1,NVAR),(GRAD(I),I=1,NVAR) LINEAR=(NVAR*(NVAR+1))/2 WRITE(IR)(HESINV(I),I=1,LINEAR) LINEAR=(NORBS*(NORBS+1))/2 WRITE(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)WRITE(10)(PB(I),I=1,LINEAR) IF(LATOM.NE.0)THEN IF(INDEX(KEYWRD,'STEP').NE.0)THEN WRITE(IR) KLOOP WRITE(IR) CURRT WRITE(IR) (PROFIL(I),I=1,KLOOP) ELSE WRITE(IR)((ALPARM(J,I),J=1,3),I=1,NVAR) WRITE(IR)ILOOP,X0, X1, X2 ENDIF ENDIF IF(INDEX(KEYWRD,'STEP1').NE.0)THEN WRITE(IR)IJLP, ILP,JLP,JLP1,IONE WRITE(IR) CURRT1,CURRT2 WRITE(IR) (SURF(I),I=1,IJLP) ENDIF WRITE(IR)(ERRFN(I),I=1,NVAR) CLOSE (9) CLOSE (10) ELSE IF (FIRST) WRITE(6,'(//10X,'' RESTORING DATA FROM DISK''/)') READ(IR,END=60,ERR=60)MDFP,XDFP,TOTIME,FUNCT1 IF (FIRST) WRITE(6,'(10X,''FUNCTION ='',F13.6//)')FUNCT1 READ(IR)(XPARAM(I),I=1,NVAR),(GD(I),I=1,NVAR) READ(IR)(XLAST(I),I=1,NVAR),(GRAD(I),I=1,NVAR) LINEAR=(NVAR*(NVAR+1))/2 READ(IR)(HESINV(I),I=1,LINEAR) LINEAR=(NORBS*(NORBS+1))/2 READ(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)READ(10)(PB(I),I=1,LINEAR) IF(LATOM.NE.0)THEN IF(INDEX(KEYWRD,'STEP').NE.0)THEN READ(IR) KLOOP READ(IR) CURRT READ(IR) (PROFIL(I),I=1,KLOOP) ELSE READ(IR)((ALPARM(J,I),J=1,3),I=1,NVAR) READ(IR)ILOOP,X0, X1, X2 ENDIF ENDIF IF(INDEX(KEYWRD,'STEP1').NE.0)THEN READ(IR)IJLP, ILP,JLP,JLP1,IONE READ(IR) CURRT1,CURRT2 READ(IR) (SURF(I),I=1,IJLP) ENDIF READ(IR)(ERRFN(I),I=1,NVAR) 50 FIRST=.FALSE. RETURN 60 WRITE(6,'(//10X,''NO RESTART FILE EXISTS!'')') STOP ENDIF END mopac7-1.15/fortran/dijkl2.f0000644000175000017500000000456711053302063012555 00000000000000 SUBROUTINE DIJKL2 (DC,NORBS,NMOS,DIJKL,WIJKL,NMECI) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ************************************************************************ * RELAXATION OF 2-ELECTRONS INTEGRALS IN M.O BASIS. * * INPUT * DC(NORBS,NMOS) : C.I-ACTIVE M.O DERIVATIVES IN M.O BASIS, IN COLUMN. * NORBS : TOTAL NUMBER OF M.O. * NMOS : NUMBER OF C.I-ACTIVE M.O. * DIJKL(I,J,KL) : WITH * I OVER ALL M.O. * J,KL CANONICAL OVER C.I-ACTIVE M.O. * NMECI : MAX. SIZE OF WIJKL. (NMOS <= NMECI). * OUTPUT * WIJKL(I,J,K,L)= d< I(1),J(1) | K(2),L(2) > * = + + + * WITH I,J,K,L OVER ALL C.I-ACTIVE M.O. * WRITTEN BY DANIEL LIOTARD * (NOTE BY JJPS: AS THIS CODE IS HIGHLY EFFICIENT, NO CHANGES WERE MADE) ************************************************************************ DIMENSION DC(NORBS,*),WIJKL(NMECI,NMECI,NMECI,NMECI) DIMENSION DIJKL(NORBS,NMOS,*) LOGICAL LIJ,LKL C IJ=0 DO 10 I=1,NMOS DO 10 J=1,I IJ=IJ+1 LIJ=I.EQ.J KL=0 DO 10 K=1,I IF(K.EQ.I) THEN LL=J ELSE LL=K ENDIF DO 10 L=1,LL KL=KL+1 LKL=K.EQ.L VAL= DOT(DC(1,I),DIJKL(1,J,KL),NORBS) IF(LIJ.AND.LKL.AND.J.EQ.K) THEN VAL=VAL*4.D0 ELSE IF(LIJ) THEN VAL=VAL*2.D0 ELSE VAL=VAL+ DOT(DC(1,J),DIJKL(1,I,KL),NORBS) ENDIF VAL2= DOT(DC(1,K),DIJKL(1,L,IJ),NORBS) IF(LKL) THEN VAL=VAL+VAL2*2.D0 ELSE VAL=VAL+VAL2+DOT(DC(1,L),DIJKL(1,K,IJ),NORBS) ENDIF ENDIF WIJKL(I,J,K,L)=VAL WIJKL(I,J,L,K)=VAL WIJKL(J,I,K,L)=VAL WIJKL(J,I,L,K)=VAL WIJKL(K,L,I,J)=VAL WIJKL(K,L,J,I)=VAL WIJKL(L,K,I,J)=VAL 10 WIJKL(L,K,J,I)=VAL RETURN END mopac7-1.15/fortran/powsav.f0000644000175000017500000001037111053302063012703 00000000000000 SUBROUTINE POWSAV(HESS, GRAD, XPARAM, PMAT, ILOOP, BMAT, IPOW) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION HESS(MAXPAR,*),GRAD(*),BMAT(MAXPAR,*),IPOW(9), 1 XPARAM(*), PMAT(*) ********************************************************************** * * POWSAV STORES AND RESTORES DATA USED IN THE SIGMA GEOMETRY * OPTIMISATION. * * ON INPUT HESS = HESSIAN MATRIX, PARTIAL OR WHOLE. * GRAD = GRADIENTS. * XPARAM = CURRENT STATE OF PARAMETERS. * ILOOP = INDEX OF HESSIAN, OR FLAG OF POINT REACHED SO-FAR. * BMAT = "B" MATRIX! * IPOW = INDICES AND FLAGS. * IPOW(9)= 0 FOR RESTORE, 1 FOR DUMP * ********************************************************************** COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, DUMY(MAXPAR) COMMON /ERRFN / ERRFN(MAXPAR), AICORR(MAXPAR) COMMON /ELEMTS/ ELEMNT(107) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /LOCVAR/ LOCVAR(2,MAXPAR) COMMON /KEYWRD/ KEYWRD COMMON /VALVAR/ VALVAR(MAXPAR),NUMVAR DIMENSION COORD(3,NUMATM) CHARACTER ELEMNT*2, KEYWRD*241, GETNAM*80 COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /ALPARM/ ALPARM(3,MAXPAR),X0, X1, X2, JLOOP COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /PATH / LATOM,LPARAM,REACT(200) OPEN(UNIT=9,FILE=GETNAM('FOR009'), + STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 9 OPEN(UNIT=10,FILE=GETNAM('FOR010'), + STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 10 IR=9 IF(IPOW(9) .NE. 0) THEN IF(IPOW(9) .EQ. 1) THEN WRITE(6,'(//10X,''- - - - - - - TIME UP - - - - - - -'',//)' 1) WRITE(6,'(//10X,'' - THE CALCULATION IS BEING DUMPED TO DISK 1'',/10X,'' RESTART IT USING THE KEY-WORD "RESTART"'')') FUNCT1=SQRT(DOT(GRAD,GRAD,NVAR)) WRITE(6,'(//10X,''CURRENT VALUE OF GRADIENT NORM ='' 1 ,F12.6)')FUNCT1 DO 10 I=1,NVAR K=LOC(1,I) L=LOC(2,I) 10 GEO(L,K)=XPARAM(I) WRITE(6,'(/10X,''CURRENT VALUE OF GEOMETRY'',/)') IF(NA(1) .EQ. 99) THEN C C CONVERT FROM CARTESIAN COORDINATES TO INTERNAL C DO 20 I=1,NATOMS DO 20 J=1,3 20 COORD(J,I)=GEO(J,I) CALL XYZINT(COORD,NUMAT,NA,NB,NC,1.D0,GEO) ENDIF CALL GEOUT(6) ENDIF WRITE(IR)IPOW,ILOOP WRITE(IR)(XPARAM(I),I=1,NVAR) WRITE(IR)( GRAD(I),I=1,NVAR) WRITE(IR)((HESS(J,I),J=1,NVAR),I=1,NVAR) WRITE(IR)((BMAT(J,I),J=1,NVAR),I=1,NVAR) LINEAR=(NVAR*(NVAR+1))/2 WRITE(IR)(PMAT(I),I=1,LINEAR) IF(INDEX(KEYWRD,'AIDER').NE.0) WRITE(IR)(AICORR(I),I=1,NVAR) LINEAR=(NORBS*(NORBS+1))/2 WRITE(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)WRITE(10)(PB(I),I=1,LINEAR) IF(LATOM .NE. 0) THEN WRITE(IR)((ALPARM(J,I),J=1,3),I=1,NVAR) WRITE(IR)JLOOP,X0, X1, X2 ENDIF CLOSE (9) CLOSE (10) RETURN ELSE WRITE(6,'(//10X,'' RESTORING DATA FROM DISK''/)') READ(IR)IPOW,ILOOP READ(IR)(XPARAM(I),I=1,NVAR) READ(IR)( GRAD(I),I=1,NVAR) READ(IR)((HESS(J,I),J=1,NVAR),I=1,NVAR) READ(IR)((BMAT(J,I),J=1,NVAR),I=1,NVAR) FUNCT1=SQRT(DOT(GRAD,GRAD,NVAR)) WRITE(6,'(10X,''FUNCTION ='',F13.6//)')FUNCT1 LINEAR=(NVAR*(NVAR+1))/2 READ(IR)(PMAT(I),I=1,LINEAR) IF(INDEX(KEYWRD,'AIDER').NE.0) READ(IR)(AICORR(I),I=1,NVAR) LINEAR=(NORBS*(NORBS+1))/2 READ(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)READ(10)(PB(I),I=1,LINEAR) IF(LATOM.NE.0) THEN READ(IR)((ALPARM(J,I),J=1,3),I=1,NVAR) READ(IR)JLOOP,X0, X1, X2 ILOOP=ILOOP+1 ENDIF ILOOP=ILOOP+1 RETURN ENDIF END mopac7-1.15/fortran/symtrz.f_ORIG0000644000175000017500000015364711053302063013572 00000000000000C C C SUBROUTINE SYMTRZ (COORD,C,NORB,NMOS,FLAG,FLAG2) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C************************************************************** C * C DETERMINE POINT GROUP & SYMMETRIZE ORBITALS * C * C************************************************************** INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) C --------------------------------------------------------------- COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA,NCLOSE,NOPEN,NDUMY, 2 FRACT COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB COMMON/VECTOR/CDUM(MORB2),EIGS(MAXORB),CBDUM(MORB2),EIGB(MAXORB) COMMON /S00002/ NUNUM,NONORB,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON/S00004/SHIFT(3),R(3,3),VECT(2,MXDIM) CHARACTER*4 NAME, NAMO, NAM, ISTA LOGICAL FLAG,FLAG2 DIMENSION RSAV(3,3),COTIM(3,NUMATM) DIMENSION V1(MAXORB),V2(MAXORB),V3(MAXORB),V4(MAXORB) DIMENSION COORD(3,NUMATM),C(MAXORB,MAXORB) DIMENSION IOPSYM(7),IMAGE(NUMATM,7) DATA IOPSYM /1,1,1,1,1,1,1/ NUNUM = NUMAT NONORB = NORBS DO K=1,3 DO L=1,NUMAT COTIM(K,L)=COORD(K,L) ENDDO ENDDO DO I=1,3 DO J=1,3 RSAV(I,J)=R(I,J) ENDDO ENDDO NAM=NAME CALL SYMAN1(NUMAT,2,COORD,NAT,1,MAXORB) IF(FLAG2) CALL SYMAN2(NORBS,NORBS,C,0,1,MAXORB) DO I=1,3 DO J=1,3 R(I,J)=RSAV(I,J) ENDDO ENDDO DO K=1,3 DO L=1,numat COORD(K,L)=COTIM(K,L) ENDDO ENDDO RETURN END C C================================================================ C SUBROUTINE SYMAN1(NUM1,NUM2,ARRAY,LINEAR,JUMP,idim) IMPLICIT DOUBLE PRECISION (A-H,O-Z) C*************************************************************** C * C SYMMETRY PACKAGE FROM UMNDO PROGRAM OF PETER BISCHOF * C WAS REWRITTEN BY DAVID DANOVICH FOR MOPAC SYSTEM * C * C*************************************************************** INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) DIMENSION LINEAR(NUMATM),NUSS(MXDIM),ICOUNT(12),ARRAY(3,NUMATM) COMMON /S00001/T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00020/ NIMM(2,MXDIM),NOCC(2) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) CHARACTER*4 IFRA, NAME, ISTA, NAMO, NIMM COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB DATA IFRA / '????' / WRITE(6,'('' == symtrz.f SYMAN1 =='')') IF(NUM1.LT.2) GOTO 12 IF(NUM2.LT.2) GOTO 12 IF(NUM1.GT.MXDIM) GOTO 12 C ** MOLECULAR SYMMETRY 1 IERROR=0 LCALL=0 IVIB=0 NBASE=0 NUMAT=NUM1 NAME=IFRA ISTA(1)=' ' ISTA(2)=IFRA DO 2 I=1,MXDIM 2 NAMO(I)=IFRA CALL R00001(LINEAR,ARRAY) IF(IERROR.LT.1) CALL R00009(LINEAR,ARRAY) IF(IERROR.LT.1) CALL R00016 DO 3 I=1,NUMAT 3 INDEX(I)=LINEAR(I) RETURN 12 IERROR=1 WRITE(6,600)NUM1,NUM2 RETURN 600 FORMAT(' ILLEGAL SYMA - ARGUMENTS: NUM1 = ',I10,' NUM2 = ',I10) END C C====================================================================== C SUBROUTINE SYMAN2(NUM1,NUM2,ARRAY,LINEAR,JUMP,idim) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) DIMENSION NUSS(MXDIM),ICOUNT(12),array(num1,num1) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00020/ NIMM(2,MXDIM),NOCC(2) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) CHARACTER*4 IFRA, NAME, ISTA, NAMO, NIMM COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB DATA IFRA / '????' / WRITE(6,'('' == symtrz.f SYMAN2 =='')') IF(NUM1.LT.2) GOTO 12 IF(NUM2.LT.2) GOTO 12 IF(NUM1.GT.MXDIM) GOTO 12 C ** ORBITAL SYMMETRY IF(IERROR.GT.0) THEN RETURN ENDIF LCALL=0 IF(LINEAR.GT.0) GOTO 6 IF(LCALL.GT.0) GOTO 8 KORB=0 NQZ=1 DO 5 I=1,NUMAT JJ=1 IF(INDEX(I).GT.1) JJ=4 DO 5 J=1,JJ KORB=KORB+1 NUSS(KORB)=100*I+10*NQZ+J-1 5 CONTINUE GOTO 8 6 DO 7 I=1,NUM1 7 NUSS(I)=LINEAR 8 NORBS=NUM1 NCDIM=NUM2 NCDUM=NUM2 CALL R00010(ARRAY,NUSS,ICOUNT,num1) IF(IERROR.GT.0) RETURN NBASE=0 DO 9 I=1,I1 IF(ICOUNT(I).LT.1) GOTO 9 NBASE=NBASE+1 IBASE(1,NBASE)=ICOUNT(I) IBASE(2,NBASE)=JX(1,I) 9 CONTINUE LCALL=LCALL+1 IF(LCALL.GT.2) LCALL=1 DO 10 I=1,NORBS NIMM(LCALL,I)=NAMO(I) 10 NIMM(2,I)=NAMO(I) RETURN 12 IERROR=1 WRITE(6,600)NUM1,NUM2 RETURN 600 FORMAT(' ILLEGAL SYMA - ARGUMENTS: NUM1 = ',I10,' NUM2 = ',I10) END C C========================================================================== C SUBROUTINE R00001(NAT,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,NAMO,ISTA COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) COMMON/SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) COMMON /ATMASS/ ATMASS(NUMATM) LOGICAL PLANAR,LINEAR,CUBIC,AXIS DIMENSION NAT(NUMATM),COORD(3,NUMATM),F(6),EW(3),HELP(3) DIMENSION RHELP(3,3) DIMENSION ICYC(6) DATA TOLER,BIG/ 0.1D0,1.D35 / WRITE(6,'('' == symtrz.f R00001 =='')') DO 2 I=1,3 DO 1 J=1,3 1 CUB(I,J)=0.D0 2 CUB(I,I)=1.D0 DO 3 I=1,20 CALL R00006(I,I) 3 IELEM(I)=0 DO 4 I=1,3 4 SHIFT(I)=0.D0 WMOL=0.D0 DO 5 I=1,NUMAT WMOL=WMOL+ATMASS(I) DO 5 K=1,3 5 SHIFT(K)=SHIFT(K)+ATMASS(I)*COORD(K,I) IJ=0 DO 7 I=1,3 SHIFT(I)=SHIFT(I)/WMOL DO 6 K=1,NUMAT 6 COORD(I,K)=COORD(I,K)-SHIFT(I) DO 7 J=1,I IJ=IJ+1 F(IJ)=0.D0 DO 7 K=1,NUMAT TERM=ATMASS(K)*COORD(I,K)*COORD(J,K) 7 F(IJ)=F(IJ)+TERM TRANS=25.98160821D0 + 2.97975D0*DLOG(WMOL) CALL R00015(F,R,EW) R(1,3)=R(2,1)*R(3,2)-R(3,1)*R(2,2) R(2,3)=R(3,1)*R(1,2)-R(1,1)*R(3,2) R(3,3)=R(1,1)*R(2,2)-R(2,1)*R(1,2) PLANAR=(EW(1).LT.TOLER) LINEAR=(EW(2).LT.TOLER) CUBIC=((EW(3)-EW(1)).LT.TOLER) IF(.NOT.LINEAR) GOTO 8 CALL R00005(COORD,1) IELEM(20)=1 GOTO 22 8 IF(CUBIC.OR.((EW(3)-EW(2)).GT.TOLER)) GOTO 10 DO 9 I=1,3 BUFF=-R(I,1) R(I,1)=R(I,3) 9 R(I,3)=BUFF BUFF=EW(1) EW(1)=EW(3) EW(3)=BUFF 10 AXIS=(ABS(EW(1)-EW(2)).LT.TOLER) CALL R00005(COORD,1) IF(CUBIC) CALL R00003(NAT,COORD,1) IF(.NOT.AXIS) GOTO 16 ITURN=7 DO 11 I=8,18 CALL R00007(NAT,COORD,I) IF((IELEM(I).EQ.1).AND.(I.LT.14)) ITURN=I 11 CONTINUE ITURN=ITURN-5 DO 13 I=1,NUMAT DIST=COORD(1,I)**2+COORD(2,I)**2 IF(DIST.LT.TOLER) GOTO 13 BUFF1=BIG JNDEX=0 IPLUS=I+1 DO 12 J=IPLUS,NUMAT BUFF=COORD(1,J)**2+COORD(2,J)**2 IF(ABS(BUFF-DIST).GT.TOLER) GOTO 12 BUFF=(COORD(1,I)-COORD(1,J))**2+(COORD(2,I)-COORD(2,J))**2 IF(BUFF.GT.BUFF1) GOTO 12 JNDEX=J BUFF1=BUFF 12 CONTINUE GOTO 14 13 CONTINUE 14 IF(JNDEX.LT.1) IERROR=1 IF(IERROR.GT.0) GOTO 25 HELP(1)=COORD(1,I)+COORD(1,JNDEX) HELP(2)=COORD(2,I)+COORD(2,JNDEX) DIST=SQRT(HELP(1)**2+HELP(2)**2) SINA=HELP(2)/DIST COSA=HELP(1)/DIST CALL R00002(COORD,SINA,COSA,1,2) CALL R00007(NAT,COORD,5) IF(IELEM(5).EQ.1) GOTO 16 CALL R00007(NAT,COORD,1) IF(IELEM(1).EQ.0) GOTO 16 DIST=1.5707963268D0/FLOAT(ITURN) SINA=SIN(DIST) COSA=COS(DIST) ICHECK=0 15 CALL R00002(COORD,SINA,COSA,1,2) IF(ICHECK.GT.0) GOTO 16 CALL R00007(NAT,COORD,5) IF(IELEM(5).GT.0) GOTO 16 ICHECK=1 SINA=-SINA GOTO 15 16 IF(CUBIC) CALL R00003(NAT,COORD,2) IF(AXIS) GOTO 22 DO 17 I=1,6 CALL R00007(NAT,COORD,I) 17 ICYC(I)=(1+IQUAL)*IELEM(I) NAXES=IELEM(1)+IELEM(2)+IELEM(3) IF(NAXES.GT.1) GOTO 18 IZ=1 IF(IELEM(1).EQ.1) GOTO 19 IZ=2 IF(IELEM(2).EQ.1) GOTO 19 IZ=3 IF(IELEM(3).EQ.1) GOTO 19 IF(ICYC(5).GT.ICYC(4)) IZ=2 IF(ICYC(6).GT.ICYC(7-IZ)) IZ=1 GOTO 19 18 IZ=1 IF(ICYC(2).GT.ICYC(1)) IZ=2 IF(ICYC(3).GT.ICYC(IZ)) IZ=3 19 ICYC(7-IZ)=-1 IX=1 IF(ICYC(5).GT.ICYC(6)) IX=2 IF(ICYC(4).GT.ICYC(7-IX)) IX=3 IY=6-IX-IZ DO 20 I=1,3 RHELP(I,1)=R(I,IX) 20 RHELP(I,2)=R(I,IY) RHELP(1,3)=R(2,IX)*R(3,IY)-R(3,IX)*R(2,IY) RHELP(2,3)=R(3,IX)*R(1,IY)-R(1,IX)*R(3,IY) RHELP(3,3)=R(1,IX)*R(2,IY)-R(2,IX)*R(1,IY) CALL R00005(COORD,-1) DO 21 I=1,3 DO 21 J=1,3 21 R(I,J)=RHELP(I,J) CALL R00005(COORD,1) 22 DO 23 I=1,7 CALL R00007(NAT,COORD,I) 23 CONTINUE NCODE=0 J=1 DO 24 I=1,20 NCODE=NCODE+IELEM(I)*J 24 J=2*J 25 CALL R00005(COORD,-1) TOTAL=EW(1)+EW(2)+EW(3) DO 26 I=1,3 EW(I)=TOTAL-EW(I) DO 26 J=1,NUMAT 26 COORD(I,J)=COORD(I,J)+SHIFT(I) JGROUP = 0 CALL R00008(JGROUP,NCODE) IF(JGROUP.LT.1) IERROR=2 TOTAL=EW(1)*EW(2)*EW(3)/(SIG*SIG) IF(LINEAR) RTR= 6.970686D0 + 1.9865D0*DLOG(EW(1)/SIG) IF(.NOT.LINEAR) RTR=11.592852D0 + 0.98325D0*DLOG(TOTAL) RETURN END C C================================================================== C SUBROUTINE R00002(COORD,SINA,COSA,I,J) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM) WRITE(6,'('' == symtrz.f R00002 =='')') CALL R00005(COORD,-1) DO 1 K=1,3 BUFF=-SINA*R(K,I)+COSA*R(K,J) R(K,I)=COSA*R(K,I)+SINA*R(K,J) 1 R(K,J)=BUFF CALL R00005(COORD,1) RETURN END C C==================================================================== C SUBROUTINE R00003(NAT,COORD,JUMP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM),NAT(NUMATM),WINK(2) DATA BIG,TOLER / 1.D35,0.1/ DATA WINK(1),WINK(2)/ 0.955316618125D0, 0.6523581398D0 / WRITE(6,'('' == symtrz.f R00003 =='')') GOTO (1,5),JUMP 1 IELEM(19)=1 INDEX=0 XMIN=BIG DO 2 I=1,NUMAT DIST=COORD(1,I)**2+COORD(2,I)**2+COORD(3,I)**2 IF(DIST.LT.TOLER) GOTO 2 IF(DIST.GT.XMIN) GOTO 2 INDEX=I XMIN=DIST 2 CONTINUE DIST=SQRT(XMIN) CALL R00005(COORD,-1) R(1,3)=COORD(1,INDEX)/DIST R(2,3)=COORD(2,INDEX)/DIST R(3,3)=COORD(3,INDEX)/DIST BUFF=SQRT(R(1,3)**2+R(2,3)**2) BUFF1=SQRT(R(1,3)**2+R(3,3)**2) IF(BUFF.GT.BUFF1) GOTO 3 R(1,1)= R(3,3)/BUFF1 R(2,1)=0.D0 R(3,1)=-R(1,3)/BUFF1 GOTO 4 3 R(1,1)= R(2,3)/BUFF R(2,1)=-R(1,3)/BUFF R(3,1)=0.D0 4 R(1,2)= R(2,3)*R(3,1)-R(2,1)*R(3,3) R(2,2)= R(3,3)*R(1,1)-R(3,1)*R(1,3) R(3,2)= R(1,3)*R(2,1)-R(1,1)*R(2,3) CALL R00005(COORD,1) RETURN 5 WINK2=0.D0 IF(IELEM(8).LT.1) GOTO 8 DO 6 I=1,2 JOTA=18-4*I WINK2=WINK(I) SINA=SIN(WINK2) COSA=COS(WINK2) CALL R00002(COORD,SINA,COSA,1,3) CALL R00007(NAT,COORD,JOTA) IF(IELEM(JOTA).GT.0) GOTO 7 WINK2=-WINK2 SINB=SIN(2.D0*WINK2) COSB=COS(2.D0*WINK2) CALL R00002(COORD,SINB,COSB,1,3) CALL R00007(NAT,COORD,JOTA) IF(IELEM(JOTA).GT.0) GOTO 7 CALL R00002(COORD,SINA,COSA,1,3) 6 CONTINUE 7 CALL R00007(NAT,COORD,9) IF(IELEM(10).GT.0) CALL R00007(NAT,COORD,17) GOTO 10 8 WINK2=-WINK(1) IF(IELEM(10).GT.0) WINK2=-WINK(2) SINA=-SIN(WINK2) COSA=COS(WINK2) CALL R00002(COORD,SINA,COSA,1,3) CALL R00007(NAT,COORD,8) CALL R00002(COORD,-SINA,COSA,1,3) IF(IELEM(8).GT.0) GOTO 10 IF(IELEM(9).GT.0) GOTO 9 WINK2=-WINK2 GOTO 10 9 CALL R00002(COORD,0.707106781186D0,0.707106781186D0,1,2) 10 CUB(1,1)=COS(WINK2) CUB(3,3)=CUB(1,1) CUB(1,3)=SIN(WINK2) CUB(3,1)=-CUB(1,3) CALL R00004(CUB,8) CALL R00004(CUB,15) CALL R00007(NAT,COORD,8) CALL R00007(NAT,COORD,15) RETURN END C C===================================================================== C SUBROUTINE R00004(FMAT,IPLACE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DIMENSION HELP(3,3),FMAT(3,3) WRITE(6,'('' == symtrz.f R00004 =='')') DO 1 I=1,3 DO 1 J=1,3 HELP(I,J)=0.D0 DO 1 K=1,3 DO 1 L=1,3 1 HELP(I,J)=HELP(I,J)+FMAT(I,L)*FMAT(J,K)*ELEM(L,K,IPLACE) DO 2 I=1,3 DO 2 J=1,3 2 ELEM(I,J,IPLACE)=HELP(I,J) RETURN END C C========================================================================== C SUBROUTINE R00005(COORD,JUMP) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION COORD(3,NUMATM),HELP(3) WRITE(6,'('' == symtrz.f R00005 =='')') IF(JUMP.LT.0) GOTO 3 DO 2 I=1,NUMAT DO 1 J=1,3 1 HELP(J)=COORD(J,I) DO 2 J=1,3 COORD(J,I)=0.D0 DO 2 K=1,3 2 COORD(J,I)=COORD(J,I)+R(K,J)*HELP(K) RETURN 3 DO 5 I=1,NUMAT DO 4 J=1,3 4 HELP(J)=COORD(J,I) DO 5 J=1,3 COORD(J,I)=0.D0 DO 5 K=1,3 5 COORD(J,I)=COORD(J,I)+R(J,K)*HELP(K) RETURN END C C======================================================================== C SUBROUTINE R00006(IOPER,IPLACE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DIMENSION J(3,20) DATA J(1, 1),J(2, 1),J(3, 1) / 1 , -1 , -1 / DATA J(1, 2),J(2, 2),J(3, 2) / -1 , 1 , -1 / DATA J(1, 3),J(2, 3),J(3, 3) / -1 , -1 , 1 / DATA J(1, 4),J(2, 4),J(3, 4) / 1 , 1 , -1 / DATA J(1, 5),J(2, 5),J(3, 5) / 1 , -1 , 1 / DATA J(1, 6),J(2, 6),J(3, 6) / -1 , 1 , 1 / DATA J(1, 7),J(2, 7),J(3, 7) / -1 , -1 , -1 / DATA J(1, 8),J(2, 8),J(3, 8) / 3 , 0 , 1 / DATA J(1, 9),J(2, 9),J(3, 9) / 4 , 0 , 1 / DATA J(1,10),J(2,10),J(3,10) / 5 , 0 , 1 / DATA J(1,11),J(2,11),J(3,11) / 6 , 0 , 1 / DATA J(1,12),J(2,12),J(3,12) / 7 , 0 , 1 / DATA J(1,13),J(2,13),J(3,13) / 8 , 0 , 1 / DATA J(1,14),J(2,14),J(3,14) / 4 , 0 , -1 / DATA J(1,15),J(2,15),J(3,15) / 6 , 0 , -1 / DATA J(1,16),J(2,16),J(3,16) / 8 , 0 , -1 / DATA J(1,17),J(2,17),J(3,17) / 10 , 0 , -1 / DATA J(1,18),J(2,18),J(3,18) / 12 , 0 , -1 / DATA J(1,19),J(2,19),J(3,19) / 5 , 0 , -1 / DATA J(1,20),J(2,20),J(3,20) / 0 , 0 , -1 / DATA TWOPI / 6.283185308D0 / WRITE(6,'('' == symtrz.f R00006 =='')') DO 2 I=1,3 DO 1 K=1,3 1 ELEM(I,K,IPLACE)=0. 2 ELEM(I,I,IPLACE)=J(I,IOPER) IF(IOPER.EQ.20) GOTO 4 IF(J(1,IOPER).LT.2) GOTO 3 ANGLE=TWOPI/FLOAT(J(1,IOPER)) ELEM(1,1,IPLACE)=COS(ANGLE) ELEM(2,2,IPLACE)=ELEM(1,1,IPLACE) ELEM(2,1,IPLACE)=SIN(ANGLE) ELEM(1,2,IPLACE)=-ELEM(2,1,IPLACE) 3 IF((IOPER.EQ.8).OR.(IOPER.EQ.15)) CALL R00004(CUB,IPLACE) RETURN 4 ELEM(1,2,IPLACE)=1.D0 ELEM(2,1,IPLACE)=1.D0 RETURN END C C====================================================================== C SUBROUTINE R00007(NAT,COORD,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION NAT(NUMATM),COORD(3,NUMATM),HELP(3),E(3,3) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) DATA TOLER / 0.01 D0/ WRITE(6,'('' == symtrz.f R00007 =='')') IRESUL=1 IQUAL=0 DO 2 I=1,NUMAT HELP(1)=COORD(1,I)*ELEM(1,1,IOPER)+COORD(2,I)*ELEM(1,2,IOPER) . +COORD(3,I)*ELEM(1,3,IOPER) HELP(2)=COORD(1,I)*ELEM(2,1,IOPER)+COORD(2,I)*ELEM(2,2,IOPER) . +COORD(3,I)*ELEM(2,3,IOPER) HELP(3)=COORD(1,I)*ELEM(3,1,IOPER)+COORD(2,I)*ELEM(3,2,IOPER) . +COORD(3,I)*ELEM(3,3,IOPER) DO 1 J=1,NUMAT IF(NAT(I).NE.NAT(J)) GOTO 1 IF(ABS(COORD(1,J)-HELP(1)).GT.TOLER) GOTO 1 IF(ABS(COORD(2,J)-HELP(2)).GT.TOLER) GOTO 1 IF(ABS(COORD(3,J)-HELP(3)).GT.TOLER) GOTO 1 JELEM(IOPER,I)=J IF(I.EQ.J) IQUAL=IQUAL+1 GOTO 2 1 CONTINUE IRESUL=0 2 CONTINUE IELEM(IOPER)=IRESUL RETURN END C C===================================================================== C SUBROUTINE R00008(IGROUP,NCODE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) INTEGER C1(3),CS(7),CI(7),C2(7),C3(9),C4(16),C5(19),C6(29), . C7(33),C8(46),D2(21),D3(13),D4(31),D5(21),D6(43), . C2V(21),C3V(13),C4V(31),C5V(21),C6V(43), . C2H(21),C3H(29),C4H(55),C5H(67),C6H(105), . D2H(73),D3H(43),D4H(111),D5H(73),D6H(157), . D2D(31),D3D(43),D4D(57),D5D(73),D6D(91), . S4(16),S6(29),S8(46), . TD(31),OH(111),IH(111),CV(10),DH(25) DIMENSION J(43),JTAB(1844),ISIGMA(43) EQUIVALENCE (JTAB( 1),C1(1)),(JTAB( 4),CS(1)) EQUIVALENCE (JTAB( 11),CI(1)),(JTAB( 18),C2(1)) EQUIVALENCE (JTAB( 25),C3(1)),(JTAB( 34),C4(1)) EQUIVALENCE (JTAB( 50),C5(1)),(JTAB( 69),C6(1)) EQUIVALENCE (JTAB( 98),C7(1)),(JTAB( 131),C8(1)) EQUIVALENCE (JTAB( 177),D2(1)),(JTAB( 198),D3(1)) EQUIVALENCE (JTAB( 211),D4(1)),(JTAB( 242),D5(1)) EQUIVALENCE (JTAB( 263),D6(1)),(JTAB( 306),C2V(1)) EQUIVALENCE (JTAB( 327),C3V(1)),(JTAB( 340),C4V(1)) EQUIVALENCE (JTAB( 371),C5V(1)),(JTAB( 392),C6V(1)) EQUIVALENCE (JTAB( 435),C2H(1)),(JTAB( 456),C3H(1)) EQUIVALENCE (JTAB( 485),C4H(1)),(JTAB( 540),C5H(1)) EQUIVALENCE (JTAB( 607),C6H(1)),(JTAB( 712),D2H(1)) EQUIVALENCE (JTAB( 785),D3H(1)),(JTAB( 828),D4H(1)) EQUIVALENCE (JTAB( 939),D5H(1)),(JTAB(1012),D6H(1)) EQUIVALENCE (JTAB(1169),D2D(1)),(JTAB(1200),D3D(1)) EQUIVALENCE (JTAB(1243),D4D(1)),(JTAB(1300),D5D(1)) EQUIVALENCE (JTAB(1373),D6D(1)),(JTAB(1464),S4(1)) EQUIVALENCE (JTAB(1480),S6(1)),(JTAB(1509),S8(1)) EQUIVALENCE (JTAB(1555),TD(1)),(JTAB(1586),OH(1)) EQUIVALENCE (JTAB(1697),IH(1)) EQUIVALENCE (JTAB(1808),CV(1)),(JTAB(1818),DH(1)) DATA J( 1),J( 2),J( 3),J( 4)/ 1010001, 2020004, 2020011, 2020018 / DATA J( 5),J( 6),J( 7),J( 8)/ 3020025, 4030034, 5030050, 6040069 / DATA J( 9),J(10),J(11),J(12)/ 7040098, 8050131, 4040177, 3030198 / DATA J(13),J(14),J(15),J(16)/ 5050211, 4040242, 6060263, 4040306 / DATA J(17),J(18),J(19),J(20)/ 3030327, 5050340, 4040371, 6060392 / DATA J(21),J(22),J(23),J(24)/ 4040435, 6040456, 8060485,10060540 / DATA J(25),J(26),J(27),J(28)/12080607, 8080712, 6060785,10100828 / DATA J(29),J(30),J(31),J(32)/ 8080939,12121012, 5051169, 6061200 / DATA J(33),J(34),J(35),J(36)/ 7071243, 8081300, 9091373, 4031464 / DATA J(37),J(38),J(39),J(40)/ 6041480, 8051509, 5051555,10101586 / DATA J(41),J(42),J(43) /10101697, 2031808, 3061818 / DATA ISIGMA / 1,1,1,2,3,4,5,6,7,8,4,6,8,10,12,2,3,4,5,6,2,3,4,5,6, . 4,6,8,10,12,4,6,8,10,12,2,3,4,12,24,60,1,2 / DATA C1 ./ 2HC1, .4HA , 0 / DATA CS ./ 2HCS, .4HA , 8 , 20104 , .4HA , 1 , -1 / DATA CI ./ 2HCI, .4HAG , 64 , 10107 , .4HAU , 1 , -1 / DATA C2 ./ 2HC2, .4HA , 4 , 2140103 , .4HB , 1 , -1 / DATA C3 ./ 2HC3, .4HA , 128 , 3140108 , 3240122 , .4HE , 2 , -1 , -1 / DATA C4 ./ 2HC4, .4HA , 260 ,4140109 ,2140103 ,4340123 , .4HB , 1 , -1 , 1 , -1 , .4HE , 2 , 0 , -2 , 0 / DATA C5 ./ 2HC5, .2HA , 512 , 5140110 , 5240122 , 5340123 ,5440124, .2HE1 , 2 , 51 , 52 , 52 , 51 , .2HE2 , 2 , 52 , 51 , 51 , 52 / DATA C6 ./ 2HC6, .2HA , 1156 ,6140111 ,3140108 ,2140103 ,3240133 ,6540125 , .2HB , 1 , -1 , 1 , -1 , 1 , -1 , .2HE1 , 2 , 1 , -1 , -2 , -1 , 1 , .2HE2 , 2 , -1 , -1 , 2 , -1 , -1 / DATA C7 ./ 2HC7, .2HA ,2048,7140112,7240122,7340123,7440124,7540125,7640126, .2HE1 , 2 , 71 , 72 , 73 , 73 , 72 , 71 , .2HE2 , 2 , 72 , 73 , 71 , 71 , 73 , 72 , .2HE3 , 2 , 73 , 71 , 72 , 72 , 71 , 73 / DATA C8 ./ 2HC8, .2HA ,4356,8140113,4140109,2140103,4340134,8340123,8540124,8740125, .2HB , 1 , -1 , 1 , 1 , 1 , -1 , -1 , -1 , .2HE1 , 2 , 81 , 0 , -2 , 0 , 83 , 83 , 81 , .2HE2 , 2 , 0 , -2 , 2 , -2 , 0 , 0 , 0 , .2HE3 , 2 , 83 , 0 , -2 , 0 , 81 , 81 , 83 / DATA D2 ./ 2HD2, .4HA , 7 ,2140103 ,2140102 ,2140101 , .4HB1 , 1 , 1 , -1 , -1 , .4HB2 , 1 , -1 , 1 , -1 , .4HB3 , 1 , -1 , -1 , 1 / DATA D3 ./ 2HD3, .4HA1 , 129 , 3140208 , 2140301 , .4HA2 , 1 , 1 , -1 , .4HE , 2 , -1 , 0 / DATA D4 ./ 2HD4, .2HA1 , 263 , 4140209 , 2140103 ,2140201 ,2140220 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA D5 ./ 2HD5, .4HA1 , 513 ,5140210 ,5240222 , 2140501 , .4HA2 , 1 , 1 , 1 , -1 , .4HE1 , 2 , 51 , 52 , 0 , .4HE2 , 2 , 52 , 51 , 0 / DATA D6 ./ 2HD6, .2HA1 , 1159 ,6140211 ,3140208 ,2140103 ,2140301 ,2140302 , .2HA2 , 1 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , -1 , 1 , .2HE1 , 2 , 1 , -1 , -2 , 0 , 0 , .2HE2 , 2 , -1 , -1 , 2 , 0 , 0 / DATA C2V ./ 3HC2V, .4HA1 , 52 ,2140103 , 20105 , 20106 , .4HA2 , 1 , 1 , -1 , -1 , .4HB1 , 1 , -1 , 1 , -1 , .4HB2 , 1 , -1 , -1 , 1 / DATA C3V ./ 3HC3V, .4HA1 , 144 ,3140208 , 20305 , .4HA2 , 1 , 1 , -1 , .4HE , 2 , -1 , 0 / DATA C4V ./ 3HC4V, .2HA1 , 308 ,4140209 ,2140103 , 20205 ,20224 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA C5V ./ 3HC5V, .4HA1 , 528 , 5140210 , 5240222 , 20505 , .4HA2 , 1 , 1 , 1 , -1 , .4HE1 , 2 , 51 , 52 , 0 , .4HE2 , 2 , 52 , 51 , 0 / DATA C6V ./ 3HC6V, .2HA1 , 1204 , 6140211, 3140208,2140103 , 20305 , 20306 , .2HA2 , 1 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , -1 , 1 , .2HE1 , 2 , 1 , -1 , -2 , 0 , 0 , .2HE2 , 2 , -1 , -1 , 2 , 0 , 0 / DATA C2H ./ 3HC2H, .4HAG , 76 ,2140103 , 10107 , 20104 , .4HBG , 1 , -1 , 1 , -1 , .4HAU , 1 , 1 , -1 , -1 , .4HBU , 1 , -1 , -1 , 1 / DATA C3H ./ 3HC3H, .2HA , 136 , 3140108, 3240122, 20104, 3130124,3530143 , .2HE , 2 , -1 , -1 , 2 , -1 , -1 , .2HA , 1 , 1 , 1 , -1 , -1 , -1 , .2HE , 2 , -1 , -1 , -2 , 1 , 1 / DATA C4H ./ 3HC4H, .2HAG ,8524,4140109,2140103,4340123,10107,4330152,20104,4130114, .2HBG , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , .2HEG , 2 , 0 , -2 , 0 , 2 , 0 , -2 , 0 , .2HAU , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .2HBU , 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1 , .2HEU , 2 , 0 , -2 , 0 , -2 , 0 , 2 , 0 / DATA C5H ./ 3HC5H, .2HA ,520,5140110,5240122,5340123,5440124,20104,5130119,5730163, . 5330164,5930165, .3HE1 , 2 , 51 , 52 ,52 , 51 , 2 , 51 , 52 , 52 , 51 , .3HE2 , 2 , 52 , 51 ,51 , 52 , 2 , 52 , 51 , 51 , 52 , .2HA , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HE1 , 2 , 51 , 52 ,52 , 51 , -2 ,103 ,101 ,101 ,103 , .3HE2 , 2 , 52 , 51 ,51 , 52 , -2 ,101 ,103 ,103 ,101 / DATA C6H ./ 3HC6H, .2HAG ,17612,6140111,3140108,2140103,3240133,6540125,10107,20104, . 3530127,6530137,6130115,3130183, .3HBG , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , .3HE1G, 2 , 1 , -1 , -2 , -1 , 1 , 2 , -2 , 1 , -1 , -1 , 1 , .3HE2G, 2 , -1 , -1 , 2 , -1 , -1 , 2 , 2 , -1 , -1 , -1 , -1 , .3HAU , 1 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , -1 , .3HBU , 1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1 , .3HE1U, 2 , 1 , -1 , -2 , -1 , 1 , -2 , 2 , -1 , 1 , 1 , -1 , .3HE2U, 2 , -1 , -1 , 2 , -1 , -1 , -2 , -2 , 1 , 1 , 1 , 1 / DATA D2H ./ 3HD2H, .2HAG, 127,2140103,2140102,2140101, 10107, 20104,20105,20106, .3HB1G, 1 , 1 , -1 , -1 , 1 , 1 , -1 , -1, .3HB2G, 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1, .3HB3G, 1 , -1 , -1 , 1 , 1 , -1 , -1 , 1, .3HAU , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1, .3HB1U, 1 , 1 , -1 , -1 , -1 , -1 , 1 , 1, .3HB2U, 1 , -1 , 1 , -1 , -1 , 1 , -1 , 1, .3HB3U, 1 , -1 , -1 , 1 , -1 , 1 , 1 , -1/ DATA D3H ./ 3HD3H, .3HA1 , 153 ,3140208 ,2140301 , 20104 ,3130224 , 20305 , .3HA2 , 1 , 1 , -1 , 1 , 1 , -1 , .3HE , 2 , -1 , 0 , 2 , -1 , 0 , .3HA1 , 1 , 1 , 1 , -1 , -1 , -1 , .3HA2 , 1 , 1 , -1 , -1 , -1 , 1 , .3HE , 2 , -1 , 0 , -2 , 1 , 0 / DATA D4H ./ 3HD4H, .3HA1G ,8575,4140209,2140103,2140201,2140220,10107,4130214,20104, . 20205,20229, .3HA2G , 1 , 1 , 1 , -1 , -1 , 1 , 1 , 1 , -1 , -1 , .3HB1G , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , .3HB2G , 1 , -1 , 1 , -1 , 1 , 1 , -1 , 1 , -1 , 1 , .3HEG , 2 , 0 , -2 , 0 , 0 , 2 , 0 , -2 , 0 , 0 , .3HA1U , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , 1 , 1 , .3HB1U , 1 , -1 , 1 , 1 , -1 , -1 , 1 , -1 , -1 , 1 , .3HB2U , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , -1 , .3HEU , 2 , 0 , -2 , 0 , 0 , -2 , 0 , 2 , 0 , 0 / DATA D5H ./ 3HD5H, .3HA1 ,537, 5140210, 5240222,2140501,20104,5130219, 5330263,20505, .3HA2 , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , .3HE1 , 2 , 51 , 52 , 0 , 2 , 51 , 52 , 0 , .3HE2 , 2 , 52 , 51 , 0 , 2 , 52 , 51 , 0 , .3HA1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .3HA2 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , .3HE1 , 2 , 51 , 52 , 0 , -2 , 103 , 101 , 0 , .3HE2 , 2 , 52 , 51 , 0 , -2 , 101 , 103 , 0 / DATA D6H ./ 3HD6H, .3HA1G ,17663,6140211,3140208,2140103,2140301,2140302,10107,20104, . 6130215,3130238,20306,20305, .3HA2G , 1, 1, 1, 1, -1, -1, 1, 1, 1, 1, -1, -1, .3HB1G , 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, .3HB2G , 1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, .3HE1G , 2, 1, -1, -2, 0, 0, 2, -2, -1, 1, 0, 0, .3HE2G , 2, -1, -1, 2, 0, 0, 2, 2, -1, -1, 0, 0, .3HA1U , 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, .3HA2U , 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, .3HB1U , 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, .3HB2U , 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, .3HE1U , 2, 1, -1, -2, 0, 0, -2, 2, 1, -1, 0, 0, .3HE2U , 2, -1, -1, 2, 0, 0, -2, -2, 1, 1, 0, 0/ DATA D2D ./ 3HD2D, .2HA1 , 8244 ,4130214 , 2140103 ,2140220 ,20205 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HB1 , 1 , -1 , 1 , 1 , -1 , .2HB2 , 1 , -1 , 1 , -1 , 1 , .2HE , 2 , 0 , -2 , 0 , 0 / DATA D3D ./ 3HD3D, .3HA1G,16594 ,3140208 ,2140302 , 10107 ,6130215 , 20305 , .3HA2G, 1 , 1 , -1 , 1 , 1 , -1 , .3HEG , 2 , -1 , 0 , 2 , -1 , 0 , .3HA1U, 1 , 1 , 1 , -1 , -1 , -1 , .3HA2U, 1 , 1 , -1 , -1 , -1 , 1 , .3HEU , 2 , -1 , 0 , -2 , 1 , 0 / DATA D4D ./ 3HD4D, .3HA1 ,33076,8130216 ,4140209, 8330223,2140103,20405,2140426, .3HA2 , 1 , 1 , 1 , 1 , 1 , -1 , -1 , .3HB1 , 1 , -1 , 1 , -1 , 1 , -1 , 1 , .3HB2 , 1 , -1 , 1 , -1 , 1 , 1 , -1 , .3HE1 , 2 , 81 , 0 , 83 , -2 , 0 , 0 , .3HE2 , 2 , 0 , -2 , 0 , 2 , 0 , 0 , .3HE3 , 2 , 83 , 0 , 81 , -2 , 0 , 0 / DATA D5D ./ 3HD5D, .3HA1G ,66130,5140210,5240222,2140502,10107,10130217, . 10330226,20505, .3HA2G , 1 , 1 , 1 , -1 , 1 , 1 , 1 , -1 , .3HE1G , 2 , 51 , 52 , 0 , 2 , 52 , 51 , 0 , .3HE2G , 2 , 52 , 51 , 0 , 2 , 51 , 52 , 0 , .3HA1U , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , 1 , -1 , -1 , -1 , -1 , 1 , .3HE1U , 2 , 51 , 52 , 0 , -2 , 101 , 103 , 0 , .3HE2U , 2 , 52 , 51 , 0 , -2 , 103 , 101 , 0 / DATA D6D ./ 3HD6D, .2HA1 ,140468,12130218,6140211,4130214,3140208,12530225,2140103, . 20605,2140620, .3HA2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,-1 ,-1 , .3HB1 , 1 , -1 , 1 ,-1 , 1 , -1 , 1 ,-1 , 1 , .3HB2 , 1 , -1 , 1 ,-1 , 1 , -1 , 1 , 1 ,-1 , .3HE1 , 2 , 121 , 1 , 0 ,-1 , 125 ,-2 , 0 , 0 , .3HE2 , 2 , 1 ,-1 ,-2 ,-1 , 1 , 2 , 0 , 0 , .3HE3 , 2 , 0 ,-2 , 0 , 2 , 0 ,-2 , 0 , 0 , .3HE4 , 2 , -1 ,-1 , 2 ,-1 , -1 , 2 , 0 , 0 , .3HE5 , 2 , 125 , 1 , 0 ,-1 , 121 ,-2 , 0 , 0 / DATA S4 ./ 3HS4 , .4HA , 8196 , 4130114, 2140103, 4330123 , .4HB , 1 , -1 , 1 , -1 , .4HE , 2 , 0 , -2 , 0 / DATA S6 ./ 3HS6 , .3HAG ,16576 ,3140108 ,3240122 , 10107 , 6530124 , 6130115 , .3HEG , 2 , -1 , -1 , 2 , -1 , -1 , .3HAU , 1 , 1 , 1 , -1 , -1 , -1 , .3HEU , 2 , -1 , -1 , -2 , 1 , 1 / DATA S8 ./ 3HS8 , .3HA ,33028,8130116,4140109,8330123,2140103,8530125,4340135, . 8730127, .3HB , 1, -1 , 1, -1 , 1, -1 , 1, -1 , .3HE1 , 2, 81 , 0, 83 ,-2, 83 , 0, 81 , .3HE2 , 2, 0 ,-2, 0 , 2, 0 ,-2, 0 , .3HE3 , 2, 83 , 0, 81 ,-2, 81 , 0, 83 / DATA TD ./ 3HTD , .2HA1 ,270516 , 3140808, 2140303, 4130614, 20605 , .2HA2 , 1 , 1 , 1 , -1 , -1 , .2HE , 2 , -1 , 2 , 0 , 0 , .2HT1 , 3 , 0 , -1 , 1 , -1 , .2HT2 , 3 , 0 , -1 , -1 , 1 / DATA OH ./ 3HOH , .3HA1G ,287231,3140808,2140601,4140609,2140303,10107,4130614, . 6130815,20304,20605, .3HA2G , 1 , 1 , -1 , -1 , 1 , 1 , -1 , 1 , 1 , -1 , .3HEG , 2 , -1 , 0 , 0 , 2 , 2 , 0 , -1 , 2 , 0 , .3HT1G , 3 , 0 , -1 , 1 , -1 , 3 , 1 , 0 , -1 , -1 , .3HT2G , 3 , 0 , 1 , -1 , -1 , 3 , -1 , 0 , -1 , 1 , .3HA1U , 1 , 1 , 1 , 1 , 1 , -1 , -1 , -1 , -1 , -1 , .3HA2U , 1 , 1 , -1 , -1 , 1 , -1 , 1 , -1 , -1 , 1 , .3HEU , 2 , -1 , 0 , 0 , 2 , -2 , 0 , 1 , -2 , 0 , .3HT1U , 3 , 0 , -1 , 1 , -1 , -3 , -1 , 0 , 1 , 1 , .3HT2U , 3 , 0 , 1 , -1 , -1 , -3 , 1 , 0 , 1 , -1 / DATA IH ./ 3HIH , .3HAG ,344786,5141210,5241222,3142008,2141502,10107,10131217, . 10331227,6132015,21505, .3HT1G,3, 101 , 103 , 0,-1, 3, 103 , 101 , 0 ,-1 , .3HT2G,3, 103 , 101 , 0,-1, 3, 101 , 103 , 0 ,-1 , .3HGG ,4, -1 , -1 , 1, 0, 4, -1 , -1 , 1 , 0 , .3HHG ,5, 0 , 0 ,-1, 1, 5, 0 , 0 ,-1 , 1 , .3HAU ,1, 1 , 1 , 1, 1,-1, -1 , -1 ,-1 ,-1 , .3HT1U,3, 101 , 103 , 0,-1,-3, 51 , 52 , 0 , 1 , .3HT2U,3, 103 , 101 , 0,-1,-3, 52 , 51 , 0 , 1 , .3HGU ,4, -1 , -1 , 1, 0,-4, 1 , 1 ,-1 , 0 , .3HHU ,5, 0 , 0 ,-1, 1,-5, 0 , 0 , 1 ,-1 / DATA CV ./ 3HC*V, .3HSI , 524340 , 4140109 , .3HPI , 2 , 0 , .3HDE , 2 , -2 / DATA DH ./ 3HD*H, .3HSIG , 524415 , 4140109 , 10107 , .3HPIG , 2 , 0 , 2 , .3HDEG , 2 , -2 , 2 , .3HSIU , 1 , 1 , -1 , .3HPIU , 2 , 0 , -2 , .3HDEU , 2 , -2 , -2 / WRITE(6,'('' == symtrz.f R00008 =='')') SIG=1.D0 I=IGROUP IF(NCODE.LT.0) GOTO 2 IGROUP=0 DO 1 I=1,43 ICHECK=J(I)/10000 ICHECK=J(I)-10000*ICHECK+2 ICHECK=JTAB(ICHECK) IF(ICHECK.EQ.NCODE) GOTO 2 1 CONTINUE RETURN 2 IGROUP=I JGROUP=J(IGROUP) J1=JGROUP/1000000 KDIM=JGROUP-1000000*J1 I1=KDIM/10000 JGROUP=KDIM-10000*I1 NAME=JTAB(JGROUP) SIG=ISIGMA(IGROUP) J2=0 DO 4 I=1,I1 JGROUP=JGROUP+1 JX(1,I)=JTAB(JGROUP) DO 4 K=1,J1 JGROUP=JGROUP+1 BUFF=JTAB(JGROUP) IF(I.GT.1) GOTO 3 JX(2,K)=JTAB(JGROUP)/100 JX(3,K)=JTAB(JGROUP)-100*JX(2,K) JX(4,K)=JX(2,K)/100 JX(5,K)=JX(2,K)-100*JX(4,K) JX(2,K)=JX(5,K) JX(5,K)=JX(4,K)/10 JX(4,K)=JX(4,K)-10*JX(5,K) JX(2,1)=1 JX(3,1)=0 J2=J2+JX(2,K) BUFF=1.D0 3 IF(BUFF.LT.10.) GOTO 4 NZZ=JTAB(JGROUP) NZ=NZZ/10 FZ=NZ FN=NZZ-10*NZ BUFF=2.D0*COS(6.283185307179D0*FN/FZ) 4 T(I,K)=BUFF LINA=IGROUP-41 RETURN END C C================================================================ C SUBROUTINE R00009(NAT,COORD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION HELP(3,3),NAT(NUMATM),COORD(3,NUMATM) WRITE(6,'('' == symtrz.f R00009 =='')') DO 1 I=1,3 DO 1 J=1,NUMAT 1 COORD(I,J)=COORD(I,J)-SHIFT(I) CALL R00005(COORD,1) IF(J1.LT.2) RETURN DO 5 I=2,J1 JOTA=JX(3,I) JOT=1 IF(JOTA.LE.20) GOTO 2 JOTB=JOTA/10 JOT=JOTA-10*JOTB JOTA=JX(3,JOTB) 2 CALL R00006(JOTA,I) IF(JOT.EQ.1) GOTO 5 DO 3 J=1,3 DO 3 K=1,3 HELP(J,K)=0.D0 DO 3 L=1,3 3 HELP(J,K)=HELP(J,K)+ELEM(J,L,JOT)*ELEM(L,K,I) DO 4 J=1,3 DO 4 K=1,3 4 ELEM(J,K,I)=HELP(J,K) 5 CONTINUE DO 6 I=2,J1 CALL R00007(NAT,COORD,I) JX(6,I)=IQUAL IF(IELEM(I).LT.1) IERROR=5 6 CONTINUE CALL R00005(COORD,-1) DO 7 I=1,3 DO 7 J=1,NUMAT 7 COORD(I,J)=COORD(I,J)+SHIFT(I) RETURN END C C=================================================================== C SUBROUTINE R00010(COEFF,NTYPE,ICOUNT,NCDUM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,ISTA COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) DIMENSION NTYPE(MXDIM),COEFF(NCDUM,NCDUM) DIMENSION CHAR(12),ICOUNT(12) DATA TOLER,IFRA / 0.1, '????'/ C WRITE(6,'('' == symtrz.f R00010 =='')') NDORBS=0 DO 1 I=1,I1 1 ICOUNT(I)=0 NAMES=IFRA IF(J1.EQ.1) NAMES=JX(1,1) DO 2 I=1,NORBS INDEX(I)=I 2 NAMO(I)=NAMES IF(J1.EQ.1) RETURN IF(IERROR.GT.0) RETURN IFOUND=0 I=0 3 IK=I+1 DO 4 J=1,J1 4 CHAR(J)=0.D0 5 I=I+1 IF(I.GT.NORBS) GOTO 10 DO 6 J=1,J1 CHAR(J)=CHAR(J)+R00011(COEFF,NTYPE,I,J,NCDUM) IF(CHAR(J).GT.10.) GOTO 3 6 CONTINUE DO 9 K=1,I1 DO 7 J=1,J1 CHECK=ABS(CHAR(J)-T(K,J)) IF(CHECK.GT.TOLER) GOTO 9 7 CONTINUE ICOUNT(K)=ICOUNT(K)+1 DO 8 J=IK,I IFOUND=IFOUND+1 INDEX(J)=ICOUNT(K) 8 NAMO(J)=JX(1,K) GOTO 3 9 CONTINUE GOTO 5 10 IF(IFOUND.NE.NORBS) IERROR=99 RETURN END C C====================================================================== C FUNCTION R00011(COEFF,NTYPE,JORB,IOPER,NCDUM) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION NTYPE(MXDIM),COEFF(NCDUM,NCDUM),E(3,3,20) DIMENSION H(5),P(3),D(5),IP(2,3),ID(2,5),LOC(2,50) EQUIVALENCE (ELEM(1,1,1),E(1,1,1)) WRITE(6,'('' == symtrz.f R00011 =='')') R00011=1.D0 IF(IOPER.EQ.1) RETURN DO 1 I=1,NORBS VECT(1,I)=0.D0 1 VECT(2,I)=0.D0 DO 13 IATOM=1,NUMAT JATOM=JELEM(IOPER,IATOM) KI=0 KJ=0 DO 3 I=1,NORBS ICHECK=NTYPE(I)/100 IF(ICHECK.NE.IATOM) GOTO 2 KI=KI+1 LOC(1,KI)=I 2 IF(ICHECK.NE.JATOM) GOTO 3 KJ=KJ+1 LOC(2,KJ)=I 3 CONTINUE IBASE=KI DO 4 I=1,IBASE ICHECK=LOC(1,I) ITEST=NTYPE(ICHECK)-10*(NTYPE(ICHECK)/10) IF(ITEST.GT.0) GOTO 4 JCHECK=LOC(2,I) LOC(1,I)=0 KI=KI-1 VECT(1,ICHECK)=COEFF(ICHECK,JORB) VECT(2,JCHECK)=COEFF(ICHECK,JORB) 4 CONTINUE MINUS=100*IATOM 5 IF(KI.LT.3) GOTO 13 DO 6 I=1,3 IP(1,I)=0 6 ID(1,I)=0 ID(1,4)=0 ID(1,5)=0 NQZP=-1 NQZD=-1 DO 9 I=1,IBASE IF(LOC(1,I).LT.1) GOTO 9 ICHECK=LOC(1,I) ITEST=NTYPE(ICHECK) INQZ=(ITEST-MINUS)/10 ILQZ=ITEST-10*(ITEST/10) IF(ILQZ.GT.8) GOTO 8 IF(ILQZ.GT.3) GOTO 7 IF(NQZP.LT.0) NQZP=INQZ IF(INQZ.NE.NQZP) GOTO 9 P(ILQZ)=COEFF(ICHECK,JORB) IP(1,ILQZ)=LOC(1,I) IP(2,ILQZ)=LOC(2,I) GOTO 8 7 IF(NQZD.LT.0) NQZD=INQZ IF(INQZ.NE.NQZD) GOTO 9 ILQZ=ILQZ-3 D(ILQZ)=COEFF(ICHECK,JORB) ID(1,ILQZ)=LOC(1,I) ID(2,ILQZ)=LOC(2,I) 8 LOC(1,I)=0 KI=KI-1 9 CONTINUE IF(NQZP.LT.0) GOTO 11 H(1)=R(1,1)*P(1)+R(2,1)*P(2)+R(3,1)*P(3) H(2)=R(1,2)*P(1)+R(2,2)*P(2)+R(3,2)*P(3) H(3)=R(1,3)*P(1)+R(2,3)*P(2)+R(3,3)*P(3) P(1)=E(1,1,IOPER)*H(1)+E(1,2,IOPER)*H(2)+E(1,3,IOPER)*H(3) P(2)=E(2,1,IOPER)*H(1)+E(2,2,IOPER)*H(2)+E(2,3,IOPER)*H(3) P(3)=E(3,1,IOPER)*H(1)+E(3,2,IOPER)*H(2)+E(3,3,IOPER)*H(3) DO 10 I=1,3 IF(IP(1,I).LT.1) GOTO 16 II=IP(1,I) JJ=IP(2,I) VECT(1,II)=H(I) 10 VECT(2,JJ)=P(I) 11 IF(NQZD.LT.0) GOTO 5 CALL R00012(D,H,IOPER) DO 12 I=1,5 IF(ID(1,I).LT.1) GOTO 16 II=ID(1,I) JJ=ID(2,I) VECT(1,II)=H(I) 12 VECT(2,JJ)=D(I) KI=KI-5 GOTO 5 13 CONTINUE C1=0.D0 C2=0.D0 DO 14 I=1,NORBS C1=C1+VECT(1,I)*VECT(1,I) 14 C2=C2+VECT(1,I)*VECT(2,I) IF(ABS(C1).LT.1.E-5) GOTO 15 R00011=C2/C1 RETURN 15 R00011=100.D0 RETURN 16 IERROR=98 RETURN END C C======================================================================= C SUBROUTINE R00012(D,H,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /S00003/ IELEM(20),ELEM(3,3,20),CUB(3,3),JELEM(20,NUMATM) COMMON /S00004/ SHIFT(3),R(3,3),VECT(2,MXDIM) DIMENSION D(5),H(5),T1(5,5,12),S(3,3) CHARACTER JX*4 WRITE(6,'('' == symtrz.f R00012 =='')') IF(NDORBS.GT.0) GOTO 4 NDORBS=1 DO 1 I=1,3 DO 1 J=1,3 1 S(I,J)=R(I,J) CALL R00013(S,T1,1) DO 3 K=2,J1 DO 2 I=1,3 DO 2 J=1,3 2 S(I,J)=ELEM(I,J,K) CALL R00013(S,T1,K) 3 CONTINUE 4 DO 5 I=1,5 H(I)=0.D0 DO 5 J=1,5 5 H(I)=H(I)+T1(I,J,1)*D(J) DO 6 I=1,5 D(I)=0.D0 DO 6 J=1,5 6 D(I)=D(I)+T1(I,J,IOPER)*H(J) RETURN END C C================================================================= C SUBROUTINE R00013(R,T,IOPER) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION R(3,3),T(5,5,12),F(2,4) LOGICAL RIGHT DATA PI,TOL,S12 / 3.1415926536D0 ,0.001D0,3.46410161513D0 / DATA S3,ONE / 1.73205080756D0 , 1.D0 / WRITE(6,'('' == symtrz.f R00013 =='')') R1=R(2,1)*R(3,2)-R(3,1)*R(2,2) R2=R(3,1)*R(1,2)-R(1,1)*R(3,2) R3=R(1,1)*R(2,2)-R(2,1)*R(1,2) CHECK=R1*R(1,3)+R2*R(2,3)+R3*R(3,3) RIGHT=CHECK.GT.0. R(1,3)=R1 R(2,3)=R2 R(3,3)=R3 ARG=R3 IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) B= ACOS(ARG) SINA=SQRT(1.D0-ARG*ARG) IF(SINA.LT.TOL) GOTO 1 ARG=R(3,2)/SINA IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) G= ASIN(ARG) ARG=R(2,3)/SINA IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) A= ASIN(ARG) GOTO 2 1 ARG=R(1,2) IF(ABS(ARG).GT.ONE) ARG=SIGN(ONE,ARG) G= ASIN(ARG) A=0.D0 2 F(1,1)=A F(1,2)=A F(1,3)=PI-A F(1,4)=PI-A F(2,1)=G F(2,3)=G F(2,2)=PI-G F(2,4)=PI-G DO 3 I=1,4 A=F(1,I) G=F(2,I) CHECK=ABS(SIN(B)*COS(A)+R(1,3)) IF(CHECK.GT.TOL) GOTO 3 CHECK=-SIN(G)*COS(B)*SIN(A)+COS(G)*COS(A) IF(ABS(CHECK-R(2,2)).GT.TOL) GOTO 3 CHECK=SIN(A)*COS(G)+COS(A)*COS(B)*SIN(G) IF(ABS(CHECK-R(1,2)).LE.TOL) GOTO 4 3 CONTINUE 4 G=-G A=-A B=-B E1=COS(B*0.5D0) X1=-SIN(B*0.5D0) E2=E1*E1 E3=E1*E2 E4=E2*E2 X2=X1*X1 X3=X1*X2 X4=X2*X2 TA=2.D0*A TG=2.D0*G T(1,1,IOPER)=E4*COS(TA+TG)+X4*COS(TA-TG) T(1,2,IOPER)=2.D0*E3*X1*COS(A+TG)-2.D0*E1*X3*COS(A-TG) T(1,3,IOPER)=2.D0*S3*E2*X2*COS(TG) T(1,4,IOPER)=2.D0*E3*X1*SIN(A+TG)-2.D0*E1*X3*SIN(A-TG) T(1,5,IOPER)=E4*SIN(TA+TG)+X4*SIN(TA-TG) T(2,1,IOPER)=2.D0*E1*X3*COS(TA-G)-2.D0*E3*X1*COS(TA+G) T(2,2,IOPER)=(E4-3.D0*E2*X2)*COS(A+G)-(3.D0*E2*X2-X4)*COS(A-G) T(2,3,IOPER)=2.D0*S3*(E3*X1-E1*X3)*COS(G) T(2,4,IOPER)=(E4-3.D0*E2*X2)*SIN(A+G)-(3.D0*E2*X2-X4)*SIN(A-G) T(2,5,IOPER)=-2.D0*E3*X1*SIN(TA+G)+2.D0*E1*X3*SIN(TA-G) T(3,1,IOPER)=S12*E2*X2*COS(TA) T(3,2,IOPER)=-S12*(E3*X1-E1*X3)*COS(A) T(3,3,IOPER)=E4-4.D0*E2*X2+X4 T(3,4,IOPER)=-S12*(E3*X1-E1*X3)*SIN(A) T(3,5,IOPER)=S12*E2*X2*SIN(TA) T(4,1,IOPER)=2.D0*E1*X3*SIN(TA-G)+2.D0*E3*X1*SIN(TA+G) T(4,2,IOPER)=-(E4-3.D0*E2*X2)*SIN(A+G)-(3.D0*E2*X2-X4)*SIN(A-G) T(4,3,IOPER)=-2.D0*S3*(E3*X1-E1*X3)*SIN(G) T(4,4,IOPER)=(E4-3.D0*E2*X2)*COS(A+G)+(3.D0*E2*X2-X4)*COS(A-G) T(4,5,IOPER)=-2.D0*E3*X1*COS(TA+G)-2.D0*E1*X3*COS(TA-G) T(5,1,IOPER)=-E4*SIN(TA+TG)+X4*SIN(TA-TG) T(5,2,IOPER)=-2.D0*E3*X1*SIN(A+TG)-2.D0*E1*X3*SIN(A-TG) T(5,3,IOPER)=-2.D0*S3*E2*X2*SIN(TG) T(5,4,IOPER)=2.D0*E3*X1*COS(A+TG)+2.D0*E1*X3*COS(A-TG) T(5,5,IOPER)=E4*COS(TA+TG)-X4*COS(TA-TG) IF(RIGHT) RETURN DO 5 I=1,5 T(2,I,IOPER)=-T(2,I,IOPER) 5 T(4,I,IOPER)=-T(4,I,IOPER) RETURN END C C====================================================================== C SUBROUTINE R00015(F,V,EW) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION F(6),A(3,3),V(3,3),EW(3) DATA TOLER /1.E-6 / WRITE(6,'('' == symtrz.f R00015 =='')') N=3 IJ=0 DO 2 J=1,N DO 1 I=1,J IJ=IJ+1 A(I,J)=F(IJ) A(J,I)=F(IJ) V(I,J)=0.D0 1 V(J,I)=0.D0 2 V(J,J)=1.D0 N1=N-1 ZETA=10.D0 3 SS=0.D0 DO 4 J=1,N1 DO 4 I=J,N1 IRG=I+1 4 SS=SS+ABS(A(IRG,J)) IF(SS-TOLER) 21,21,5 5 TAU=0.D0 DO 20 I=1,N I1=I+1 IF(N-I1) 20,6,6 6 DO 19 J=I1,N IF(ABS(A(J,I)).LT.1.E-30) GOTO 19 THETA=0.5D0*(A(J,J)-A(I,I))/A(J,I) IF(ABS(THETA)-ZETA) 7,7,19 7 T=1.D0 IF(THETA) 8,9,9 8 T=-1.D0 9 T=1.D0/(THETA+T*SQRT(1.D0+THETA*THETA)) C=1.D0/SQRT(1.D0+T*T) S=C*T H=2.D0*A(J,I) HC=S*H*(S*THETA-C) A(I,I)=A(I,I)+HC A(J,J)=A(J,J)-HC A(J,I)=-H*C*(S*THETA-0.5D0*(C-S*S/C)) TAU=TAU+1.D0 IF(I.LT.2) GOTO 11 DO 10 IG=2,I IRS=IG-1 H=C*A(I,IRS)-S*A(J,IRS) A(J,IRS)=S*A(I,IRS)+C*A(J,IRS) 10 A(I,IRS)=H 11 L=J-1 IF(L-I1) 14,12,12 12 DO 13 IG=I1,L H=C*A(IG,I)-S*A(J,IG) A(J,IG)=S*A(IG,I)+C*A(J,IG) 13 A(IG,I)=H 14 IF(N1-J) 17,15,15 15 DO 16 IG=J,N1 ILG=IG+1 H=C*A(ILG,I)-S*A(ILG,J) A(ILG,J)=S*A(ILG,I)+C*A(ILG,J) 16 A(ILG,I)=H 17 DO 18 IG=1,N H=C*V(IG,I)-S*V(IG,J) V(IG,J)=S*V(IG,I)+C*V(IG,J) 18 V(IG,I)=H 19 CONTINUE 20 CONTINUE H=0.5D0*FLOAT(N*(N-1)) ZETA=ZETA**(2.5D0-TAU/H) GOTO 3 21 DO 22 J=1,N 22 EW(J)=A(J,J) N1=N-1 23 NT=0 DO 26 J=1,N1 JRG=J+1 IF(EW(J)-EW(JRG)) 26,26,24 24 BUFFER=EW(J) EW(J)=EW(JRG) EW(JRG)=BUFFER DO 25 I=1,N BUFFER=V(I,JRG) V(I,JRG)=V(I,J) 25 V(I,J)=BUFFER NT=1 26 CONTINUE N1=N1-1 IF(NT) 23,27,23 27 RETURN END C C=================================================================== C SUBROUTINE R00016 IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (MXDIM=MAXPAR+NUMATM) CHARACTER*4 NAME,NAMO,ISTA COMMON /S00001/ T(12,12),JX(7,12),LINA,I1,J1,J2 COMMON /S00002/ NUMAT,NORBS,NADIM,NCDIM,IQUAL,NDORBS,IERROR COMMON /SYMINF/ IBASE(2,12),NBASE,IVIBRO(2,12),IVIB COMMON/SYMRES/TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDEX(MXDIM),ISTA(2) DIMENSION CHAR(12),COEFF(12) WRITE(6,'('' == symtrz.f R00016 =='')') IVIBRA=3*NUMAT-6 IF(LINA.GT.0) GOTO 8 CHAR(1)=IVIBRA IVIB=0 IF(J1.LT.2) RETURN DO 5 I=2,J1 JUMP=JX(4,I) GOTO (1,2,3,4),JUMP 1 CHAR(I)=-3*JX(6,I) GOTO 5 2 CHAR(I)=JX(6,I) GOTO 5 3 JP=JX(5,I)/10 JK=JX(5,I)-10*JP ANGLE=2.D0*COS(6.283185308D0*DBLE(JK)/DBLE(JP)) CHAR(I)=DBLE(JX(6,I))*(ANGLE-1.D0) GOTO 5 4 JP=JX(5,I)/10 JK=JX(5,I)-10*JP ANGLE=2.D0*COS(6.283185308D0*DBLE(JK)/DBLE(JP)) CHAR(I)=DBLE(JX(6,I)-2)*(ANGLE+1.D0) 5 CHAR(I)=CHAR(I)*DBLE(JX(2,I)) ORDER=DBLE(J2) DO 7 I=1,I1 COEFF(I)=0.1D0 DO 6 J=1,J1 6 COEFF(I)=COEFF(I)+CHAR(J)*T(I,J)/ORDER IF(COEFF(I).LT.1.) GOTO 7 IDEGEN= T(I,1)+0.1D0 IVIB=IVIB+1 IVIBRO(1,IVIB)= COEFF(I) IF(I1.NE.J1) IVIBRO(1,IVIB)= COEFF(I) /IDEGEN IVIBRO(2,IVIB)=JX(1,I) 7 CONTINUE RETURN 8 IVIBRA=IVIBRA+1 GOTO(9,10),LINA 9 IVIBRO(1,1)=NUMAT-1 IVIBRO(2,1)=JX(1,1) IVIBRO(1,2)=NUMAT-2 IVIBRO(2,2)=JX(1,2) IVIB=2 IF(NUMAT.LT.3) IVIB=1 RETURN 10 ICENT=JX(6,3) IVIBRO(1,1)=(NUMAT-ICENT)/2 IVIBRO(2,1)=JX(1,1) IVIB=2 IVIBRO(1,2)=(NUMAT-2-ICENT)/2 IVIBRO(2,2)=JX(1,2) IF(IVIBRO(1,2).GT.0) IVIB=3 IVIBRO(1,IVIB)=(NUMAT-2+ICENT)/2 IVIBRO(2,IVIB)=JX(1,4) IF(IVIBRO(1,IVIB).GT.0) IVIB=IVIB+1 IVIBRO(1,IVIB)=(NUMAT-2+ICENT)/2 IVIBRO(2,IVIB)=JX(1,5) IF(IVIBRO(1,IVIB).LT.1) IVIB=IVIB-1 RETURN END mopac7-1.15/fortran/analyt.f0000644000175000017500000002724111053302063012660 00000000000000 SUBROUTINE ANALYT(PSUM,PALPHA,PBETA,COORD,NAT,JJA,JJD, 1IIA,IID,ENG) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION COORD(3,*),ENG(3), PSUM(*), PALPHA(*), PBETA(*),NAT(*) ************************************************************************ * * * CALCULATION OF ANALYTICAL DERIVATIVES * * * ************************************************************************ C C COMMON BLOCKS 'OWNED' BY REST OF PROGRAM. C COMMON /CORE / CORE(107) 1 /BETAS / BETAS(107),BETAP(107),BETAD(107) 2 /EXPONT/ ZS(107),ZP(107),ZD(107) 3 /ALPHA / ALPA(107) COMMON /TWOEL3/ F03(107) COMMON /NATORB/ NATORB(107) COMMON /ALPHA3/ ALP3(153) COMMON /IDEAS / FN1(107,10),FN2(107,10),FN3(107,10) COMMON /WMATRX/ W(N2ELEC*2) COMMON /NATYPE/ NZTYPE(107),MTYPE(30),LTYPE COMMON /BETA3 / BETA3(153) COMMON /VSIPS / VS(107),VP(107),VD(107) COMMON /KEYWRD/ KEYWRD C C COMMON BLOCKS 'OWNED' BY ANT C COMMON /DERIVS/ DS(16),DG(22),DR(100),TDX(3),TDY(3),TDZ(3) COMMON /EXTRA/ G(22), TXYZ(9) C C ON RETURN, ENG HOLDS ANALYTICAL DERIVATIVES C COMMON /FORCE3/ IDMY(5),I3N,IX COMMON /NUMCAL/ NUMCAL DIMENSION EAA(3),EAB(3),ENUC(3), BI(4), BJ(4) CHARACTER*241 KEYWRD SAVE AM1, MINDO3 LOGICAL AM1, MINDO3 DATA ICALCN/0/ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL AM1=(INDEX(KEYWRD,'AM1')+INDEX(KEYWRD,'PM3').NE.0) MINDO3=(INDEX(KEYWRD,'MINDO').NE.0) ENDIF A0=0.529167D0 JD=JJD-JJA+1 JA=1 ID=IID-IIA+1+JD IA=JD+1 DO 10 J=1,3 EAA(J)=0.0D0 EAB(J)=0.0D0 ENUC(J)=0.0D0 ENG(J)=0.0D0 10 CONTINUE I=2 NI=NAT(I) ISTART=NZTYPE(NI)*4-3 J=1 NJ=NAT(J) JSTART=NZTYPE(NJ)*4-3 R2=(COORD(1,I)-COORD(1,J))**2+(COORD(2,I)-COORD(2,J))**2 1 + (COORD(3,I)-COORD(3,J))**2 RIJ=SQRT(R2) R0=RIJ/A0 RR=R2/(A0*A0) DO 150 IX=1,3 DEL1=COORD(IX,I)-COORD(IX,J) TERMAA=0.0D0 TERMAB=0.0D0 ISP=0 IOL=0 C THE FIRST DERIVATIVES OF OVERLAP INTEGRALS DO 30 K=IA,ID KA=K-IA KG=ISTART+KA DO 30 L=JA,JD LA=L-JA LG=JSTART+LA IOL=IOL+1 DS(IOL)=0.0D0 IF(KA.EQ.0.AND.LA.EQ.0) THEN C (S/S) TERM IF(ABS(DEL1).LE.1.0D-6) GO TO 30 IS=1 ELSEIF(KA.EQ.0.AND.LA.GT.0) THEN C (S/P) TERM IS=3 IF(IX.EQ.LA) GO TO 20 IF(ABS(DEL1).LE.1.0D-6) GO TO 30 IS=2 DEL2=COORD(LA,I)-COORD(LA,J) ELSEIF(KA.GT.0.AND.LA.EQ.0) THEN C (P/S) TERM IS=5 IF(IX.EQ.KA) GO TO 20 IF(ABS(DEL1).LE.1.0D-6) GO TO 30 IS=4 DEL2=COORD(KA,I)-COORD(KA,J) ELSE C (P/P) TERM IF(KA.EQ.LA) THEN C P/P IS=9 IF(IX.EQ.KA) GO TO 20 IF(ABS(DEL1).LE.1.0D-6) GO TO 30 C P'/P' IS=8 DEL2=COORD(KA,I)-COORD(KA,J) ELSEIF(IX.NE.KA.AND.IX.NE.LA) THEN C P'/P" IF(ABS(DEL1).LE.1.0D-6) GO TO 30 IS=7 DEL2=COORD(KA,I)-COORD(KA,J) DEL3=COORD(LA,I)-COORD(LA,J) ELSE C P/P' OR P'/P DEL2=COORD(KA+LA-IX,I)-COORD(KA+LA-IX,J) IS=6 ENDIF ENDIF C C CALCULATE OVERLAP DERIVATIVES, STORE RESULTS IN DS C 20 CALL DERS(KG,LG,RR,DEL1,DEL2,DEL3,IS,IOL) 30 CONTINUE IF(.NOT.MINDO3.AND.IX.EQ.1) READ (2) (G(I22),I22=1,22) IF(.NOT.MINDO3) CALL DELRI(DG,NI,NJ,R0,DEL1) CALL DELMOL(COORD,I,J,NI,NJ,IA,ID,JA,JD,IX,RIJ,DEL1,ISP) C C THE FIRST DERIVATIVE OF NUCLEAR REPULSION TERM IF(MINDO3)THEN II=MAX(NI,NJ) NBOND=(II*(II-1))/2+NI+NJ-II ALPHA=0 IF(NBOND.LT.154)THEN ALPHA=ALP3(NBOND) ELSE ALPH1=100 ALPH2=100 IF(NATORB(NI).EQ.0)ALPH1=ALPA(NI) IF(NATORB(NJ).EQ.0)ALPH2=ALPA(NJ) ENDIF C2=(7.1995D0/F03(NI)+7.1995D0/F03(NJ))**2 C1=DEL1/RIJ*CORE(NI)*CORE(NJ)*14.399D0 C3=DEL1/RIJ*ABS(CORE(NI)*CORE(NJ))*14.399D0 IF(NBOND.EQ.22.OR.NBOND.EQ.29)THEN TERMNC=-C1*ALPHA*(1.D0/RIJ**2 - RIJ*(RIJ**2+C2)**(-1.5D0) 1 + 1.D0/RIJ - 1.D0/SQRT(RIJ**2+C2)) * EXP(-RIJ) - 2C1*RIJ*(RIJ**2+C2)**(-1.5D0) ELSEIF (RIJ.LT.1.D0.AND.NATORB(NI)*NATORB(NJ).EQ.0) THEN TERMNC=0.D0 ELSEIF(NBOND.GE.154) THEN C C SPECIAL CASE INVOLVING SPARKLES C EXP1=EXP(-MIN(ALPH1*RIJ,20.D0)) EXP2=EXP(-MIN(ALPH2*RIJ,20.D0)) PART1=-C3*(1.D0/RIJ**2 - RIJ*(RIJ**2+C2)**(-1.5D0)) 1*(EXP1+EXP2) PART2=-C3*(1.D0/RIJ -1.D0/SQRT(RIJ**2+C2)) 1*(ALPH1*EXP1 + ALPH2*EXP2) PART3=-C1*RIJ*(RIJ**2+C2)**(-1.5D0) TERMNC=PART1+PART2+PART3 C# WRITE(6,'(4F13.6)')PART1,PART2,PART3,TERMNC ELSE TERMNC=-C1*(1.D0/RIJ**2 - RIJ*(RIJ**2+C2)**(-1.5D0) + 1ALPHA/RIJ - ALPHA/SQRT(RIJ**2+C2)) * EXP(-ALPHA*RIJ) - 2C1*RIJ*(RIJ**2+C2)**(-1.5D0) ENDIF DR1=DEL1/RIJ*14.399D0*RIJ*(RIJ**2+C2)**(-1.5D0) ELSE C C CORE-CORE TERMS, MNDO AND AM1 C C C SPECIAL TREATMENT FOR N-H AND O-H TERMS C IF(RIJ.LT.1.D0.AND.NATORB(NI)*NATORB(NJ).EQ.0)THEN TERMNC=0.D0 GOTO 50 ENDIF C1=CORE(NI)*CORE(NJ) IF(NI.EQ.1.AND.(NJ.EQ.7.OR.NJ.EQ.8)) THEN F3=1.0D0+EXP(-ALPA(1)*RIJ)+RIJ*EXP(-ALPA(NJ)*RIJ) DD=(DG(1)*F3-G(1)*(DEL1/RIJ)*(ALPA(1)*EXP(-ALPA(1)*RIJ) 1 +(ALPA(NJ)*RIJ-1.0D0)*EXP(-ALPA(NJ)*RIJ)))*C1 ELSEIF((NI.EQ.7.OR.NI.EQ.8).AND.NJ.EQ.1) THEN F3=1.0D0+EXP(-ALPA(1)*RIJ)+RIJ*EXP(-ALPA(NI)*RIJ) DD=(DG(1)*F3-G(1)*(DEL1/RIJ)*(ALPA(1)*EXP(-ALPA(1)*RIJ) 1 +(ALPA(NI)*RIJ-1.0D0)*EXP(-ALPA(NI)*RIJ)))*C1 ELSE C# ELSEIF(NATORB(NI)+NATORB(NJ).EQ.0) THEN C C SPECIAL CASE OF TWO SPARKLES C PART1=DG(1)*C1 PART2=-(G(1)*(DEL1/RIJ)*(ALPA(NI)*EXP(-ALPA(NI)*RI 1J) +ALPA(NJ)*EXP(-ALPA(NJ)*RIJ)))*ABS(C1) PART3=DG(1)*(EXP(-ALPA(NI)*RIJ)+EXP(-ALPA(NJ)*RIJ))*ABS(C 11) DD=PART1+PART2+PART3 C# WRITE(6,'(4F13.6)')PART1,PART2,PART3,DD C# ELSE C C THE GENERAL CASE C C# F3=1.0D0+EXP(-ALPA(NI)*RIJ)+EXP(-ALPA(NJ)*RIJ) C# DD=(DG(1)*F3-G(1)*(DEL1/RIJ)*(ALPA(NI)*EXP(-ALPA(NI)*RI C# 1J) +ALPA(NJ)*EXP(-ALPA(NJ)*RIJ)))*C1 ENDIF TERMNC=DD ENDIF C C **** START OF THE AM1 SPECIFIC DERIVATIVE CODE *** C C ANALYT=-A*(1/(R*R)+2.D0*B*(R-C)/R)*EXP(-B*(R-C)**2) C C ANALYTICAL DERIVATIVES C IF( AM1 )THEN ANAM1=0.D0 DO 40 IG=1,10 IF(ABS(FN1(NI,IG)).GT.0.D0) 1ANAM1=ANAM1+FN1(NI,IG)* 2(1.D0/(RIJ*RIJ)+2.D0*FN2(NI,IG)*(RIJ-FN3(NI,IG))/RIJ)* 3EXP(MAX(-30.D0,-FN2(NI,IG)*(RIJ-FN3(NI,IG))**2)) IF(ABS(FN1(NJ,IG)).GT.0.D0) 1ANAM1=ANAM1+FN1(NJ,IG)* 2(1.D0/(RIJ*RIJ)+2.D0*FN2(NJ,IG)*(RIJ-FN3(NJ,IG))/RIJ)* 3EXP(MAX(-30.D0,-FN2(NJ,IG)*(RIJ-FN3(NJ,IG))**2)) 40 CONTINUE ANAM1=ANAM1*CORE(NI)*CORE(NJ) TERMNC=TERMNC-ANAM1*DEL1/RIJ ENDIF C C **** END OF THE AM1 SPECIFIC DERIVATIVE CODE *** C 50 CONTINUE C C COMBINE TOGETHER THE OVERLAP DERIVATIVE PARTS C IF(MINDO3)THEN II=MAX(NI,NJ) NBOND=(II*(II-1))/2+NI+NJ-II IF(NBOND.GT.153)GOTO 60 BI(1)=BETA3(NBOND)*VS(NI)*2.D0 BI(2)=BETA3(NBOND)*VP(NI)*2.D0 BI(3)=BI(2) BI(4)=BI(2) BJ(1)=BETA3(NBOND)*VS(NJ)*2.D0 BJ(2)=BETA3(NBOND)*VP(NJ)*2.D0 BJ(3)=BJ(2) BJ(4)=BJ(2) 60 CONTINUE ELSE BI(1)=BETAS(NI) BI(2)=BETAP(NI) BI(3)=BI(2) BI(4)=BI(2) BJ(1)=BETAS(NJ) BJ(2)=BETAP(NJ) BJ(3)=BJ(2) BJ(4)=BJ(2) ENDIF C C CODE COMMON TO MINDO/3, MNDO, AND AM1 C IOL=0 DO 70 K=IA,ID DO 70 L=JA,JD LK=L+K*(K-1)/2 TERMK=BI(K-IA+1) TERML=BJ(L-JA+1) IOL=IOL+1 TERMAB=TERMAB+(TERMK+TERML) 1*PSUM(LK)*DS(IOL) 70 CONTINUE IF(MINDO3)THEN C C FIRST, CORE-ELECTRON ATTRACTION DERIVATIVES (MINDO/3) C C ATOM CORE I AFFECTING A.O.S ON J DO 80 M=JA,JD MN=(M*(M+1))/2 80 TERMAB=TERMAB+CORE(NI)*PSUM(MN)*DR1 C ATOM CORE J AFFECTING A.O.S ON I DO 90 M=IA,ID MN=(M*(M+1))/2 90 TERMAB=TERMAB+CORE(NJ)*PSUM(MN)*DR1 C C NOW FOR COULOMB AND EXCHANGE TERMS (MINDO/3) C DO 100 I1=IA,ID II=(I1*(I1+1))/2 DO 100 J1=JA,JD JJ=(J1*(J1+1))/2 IJ=J1+(I1*(I1-1))/2 C C COULOMB TERM C TERMAA=TERMAA-PSUM(II)*DR1*PSUM(JJ) C C EXCHANGE TERM C TERMAA=TERMAA+(PALPHA(IJ)*PALPHA(IJ)+PBETA(IJ)*PBETA(I 1J))*DR1 100 CONTINUE ELSE C C FIRST, CORE-ELECTRON ATTRACTION DERIVATIVES (MNDO AND AM1) C C ATOM CORE I AFFECTING A.O.S ON J ISP=0 DO 110 M=JA,JD BB=1.D0 DO 110 N=M,JD MN=M+N*(N-1)/2 ISP=ISP+1 TERMAB=TERMAB-BB*CORE(NI)*PSUM(MN)*DR(ISP) 110 BB=2.D0 C ATOM CORE J AFFECTING A.O.S ON I K=MAX(JD-JA+1,1) K=(K*(K+1))/2 ISP=-K+1 DO 120 M=IA,ID BB=1.D0 DO 120 N=M,ID MN=M+N*(N-1)/2 ISP=ISP+K TERMAB=TERMAB-BB*CORE(NJ)*PSUM(MN)*DR(ISP) 120 BB=2.D0 ISP=0 C C NOW FOR COULOMB AND EXCHANGE TERMS (MNDO AND AM1) C DO 140 K=IA,ID AA=1.D0 KK=(K*(K-1))/2 DO 140 L=K,ID LL=(L*(L-1))/2 DO 130 M=JA,JD BB=1.D0 DO 130 N=M,JD ISP=ISP+1 KL=K+LL MN=M+N*(N-1)/2 C C COULOMB TERM C TERMAA=TERMAA+AA*BB*PSUM(KL)*PSUM(MN)*DR(ISP) MK=M+KK NK=N+KK ML=M+LL NL=N+LL C C EXCHANGE TERM C TERMAA= TERMAA-0.5D0*AA*BB*(PALPHA(M 1K)*PALPHA(NL)+PALPHA(NK)*PALPHA(ML)+PBETA(MK)*PBETA(NL)+PBETA(NK)* 2PBETA(ML))*DR(ISP) 130 BB=2.D0 140 AA=2.D0 C END OF MNDO AND AM1 SPECIFIC CODE ENDIF EAA(IX)=EAA(IX)+TERMAA EAB(IX)=EAB(IX)+TERMAB ENUC(IX)=ENUC(IX)+TERMNC 150 CONTINUE C# WRITE(6,*)EAA,EAB,ENUC,NAT(1),NAT(2) 160 CONTINUE 170 CONTINUE DO 180 J=1,3 ENG(J)=EAA(J)+EAB(J)+ENUC(J) ENG(J) = -ENG(J)*23.061D0 180 CONTINUE RETURN END mopac7-1.15/fortran/bonds.f0000644000175000017500000001643311053302063012476 00000000000000 SUBROUTINE BONDS(P) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' PARAMETER (NATMS2=MAXPAR*MAXPAR-MAXORB*MAXORB) DIMENSION P(*) COMMON/MOLKST/NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON/SCRACH/B(MAXORB,MAXORB),BONDAB(NATMS2) COMMON/CORE/CORE(107) COMMON/VECTOR/C(MORB2),EIGS(MAXORB),CBETA(MORB2),EIGB(MAXORB) COMMON/KEYWRD/KEYWRD COMMON/DENSTY/PDUMMY(MPACK),PA(MPACK),PB(MPACK) COMMON/DROHF/SDM(MPACK) C********************************************************************* C CALCULATES AND PRINTS THE BOND INDICES AND VALENCIES OF ATOMS C FOR REFERENCE, SEE "BOND INDICES AND VALENCY", J.C.S.DALTON, C ARMSTRONG,D.R., PERKINS,P.G. AND STEWART,J.J.P., 838 (1973) C C ON INPUT C P = DENSITY MATRIX, LOWER HALF TRIANGLE, PACKED. C P IS NOT ALTERED BY BONDS C C********************************************************************* DIMENSION PS(MAXORB,MAXORB),SPINAB(NATMS2),SPNA(NUMATM) DIMENSION V(NUMATM),FV(NUMATM),SQ(NUMATM),AQ(NUMATM),TQ(NUMATM), 1PM(NUMATM),SP(NUMATM),SD(NUMATM),AUX(NUMATM,NUMATM),PSPIN(MPACK) 2,SPSA(NUMATM),SPSQ(NUMATM) C DIMENSION DENW(MAXORB,MAXORB) LOGICAL CI,NCI,KCI CHARACTER*241 KEYWRD C CI=(INDEX(KEYWRD,'C.I.')+INDEX(KEYWRD,'MECI').NE.0) KCI=(INDEX(KEYWRD,'MICROS').EQ.0) NCI=(INDEX(KEYWRD,'ROOT')+INDEX(KEYWRD,'OPEN').EQ.0) NOPN=NOPEN-NCLOSE NELECS=NCLOSE+NCLOSE+NOPN WRITE(6,'(2x,''nelecs nclose nopen nopn'',4I5)') NELECS,NCLOSE, 1NOPEN,NOPN C***** CALCULATE THE DEGREE OF BONDING ************ C K=0 DO 20 I=1,NORBS DO 20 J=1,I K=K+1 B(I,J)=P(K) 20 B(J,I)=P(K) C C ******* CALCULATE KAPPA FACTOR FOR UHF OR ROHF ****************** C IF(INDEX(KEYWRD,'UHF').NE.0) THEN C****** UHF CASE ZKAPPA=0.D0 DO 23 N=1,NALPHA DO 23 M=1,NBETA SUM=0.D0 DO 27 MU=1,NORBS L=MU+NORBS*(N-1) K=MU+NORBS*(M-1) 27 SUM=SUM+C(L)*CBETA(K) 23 ZKAPPA=ZKAPPA+SUM**2 ZKAPPA=1.D0/(ZKAPPA/DBLE(NALPHA+NBETA)+0.5D0) ELSE IF(.NOT.CI.AND.NOPN.EQ.0.AND.NCI.AND.KCI) THEN ZKAPPA=1.0D0 ELSE C****** ROHF CASE ZKAPPA=1.D0/(1.D0-(DBLE(NOPN)/DBLE(NELECS))/2.D0) WRITE(6,'(10X,''ROHF ZKAPPA='',F10.5,2I5)') ZKAPPA,nopen,nclose ENDIF ENDIF IJ=0 DO 60 I=1,NUMAT A=0.0D00 L=NFIRST(I) LL=NLAST(I) DO 40 J=1,I IJ=IJ+1 K=NFIRST(J) KK=NLAST(J) X=0.0D0 DO 30 IL=L,LL DO 30 IH=K,KK 30 X=X+B(IL,IH)*B(IL,IH) 40 BONDAB(IJ)=X X=-BONDAB(IJ) DO 50 J=L,LL A=A+B(J,J) 50 X=X+2.D0*B(J,J) V(I)=X SD(I)=A 60 CONTINUE C C C ***** CALCULATE ACTIVE CHARGE (AQ), SELF CHARGE (SQ), FREE VALENCE(FV) C TOTAL CHARGE (TQ), MULLIKEN TYPE PROMOTION (PM) AND STATISTICAL C PROMOTION (SP) ******************************************** C K=0 DO 65 I=1, NUMAT DO 65 J=1,I K=K+1 BONDAB(K)=BONDAB(K)*ZKAPPA AUX(I,J)=BONDAB(K) 65 AUX(J,I)=BONDAB(K) DO 70 I=1,NUMAT DA=0.0D0 DO 80 J=1,NUMAT 80 IF(J.NE.I) DA=DA+AUX(I,J) AQ(I)=DA SQ(I)=(AUX(I,I)-DA)/2.D00 FV(I)=V(I)-AQ(I) TQ(I)=AQ(I)+SQ(I) PM(I)=SD(I)-CORE(NAT(I)) 70 SP(I)=TQ(I)-CORE(NAT(I)) C C C ******** OUTPUT ***************** C C WRITE(6,'(//)') WRITE(6,'(1X,10X,51(''* ''),//1X, 10X,''* '',9X,''STATISTICAL POP +ULATION ANALYSIS'',9X,''* '',//1X,10X,51(''* ''))') WRITE(6,'(1X//20X,''DEGREES OF BONDING''/)') CALL VECPRT(BONDAB,NUMAT) WRITE(6,'(///)') WRITE(6,'(1X,5X,''SELF-Q'',4X,''ACTIV-Q'',3X,''TOTAL-Q'',3X,''VALE +NCE'',3X,''FREE-VA'',1X,''STAT.PROM'',1X,''MULL.PROM''//)') WRITE(6,'(1X,I2,7F10.5/)') (I,SQ(I),AQ(I),TQ(I),V(I),FV(I),SP(I), +PM(I),I=1,numat) C****** PERFORM SPIN POPULATION STATISTICAL ANALYSIS LINEAR=NORBS*(NORBS+1)/2 IF(INDEX(KEYWRD,'UHF').NE.0) GO TO 1000 IF(.NOT.CI.AND.NOPN.EQ.0.AND.NCI.AND.KCI) THEN WRITE(6,'(1X,''CLOSED SHELL''//)') RETURN ELSE CALL DOPEN(C,NORBS,NORBS,NCLOSE,NOPEN,FRACT) DO 91 J=1,LINEAR 91 PSPIN(J)=SDM(J) C WRITE(6,'(1X,''SDM'',10E12.3)')(SDM(J),J=1,LINEAR) WRITE(6,'(1X,''ROHF''//)') GO TO 1002 END IF 1000 WRITE(6,'(1X,''UHF ''//)') DO 90 I=1,LINEAR 90 PSPIN(I)=PA(I)-PB(I) SUM=0.D0 L=0 DO 100 I=1,NORBS DO 100 J=1,I AA=2.D0 IF(I.EQ.J) AA=1.D0 L=L+1 100 SUM=SUM+AA*(PSPIN(L)*P(L)) WRITE(6,'(//)') WRITE(6,'(10X,''NALPHA-NBETA= '',F10.5,//)') SUM 1002 WRITE(6,'(1X,''OPEN SHELL& UHF CASE''//)') KK=0 DO 110 I=1,NORBS DO 110 J=1,I KK=KK+1 PS(I,J)=PSPIN(KK) 110 PS(J,I)=PSPIN(KK) WRITE(6,'(1X,10X,51(''* '')//1X,10X,''* '',9X,''STATISTICAL SPIN + POPULATION ANALYSIS'',9X,''* '',//1X,10X,51(''* ''))') C EVALUATE THE CORRESPONDING INACTIVE ATOMIC AND BOND SPIN POPULATIONS IJ=0 DO 120 I=1,NUMAT L=NFIRST(I) LL=NLAST(I) DO 130 J=1,I IJ=IJ+1 K=NFIRST(J) KK=NLAST(J) X=0.D0 DO 140 IL=L,LL DO 140 IH=K,KK 140 X=X+B(IL,IH)*PS(IL,IH) 130 SPINAB(IJ)=X 120 CONTINUE C EVALUATE THE TOTAL ATOMIC SPIN POPULATIONS K=0 DO 150 I=1,NUMAT DO 150 J=1,I K=K+1 AUX(I,J)=SPINAB(K) 150 AUX(J,I)=SPINAB(K) DO 160 I=1,NUMAT DA=0.D0 DO 170 J=1,NUMAT 170 IF(J.NE.I) DA=DA+AUX(I,J) SPSA(I)=DA SPSQ(I)=AUX(I,I) 160 SPNA(I)=DA+AUX(I,I) WRITE(6,'(1X//20X,''SELF UNPAIRED AND BOND SPIN POPULATIONS ''/)') CALL VECPRT(SPINAB,NUMAT) WRITE(6,'(//)') WRITE(6,'(10X,'' TOTAL ATOMIC SPIN POPULATIONS''/)') WRITE(6,'(1X,''ATOM SELF UNCPLD SPIN SHARED UNCPLD SPIN + TOTAL UNCPLD SPIN ''///(1X,I3,3F20.5))')(I,SPSQ(I),SPSA(I), 1SPNA(I),I=1,NUMAT) RETURN END SUBROUTINE DOPEN(C,MDIM,NORBS,NDUBL,NSINGL,FRACT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION C(MDIM,*) COMMON/DROHF/SDM(MPACK) C********************************************************************** C C DOPEN COMPUTES THE DENSITY MATRIX OF OPEN SHELL ROHF STATE FUNCTIONS C FROM THE EIGENVECTOR MATRIX AND THE M.O'S OCCUPANCIES C C INPUT: C = SQUARE EIGENVECTOR MATRIX C C NORBS = NUMBER OF ORBITALS C NDUBL = NUMBER OF DOUBLY OCCUPIED M.O'S (=0 IF UHF) C NSINGL = NUMBER OF SINGLY OR FRACTIONALLY OCCUPIED M.O'S C C EXIT: SDM = ROHF OPEN SHELL DENSITY MATRIX C C********************************************************************** C C SET UP LIMITS FOR SUMS C NL1 = BEGINNING OF ONE ELECTRON SUM C NU1 = END OF THE SAME C N2=(NORBS*(NORBS+1))/2 FRAC=FRACT NL1=NDUBL+1 NU1=NSINGL L=0 DO 40 I=1,NORBS DO 30 J=1,I L=L+1 SUM1=0.D0 DO 20 K=NL1,NU1 20 SUM1=SUM1+C(I,K)*C(J,K) 30 SDM(L)=SUM1*FRAC 40 CONTINUE RETURN END mopac7-1.15/fortran/aababc.f0000644000175000017500000001723011053302063012556 00000000000000C C Notice of Public Domain nature of this Program C C 'This computer program is a work of the United States C Government and as such is not subject to protection by C copyright (17 U.S.C. # 105.) Any person who fraudulently C places a copyright notice or does any other act contrary C to the provisions of 17 U.S. Code 506(c) shall be subject C to the penalties provided therein. This notice shall not C be altered or removed from this software and is to be on C all reproductions.' C FUNCTION AABABC(IOCCA1, IOCCB1, IOCCA2, NMOS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION IOCCA1(NMOS), IOCCB1(NMOS), IOCCA2(NMOS) *********************************************************************** * * AABABC EVALUATES THE C.I. MATRIX ELEMENT FOR TWO MICROSTATES DIFFERING * BY BETA ELECTRON. THAT IS, ONE MICROSTATE HAS A BETA ELECTRON * IN PSI(I) WHICH, IN THE OTHER MICROSTATE IS IN PSI(J) * *********************************************************************** COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) COMMON /BASEOC/ OCCA(NMECI) DO 10 I=1,NMOS 10 IF(IOCCA1(I).NE.IOCCA2(I)) GOTO 20 20 IJ=IOCCB1(I) DO 30 J=I+1,NMOS IF(IOCCA1(J).NE.IOCCA2(J)) GOTO 40 30 IJ=IJ+IOCCA1(J)+IOCCB1(J) 40 SUM=0.D0 DO 50 K=1,NMOS 50 SUM=SUM+ (XY(I,J,K,K)-XY(I,K,J,K))*(IOCCA1(K)-OCCA(K)) + 1 XY(I,J,K,K) *(IOCCB1(K)-OCCA(K)) IF(MOD(IJ,2).EQ.1)SUM=-SUM AABABC=SUM RETURN END FUNCTION AABBCD(IOCCA1, IOCCB1, IOCCA2, IOCCB2, NMOS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION IOCCA1(NMOS), IOCCB1(NMOS), IOCCA2(NMOS), IOCCB2(NMOS) *********************************************************************** * * AABBCD EVALUATES THE C.I. MATRIX ELEMENT FOR TWO MICROSTATES DIFFERING * BY TWO SETS OF M.O.S. ONE MICROSTATE HAS AN ALPHA ELECTRON * IN PSI(I) AND A BETA ELECTRON IN PSI(K) FOR WHICH THE OTHER * MICROSTATE HAS AN ALPHA ELECTRON IN PSI(J) AND A BETA ELECTRON * IN PSI(L) * *********************************************************************** COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) COMMON /SPQR/ ISPQR(NMECI*NMECI,NMECI),IS,ILOOP, JLOOP DO 10 I=1,NMOS 10 IF(IOCCA1(I) .NE. IOCCA2(I)) GOTO 20 20 DO 30 J=I+1,NMOS 30 IF(IOCCA1(J) .NE. IOCCA2(J)) GOTO 40 40 DO 50 K=1,NMOS 50 IF(IOCCB1(K) .NE. IOCCB2(K)) GOTO 60 60 DO 70 L=K+1,NMOS 70 IF(IOCCB1(L) .NE. IOCCB2(L)) GOTO 80 80 IF( I.EQ.K .AND. J.EQ.L .AND. IOCCA1(I).NE.IOCCB1(I)) THEN ISPQR(ILOOP,IS)=JLOOP IS=IS+1 ENDIF IF(IOCCA1(I) .LT. IOCCA2(I)) THEN M=I I=J J=M ENDIF IF(IOCCB1(K) .LT. IOCCB2(K)) THEN M=K K=L L=M ENDIF XR=XY(I,J,K,L) C# WRITE(6,'(4I5,F12.6)')I,J,K,L,XR C C NOW UNTANGLE THE MICROSTATES C IJ=1 IF( I.GT.K .AND. J.GT.L .OR. I.LE.K .AND. J.LE.L)IJ=0 IF( I.GT.K ) IJ=IJ+IOCCA1(K)+IOCCB1(I) IF( J.GT.L ) IJ=IJ+IOCCA2(L)+IOCCB2(J) IF(I.GT.K)THEN M=I I=K K=M ENDIF DO 90 M=I,K 90 IJ=IJ+IOCCB1(M)+IOCCA1(M) IF(J.GT.L)THEN M=J J=L L=M ENDIF DO 100 M=J,L 100 IJ=IJ+IOCCB2(M)+IOCCA2(M) C C IJ IN THE PERMUTATION NUMBER, .EQUIV. -1 IF IJ IS ODD. C IF(MOD(IJ,2).EQ.1)XR=-XR AABBCD=XR RETURN END FUNCTION AABACD(IOCCA1, IOCCB1, IOCCA2, IOCCB2, NMOS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION IOCCA1(NMOS), IOCCB1(NMOS), IOCCA2(NMOS), IOCCB2(NMOS) *********************************************************************** * * AABACD EVALUATES THE C.I. MATRIX ELEMENT FOR TWO MICROSTATES DIFFERING * BY TWO ALPHA MOS. ONE MICROSTATE HAS ALPHA ELECTRONS IN * M.O.S PSI(I) AND PSI(J) FOR WHICH THE OTHER MICROSTATE HAS * ELECTRONS IN PSI(K) AND PSI(L) * *********************************************************************** COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) IJ=0 DO 10 I=1,NMOS 10 IF(IOCCA1(I) .LT. IOCCA2(I)) GOTO 20 20 DO 30 J=I+1,NMOS IF(IOCCA1(J) .LT. IOCCA2(J)) GOTO 40 30 IJ=IJ+IOCCA2(J)+IOCCB2(J) 40 DO 50 K=1,NMOS 50 IF(IOCCA1(K) .GT. IOCCA2(K)) GOTO 60 60 DO 70 L=K+1,NMOS IF(IOCCA1(L) .GT. IOCCA2(L)) GOTO 80 70 IJ=IJ+IOCCA1(L)+IOCCB1(L) 80 IJ=IJ+IOCCB2(I)+IOCCB1(K) SUM=(XY(I,K,J,L)-XY(I,L,K,J)) IF(MOD(IJ,2).EQ.1)SUM=-SUM AABACD=SUM RETURN END FUNCTION BABBBC(IOCCA1, IOCCB1, IOCCB2, NMOS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION IOCCA1(NMOS), IOCCB1(NMOS), IOCCB2(NMOS) *********************************************************************** * * BABBBC EVALUATES THE C.I. MATRIX ELEMENT FOR TWO MICROSTATES DIFFERING * BY ONE BETA ELECTRON. THAT IS, ONE MICROSTATE HAS A BETA * ELECTRON IN PSI(I) AND THE OTHER MICROSTATE HAS AN ELECTRON IN * PSI(J). *********************************************************************** COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) COMMON /BASEOC/ OCCA(NMECI) DO 10 I=1,NMOS 10 IF(IOCCB1(I).NE.IOCCB2(I)) GOTO 20 20 IJ=0 DO 30 J=I+1,NMOS IF(IOCCB1(J).NE.IOCCB2(J)) GOTO 40 30 IJ=IJ+IOCCA1(J)+IOCCB1(J) 40 IJ=IJ+IOCCA1(J) C C THE UNPAIRED M.O.S ARE I AND J SUM=0.D0 DO 50 K=1,NMOS 50 SUM=SUM+ (XY(I,J,K,K)-XY(I,K,J,K))*(IOCCB1(K)-OCCA(K)) + 1 XY(I,J,K,K) *(IOCCA1(K)-OCCA(K)) IF(MOD(IJ,2).EQ.1)SUM=-SUM BABBBC=SUM RETURN END FUNCTION BABBCD(IOCCA1, IOCCB1, IOCCA2, IOCCB2, NMOS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION IOCCA1(NMOS), IOCCB1(NMOS), IOCCA2(NMOS), IOCCB2(NMOS) *********************************************************************** * * BABBCD EVALUATES THE C.I. MATRIX ELEMENT FOR TWO MICROSTATES DIFFERING * BY TWO BETA MOS. ONE MICROSTATE HAS BETA ELECTRONS IN * M.O.S PSI(I) AND PSI(J) FOR WHICH THE OTHER MICROSTATE HAS * ELECTRONS IN PSI(K) AND PSI(L) * *********************************************************************** COMMON /XYIJKL/ XY(NMECI,NMECI,NMECI,NMECI) IJ=0 DO 10 I=1,NMOS 10 IF(IOCCB1(I) .LT. IOCCB2(I)) GOTO 20 20 DO 30 J=I+1,NMOS IF(IOCCB1(J) .LT. IOCCB2(J)) GOTO 40 30 IJ=IJ+IOCCA2(J)+IOCCB2(J) 40 IJ=IJ+IOCCA2(J) DO 50 K=1,NMOS 50 IF(IOCCB1(K) .GT. IOCCB2(K)) GOTO 60 60 DO 70 L=K+1,NMOS IF(IOCCB1(L) .GT. IOCCB2(L)) GOTO 80 70 IJ=IJ+IOCCA1(L)+IOCCB1(L) 80 IJ=IJ+IOCCA1(L) IF((IJ/2)*2.EQ.IJ) THEN ONE=1.D0 ELSE ONE=-1.D0 ENDIF BABBCD=(XY(I,K,J,L)-XY(I,L,J,K))*ONE RETURN END FUNCTION DIAGI(IALPHA,IBETA,EIGA,XY,NMOS) IMPLICIT DOUBLE PRECISION(A-H,O-Z) INCLUDE 'SIZES' DIMENSION XY(NMECI,NMECI,NMECI,NMECI), EIGA(NMECI), 1IALPHA(NMOS), IBETA(NMOS) ************************************************************************ * * CALCULATES THE ENERGY OF A MICROSTATE DEFINED BY IALPHA AND IBETA * ************************************************************************ X=0.0D0 DO 20 I=1,NMOS IF (IALPHA(I).NE.0)THEN X=X+EIGA(I) DO 10 J=1,NMOS X=X+((XY(I,I,J,J)-XY(I,J,I,J))*IALPHA(J)*0.5D0 + 1 (XY(I,I,J,J) )*IBETA(J)) 10 CONTINUE ENDIF 20 CONTINUE DO 40 I=1,NMOS IF (IBETA(I).NE.0) THEN X=X+EIGA(I) DO 30 J=1,I 30 X=X+(XY(I,I,J,J)-XY(I,J,I,J))*IBETA(J) ENDIF 40 CONTINUE DIAGI=X RETURN END mopac7-1.15/fortran/thermo.f0000644000175000017500000001473611053302063012673 00000000000000 SUBROUTINE THERMO(A,B,C,LINEAR,SYM,WT,VIBS,NVIBS,ESCF) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION VIBS(*) LOGICAL LINEAR CHARACTER KEYWRD*241, KOMENT*81, TITLE*81, TMPKEY*241 COMMON /KEYWRD/ KEYWRD COMMON /TITLES/ KOMENT,TITLE C C C THERMO CALCULATES THE VARIOUS THERMODYNAMIC QUANTITIES FOR A C SPECIFIED TEMPERATURE GIVEN THE VIBRATIONAL FREQUENCIES, MOMENTS OF C INERTIA, MOLECULAR WEIGHT AND SYMMETRY NUMBER. C C REFERENCE: G.HERZBERG MOLECULAR SPECTRA AND MOLECULAR STRUCTURE C VOL 2, CHAP. 5 C C ---- TABLE OF SYMMETRY NUMBERS ---- C C C1 CI CS 1 D2 D2D D2H 4 C(INF)V 1 C C2 C2V C2H 2 D3 D3D D3H 6 D(INF)H 2 C C3 C3V C3H 3 D4 D4D D4H 8 T TD 12 C C4 C4V C4H 4 D6 D6D D6H 12 OH 24 C C6 C6V C6H 6 S6 3 C C C PROGRAM LIMITATIONS: THE EQUATIONS USED ARE APPROPRIATE TO THE C HIGH TEMPERATURE LIMIT AND WILL BEGIN TO BE INADEQUATE AT TEMPERA- C TURES BELOW ABOUT 100 K. SECONDLY THIS PROGRAM IS ONLY APPROPRIATE C IN THE CASE OF MOLECULES IN WHICH THERE IS NO FREE ROTATION C C C C ******************************************************************* * * THE FOLLOWING CONSTANTS ARE NOW DEFINED: * PI = CIRCUMFERENCE TO DIAMETER OF A CIRCLE * R = GAS CONSTANT IN CALORIES/MOLE * H = PLANCK'S CONSTANT IN ERG-SECONDS * AK = BOLTZMANN CONSTANT IN ERG/DEGREE * AC = SPEED OF LIGHT IN CM/SEC ******************************************************************* SAVE PI, R, H, AK, AC DIMENSION TRANGE(300) DATA PI /3.14159D0 / DATA R/1.98726D0/ DATA H/6.626D-27/ DATA AK/1.3807D-16/ DATA AC/2.99776D+10/ ******************************************************************* IT1=200 IT2=400 ISTEP=10 TMPKEY=KEYWRD I=INDEX(TMPKEY,'THERMO(') IF(I.NE.0) THEN C C ERASE ALL TEXT FROM TMPKEY EXCEPT THERMO DATA C TMPKEY(:I)=' ' TMPKEY(INDEX(TMPKEY,')'):)=' ' IT1=READA(TMPKEY,I) IF(IT1.LT.100) THEN WRITE(6,'(//10X,''TEMPERATURE RANGE STARTS TOO LOW,'', 1'' LOWER BOUND IS RESET TO 30K'')') IT1=100 ENDIF I=INDEX(TMPKEY,',') IF(I.NE.0) THEN TMPKEY(I:I)=' ' IT2=READA(TMPKEY,I) IF(IT2.LT.IT1) THEN IT2=IT1+200 ISTEP=10 GOTO 10 ENDIF I=INDEX(TMPKEY,',') IF(I.NE.0) THEN TMPKEY(I:I)=' ' ISTEP=READA(TMPKEY,I) IF(ISTEP.LT.1)ISTEP=1 ELSE ISTEP=(IT2-IT1)/20 IF(ISTEP.EQ.0)ISTEP=1 IF(ISTEP.GE.2.AND. ISTEP.LT.5)ISTEP=2 IF(ISTEP.GE.5.AND. ISTEP.LT.10)ISTEP=5 IF(ISTEP.GE.10.AND. ISTEP.LT.20)ISTEP=10 IF(ISTEP.GT.20.AND. ISTEP.LT.50)ISTEP=20 IF(ISTEP.GT.50.AND. ISTEP.LT.100)ISTEP=50 IF(ISTEP.GT.100)ISTEP=100 ENDIF ELSE IT2=IT1+200 ENDIF ENDIF 10 CONTINUE WRITE(6,'(//,A)')TITLE WRITE(6,'(A)')KOMENT IF(LINEAR) THEN WRITE(6,'(//10X,''MOLECULE IS LINEAR'')') ELSE WRITE(6,'(//10X,''MOLECULE IS NOT LINEAR'')') ENDIF WRITE(6,'(/10X,''THERE ARE'',I3,'' GENUINE VIBRATIONS IN THIS '', 1''SYSTEM'')')NVIBS WRITE(6,20) 20 FORMAT(10X,'THIS THERMODYNAMICS CALCULATION IS LIMITED TO',/ 110X,'MOLECULES WHICH HAVE NO INTERNAL ROTATIONS'//) WRITE(6,'(//20X,''CALCULATED THERMODYNAMIC PROPERTIES'')') WRITE(6,'(42X,''*'')') WRITE(6,'('' TEMP. (K) PARTITION FUNCTION H.O.F.'', 1'' ENTHALPY HEAT CAPACITY ENTROPY'')') WRITE(6,'( '' KCAL/MOL'', 1'' CAL/MOLE CAL/K/MOL CAL/K/MOL'',/)') DO 30 I=1,NVIBS 30 VIBS(I)=ABS(VIBS(I)) ILIM=1 DO 40 ITEMP=IT1,IT2,ISTEP ILIM=ILIM+1 40 TRANGE(ILIM)=ITEMP TRANGE(1)=298.D0 DO 80 IR=1,ILIM ITEMP=TRANGE(IR) T=ITEMP C *** INITIALISE SOME VARIABLES *** C1=H*AC/AK/T QV=1.0D0 HV=0.0D0 E0=0.0D0 CPV=0.0D0 SV1=0.0D0 SV2=0.0D0 C *** CONSTRUCT THE FREQUENCY DEPENDENT PARTS OF PARTITION FUNCTION DO 50 I=1,NVIBS WI=VIBS(I) EWJ=EXP(-WI*C1) QV=QV/(1-EWJ) HV=HV+WI*EWJ/(1-EWJ) E0=E0+WI CPV=CPV+WI*WI*EWJ/(1-EWJ)/(1-EWJ) SV1=SV1+LOG(1.0D0-EWJ) 50 SV2=SV2+WI*EWJ/(1-EWJ) C *** FINISH CALCULATION OF VIBRATIONAL PARTS *** HV=HV*R*H*AC/AK E0=E0*1.4295D0 CPV=CPV*R*C1*C1 SV=SV2*R*C1-R*SV1 C *** NOW CALCULATE THE ROTATIONAL PARTS (FIRST LINEAR MOLECULES IF(.NOT.LINEAR) GOTO 60 QR=1/(C1*A*SYM) HR=R*T CPR=R SR=R*(LOG(T*AK/(H*AC*A*SYM)))+R GOTO 70 60 QR=SQRT(PI/(A*B*C*C1*C1*C1))/SYM HR=3.0D0*R*T/2.0D0 CPR=3.0D0*R/2.0D0 SR=0.5D0*R*(3.D0*LOG(T*AK/(H*AC)) 1-2.D0*LOG(SYM)+LOG(PI/(A*B*C))+3.D0) 70 CONTINUE C *** CALCULATE INTERNAL CONTRIBUTIONS *** QINT=QV*QR HINT=HV+HR CPINT=CPV+CPR SINT=SV+SR C *** CONSTRUCT TRANSLATION CONTRIBUTIONS *** QTR=(SQRT(2.D0*PI*WT*T*AK*1.6606D-24)/H)**3 HTR=5.0D0*R*T/2.0D0 CPTR=5.0D0*R/2.0D0 STR=2.2868D0*(5.0D0*LOG10(T)+3.0D0*LOG10(WT))-2.3135D0 C *** CONSTRUCT TOTALS *** CPTOT=CPTR+CPINT STOT=STR+SINT HTOT=HTR+HINT C *** OUTPUT SECTION *** IF(IR.EQ.1)THEN H298=HTOT ELSE WRITE(6,'(/,I7,'' VIB.'',G18.4 1 ,13X,3F11.5 )')ITEMP,QV, HV, CPV, SV WRITE(6,'(7X,'' ROT.'',G13.3 1 ,16X,3F11.3 )') QR, HR, CPR, SR WRITE(6,'(7X,'' INT.'',G13.3 1 ,16X,3F11.3 )') QINT,HINT,CPINT,SINT WRITE(6,'(7X,'' TRA.'',G13.3 1 ,16X,3F11.3)') 2 QTR, HTR, CPTR, STR WRITE(6,'(7X,'' TOT.'',13X,F17.3,F11.4,2F11.4)') 1 ESCF+(HTOT-H298)/1000.D0,HTOT,CPTOT,STOT ENDIF 80 CONTINUE WRITE(6,'(/3X,'' * NOTE: HEATS OF FORMATION ARE RELATIVE TO THE'', 1/12X,'' ELEMENTS IN THEIR STANDARD STATE AT 298K'')') END mopac7-1.15/fortran/helect.f0000644000175000017500000000167511053302063012637 00000000000000 FUNCTION HELECT(N,P,H,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION P(*), H(*), F(*) C*********************************************************************** C C SUBROUTINE CALCULATES THE ELECTRONIC ENERGY OF THE SYSTEM IN EV. C C ON ENTRY N = NUMBER OF ATOMIC ORBITALS. C P = DENSITY MATRIX, PACKED, LOWER TRIANGLE. C H = ONE-ELECTRON MATRIX, PACKED, LOWER TRIANGLE. C F = TWO-ELECTRON MATRIX, PACKED, LOWER TRIANGLE. C ON EXIT C HELECT = ELECTRONIC ENERGY. C C NO ARGUMENTS ARE CHANGED. C C*********************************************************************** ED=0.0D00 EE=0.0D00 K=0 NN=N+1 DO 20 I=2,NN K=K+1 JJ=I-1 ED=ED+P(K)*(H(K)+F(K)) IF (I.EQ.NN) GO TO 20 DO 10 J=1,JJ K=K+1 10 EE=EE+P(K)*(H(K)+F(K)) 20 CONTINUE EE=EE+.5D00*ED HELECT=EE RETURN C END mopac7-1.15/fortran/calpar.f0000644000175000017500000002316111053302063012627 00000000000000 SUBROUTINE CALPAR IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /ONELEC/ USS(107),UPP(107),UDD(107) 1 /ATOMIC/ EISOL(107),EHEAT(107) 2 /ALPHA / ALP(107) 3 /EXPONT/ ZS(107),ZP(107),ZD(107) 4 /GAUSS / FN1(107),FN2(107) 5 /BETAS / BETAS(107),BETAP(107),BETAD(107) 6 /TWOELE/ GSS(107),GSP(107),GPP(107),GP2(107),HSP(107), 7 GSD(107),GPD(107),GDD(107) 8 /IDEAS / GUESS1(107,10), GUESS2(107,10), GUESS3(107,10) COMMON /MNDO/ USSM(107), UPPM(107), UDDM(107), ZSM(107),ZPM(107), 1ZDM(107), BETASM(107), BETAPM(107), BETADM(107), ALPM(107), 2EISOLM(107), DDM(107), QQM(107), AMM(107), ADM(107), AQM(107) 3,GSSM(107),GSPM(107),GPPM(107),GP2M(107),HSPM(107), POLVOM(107) COMMON /KEYWRD/ KEYWRD COMMON/MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107) DIMENSION NSPQN(107) CHARACTER KEYWRD*241 DIMENSION USSC(107), UPPC(107), GSSC(107), GSPC(107), HSPC(107), 1GP2C(107), GPPC(107), UDDC(107), GSDC(107), GDDC(107) SAVE NSPQN, USSC, UPPC, UDDC, GSSC, GSPC, HSPC, GP2C, GSDC, GDDC DATA NSPQN/2*1,8*2,8*3,18*4,18*5,32*6,21*0/ C C THE CONTINUATION LINES INDICATE THE PRINCIPAL QUANTUM NUMBER. C DATA USSC/ 11.D0, 0.D0, 21.D0, 6*2.D0,0.D0, 31.D0, 6*2.D0,0.D0, 41.D0,4*2.D0,1.D0,4*2.D0,1.D0, 6*2.D0,0.D0, 51.D0,3*2.D0,2*1.D0,2.D0,2*1.D0,0.D0,1.D0, 6*2.D0,0.D0, 61.D0,22*2.D0,1.D0,1.D0, 6*2.D0,0.D0, 721*0.D0/ DATA UPPC/ 1 2*0.D0, 2 2*0.D0,1.D0,2.D0,3.D0,4.D0,5.D0,6.D0, 3 2*0.D0,1.D0,2.D0,3.D0,4.D0,5.D0,6.D0, 412*0.D0,1.D0,2.D0,3.D0,4.D0,5.D0,6.D0, 512*0.D0,1.D0,2.D0,3.D0,4.D0,5.D0,6.D0, 626*0.D0,1.D0,2.D0,3.D0,4.D0,5.D0,6.D0, 721*0.D0/ DATA UDDC/18*0.D0, 1 2*0.D0,1.D0,2.D0,3.D0,5.D0,5.D0,6.D0,7.D0,8.D0,1.D1,1.D1,6*0.D0, 2 2*0.D0,1.D0,2.D0,4.D0,5.D0,5.D0,7.D0,8.D0,1.D1,1.D1,1.D1,6*0.D0, 3 2*0.D0,1.D0,6*0.D0,1.D0,6*0.D0,1.D0,2.D0,3.D0,4.D0, 4 5.D0,6.D0,7.D0,9.D0,1.D1,1.D1,6*0.D0, 5 21*0.D0/ DATA GSSC/2*0.D0, 1 0.D0,6*1.D0,0.D0, 2 0.D0,6*1.D0,0.D0, 3 0.D0,4*1.D0,0.D0,4*1.D0,0.D0,6*1.D0,0.D0, 4 0.D0,3*1.D0,7*0.D0,6*1.D0,0.D0, 5 0.D0,22*1.D0,2*1.D0,6*1.D0,0.D0, 6 21*0.D0/ DATA GSPC/2*0.D0, 1 2*0.D0,2.D0,4.D0,6.D0,8.D0,10.D0,0.D0, 2 2*0.D0,2.D0,4.D0,6.D0,8.D0,10.D0,0.D0, 312*0.D0,2.D0,4.D0,6.D0,8.D0,10.D0,0.D0, 412*0.D0,2.D0,4.D0,6.D0,8.D0,10.D0,0.D0, 526*0.D0,2.D0,4.D0,6.D0,8.D0,10.D0,0.D0, 621*0.D0/ DATA HSPC/2*0.D0, 1 2*0.D0,-1.D0,-2.D0,-3.D0,-4.D0,-5.D0,0.D0, 2 2*0.D0,-1.D0,-2.D0,-3.D0,-4.D0,-5.D0,0.D0, 312*0.D0,-1.D0,-2.D0,-3.D0,-4.D0,-5.D0,0.D0, 412*0.D0,-1.D0,-2.D0,-3.D0,-4.D0,-5.D0,0.D0, 526*0.D0,-1.D0,-2.D0,-3.D0,-4.D0,-5.D0,0.D0, 621*0.D0/ DATA GP2C/2*0.D0, 1 3*0.D0,1.5D0,4.5D0,6.5D0,10.D0,0.D0, 2 3*0.D0,1.5D0,4.5D0,6.5D0,10.D0,0.D0, 313*0.D0,1.5D0,4.5D0,6.5D0,10.D0,0.D0, 413*0.D0,1.5D0,4.5D0,6.5D0,10.D0,0.D0, 527*0.D0,1.5D0,4.5D0,6.5D0,10.D0,0.D0, 621*0.D0/ DATA GPPC/2*0.D0, 1 3*0.D0,-0.5D0,-1.5D0,-0.5D0,2*0.D0, 2 3*0.D0,-0.5D0,-1.5D0,-0.5D0,2*0.D0, 313*0.D0,-0.5D0,-1.5D0,-0.5D0,2*0.D0, 413*0.D0,-0.5D0,-1.5D0,-0.5D0,2*0.D0, 527*0.D0,-0.5D0,-1.5D0,-0.5D0,2*0.D0, 621*0.D0/ 7GSDC/18*0.D0, 8 2*0.D0,2.D0,4.D0,6.D0,5.D0,10.D0,12.D0,14.D0,16.D0,10.D0,7*0.D0, 9 2*0.D0,2.D0,4.D0,4.D0,5.D0,6.D0,7.D0,8.D0,0.D0,1.D1,7*0.D0, 1 2*0.D0,2.D0,6*0.D0,2.D0,6*0.D0,2.D0,4.D0,6.D0,8.D0,10.D0,12.D0, 2 14.D0,9.D0,10.D0,7*0.D0, 321*0.D0/ DATA GDDC/18*0.D0, 1 3*0.D0,1.D0,3.D0,10.D0,10.D0,15.D0,21.D0,28.D0,8*0.D0, 2 3*0.D0,1.D0,6.D0,10.D0,15.D0,21.D0,28.D0,45.D0,8*0.D0, 317*0.D0,1.D0,3.D0, 6.D0,10.D0,15.D0,21.D0,36.D0,8*0.D0, 421*0.D0/ C The DATA block shown above is derived from the ground-state atomic C configuration of the elements. In checking it, pay careful attention C to the actual ground-state configuration. Note also that there are no C configurations which have both p and d electrons in the valence shell C C SET SCALING PARAMETER. P=2.D0 P2=P*P P4=P**4 DO 30 I=2,98 IF(ZP(I).LT.1.D-4.AND.ZS(I).LT.1.D-4)GOTO 30 ********************************************************************** * * CONSTRAINTS ON THE POSSIBLE VALUES OF PARAMETERS * ********************************************************************** IF(ZP(I).LT.0.3D0) ZP(I)=0.3D0 C PUT IN ANY CONSTRAINTS AT THIS POINT ********************************************************************** HPP=0.5D0*(GPP(I)-GP2(I)) HPP=MAX(0.1D0,HPP) HSP(I)=MAX(1.D-7,HSP(I)) EISOL(I)=USS(I)*USSC(I)+UPP(I)*UPPC(I)+UDD(I)*UDDC(I)+ 1 GSS(I)*GSSC(I)+GPP(I)*GPPC(I)+GSP(I)*GSPC(I)+ 2 GP2(I)*GP2C(I)+HSP(I)*HSPC(I)+GSD(I)*GSDC(I)+ 3 GDD(I)*GDDC(I) QN=NSPQN(I) DD(I)=(2.D0*QN+1)*(4.D0*ZS(I)*ZP(I))**(QN+0.5D0)/(ZS(I)+ZP(I)) 1**(2.D0*QN+2)/SQRT(3.D0) DDM(I)=DD(I) QQ(I)=SQRT((4.D0*QN*QN+6.D0*QN+2.D0)/20.D0)/ZP(I) QQM(I)=QQ(I) C CALCULATE ADDITIVE TERMS, IN ATOMIC UNITS. JMAX=5 GDD1= (P2*HSP(I)/(27.21D0* 4.D0*DD(I)**2))**(1.D0/3.D0) GQQ= (P4*HPP/(27.21D0*48.D0*QQ(I)**4))**0.2D0 D1=GDD1 D2=GDD1+0.04D0 Q1=GQQ Q2=GQQ+0.04D0 DO 10 J=1,JMAX DF=D2-D1 HSP1= 2.D0*D1 - 2.D0/SQRT(4.D0*DD(I)**2+1.D0/D1**2) HSP2= 2.D0*D2 - 2.D0/SQRT(4.D0*DD(I)**2+1.D0/D2**2) HSP1= HSP1/P2 HSP2= HSP2/P2 D3= D1 + DF*(HSP(I)/27.21D0-HSP1)/(HSP2-HSP1) D1= D2 D2= D3 10 CONTINUE DO 20 J=1,JMAX QF=Q2-Q1 HPP1= 4.D0*Q1 - 8.D0/SQRT(4.D0*QQ(I)**2+1.D0/Q1**2) 1 + 4.D0/SQRT(8.D0*QQ(I)**2+1.D0/Q1**2) HPP2= 4.D0*Q2 - 8.D0/SQRT(4.D0*QQ(I)**2+1.D0/Q2**2) 1 + 4.D0/SQRT(8.D0*QQ(I)**2+1.D0/Q2**2) HPP1= HPP1/P4 HPP2= HPP2/P4 Q3= Q1 + QF*(HPP/27.21D0-HPP1)/(HPP2-HPP1) Q1= Q2 Q2= Q3 20 CONTINUE AM(I)= GSS(I)/27.21D0 AD(I)= D2 AQ(I)= Q2 AMM(I)=AM(I) ADM(I)=AD(I) AQM(I)=AQ(I) 30 CONTINUE EISOL(1)=USS(1) AM(1)=GSS(1)/27.21D0 AD(1)=AM(1) AQ(1)=AM(1) AMM(1)=AM(1) ADM(1)=AD(1) AQM(1)=AQ(1) C C DEBUG PRINTING. C THIS IS FORMATTED FOR DIRECT INSERTION INTO 'PARAM' C IF(INDEX(KEYWRD,'DEP').EQ.0) RETURN WRITE(6,50) DO 60 I=1,107 IF(ZS(I).EQ.0) GOTO 60 WRITE(6,'(''C'',20X,''DATA FOR ELEMENT'',I3)')I WRITE(6,'(6X,''DATA USSPM3('',I3,'')/'',F16.7,''D0/'')') 1 I,USS(I) IF(UPP(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA UPPPM3('',I3,'')/'',F16.7,''D0/'')')I,UPP(I) IF(UDD(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA UDDPM3('',I3,'')/'',F16.7,''D0/'')')I,UDD(I) IF(BETAS(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA BETASP('',I3,'')/'',F16.7,''D0/'')') 2I,BETAS(I) IF(BETAP(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA BETAPP('',I3,'')/'',F16.7,''D0/'')') 2I,BETAP(I) IF(BETAD(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA BETADP('',I3,'')/'',F16.7,''D0/'')') 2I,BETAD(I) WRITE(6,'(6X,''DATA ZSPM3 ('',I3,'')/'',F16.7,''D0/'')') 1I,ZS(I) IF(ZP(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA ZPPM3 ('',I3,'')/'',F16.7,''D0/'')')I,ZP(I) IF(ZD(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA ZDPM3 ('',I3,'')/'',F16.7,''D0/'')')I,ZD(I) WRITE(6,'(6X,''DATA ALPPM3('',I3,'')/'',F16.7,''D0/'')') 1I,ALP(I) WRITE(6,'(6X,''DATA EISOLP('',I3,'')/'',F16.7,''D0/'')') 1I,EISOL(I) IF(GSS(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA GSSPM3('',I3,'')/'',F16.7,''D0/'')') 2I,GSS(I) IF(GSP(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA GSPPM3('',I3,'')/'',F16.7,''D0/'')') 2I,GSP(I) IF(GPP(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA GPPPM3('',I3,'')/'',F16.7,''D0/'')') 2I,GPP(I) IF(GP2(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA GP2PM3('',I3,'')/'',F16.7,''D0/'')') 2I,GP2(I) IF(HSP(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA HSPPM3('',I3,'')/'',F16.7,''D0/'')') 2I,HSP(I) IF(DD(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA DDPM3 ('',I3,'')/'',F16.7,''D0/'')')I,DD(I) IF(QQ(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA QQPM3 ('',I3,'')/'',F16.7,''D0/'')')I,QQ(I) WRITE(6,'(6X,''DATA AMPM3 ('',I3,'')/'',F16.7,''D0/'')') 1I,AM(I) IF(AD(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA ADPM3 ('',I3,'')/'',F16.7,''D0/'')')I,AD(I) IF(AQ(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA AQPM3 ('',I3,'')/'',F16.7,''D0/'')')I,AQ(I) IF(FN1(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA FN1PM3('',I3,'')/'',F16.7,''D0/'')')I,FN1(I) IF(FN2(I) .NE. 0.D0) 1WRITE(6,'(6X,''DATA FN2PM3('',I3,'')/'',F16.7,''D0/'')')I,FN2(I) DO 40 J=1,10 IF(GUESS1(I,J) .EQ.0.D0) GOTO 40 WRITE(6,'(6X,''DATA GUESP1('',I3,'','',I1,'')/'', 1F16.7,''D0/'')')I,J,GUESS1(I,J) WRITE(6,'(6X,''DATA GUESP2('',I3,'','',I1,'')/'', 1F16.7,''D0/'')')I,J,GUESS2(I,J) WRITE(6,'(6X,''DATA GUESP3('',I3,'','',I1,'')/'', 1F16.7,''D0/'')')I,J,GUESS3(I,J) 40 CONTINUE 50 FORMAT(1H ,1X,'OUTPUT INCLUDES DEBUG INFORMATION',//) 60 CONTINUE RETURN END mopac7-1.15/fortran/prtdrc.f0000644000175000017500000003302111053302063012657 00000000000000 SUBROUTINE PRTDRC(ESCF,DELTT,XPARAM,REF,EKIN,GTOT,ETOT,VELO0,NVAR) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION XPARAM(*), VELO0(*), REF(*) ********************************************************************* * * PRTDRC PREPARES TO PRINT THE GEOMETRY ETC. FOR POINTS IN A DRC * OR IRC * CALCULATION. * ON INPUT ESCF = HEAT OF FORMATION FOR THE CURRENT POINT * DELTT = CHANGE IN TIME, PREVIOUS TO CURRENT POINT * XPARAM = CURRENT CARTESIAN GEOMETRY * EKIN = CURRENT KINETIC ENERGY * GTOT = TOTAL GRADIENT NORM IN IRC CALC'N. * VELO0 = CURRENT VELOCITY * NVAR = NUMBER OF VARIABLES = 3 * NUMBER OF ATOMS. * ******************************************************************** INCLUDE 'SIZES' COMMON /KEYWRD/ KEYWRD COMMON /NUMCAL/ NUMCAL COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,XRACT COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /DRCCOM/ MCOPRT(2,MAXPAR), NCOPRT, PARMAX COMMON /CORE / CORE(107) COMMON /ATMASS/ ATMASS(NUMATM) COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /FMATRX/ ALLXYZ(3,MAXPAR),ALLVEL(3,MAXPAR),PARREF(MAXPAR), 1XYZ3(3,MAXPAR),VEL3(3,MAXPAR), ALLGEO(3,MAXPAR), GEO3(3,MAXPAR), 2 DUMMY(MAXPAR**2+1-16*MAXPAR), IDUMY(4) DIMENSION ESCF3(3),EKIN3(3), GTOT3(3), CHARGE(NUMATM), XOLD3(3), 1GEO(3*NUMATM), VREF(MAXPAR), VREF0(MAXPAR), TSTEPS(100), ETOT3(3), 2XTOT3(3) SAVE REFSCF, COTYPE SAVE TURN LOGICAL TURN, PARMAX, LDRC, GOTURN CHARACTER*241 KEYWRD, TEXT1*3, TEXT2*2, COTYPE(3)*2 DATA ICALCN/0/ DATA REFSCF/0.D0/ DATA COTYPE/'BL','BA','DI'/ DATA TURN/.FALSE./ IF (ICALCN.NE.NUMCAL) THEN ICALCN=NUMCAL DO 10 I=1,NVAR 10 PARREF(I)=XPARAM(I) ETOT=ESCF+EKIN TLAST=0.D0 GOTURN=.FALSE. SUM=0.D0 DO 20 I=1,NVAR SUM=SUM+VELO0(I)**2 VREF0(I)=VELO0(I) 20 VREF(I)=VELO0(I) IONE=1 LDRC=(SUM.GT.1.D0) ILOOP=1 TOLD1=0.0D0 C C DETERMINE TYPE OF PRINT: TIME, ENERGY OR GEOMETRY PRIORITY C OR PRINT ALL POINTS C STEPT=0.D0 STEPH=0.D0 STEPX=0.D0 IF(INDEX(KEYWRD,' T-PRIO').NE.0)THEN IF(INDEX(KEYWRD,' T-PRIORITY=').NE.0)THEN STEPT=READA(KEYWRD,INDEX(KEYWRD,'T-PRIO')+5) ELSE STEPT=0.1D0 ENDIF TREF=-1.D-6 WRITE(6,'(/,'' TIME PRIORITY, INTERVAL ='',F4.1, 1'' FEMTOSECONDS'',/)')STEPT ELSEIF(INDEX(KEYWRD,' H-PRIO').NE.0)THEN IF(INDEX(KEYWRD,' H-PRIORITY=').NE.0)THEN STEPH=READA(KEYWRD,INDEX(KEYWRD,'H-PRIO')+5) ELSE STEPH=0.1D0 ENDIF WRITE(6,'(/,'' KINETIC ENERGY PRIORITY, STEP ='',F5.2, 1'' KCAL/MOLE'',/)')STEPH ELSEIF(INDEX(KEYWRD,' X-PRIO').NE.0)THEN IF(INDEX(KEYWRD,' X-PRIORITY=').NE.0)THEN STEPX=READA(KEYWRD,INDEX(KEYWRD,'X-PRIO')+5) ELSE STEPX=0.05D0 ENDIF WRITE(6,'(/,'' GEOMETRY PRIORITY, STEP ='',F5.2, 1'' ANGSTROMS'',/)')STEPX ENDIF IF(INDEX(KEYWRD,' RESTART').NE.0.AND.INDEX(KEYWRD,'IRC=').EQ.0) 1 THEN READ(9,*)(PARREF(I),I=1,NVAR) READ(9,*)(REF(I),I=1,NVAR) READ(9,*)(VREF0(I),I=1,NVAR) READ(9,*)(VREF(I),I=1,NVAR) READ(9,*)(ALLGEO(3,I),I=1,NVAR) READ(9,*)(ALLGEO(2,I),I=1,NVAR) READ(9,*)(ALLGEO(1,I),I=1,NVAR) READ(9,*)(ALLVEL(3,I),I=1,NVAR) READ(9,*)(ALLVEL(2,I),I=1,NVAR) READ(9,*)(ALLVEL(1,I),I=1,NVAR) READ(9,*)(ALLXYZ(3,I),I=1,NVAR) READ(9,*)(ALLXYZ(2,I),I=1,NVAR) READ(9,*)(ALLXYZ(1,I),I=1,NVAR) READ(9,*)ILOOP,LDRC,IONE,ETOT1,ETOT0,ESCF1,ESCF0,EKIN1,EKIN0 1,TOLD2,TOLD1,GTOT1,GTOT0,XOLD2,XOLD1,XOLD0,TOTIME,JLOOP,ETOT,REFX 2,XTOT1,XTOT0 ENDIF ENDIF IF(ESCF.LT.-1.D8) THEN WRITE(9,*)(PARREF(I),I=1,NVAR) WRITE(9,*)(REF(I),I=1,NVAR) WRITE(9,*)(VREF0(I),I=1,NVAR) WRITE(9,*)(VREF(I),I=1,NVAR) WRITE(9,*)(ALLGEO(3,I),I=1,NVAR) WRITE(9,*)(ALLGEO(2,I),I=1,NVAR) WRITE(9,*)(ALLGEO(1,I),I=1,NVAR) WRITE(9,*)(ALLVEL(3,I),I=1,NVAR) WRITE(9,*)(ALLVEL(2,I),I=1,NVAR) WRITE(9,*)(ALLVEL(1,I),I=1,NVAR) WRITE(9,*)(ALLXYZ(3,I),I=1,NVAR) WRITE(9,*)(ALLXYZ(2,I),I=1,NVAR) WRITE(9,*)(ALLXYZ(1,I),I=1,NVAR) WRITE(9,*)ILOOP,LDRC,IONE,ETOT1,ETOT0,ESCF1,ESCF0,EKIN1,EKIN0, 1TOLD2,TOLD1,GTOT1,GTOT0,XOLD2,XOLD1,XOLD0,TOTIME,JLOOP,ETOT,REFX 2,XTOT1,XTOT0 RETURN ENDIF CALL CHRGE(P,CHARGE) DO 30 I=1,NUMAT L=NAT(I) 30 CHARGE(I)=CORE(L) - CHARGE(I) DELTAT=DELTT*1.D15 NA(2)=-1 CALL XYZINT(XPARAM,NUMAT,NA,NB,NC,57.29577951D0,GEO) NA(1)=99 IF(ILOOP.EQ.1)THEN ETOT1=ETOT0 ETOT0=ETOT ESCF1=ESCF ESCF0=ESCF EKIN1=EKIN EKIN0=EKIN DO 40 J=1,3 C$DOIT VBEST DO 40 I=1,NVAR ALLGEO(J,I)=GEO(I) ALLXYZ(J,I)=XPARAM(I) 40 ALLVEL(J,I)=VELO0(I) ELSE DO 50 I=1,NVAR ALLGEO(3,I)=ALLGEO(2,I) ALLGEO(2,I)=ALLGEO(1,I) ALLGEO(1,I)=GEO(I) ALLXYZ(3,I)=ALLXYZ(2,I) ALLXYZ(2,I)=ALLXYZ(1,I) ALLXYZ(1,I)=XPARAM(I) ALLVEL(3,I)=ALLVEL(2,I) ALLVEL(2,I)=ALLVEL(1,I) 50 ALLVEL(1,I)=VELO0(I) ENDIF C C FORM QUADRATIC EXPRESSION FOR POSITION AND VELOCITY W.R.T. TIME. C T1=MAX(TOLD2,0.02D0) T2=MAX(TOLD1,0.02D0)+T1 DO 60 I=1,NVAR CALL QUADR(ALLGEO(3,I),ALLGEO(2,I),ALLGEO(1,I),T1,T2, 1GEO3(1,I),GEO3(2,I),GEO3(3,I)) C **************************************************** * * * QUADR CALCULATES THE A, B AND C IN THE EQUNS. * * * * A = F0 * * A + B.X0 + C.X0**2 = F1 * * A + B.X2 + C.X2**2 = F2 * * GIVEN THE ARGUMENT LIST (F0,F1,F2, X1,X2, A,B,C) * * * **************************************************** CALL QUADR(ALLXYZ(3,I),ALLXYZ(2,I),ALLXYZ(1,I),T1,T2, 1XYZ3(1,I),XYZ3(2,I),XYZ3(3,I)) CALL QUADR(ALLVEL(3,I),ALLVEL(2,I),ALLVEL(1,I),T1,T2, 1VEL3(1,I),VEL3(2,I),VEL3(3,I)) 60 CONTINUE ETOT2=ETOT1 ETOT1=ETOT0 ETOT0=ETOT CALL QUADR(ETOT2,ETOT1,ETOT0,T1,T2,ETOT3(1),ETOT3(2), 1ETOT3(3)) EKIN2=EKIN1 EKIN1=EKIN0 EKIN0=EKIN CALL QUADR(EKIN2,EKIN1,EKIN0,T1,T2,EKIN3(1),EKIN3(2), 1EKIN3(3)) ESCF2=ESCF1 ESCF1=ESCF0 ESCF0=ESCF CALL QUADR(ESCF2,ESCF1,ESCF0,T1,T2,ESCF3(1),ESCF3(2), 1ESCF3(3)) GTOT2=GTOT1 GTOT1=GTOT0 GTOT0=GTOT CALL QUADR(GTOT2,GTOT1,GTOT0,T1,T2,GTOT3(1),GTOT3(2), 1GTOT3(3)) XTOT2=XTOT1 XTOT1=XTOT0 XOLD2=XOLD2+XOLD1 XOLD1=XOLD0 C C CALCULATE CHANGE IN GEOMETRY C XOLD0=0.D0 L=0 XTOT0=0.D0 SUM1=0.D0 DO 80 I=1,NUMAT SUM=0.D0 SUM1=0.D0 C$DOIT ASIS DO 70 J=1,3 L=L+1 SUM1=SUM1+(ALLXYZ(1,L)-REF(L))**2 70 SUM=SUM+(ALLXYZ(2,L)-ALLXYZ(1,L))**2 XOLD0=XOLD0+SQRT(SUM) 80 XTOT0=XTOT0+SQRT(SUM1) CALL QUADR(XTOT2,XTOT1,XTOT0,T1,T2, 1XTOT3(1),XTOT3(2),XTOT3(3)) CALL QUADR(XOLD2,XOLD2+XOLD1,XOLD2+XOLD1+XOLD0,T1,T2, 1XOLD3(1),XOLD3(2),XOLD3(3)) *********************************************************************** * GO THROUGH THE CRITERIA FOR DECIDING WHETHER OR NOT TO PRINT THIS * * POINT. IF YES, THEN ALSO CALCULATE THE EXACT POINT AS A FRACTION * * BETWEEN THE LAST POINT AND THE CURRENT POINT * *********************************************************************** C NFRACT IS THE NUMBER OF POINTS TO BE PRINTED IN THE CURRENT DOMAIN *********************************************************************** IF(ILOOP.LT.3) GOTO 170 FRACT=-10 NFRACT=1 IF(STEPH.NE.0) THEN C C CRITERION FOR PRINTING RESULTS IS A CHANGE IN HEAT OF FORMATION = C -CHANGE IN KINETIC ENERGY C IF(REFSCF.EQ.0.D0) THEN I=ESCF2/STEPH REFSCF=I*STEPH ENDIF DH=ABS(ESCF1-REFSCF) IF(DH.GT.STEPH)THEN STEPH=SIGN(STEPH,ESCF1-REFSCF) NFRACT=ABS(DH/STEPH) CC=ESCF3(1) BB=ESCF3(2) AA=ESCF3(3) ************************************************ * PROGRAMMERS! - BE VERY CAREFUL IF YOU CHANGE * * THIS FOLLOWING SECTION. THERE IS NUMERICAL * * INSTABILITY IF ABS(BB/AA) IS VERY LARGE. NEAR* * INFLECTION POINTS AA CHANGES SIGN. JJPS* ************************************************ IF(ABS(BB/AA).GT.30)THEN C C USE LINEAR INTERPOLATION C DO 90 I=1,NFRACT 90 TSTEPS(I)=-(CC-(REFSCF+I*STEPH))/BB ELSE C C USE QUADRATIC INTERPOLATION C DO 100 I=1,NFRACT C1=CC-(REFSCF+I*STEPH) 100 TSTEPS(I)=(-BB+SIGN(SQRT(BB*BB-4.D0*(AA*C1)),BB))/(2.D0*A 1A) ENDIF FRACT=-.1D0 REFSCF=REFSCF+NFRACT*STEPH ENDIF ELSEIF(STEPT.NE.0.D0) THEN C C CRITERION FOR PRINTING RESULTS IS A CHANGE IN TIME. C IF(ABS(TOTIME+TOLD2-TREF).GT.STEPT)THEN I=TOTIME/STEPT FRACT=I*STEPT-TOTIME I=(TOLD2+TOTIME)/STEPT J=TOTIME/STEPT NFRACT=I-J+ IONE IONE=0 DO 110 I=1,NFRACT 110 TSTEPS(I)=FRACT+I*STEPT TREF=TREF+NFRACT*STEPT ENDIF ELSEIF(STEPX.NE.0.D0) THEN C C CRITERION FOR PRINTING RESULTS IS A CHANGE IN GEOMETRY. C IF(XOLD2+XOLD1-REFX.GT.STEPX)THEN NFRACT=(XOLD2+XOLD1-REFX)/STEPX CC=XOLD3(1) BB=XOLD3(2) AA=XOLD3(3) IF(ABS(BB/AA).GT.30)THEN C C USE LINEAR INTERPOLATION C DO 120 I=1,NFRACT 120 TSTEPS(I)=-(CC-(REFX+I*STEPX))/BB ELSE C C USE QUADRATIC INTERPOLATION C DO 130 I=1,NFRACT C1=CC-(REFX+I*STEPX) 130 TSTEPS(I)=(-BB+SIGN(SQRT(BB*BB-4.D0*(AA*C1)),BB))/(2.D0*A 1A) ENDIF REFX=REFX+NFRACT*STEPX FRACT=-.1D0 ENDIF ELSE C C PRINT EVERY POINT. C FRACT=0.0D0 ENDIF IF(FRACT.LT.-9.D0)GOTO 170 TURN=(TURN.OR.ABS(FRACT-1.D0).GT.1.D-6) C C LOOP OVER ALL POINTS IN CURRENT DOMAIN C IF(FRACT.EQ.0.D0.AND.NFRACT.EQ.1)THEN TEXT1=' ' TEXT2=' ' II=0 CALL DRCOUT(XYZ3,GEO3,VEL3,NVAR,TOTIME,ESCF3,EKIN3, 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,FRACT,TEXT1,TEXT2,II,JLOOP) N=0 DO 140 I=1,NCOPRT K=MCOPRT(1,I) J=MCOPRT(2,I) L=K*3-3+J IF(ABS(GEO3(3,L)).GT.1.D-20)FRACT=-GEO3(2,L)/(GEO3(3,L)*2.D0 1) IF(FRACT.GT.0.D0.AND.FRACT.LT.TOLD2) THEN IF(GEO3(3,L).GT.0.D0)TEXT1='MIN' IF(GEO3(3,L).LT.0.D0)TEXT1='MAX' TEXT2=COTYPE(J) IF(N.EQ.0)THEN N=N+1 WRITE(6,'(/,20(''****''))') ENDIF TIME=TOTIME+FRACT CALL DRCOUT(XYZ3,GEO3,VEL3,NVAR,TIME,ESCF3,EKIN3, 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,FRACT,TEXT1,TEXT2,K,JLOOP) ENDIF 140 CONTINUE IF(N.NE.0)WRITE(6,'(/,20(''****''))') IF(ABS(ESCF3(3)).GT.1.D-20)FRACT=-ESCF3(2)/(ESCF3(3)*2.D0) IF(.NOT.GOTURN.AND.FRACT.GT.0.D0.AND.FRACT.LT.TOLD2*1.04D0 1.AND. PARMAX) THEN GOTURN=.TRUE. TIME=FRACT+TOTIME IF(ESCF3(3).GT.0.D0) THEN TEXT1='MIN' IF(LDRC) THEN SUM=DOT(VELO0,VREF,NVAR)**2/(DOT(VELO0,VELO0,NVAR)* 1DOT(VREF,VREF,NVAR)+1.D-10) SUM1=DOT(VELO0,VREF0,NVAR)**2/(DOT(VELO0,VELO0,NVAR)* 1DOT(VREF0,VREF0,NVAR)+1.D-10) IF(SUM1.GT.0.1D0.AND.ABS(SUM1-1.D0).GT.1.D-6) 1WRITE(6,'(/,A,F8.5,A,F8.5,A,G12.3,A)')' COEF. OF V(0) 2=',SUM1,' LAST V(0)',SUM,' HALF-LIFE =', 3-0.6931472D0*TIME/LOG(SUM1),' FEMTOSECS' ENDIF WRITE(6,'(//,A,F11.3,A)')' HALF-CYCLE TIME =' 1,TIME-TLAST,' FEMTOSECONDS' TLAST=TIME DO 150 I=1,NVAR 150 VREF(I)=VELO0(I) ENDIF IF(ESCF3(3).LT.0.D0)TEXT1='MAX' TEXT2=' ' CALL DRCOUT(XYZ3,GEO3,VEL3,NVAR,TIME,ESCF3,EKIN3, 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,FRACT,TEXT1,TEXT2,0,JLOOP) ELSE GOTURN=.FALSE. ENDIF ELSE DO 160 I=1,NFRACT TIME=TOTIME+TSTEPS(I) TEXT1=' ' TEXT2=' ' C# WRITE(6,'(A,4F12.4)')' KINETIC ENERGY, POINT',EKIN3,TSTEPS( CALL DRCOUT(XYZ3,GEO3,VEL3,NVAR,TIME,ESCF3,EKIN3, 1GTOT3,ETOT3,XTOT3,ILOOP,CHARGE,TSTEPS(I),TEXT1,TEXT2,0,JLOOP) 160 CONTINUE ENDIF 170 CONTINUE C C BUFFER TOTAL TIME TO 3 POINTS BACK! C TOTIME=TOTIME+TOLD2 TOLD2=TOLD1 TOLD1=DELTAT ILOOP=ILOOP+1 RETURN END mopac7-1.15/fortran/readmo.f0000644000175000017500000004060411053302063012635 00000000000000 SUBROUTINE READMO IMPLICIT DOUBLE PRECISION (A-H, O-Z) INCLUDE 'SIZES' C C MODULE TO READ IN GEOMETRY FILE, OUTPUT IT TO THE USER, C AND CHECK THE DATA TO SEE IF IT IS REASONABLE. C EXIT IF NECESSARY. C C C C ON EXIT NATOMS = NUMBER OF ATOMS PLUS DUMMY ATOMS (IF ANY). C KEYWRD = KEYWORDS TO CONTROL CALCULATION C KOMENT = COMMENT CARD C TITLE = TITLE CARD C LABELS = ARRAY OF ATOMIC LABELS INCLUDING DUMMY ATOMS. C GEO = ARRAY OF INTERNAL COORDINATES. C LOPT = FLAGS FOR OPTIMIZATION OF MOLECULE C NA = ARRAY OF LABELS OF ATOMS, BOND LENGTHS. C NB = ARRAY OF LABELS OF ATOMS, BOND ANGLES. C NC = ARRAY OF LABELS OF ATOMS, DIHEDRAL ANGLES. C LATOM = LABEL OF ATOM OF REACTION COORDINATE. C LPARAM = RC: 1 FOR LENGTH, 2 FOR ANGLE, AND 3 FOR DIHEDRAL C REACT(200)= REACTION COORDINATE PARAMETERS C LOC(1,I) = LABEL OF ATOM TO BE OPTIMIZED. C LOC(2,I) = 1 FOR LENGTH, 2 FOR ANGLE, AND 3 FOR DIHEDRAL. C NVAR = NUMBER OF PARAMETERS TO BE OPTIMIZED. C XPARAM = STARTING VALUE OF PARAMETERS TO BE OPTIMIZED. C ************************************************************************ C *** INPUT THE TRIAL GEOMETRY \IE. KGEOM=0\ C LABEL(I) = THE ATOMIC NUMBER OF ATOM\I\. C = 99, THEN THE I-TH ATOM IS A DUMMY ATOM USED ONLY TO C SIMPLIFY THE DEFINITION OF THE MOLECULAR GEOMETRY. C GEO(1,I) = THE INTERNUCLEAR SEPARATION \IN ANGSTROMS\ BETWEEN ATOMS C NA(I) AND (I). C GEO(2,I) = THE ANGLE NB(I):NA(I):(I) INPUT IN DEGREES; STORED IN C RADIANS. C GEO(3,I) = THE ANGLE BETWEEN THE VECTORS NC(I):NB(I) AND NA(I):(I) C INPUT IN DEGREES - STORED IN RADIANS. C LOPT(J,I) = -1 IF GEO(J,I) IS THE REACTION COORDINATE. C = +1 IF GEO(J,I) IS A PARAMETER TO BE OPTIMIZED C = 0 OTHERWISE. C *** NOTE: MUCH OF THIS DATA IS NOT INCLUDED FOR THE FIRST 3 ATOMS. C ATOM1 INPUT LABELS(1) ONLY. C ATOM2 INPUT LABELS(2) AND GEO(1,2) SEPARATION BETWEEN ATOMS 1+2 C ATOM3 INPUT LABELS(3), GEO(1,3) SEPARATION BETWEEN ATOMS 2+3 C AND GEO(2,3) ANGLE ATOM1 : ATOM2 : ATOM3 C ************************************************************************ C DIMENSION LOPT(3,NUMATM) CHARACTER KEYWRD*241, KOMENT*81, TITLE*81, LINE*80, BANNER*80 CHARACTER KEYS(80)*1, SPACE*1, SPACE2*2, CH*1, CH2*2 CHARACTER ELEMNT*2, IDATE*24, GETNAM*80, NAME*4, NAMO*4, ISTA*4 COMMON /KEYWRD/ KEYWRD COMMON /TITLES/ KOMENT,TITLE COMMON /GEOVAR/ NVAR, LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /PATH / LATOM,LPARAM,REACT(200) COMMON /MESH / LATOM1, LPARA1, LATOM2, LPARA2 COMMON /ELEMTS/ ELEMNT(107) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM), * NMIDLE(NUMATM),NLAST(NUMATM),NORBS,NELECS,NALPHA,NBETA, * NCLOSE,NOPEN,NDUMY,FRACT COMMON /OKMANY/ ISOK PARAMETER (MXDIM=MAXPAR+NUMATM) COMMON /SYMRES/ TRANS,RTR,SIG,NAME,NAMO(MXDIM),INDX(MXDIM), * ISTA(2) COMMON /ISTOPE/ AMS(107) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /NUMCAL/ NUMCAL COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOSYM/ NDEP, LOCPAR(MAXPAR), IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) LOGICAL INT, AIGEO, ISOK SAVE SPACE, SPACE2, IREACT, INT DIMENSION COORD(3,NUMATM),VALUE(40),C(1) EQUIVALENCE (KEYS(1),KEYWRD) DATA SPACE, SPACE2/' ',' '/ CONVTR=2.D0*ASIN(1.D0)/180.D0 AIGEO=.FALSE. 10 CONTINUE C CALL GETTXT IF(INDEX(KEYWRD,'ECHO').NE.0)THEN REWIND 5 ISOK=.FALSE. DO 50 I=1,1000 READ(5,'(A)',END=60)KEYWRD DO 20 J=80,2,-1 20 IF(KEYWRD(J:J).NE.' ')GOTO 30 J=1 30 DO 40 K=1,J 40 IF(ICHAR(KEYWRD(K:K)).LT.32)KEYWRD(K:K)='*' WRITE(6,'(1X,A)')KEYWRD(1:J) 50 CONTINUE 60 CONTINUE REWIND 5 CALL GETTXT ENDIF IF(INDEX(KEYWRD,'ECHO').NE.0)WRITE(6,'(''1'')') IF(KEYWRD(1:1) .NE. SPACE) THEN CH=KEYWRD(1:1) KEYWRD(1:1)=SPACE DO 70 I=2,239 CH2=KEYWRD(I:I) KEYWRD(I:I)=CH CH=CH2 IF(KEYWRD(I+1:I+2) .EQ. SPACE2) THEN KEYWRD(I+1:I+1)=CH GOTO 80 ENDIF 70 CONTINUE CH2=KEYWRD(240:240) KEYWRD(240:240)=CH KEYWRD(241:241)=CH2 80 CONTINUE ENDIF IF(KOMENT(1:1) .NE. SPACE) THEN CH=KOMENT(1:1) KOMENT(1:1)=SPACE DO 90 I=2,79 CH2=KOMENT(I:I) KOMENT(I:I)=CH CH=CH2 IF(KOMENT(I+1:I+2) .EQ. SPACE2) THEN KOMENT(I+1:I+1)=CH GOTO 100 ENDIF 90 CONTINUE CH2=KOMENT(80:80) KOMENT(80:80)=CH KOMENT(81:81)=CH2 100 CONTINUE ENDIF IF(TITLE(1:1) .NE. SPACE) THEN CH=TITLE(1:1) TITLE(1:1)=SPACE DO 110 I=2,79 CH2=TITLE(I:I) TITLE(I:I)=CH CH=CH2 IF(TITLE(I+1:I+2) .EQ. SPACE2) THEN TITLE(I+1:I+1)=CH GOTO 120 ENDIF 110 CONTINUE CH2=TITLE(80:80) TITLE(80:80)=CH TITLE(81:81)=CH2 120 CONTINUE ENDIF DO 121 I=1,200 121 REACT(I)=0.D0 LATOM=0 LPARAM=0 IF(INDEX(KEYWRD,'OLDGEO').EQ.0) THEN NVAR=0 NDEP=0 IF(AIGEO.OR.INDEX(KEYWRD,'AIGIN').NE.0)THEN CALL GETGEG(5,LABELS,GEO, NA,NB,NC,AMS,NATOMS,INT) IF(NVAR.EQ.0)THEN DO 122 J=1,3 DO 122 I=1,NATOMS 122 LOPT(J,I)=0 ENDIF ELSE CALL GETGEO(5,LABELS,GEO,LOPT,NA,NB,NC,AMS,NATOMS,INT) IF(NATOMS.LT.0)THEN REWIND 5 IF(NUMCAL.NE.1)THEN WRITE(6,'(//,A)')' GAUSSIAN INPUT REQUIRES STAND-ALO 1NE JOB' WRITE(6,'(/,A)')' OR KEYWORD "AIGIN"' STOP ENDIF AIGEO=.TRUE. GOTO 10 ENDIF ENDIF IF(NATOMS.EQ.0)STOP ELSE DEGREE=90.D0/ASIN(1.D0) IF(NA(1).EQ.99)THEN DO 128 I=1,NATOMS DO 128 J=1,3 LOPT(J,I)=1 128 COORD(J,I)=GEO(J,I) LOPT(1,1)=0 LOPT(2,1)=0 LOPT(3,1)=0 LOPT(2,2)=0 LOPT(3,2)=0 LOPT(3,3)=0 CALL XYZINT(COORD,NATOMS,NA,NB,NC,DEGREE,GEO) ELSE DO 130 I=1,NATOMS DO 130 J=2,3 130 GEO(J,I)=GEO(J,I)*DEGREE ENDIF ENDIF IF(INDEX(KEYWRD,'FORCE').NE.0 .AND. LABELS(NATOMS).EQ.107) THEN DO 131 I=1,NA(NATOMS) IF(LABELS(I).EQ.99)THEN WRITE(6,'(A)')' NO DUMMY ATOMS ALLOWED BEFORE TRANSLATION' WRITE(6,'(A)')' ATOM IN A FORCE CALCULATION' STOP ENDIF 131 CONTINUE ENDIF C C C OUTPUT FILE TO UNIT 6 C C WRITE HEADER IDATE=' ' CALL fdate(IDATE) WRITE(6,'(1X,15(''*****''),''****'')') C C CHANGE THE FOLLOWING LINE TO SUIT LOCAL ENVIRONMENT, IF DESIRED C BANNER=' ** MOPAC FOR LINUX (PUBLIC DOMAIN VERSION) '// 1' MTA ATOMKI, Debrecen, 95-JUN-21 **' WRITE(6,'(A)')BANNER C C THE BANNER DOES NOT APPEAR ANYWHERE ELSE. C WRITE(6,'(1X,79(''*''))') LINE=' MNDO' IF(INDEX(KEYWRD,'MINDO') .NE. 0) LINE='MINDO/3' IF(INDEX(KEYWRD,'AM1') .NE. 0) LINE=' AM1' IF(INDEX(KEYWRD,'PM3') .NE. 0) LINE=' PM3' WRITE(6,'(/29X,A,'' CALCULATION RESULTS'',28X,///1X,15(''*****'') 1,''****'' )')LINE(:7) WRITE(6,'('' *'',10X,''MOPAC: VERSION '',F5.2, 115X,''CALC''''D. '',A)') VERSON, IDATE C C CONVERT ANGLES TO RADIANS DO 140 J=2,3 C$DOIT VBEST DO 140 I=1,NATOMS GEO(J,I) = GEO(J,I) * CONVTR 140 CONTINUE C C CHECK DATA C NA(1)=0 NB(1)=0 NC(1)=0 DO 150 I=1,NATOMS IF (LABELS(I) .LE. 0 ) THEN WRITE(6,'('' ATOMIC NUMBER OF '',I3,'' ?'')') LABELS(I) IF(I.EQ.1) THEN WRITE(6,'(A)')' THIS WAS THE FIRST ATOM' ELSE WRITE(6,'(A)')' GEOMETRY UP TO, BUT NOT INCLUDING, THE 1'//' FAULTY ATOM' NATOMS=I-1 CALL GEOUT(6) ENDIF STOP ENDIF IF ( NA(I).GE.I.OR. NB(I).GE.I.OR. NC(I).GE.I 1 .OR. (NA(I).EQ.NB(I)) .AND. I.GT.1 2 .OR. (NA(I).EQ.NC(I).OR.NB(I).EQ.NC(I)) .AND. I.GT.2 3 .OR. NA(I)*NB(I)*NC(I).EQ.0 .AND. I.GT.3) THEN WRITE(6,'('' ATOM NUMBER '',I3,'' IS ILL-DEFINED'')') I IF(I.EQ.1)STOP WRITE(6,'(/,'' GEOMETRY READ IN'',/)') CALL GEOUT(6) STOP ENDIF 150 CONTINUE C C WRITE KEYWORDS BACK TO USER AS FEEDBACK CALL WRTKEY(KEYWRD) WRITE(6,'(1X,14(''*****''),''*'',I3.3,''BY'',I3.3)')MAXHEV,MAXLIT C C FILL IN GEO MATRIX IF NEEDED IF(INDEX(KEYWRD,'OLDGEO').EQ.0.AND.INDEX(KEYWRD,'SYM') .NE. 0 1.AND. NDEP.EQ.0) CALL GETSYM IF(NDEP.NE.0) CALL SYMTRY C C INITIALIZE FLAGS FOR OPTIMIZE AND PATH IFLAG = 0 LATOM = 0 NUMAT=0 IF(NVAR.NE.0)THEN NUMAT=NATOMS ELSE DO 180 I=1,NATOMS IF(LABELS(I).NE.99.AND.LABELS(I).NE.107)NUMAT=NUMAT+1 DO 180 J=1,3 IF (LOPT(J,I) ) 160, 180, 170 C FLAG FOR PATH 160 CONVRT=1.D0 IF ( IFLAG .NE. 0 ) THEN IF(INDEX(KEYWRD,'STEP1').NE.0)THEN LPARA1=LPARAM LATOM1=LATOM LPARA2=J LATOM2=I LATOM=0 IFLAG=0 GOTO 180 ELSE WRITE(6,'('' ONLY ONE REACTION COORDINATE PERMITTED 1'')') STOP ENDIF ENDIF LATOM = I LPARAM = J IF(J.GT.1) CONVRT=0.01745329252D00 REACT(1) = GEO(J,I) IREACT=1 IFLAG = 1 GO TO 180 C FLAG FOR OPTIMIZE 170 NVAR = NVAR + 1 LOC(1,NVAR) = I LOC(2,NVAR) = J XPARAM(NVAR) = GEO(J,I) 180 CONTINUE ENDIF C READ IN PATH VALUES IF(IFLAG.EQ.0) GO TO 220 IF(INDEX(KEYWRD,'NLLSQ').NE.0)THEN WRITE(6,'(A)')' NLLSQ USED WITH REACTION PATH; '// 1'THIS OPTION IS NOT ALLOWED' STOP ENDIF IF(INDEX(KEYWRD,'SIGMA').NE.0)THEN WRITE(6,'(A)')' SIGMA USED WITH REACTION PATH; '// 1'THIS OPTION IS NOT ALLOWED' STOP ENDIF IF(INDEX(KEYWRD,'STEP')+INDEX(KEYWRD,'POINTS').NE.0)THEN STEP=READA(KEYWRD,INDEX(KEYWRD,'STEP=')+5) NPTS=READA(KEYWRD,INDEX(KEYWRD,'POINT=')+6) IF(NPTS.GT.200)THEN WRITE(6,'(///,'' ONLY TWO HUNDRED POINTS ALLOWED IN REACT 1'',''ION COORDINATE'')') STOP ENDIF IF(LPARAM.EQ.1.AND.STEP.LE.0)THEN WRITE(6,'(///,'' STEP FOR BOND LENGTH SHOULD BE SET POSIT 1IVE '',''TO PREVENT TWO ATOMS COLLAPSE'')') STOP ENDIF GO TO 220 ENDIF 190 READ(5,'(A)',END=210) LINE CALL NUCHAR(LINE,VALUE,NREACT) IF(NREACT.EQ.0)GOTO 210 DO 200 I=1,NREACT IJ=IREACT+I IF(IJ.GT.200)THEN WRITE(6,'(///,'' ONLY TWO HUNDRED POINTS ALLOWED IN REACT 1ION'','' COORDINATE'')') STOP ENDIF REACT(IJ)=VALUE(I)*CONVRT IF(ABS(REACT(IJ)-REACT(IJ-1)).LT.1.D-5)THEN DUM1 = REACT(IJ)/CONVRT DUM2 = REACT(IJ-1)/CONVRT WRITE(6,'(///,'' TWO ADJACENT POINTS ARE IDENTICAL: '', 1 F7.3,2X,F7.3,/,'' THIS IS NOT ALLOWED IN A PATH CALCULATION'')') 2 DUM1,DUM2 STOP ENDIF 200 CONTINUE IREACT=IREACT+NREACT GO TO 190 210 CONTINUE DEGREE=1.D0 IF(LPARAM.GT.1)DEGREE=90.D0/ASIN(1.D0) IF(IREACT.LE.1) THEN WRITE(6,'(//10X,'' NO POINTS SUPPLIED FOR REACTION PATH'')') WRITE(6,'(//10X,'' GEOMETRY AS READ IN IS AS FOLLOWS'')') CALL GEOUT(1) STOP ELSE WRITE(6,'(//10X,'' POINTS ON REACTION COORDINATE'')') WRITE(6,'(10X,8F8.2)')(REACT(I)*DEGREE,I=1,IREACT) ENDIF IEND=IREACT+1 REACT(IEND)=-1.D12 C C OUTPUT GEOMETRY AS FEEDBACK C 220 CALL WRTTXT(6) IF(INDEX(KEYWRD,'NOLOG').EQ.0)THEN OPEN(UNIT=11, FORM='FORMATTED', STATUS='UNKNOWN', +FILE=GETNAM('FOR011')) CALL WRTTXT(11) ENDIF CALL GEOUT(1) CALL GMETRY(GEO,COORD) C C IF A POLYMER, EXPAND TO MERS C IF(INDEX(KEYWRD,' MERS').NE.0)CALL MAKPOL(COORD) IF (INDEX(KEYWRD,'NOXYZ') .EQ. 0) THEN IF(INDEX(KEYWRD,'0SCF').NE.0)THEN C C WRITE OUT CARTESIAN COORDINATES FOR USE AS A DATA-SET C WRITE(6,'(A)')' GEOMETRY IN CARTESIAN COORDINATE FORMAT' CALL WRTTXT(6) J=0 DO 230 I=1,NATOMS IF(LABELS(I).NE.99)THEN J=J+1 WRITE(6,'(2X,A,3(F19.13,I3))') 1 ELEMNT(LABELS(I)),(COORD(K,J),1,K=1,3) ENDIF 230 CONTINUE ELSE WRITE(6,'(//10X,''CARTESIAN COORDINATES '',/)') WRITE(6,'(4X,''NO.'',7X,''ATOM'',9X,''X'', 1 9X,''Y'',9X,''Z'',/)') L=0 DO 240 I=1,NATOMS IF(LABELS(I) .EQ. 99.OR.LABELS(I).EQ.107) GOTO 240 L=L+1 WRITE(6,'(I6,8X,A2,4X,3F10.4)') 1 L,ELEMNT(LABELS(I)),(COORD(J,L),J=1,3) 240 CONTINUE ENDIF ENDIF C C C is not actually used in this call. C CALL SYMTRZ(COORD,C,NORBS,NORBS,.FALSE.,.FALSE.) WRITE(6,'(//'' MOLECULAR POINT GROUP : '',A4)') NAME IF( INDEX(KEYWRD,' XYZ') .NE. 0 )THEN IF( NVAR .NE. 0 .AND. 1 INT.AND.(NDEP .NE. 0 .OR. NVAR.LT.3*NUMAT-6)) THEN IF(NDEP.NE.0) 1WRITE(6,'(//10X,'' INTERNAL COORDINATES READ IN, AND SYMMETRY'' 2,/10X,'' SPECIFIED, BUT CALCULATION TO BE RUN IN CARTESIAN '' 3,''COORDINATES'')') IF(NVAR.LT.3*NUMAT-6) 1WRITE(6,'(//10X,'' INTERNAL COORDINATES READ IN, AND'', 2'' CALCULATION '',/10X,''TO BE RUN IN CARTESIAN COORDINATES, '', 3/10X,''BUT NOT ALL COORDINATES MARKED FOR OPTIMISATION'')') WRITE(6,'(//10X,'' THIS INVOLVES A LOGICALLLY ABSURD CHOICE' 1',/10X,'' SO THE CALCULATION IS TERMINATED AT THIS POINT'')') STOP ENDIF SUMX=0.D0 SUMY=0.D0 SUMZ=0.D0 DO 250 J=1,NUMAT SUMX=SUMX+COORD(1,J) SUMY=SUMY+COORD(2,J) 250 SUMZ=SUMZ+COORD(3,J) SUMX=SUMX/NUMAT SUMY=SUMY/NUMAT SUMZ=SUMZ/NUMAT DO 260 J=1,NUMAT GEO(1,J)=COORD(1,J)-SUMX GEO(2,J)=COORD(2,J)-SUMY 260 GEO(3,J)=COORD(3,J)-SUMZ NA(1)=99 J=0 NVAR=0 DO 280 I=1,NATOMS IF(LABELS(I).NE.99)THEN J=J+1 IF(J.EQ.1)THEN K=0 ELSEIF(J.LT.4)THEN K=MIN(3,I-1) ELSE K=3 ENDIF DO 270 L=1,K NVAR=NVAR+1 LOC(1,NVAR)=J LOC(2,NVAR)=L 270 XPARAM(NVAR)=GEO(L,J) LABELS(J)=LABELS(I) ENDIF 280 CONTINUE NATOMS=NUMAT ELSE IF(NVAR.EQ.0) RETURN IF( .NOT. INT.AND.(NDEP .NE. 0 .OR. NVAR.LT.3*NUMAT-6)) THEN IF(NDEP.NE.0) 1WRITE(6,'(//10X,'' CARTESIAN COORDINATES READ IN, AND SYMMETRY'' 2,/10X,'' SPECIFIED, BUT CALCULATION TO BE RUN IN INTERNAL '' 3,''COORDINATES'')') IF(NVAR.LT.3*NUMAT-6) 1WRITE(6,'(//10X,'' CARTESIAN COORDINATES READ IN, AND'', 2'' CALCULATION '',/10X,''TO BE RUN IN INTERNAL COORDINATES, '', 3/10X,''BUT NOT ALL COORDINATES MARKED FOR OPTIMISATION'')') WRITE(6,'(//10X,''MOPAC, BY DEFAULT, USES INTERNAL COORDINAT 1ES'',/10X,''TO SPECIFY CARTESIAN COORDINATES USE KEY-WORD :XYZ:'') 2') WRITE(6,'(10X,''YOUR CURRENT CHOICE OF KEY-WORDS INVOLVES'' 1,'' A LOGICALLLY'',/10X,''ABSURD CHOICE SO THE CALCULATION IS'', 2'' TERMINATED AT THIS POINT'')') STOP ENDIF ENDIF RETURN END mopac7-1.15/fortran/drc.f0000644000175000017500000004451011053302063012136 00000000000000 SUBROUTINE DRC(STARTV, STARTK) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION STARTV(*), STARTK(*) ************************************************************************ * * * DRC IS DESIGNED TO FOLLOW A REACTION PATH FROM THE TRANSITION * * STATE. TWO MODES ARE SUPPORTED, FIRST: GAS PHASE:- AS THE SYSTEM * * MOVES FROM THE T/S THE MOMENTUM OF THE ATOMS IS STORED AND THE * * POSITION OF THE ATOMS IS RELATED TO THE OLD POSITION BY (A) THE * * CURRENT VELOCITY OF THE ATOM, AND (B) THE FORCES ACTING ON THAT * * ATOM. THE SECOND MODE IS CONDENSED PHASE, IN WHICH THE ATOMS MOVE* * IN RESPONSE TO THE FORCES ACTING ON THEM. I.E. INFINITELY DAMPED * * * ************************************************************************ INCLUDE 'SIZES' COMMON /KEYWRD/ KEYWRD COMMON /TIMDMP/ TLEFT, TDUMP COMMON /DENSTY/ P(MPACK),PA(MPACK),PB(MPACK) COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /NUMCAL/ NUMCAL COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /ATMASS/ ATMASS(NUMATM) COMMON /GEOVAR/ NVAR, LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,XRACT COMMON /DRCCOM/ MCOPRT(2,MAXPAR), NCOPRT, PRTMAX CHARACTER KEYWRD*241, GETNAM*80 DIMENSION VELO0(MAXPAR), VELO1(MAXPAR), 1VELO2(MAXPAR), VELO3(MAXPAR), GERROR(MAXPAR), 2COORD(3,NUMATM), GROLD2(MAXPAR), PAST10(10), 3GROLD(MAXPAR), GEOREF(3,NUMATM) LOGICAL ADDK, LETOT, LET, VELRED,PRTMAX DATA VELO0/MAXPAR*0.D0/ DATA ADDK/.TRUE./ TNOW=SECOND() OLDTIM=SECOND() DELOLD=10.D0 GTOT=0.D0 OPEN(UNIT=7,STATUS='SCRATCH') IF(INDEX(KEYWRD,' PREC').NE.0)THEN ACCU=0.25D0 ELSE ACCU=1.D0 ENDIF GNLIM=1.D0 PAST10(5)=100.D0 I=INDEX(KEYWRD,'GNORM') IF(I.NE.0)GNLIM=READA(KEYWRD,I) VELRED=(INDEX(KEYWRD,'VELO').NE.0) IF(DOT(STARTV,STARTV,3*NUMAT).GT.0.001D0)THEN C C PRINT OUT INITIAL VELOCITIES C WRITE(6,'(A)')' INITIAL VELOCITY IN DRC' WRITE(6,'(3F13.5)')(STARTV(I),I=1,NUMAT*3) ENDIF LET=(INDEX(KEYWRD,' GEO-OK').NE.0.OR.VELRED) IF(INDEX(KEYWRD,' SYM').NE.0)THEN WRITE(6,*)' SYMMETRY SPECIFIED, BUT CANNOT BE USED IN DRC' NDEP=0 ENDIF C C CONVERT TO CARTESIAN COORDINATES, IF NOT ALREADY DONE. C IF(INDEX(KEYWRD,' XYZ').EQ.0)THEN NA(1)=0 CALL GMETRY(GEO,COORD) L=0 C DO 30 J=1,3 DO 20 I=1,NUMAT GEO(J,I)=COORD(J,I) COORD(J,I)=0.0D0 20 CONTINUE 30 CONTINUE C NA(1)=99 ENDIF C C TRANSFER COORDINATES TO XPARAM AND LOC C IF(INDEX(KEYWRD,' DRC').NE.0)THEN PRTMAX=(LOC(1,1).EQ.1) IF(PRTMAX)THEN J=1 ELSE J=0 ENDIF NVAR=NVAR-J DO 40 I=1,NVAR MCOPRT(1,I)=LOC(1,I+J) 40 MCOPRT(2,I)=LOC(2,I+J) IF(LOC(1,1).EQ.0)NVAR=0 NCOPRT=NVAR ELSE NCOPRT=0 ENDIF L=0 DO 50 I=1,NUMAT LOC(1,L+1)=I LOC(2,L+1)=1 GEOREF(1,I)=GEO(1,I) XPARAM(L+1)=GEO(1,I) C LOC(1,L+2)=I LOC(2,L+2)=2 GEOREF(2,I)=GEO(2,I) XPARAM(L+2)=GEO(2,I) C LOC(1,L+3)=I LOC(2,L+3)=3 GEOREF(3,I)=GEO(3,I) XPARAM(L+3)=GEO(3,I) C L=L+3 50 CONTINUE NVAR=NUMAT*3 C C DETERMINE DAMPING FACTOR C IF(INDEX(KEYWRD,'DRC=').NE.0) THEN HALF=READA(KEYWRD,INDEX(KEYWRD,'DRC=')) WRITE(6,'(//10X,'' DAMPING FACTOR FOR KINETIC ENERGY ='',F12.6) 1')HALF ELSEIF (INDEX(KEYWRD,'DRC').EQ.0) THEN HALF=0.D0 ELSE HALF=1.D6 ENDIF C C LETOT IS TRUE IF CORRECTIONS ARE NOT TO BE MADE PART WAY INTO C THE CALCULATION C C USAGE OF LETOT: C (1) WHILE LETOT IS FALSE, NO DAMPING WILL BE DONE C (2) WHEN LETOT IS TURNED TRUE, C IF AN IRC, THEN ETOT IS RESET SO THE ERROR IS ZERO. C IF A DRC, EXCESS KINETIC ENERGY USED TO START THE RUN IS REMOVED. C LETOT=(INDEX(KEYWRD,'IRC=').EQ.0 .AND. .NOT. LET) HALF=SIGN(MAX(0.000001D0,ABS(HALF)),HALF) C C DETERMINE EXCESS KINETIC ENERGY C ISKIN=0 IF(INDEX(KEYWRD,'KINE').NE.0) THEN ISKIN=1 ADDONK=READA(KEYWRD,INDEX(KEYWRD,'KINE')) WRITE(6,'(//10X,'' EXCESS KINETIC ENERGY ENTERED INTO SYSTEM =' 1',F12.6)')ADDONK ELSE ADDONK=0.D0 ENDIF C C LOOP OVER TIME-INTERVALS OF DELTAT SECOND C DELTAT=1.D-16 QUADR=1.D0 ETOT=0.D0 ESCF=0.D0 CONST=1.D0 IF( INDEX(KEYWRD,'RESTART').NE.0.AND.INDEX(KEYWRD,'IRC=').EQ.0) 1THEN C C RESTART FROM A PREVIOUS RUN C OPEN(UNIT=9,FILE=GETNAM('FOR009'),STATUS='UNKNOWN', +FORM='FORMATTED') REWIND 9 OPEN(UNIT=10,FILE=GETNAM('FOR010'),STATUS='UNKNOWN', +FORM='UNFORMATTED') REWIND 10 READ(9,'(A80)')ALPHA READ(9,'(3F19.13)')(XPARAM(I),I=1,NVAR) READ(9,'(A80)')ALPHA READ(9,'(3F19.3)')(VELO0(I),I=1,NVAR) READ(9,'(A80)')ALPHA READ(9,*)(GRAD(I),I=1,NVAR) READ(9,*)(GROLD(I),I=1,NVAR) READ(9,*)(GROLD2(I),I=1,NVAR) READ(9,*)ETOT,ESCF,EKIN,DELOLD,DELTAT,DLOLD2,ILOOP, 1GNORM,LETOT,ELOST1,GTOT WRITE(6,'(//10X,''CALCULATION RESTARTED, CURRENT'', 1'' KINETIC ENERGY='',F10.5,//)')EKIN GOTO 100 ELSE C NOT A RESTART ILOOP=1 IF(INDEX(KEYWRD,'IRC=').NE.0.OR.VELRED)THEN C C GET HOLD OF VELOCITY VECTOR C IF(INDEX(KEYWRD,'IRC=').NE.0)THEN K=READA(KEYWRD,INDEX(KEYWRD,'IRC=')) ELSE K=1 ENDIF IF(K.LT.0)THEN K=-K ONE=-1.D0 ELSE ONE=1.D0 ENDIF KL=(K-1)*NVAR SUMM=0.D0 VELO1(1)=0 VELO1(2)=0 VELO1(3)=0 SUMMAS=0.D0 I=0 DO 60 II=1,NUMAT AMS=ATMASS(II) SUMMAS=SUMMAS+AMS VELO0(I+1)=STARTV(KL+I+1)*ONE VELO1(1)=VELO1(1)+VELO0(I+1)*AMS C VELO0(I+2)=STARTV(KL+I+2)*ONE VELO1(2)=VELO1(2)+VELO0(I+2)*AMS C VELO0(I+3)=STARTV(KL+I+3)*ONE VELO1(3)=VELO1(3)+VELO0(I+3)*AMS C I=I+3 60 CONTINUE C$DOIT ASIS DO 70 I=1,3 70 VELO1(I)=-VELO1(I)/SUMMAS I=0 C$DOIT ASIS DO 80 II=1,NUMAT AMS=ATMASS(II) C$DOIT ASIS DO 80 I1=1,3 I=I+1 IF(ADDONK.GT.1.D-5.OR..NOT.VELRED)VELO0(I)=VELO0(I)+VE 1LO1(I1) 80 SUMM=SUMM+VELO0(I)**2*AMS IF(ADDONK.LT.1.D-5.AND.VELRED)ADDONK=0.5D0*SUMM/4.184D10 IF(ADDONK.LT.1.D-5.AND..NOT.VELRED)THEN IF(ABS(HALF).GT.1.D-3.AND.STARTK(K).GT.105.D0)THEN WRITE(6,'(A,F10.3,A,/,A)')' BY DEFAULT, ONE QUANTUM OF 1 ENERGY,'//' EQUIVALENT TO',STARTK(K),' CM(-1)', 2' WILL BE USED TO START THE DRC' C C 2.8585086D-3 CONVERTS CM(-1) INTO KCAL/MOLE C ADDONK=STARTK(K)*2.8585086D-3 WRITE(6,'(A,F7.2,A)')' THIS REPRESENTS AN ENERGY OF',A 1DDONK,' KCALS/MOLE' ELSEIF(ABS(HALF).GT.1.D-3)THEN WRITE(6,'(A,F9.2,A)')' THE VIBRATIONAL FREQUENCY (',ST 1ARTK(K),'CM(-1)) IS TOO SMALL',' FOR ONE QUANTUM TO BE USED' WRITE(6,'(A)') 1' INSTEAD 0.3KCAL/MOLE WILL BE USED TO START THE IRC' ADDONK=0.3D0 ELSE ADDONK=0.3D0 ENDIF ENDIF C C AT THIS POINT ADDONK IS IN KCAL/MOLE C NORMALIZE SO THAT TOTAL K.E. = ONE QUANTUM (DEFAULT) (DRC ONLY) C OR 0.3KCAL/MOLE (IRC ONLY) C OR ADDONK IF KINETIC=NN SUPPLIED C IF(SUMM.LT.1.D-4) THEN WRITE(6,'(A)')' SYSTEM IS APPARENTLY NOT MOVING!' RETURN ENDIF C C ADDONK IS EXCESS KINETIC ENERGY. IF THE CALCULATION IS AN IRC, C THIS ENERGY MUST BE REMOVED AFTER A SHORT 'TIME'. C C MAKE AN AD-HOC CORRECTION: IF ADDONK IS NON-ZERO AND HALF IS LARGER C THAN 0.1, MODIFY ADDONK TO REFLECT ERRORS DUE TO START-UP. C IF(HALF.GT.0.1D0.AND.HALF.LT.10000.D0) 1ADDONK=ADDONK*(1.D0+0.06972D0/HALF) C C MAKE AN AD-HOC CORRECTION: IF ADDONK IS NON-ZERO AND HALF IS LESS C THAN -0.1, MODIFY ADDONK TO REFLECT ERRORS DUE TO START-UP. C IF(HALF.LT.-0.1D0.AND.HALF.GT.-10000.D0) 1ADDONK=ADDONK*(1.D0+0.06886D0/HALF) SUMM=SQRT(ADDONK/(0.5D0*SUMM/4.184D10)) ADDK=.FALSE. IF(SUMM.GT.1.D-10)THEN DO 90 I=1,NVAR 90 VELO0(I)=VELO0(I)*SUMM C C IF IT IS A DRC, DESTROY ADDONK. THE KINETIC ENERGY USED WILL COME C FROM THE VELOCITY ONLY. C IF(HALF.GT.1.D-3)ADDONK=0.D0 ENDIF ENDIF ENDIF 100 CONTINUE IUPPER=ILOOP+4999 ILP=ILOOP ONE=0.D0 IF(INDEX(KEYWRD,'RESTART').NE.0.AND.INDEX(KEYWRD,'IRC=').EQ.0) 1ONE=1.D0 DO 190 ILOOP=ILP,IUPPER C C MOVEMENT OF ATOMS WILL BE PROPORTIONAL TO THE AVERAGE VELOCITIES C OF THE ATOMS BEFORE AND AFTER TIME INTERVAL C C C RAPID CHANGE IN GRADIENT IMPLIES SMALL STEP SIZE FOR DELTAT C C KINETIC ENERGY = 1/2 * M * V * V C = 0.5 / (4.184D10) * M * V * V C NEW VELOCITY = OLD VELOCITY + GRADIENT * TIME / MASS C = KCAL/ANGSTROM*SECOND/(ATOMIC WEIGHT) C =4.184*10**10(ERGS)*10**8(PER CM)*DELTAT(SECONDS) C NEW POSITION = OLD POSITION - AVERAGE VELOCITY * TIME INTERVAL C C C ESTABLISH REFERENCE TOTAL ENERGY C ERROR=(ETOT-(EKIN+ESCF)) IF(ILOOP.GT.2)THEN QUADR = 1.D0+ERROR/(EKIN*CONST+0.001D0)*0.5D0 QUADR = MIN(1.3D0,MAX(0.8D0,QUADR)) ELSE QUADR=1.D0 ENDIF IF((LET.OR.EKIN.GT.0.2).AND.ADDK)THEN C C DUMP IN EXCESS KINETIC ENERGY C ETOT=ETOT+ADDONK ADDK=.FALSE. ADDONK=0.D0 ENDIF C C CALCULATE THE DURATION OF THE NEXT STEP. C STEP SIZE IS THAT REQUIRED TO PRODUCE A CONSTANT CHANGE IN GEOMETRY C C C IF DAMPING IS USED, CALCULATE THE NEW TOTAL ENERGY AND C THE RATIO FOR REDUCING THE KINETIC ENERGY C CONST=MAX(1.D-36,0.5D0**(DELTAT*1.D15/HALF)) CONST=SQRT(CONST) VELVEC=0.D0 EKIN=0.D0 DELTA1=DELOLD+DLOLD2 ELOST=0.D0 DO 110 I=1,NVAR C C CALCULATE COMPONENTS OF VELOCITY AS C V = V(0) + V'*T + V"*T*T C WE NEED ALL THREE TERMS, V(0), V' AND V" C VELO1(I) = 1.D0/ATMASS(LOC(1,I))*GRAD(I) IF(ILOOP.GT.3) THEN VELO3(I) = 2.D0/ATMASS(LOC(1,I))* 1(DELTA1*(GROLD(I)-GRAD(I))-DELOLD*(GROLD2(I)-GRAD(I)))/ 2(DELTA1*(DELOLD**2*1.D30)-DELOLD*(DELTA1**2*1.D30)) VELO2(I)=1.D0/ATMASS(LOC(1,I))* 1(GRAD(I)-GROLD(I)-0.5D0*VELO3(I)*(1.D30*DELOLD**2))/(DELOLD*1.D15) ELSE VELO2(I) = 1.D0/ATMASS(LOC(1,I))* 1 (GRAD(I)-GROLD(I))/(1.D15*DELOLD) VELO3(I)=0.D0 ENDIF C C MOVE ATOMS THROUGH DISTANCE EQUAL TO VELOCITY * DELTA-TIME, NOTE C VELOCITY CHANGES FROM START TO FINISH, THEREFORE AVERAGE. C XPARAM(I)=XPARAM(I) 1 -1.D8*(DELTAT*VELO0(I)*ONE 2 +0.5D0*DELTAT**2*VELO1(I) 3 +0.16666D0*(DELTAT**2*1.D15)*DELTAT*VELO2(I) 4 +0.0416666D0*DELTAT**2*(1.D30*DELTAT**2)*VELO3(I)) C C CORRECT ERRORS DUE TO CUBIC COMPONENTS IN ENERGY GRADIENT, C ALSO TO ADD ON EXCESS ENERGY, IF NECESSARY. C VELVEC=VELVEC+VELO0(I)**2 C C MODIFY VELOCITY IN LIGHT OF CURRENT ENERGY GRADIENTS. C C VELOCITY = OLD VELOCITY + (DELTA-T / ATOMIC MASS) * CURRENT GRADIENT C + 1/2 *(DELTA-T * DELTA-T /ATOMIC MASS) * C (SLOPE OF GRADIENT) C SLOPE OF GRADIENT = (GRAD(I)-GROLD(I))/DELOLD C C C THIS EXPRESSION IS ACCURATE TO SECOND ORDER IN TIME. C VELO0(I) = VELO0(I) + DELTAT*VELO1(I) + 0.5D0*DELTAT**2*VELO 12(I)*1.D15 + 0.166666D0*DELTAT*(1.D30*DELTAT**2)*VELO3( 2I) IF(LET.OR.GNORM.GT.3.D0)THEN LET=.TRUE. ELOST=ELOST+VELO0(I)**2*ATMASS(LOC(1,I))*(1-CONST**2) VELO0(I)=VELO0(I)*CONST*QUADR ENDIF C C CALCULATE KINETIC ENERGY (IN 2*ERGS AT THIS POINT) C EKIN=EKIN+VELO0(I)**2*ATMASS(LOC(1,I)) 110 CONTINUE ONE=1.D0 IF(LET.OR.GNORM.GT.3.D0)THEN IF(.NOT.LETOT) THEN IF(ABS(HALF).LT.1.D-3)THEN C C IT IS AN IRC, SO RESET THE TOTAL ENERGY C ETOT=ESCF+ELOST1 ADDONK=0.D0 ELOST1=0.D0 ELOST=0.D0 ELSEIF(ISKIN.EQ.0)THEN C C IT IS A DRC AND KINETIC NOT USED, SO REMOVE EXTRA KINETIC ENERGY C ETOT=ETOT-ADDONK ENDIF ENDIF LETOT=.TRUE. ENDIF C C CONVERT ENERGY INTO KCAL/MOLE C EKIN=0.5D0*EKIN/4.184D10 C C IF IT IS A DAMPED DRC, MODIFY ETOT TO REFLECT LOSS OF KINETIC ENERGY C IF(LETOT.AND.ABS(HALF).GT.0.00001D0) 1ETOT=ETOT-EKIN/CONST**2+EKIN ELOST1=ELOST1+0.5D0*ELOST/4.184D10 C C STORE OLD GRADIENTS FOR DELTA - VELOCITY CALCULATION C DO 120 I=1,NVAR GROLD2(I)=GROLD(I) GROLD(I)=GRAD(I) 120 GRAD(I)=0.D0 C C CALCULATE ENERGY AND GRADIENTS C SCFOLD=ESCF CALL COMPFG(XPARAM,.TRUE.,ESCF,.TRUE.,GRAD,.TRUE.) IF(ILOOP.GT.2)THEN GNORM=0.D0 DO 140 I=1,NVAR,3 SUM=SQRT(DOT(GRAD(I),GRAD(I),3)/ 1(DOT(VELO0(I),VELO0(I),3)+1.D-20)) DO 130 J=I,I+2 130 GERROR(J)=GERROR(J)+GRAD(J)+VELO0(J)*SUM 140 CONTINUE GNORM=SQRT(DOT(GERROR,GERROR,NVAR)) GTOT=GNORM ENDIF GNORM=SQRT(DOT(GRAD,GRAD,NVAR)) C C CONVERT GRADIENTS INTO ERGS/CM C DO 150 I=1,NVAR 150 GRAD(I)=GRAD(I)*4.184D18 C C SPECIAL TREATMENT FOR FIRST POINT - SET "OLD" GRADIENTS EQUAL TO C CURRENT GRADIENTS. C IF(ILOOP.EQ.1) THEN DO 160 I=1,NVAR 160 GROLD(I)=GRAD(I) ENDIF DLOLD2=DELOLD DELOLD=DELTAT SUM=0.D0 DO 170 I=1,NVAR 170 SUM=SUM + ((GRAD(I)-GROLD(I))/4.184D18)**2 IF(ABS(HALF).LT.0.001D0)THEN DELTAT= DELTAT* 1MIN(2.D0, (5.D-5*ACCU/(ABS(ESCF+ELOST1-ETOLD)+1.D-20)))**0.25D0 ETOLD=ESCF+ELOST1 IF(ILOOP.GT.5.AND.SCFOLD-ESCF.LT.-1.D-3 .OR. 1 ILOOP.GT.30.AND.SCFOLD-ESCF.LT.0.D0) THEN WRITE(6,'(//,'' IRC CALCULATION COMPLETE '')') RETURN ENDIF ELSE DELTAT= DELTAT*MIN(1.05D0, 10.D0*ACCU/(SUM+1.D-4)) DELTAT=MIN(DELTAT,3.D-15*ACCU) PAST10(10)=GNORM SUM=0.D0 DO 180 I=1,9 SUM=SUM+ABS(PAST10(I)-PAST10(I+1)) 180 PAST10(I)=PAST10(I+1) IF(SUM.LT.GNLIM)THEN WRITE(6,'(//,A)')' GRADIENT CONSTANT AND SMALL -- ASSUME' 1//' ALL MOTION STOPPED' RETURN ENDIF DELTAT=MIN(DELTAT,2.D-15) ************************************************************************ * * TESTING CODE - REMOVE BEFORE FINAL VERSION ASSEMBLED C# (ILOOP/400)*400.EQ.ILOOP)DELTAT=-DELTAT * ************************************************************************ ENDIF DELTAT=MAX(1.D-16,DELTAT) IF(ABS(HALF).LT.0.00001D0)THEN C C FOR THE IRC: C C ESCF = POTENTIAL ENERGY C ELOST1 = ENERGY LOST (IN DRC, THIS WOULD HAVE BEEN THE KINETIC ENERGY) C ETOT = COMPUTED TOTAL ENERGY = STARTING POTENTIAL ENERGY C C IN DRCOUT 'TOTAL' = ESCF + ELOST1 C 'ERROR' = ESCF + ELOST1 - ETOT C CALL PRTDRC(ESCF,DELTAT,XPARAM,GEOREF, 1ELOST1,GTOT,ETOT,VELO0,NVAR) ELSE C C FOR THE DRC: C C ESCF = POTENTIAL ENERGY C EKIN = CURRENT KINETIC ENERGY C ETOT = COMPUTED TOTAL ENERGY = STARTING POTENTIAL ENERGY - C KINETIC ENERGY LOST THROUGH DAMPING, IF PRESENT. C C IN DRCOUT 'TOTAL' = ESCF + EKIN C 'ERROR' = ESCF + EKIN - ETOT C CALL PRTDRC(ESCF,DELTAT,XPARAM,GEOREF, 1EKIN,DUMMY,ETOT,VELO0,NVAR) ENDIF TNOW=SECOND() TCYCLE=TNOW-OLDTIM OLDTIM=TNOW TLEFT=TLEFT-TCYCLE IF (ILOOP.EQ.IUPPER.OR.TLEFT.LT.3*TCYCLE) THEN 46 OPEN(UNIT=9,FILE=GETNAM('FOR009'),STATUS='NEW', +FORM='FORMATTED',ERR=45) GOTO 47 45 OPEN(UNIT=9,FILE=GETNAM('FOR009'),STATUS='OLD') CLOSE(9,STATUS='DELETE') GOTO 46 47 CONTINUE REWIND 9 OPEN(UNIT=10,FILE=GETNAM('FOR010'),STATUS='UNKNOWN', +FORM='UNFORMATTED') REWIND 10 WRITE(9,'(A)')' CARTESIAN GEOMETRY PARAMETERS IN ANGSTROMS' WRITE(9,'(3F19.13)')(XPARAM(I),I=1,NVAR) WRITE(9,'(A)')' VELOCITY FOR EACH CARTESIAN COORDINATE, IN C 1M/SEC' WRITE(9,'(3F19.3)')(VELO0(I),I=1,NVAR) WRITE(9,'(A)')' FIRST, SECOND, AND THIRD-ORDER GRADIENTS, ET 1C' WRITE(9,*)(GRAD(I),I=1,NVAR) WRITE(9,*)(GROLD(I),I=1,NVAR) WRITE(9,*)(GROLD2(I),I=1,NVAR) I=ILOOP+1 WRITE(9,*)ETOT,ESCF,EKIN,DELOLD,DELTAT,DLOLD2,I, 1GNORM,LETOT,ELOST1,GTOT ESCF=-1.D9 CALL PRTDRC(ESCF,DELTAT,XPARAM,GEOREF, 1EKIN,ELOST,ETOT,VELO0,NVAR) LINEAR=(NORBS*(NORBS+1))/2 WRITE(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)WRITE(10)(PB(I),I=1,LINEAR) WRITE(6,'(//10X,'' RUNNING OUT OF TIME, RESTART FILE WRITTEN 1'')') WRITE(6,'(A)')' GEOMETRY AND VELOCITY ARE IN RESTART FILE' 1//' IN ASCII' RETURN ENDIF 190 CONTINUE END mopac7-1.15/fortran/rotat.f0000644000175000017500000000561511053302063012522 00000000000000 SUBROUTINE ROTAT(COORD,I,J,IX,RIJ,DEL1,IDX) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /DERIVS/ DS(16),DG(22),DR(100),TDX(3),TDY(3),TDZ(3) COMMON /EXTRA/ G(22),TX(3),TY(3),TZ(3) DIMENSION COORD(3,25) XD=COORD(1,I)-COORD(1,J) YD=COORD(2,I)-COORD(2,J) ZD=COORD(3,I)-COORD(3,J) RXY=SQRT(XD*XD+YD*YD) RYZ=SQRT(YD*YD+ZD*ZD) RZX=SQRT(ZD*ZD+XD*XD) DO 10 IJK=1,3 TX(IJK)=0.0D0 TY(IJK)=0.0D0 TZ(IJK)=0.0D0 TDX(IJK)=0.0D0 TDY(IJK)=0.0D0 TDZ(IJK)=0.0D0 10 CONTINUE IF(RXY.LT.1.0D-4) THEN C MOLECULAR Z AXIS IS PARALLEL TO DIATOMIC Z AXIS TX(3)=1.0D0 IF(ZD.LT.0.0D0) TX(3)=-1.0D0 TY(2)=1.0D0 TZ(1)=TX(3) IF(IDX.EQ.1) RETURN IF(IX.EQ.1) TDX(1)=1.0D0/RIJ IF(IX.EQ.2) TDX(2)=1.0D0/RIJ IF(IX.EQ.1) TDZ(3)=-1.0D0/RIJ IF(IX.EQ.2) TDY(3)=-TX(3)/RIJ ELSEIF(RYZ.LT.1.0D-4) THEN C MOLECULAR X AXIS IS PARALLEL TO DIATOMIC Z AXIS TX(1)=1.0D0 IF(XD.LT.0.0D0) TX(1)=-1.0D0 TY(2)=TX(1) TZ(3)=1.0D0 IF(IDX.EQ.1) RETURN IF(IX.EQ.2) TDX(2)=1.0D0/RIJ IF(IX.EQ.3) TDX(3)=1.0D0/RIJ IF(IX.EQ.2) TDY(1)=-1.0D0/RIJ IF(IX.EQ.3) TDZ(1)=-TX(1)/RIJ ELSEIF(RZX.LT.1.0D-4) THEN C MOLECULAR Y AXIS IS PARALLEL TO DIATOMIC Z AXIS TX(2)=1.0D0 IF(YD.LT.0.0D0) TX(2)=-1.0D0 TY(1)=-TX(2) TZ(3)=1.0D0 IF(IDX.EQ.1) RETURN IF(IX.EQ.1) TDX(1)=1.0D0/RIJ IF(IX.EQ.3) TDX(3)=1.0D0/RIJ IF(IX.EQ.1) TDY(2)=1.0D0/RIJ IF(IX.EQ.3) TDZ(2)=-TX(2)/RIJ ELSE TX(1)=XD/RIJ TX(2)=YD/RIJ TX(3)=ZD/RIJ TZ(3)=RXY/RIJ TY(1)=-TX(2)*SIGN(+1.0D0,TX(1))/TZ(3) TY(2)=ABS(TX(1)/TZ(3)) TY(3)=0.0D0 TZ(1)=-TX(1)*TX(3)/TZ(3) TZ(2)=-TX(2)*TX(3)/TZ(3) IF(IDX.EQ.1) RETURN TERM=DEL1/(RIJ*RIJ) IF(IX.EQ.1)THEN TDX(1)=1.0D0/RIJ-TX(1)*TERM TDX(2)=-TX(2)*TERM TDX(3)=-TX(3)*TERM TDZ(3)=TX(1)/RXY-TZ(3)*TERM ELSEIF(IX.EQ.2) THEN TDX(1)=-TX(1)*TERM TDX(2)=1.0D0/RIJ-TX(2)*TERM TDX(3)=-TX(3)*TERM TDZ(3)=TX(2)/RXY-TZ(3)*TERM ELSEIF(IX.EQ.3)THEN TDX(1)=-TX(1)*TERM TDX(2)=-TX(2)*TERM TDX(3)=1.0D0/RIJ-TX(3)*TERM TDZ(3)=-TZ(3)*TERM ENDIF TDY(1)=-TDX(2)/TZ(3)+TX(2)*TDZ(3)/TZ(3)**2 IF(TX(1).LT.0.0D0) TDY(1)=-TDY(1) TDY(2)=TDX(1)/TZ(3)-TX(1)*TDZ(3)/TZ(3)**2 IF(TX(1).LT.0.0D0) TDY(2)=-TDY(2) TDY(3)=0.0D0 TDZ(1)=-TX(3)*TDX(1)/TZ(3)-TX(1)*TDX(3)/TZ(3) 1 +TX(1)*TX(3)*TDZ(3)/TZ(3)**2 TDZ(2)=-TX(3)*TDX(2)/TZ(3)-TX(2)*TDX(3)/TZ(3) 1 +TX(2)*TX(3)*TDZ(3)/TZ(3)**2 ENDIF RETURN END mopac7-1.15/fortran/grid.f0000644000175000017500000001635411053302063012320 00000000000000 SUBROUTINE GRID IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' ************************************************************************ * * GRID CALCULATES THE ENERGY-SURFACE RESULTING FROM VARIATION OF * TWO COORDINATES. THE STEP-SIZE IS STEP1 AND STEP2, AND A 11 * BY 11 GRID OF POINTS IS GENERATED * * This subroutine is extensively modified by Manyin Yi, Aug 1989. * * New features: * 1. The input geometry definition should always be the upper-left * corner(smallest coordinates) instead of the middle point; * 2. The starting point for calculation can be one of the four * corners by setting "+/-" STEP1/2; * 3. The grid size(max 23*23) is controlled by POINT1/2, * if POINT1/2 is omitted, then a size of 11*11 is assumed; * kwd MAX sets the max size; * 4. The upper-left corner of the plotting grid always corresponds * to the smallest coordinates, the lower-right corner to the * largest, no matter where the calculation starts; * 5. Restartable. * 6. Write out UNIMAP irregular data UMP.DAT * ************************************************************************ COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, XPARAM(MAXPAR) COMMON /GRADNT/ GRAD(MAXPAR),GNORM COMMON /GRAVEC/ COSINE COMMON /MESH / LATOM1, LPARA1, LATOM2, LPARA2 COMMON /GPARAM/ CURRT1,CURRT2 COMMON /IJLP / IJLP, ILP, JLP, JLP1, IONE COMMON /SURF / SURF COMMON /KEYWRD/ KEYWRD COMMON /TITLES/ KOMENT, TITLE CHARACTER KEYWRD*241, KOMENT*81, TITLE*81, GETNAM*80 LOGICAL RESTRT DIMENSION GD(MAXPAR),XLAST(MAXPAR),MDFP(20),XDFP(20) DIMENSION SURFAC(23,23) DIMENSION SURF(23*23) DIMENSION UMPX(23),UMPY(23),UMPZ(23*23) C STEP1=READA(KEYWRD,INDEX(KEYWRD,'STEP1')+6) STEP2=READA(KEYWRD,INDEX(KEYWRD,'STEP2')+6) NPTS1=11 NPTS2=11 IF (INDEX(KEYWRD,' MAX').NE.0) THEN NPTS1=23 NPTS2=23 GOTO 10 ENDIF IF (INDEX(KEYWRD,'POINT1').NE.0) 1 NPTS1=ABS(READA(KEYWRD,INDEX(KEYWRD,'POINT1')+7)) IF (INDEX(KEYWRD,'POINT2').NE.0) 1 NPTS2=ABS(READA(KEYWRD,INDEX(KEYWRD,'POINT2')+7)) 10 RESTRT=(INDEX(KEYWRD,'RESTART').NE.0) C C THE TOP-LEFT VALUE OF THE FIRST AND SECOND DIMENSIONS ARE C GEO(LPARA1,LATOM1) AND GEO(LPARA2,LATOM2) C UMPY(1)=GEO(LPARA1,LATOM1) UMPX(1)=GEO(LPARA2,LATOM2) DEGREE=180.D0/3.14159265359D0 IF(LPARA1.NE.1)STEP1=STEP1/DEGREE IF(LPARA2.NE.1)STEP2=STEP2/DEGREE C C NOW SET THE STARTING POINT TO THE DESIRED CORNER C IF(STEP1.GT.0.0.AND.STEP2.GT.0.0) THEN START1=GEO(LPARA1,LATOM1) START2=GEO(LPARA2,LATOM2) ENDIF C BOTTOM-LEFT IF(STEP1.LT.0.0.AND.STEP2.GT.0.0)THEN START1=GEO(LPARA1,LATOM1)+(NPTS1-1)*(ABS(STEP1)) START2=GEO(LPARA2,LATOM2) ENDIF C TOP-RIGHT IF(STEP1.GT.0.0.AND.STEP2.LT.0.0)THEN START1=GEO(LPARA1,LATOM1) START2=GEO(LPARA2,LATOM2)+ABS((NPTS2-1)*STEP2) ENDIF C BOTTOM-RIGHT IF(STEP1.LT.0.0.AND.STEP2.LT.0.0)THEN START1=GEO(LPARA1,LATOM1)+ABS((NPTS1-1)*STEP1) START2=GEO(LPARA2,LATOM2)+ABS((NPTS2-1)*STEP2) ENDIF C C NOW TO SWEEP THROUGH THE GRID OF POINTS LEFT TO RIGHT THEN RIGHT C TO LEFT OR VISA VERSA. THIS SHOULD AVOID THE GEOMETRY OR SCF GETTING C MESSED UP. C IF(LPARA1.NE.1) THEN C1=DEGREE ELSE C1=1.D0 ENDIF IF(LPARA2.NE.1) THEN C2=DEGREE ELSE C2=1.D0 ENDIF C THESE PARAMETERS NEED TO BE DUMPED IN '.RES' CURRT1=START1 CURRT2=START2 IONE=-1 CPUTOT=0.0D0 IJLP=0 ILP=1 JLP=1 JLP1=1 SURF(1)=0.D0 C IF (RESTRT) THEN MDFP(9)=0 CALL DFPSAV(CPUTOT,XPARAM,GD,XLAST,ESCF,MDFP,XDFP) ENDIF C GEO(LPARA1,LATOM1)=CURRT1 GEO(LPARA2,LATOM2)=CURRT2 DO 30 ILOOP=ILP,NPTS1 IONE=-IONE DO 20 JLOOP=JLP,NPTS2 JLOOP1=0 IF(IONE.LT.0)JLOOP1=NPTS2+1 IF(RESTRT) THEN JLOOP1=JLP1 IONE=-IONE RESTRT=.FALSE. ELSE JLOOP1=JLOOP1+IONE JLP1=JLOOP1 ENDIF CPU1=SECOND() CURRT1=GEO(LPARA1,LATOM1) CURRT2=GEO(LPARA2,LATOM2) CALL FLEPO(XPARAM, NVAR, ESCF) CPU2=SECOND() CPU3=CPU2-CPU1 CPUTOT=CPUTOT+CPU3 JLP=JLP+1 IJLP=IJLP+1 SURF(IJLP)=ESCF WRITE(6,'(/'' FIRST VARIABLE SECOND VARIABLE 1 FUNCTION'')') WRITE(6,'('' :'',F16.5,F16.5,F16.6)')GEO(LPARA1,LATOM1)*C1, 1 GEO(LPARA2,LATOM2)*C2,ESCF CALL GEOUT(6) GEO(LPARA2,LATOM2)=GEO(LPARA2,LATOM2)+STEP2*IONE 20 CONTINUE GEO(LPARA1,LATOM1)=GEO(LPARA1,LATOM1)+STEP1 GEO(LPARA2,LATOM2)=GEO(LPARA2,LATOM2)-STEP2*IONE ILP=ILP+1 JLP=1 30 CONTINUE WRITE(6,'(/10X,''HORIZONTAL: VARYING SECOND PARAMETER,'', 1 /10X,''VERTICAL: VARYING FIRST PARAMETER'')') WRITE(6,'(/10X,''WHOLE OF GRID, SUITABLE FOR PLOTTING'',//)') C C ARCHIVE OPEN(UNIT=12,FILE=GETNAM('FOR012'),STATUS='UNKNOWN') OPEN(UNIT=20,FILE=GETNAM('FOR020'),STATUS='NEW',ERR=31) GOTO 32 31 OPEN(UNIT=20,FILE=GETNAM('FOR020'),STATUS='OLD') 32 CONTINUE WRITE(12,40) CALL WRTTXT(12) 40 FORMAT(' ARCHIVE FILE FOR GRID CALCULATION'/'GRID OF HEATS'/) WRITE(12,'(/'' TOTAL CPU TIME IN FLEPO : '',F10.3/)') CPUTOT C C WRITE OUT THE GRIDS IONE=1 ILOOP=1 JLOOP1=1 DO 50 IJ=1,NPTS1*NPTS2 SURFAC(JLOOP1,ILOOP)=SURF(IJ) N=IJ-(IJ/NPTS2)*NPTS2 IF (N.EQ.0) THEN ILOOP=ILOOP+1 JLOOP1=JLOOP1+IONE IONE=-IONE ENDIF JLOOP1=JLOOP1+IONE 50 CONTINUE C DO 60 I=2,NPTS1 60 UMPY(I)=UMPY(1)+(I-1)*ABS(STEP1) DO 70 I=2,NPTS2 70 UMPX(I)=UMPX(1)+(I-1)*ABS(STEP2) N=0 IF(STEP1.GT.0.0.AND.STEP2.GT.0.0) THEN DO 90 I=1,NPTS1 DO 80 J=1,NPTS2 N=N+1 80 UMPZ(N)=SURFAC(J,I) WRITE(6,'(11F7.2)')(SURFAC(J,I),J=1,NPTS2) 90 WRITE(12,'(11F7.2)')(SURFAC(J,I),J=1,NPTS2) ENDIF IF(STEP1.LT.0.0.AND.STEP2.GT.0.0) THEN DO 110 I=NPTS1,1,-1 DO 100 J=1,NPTS2 N=N+1 100 UMPZ(N)=SURFAC(J,I) WRITE(6,'(11F7.2)')(SURFAC(J,I),J=1,NPTS2) 110 WRITE(12,'(11F7.2)')(SURFAC(J,I),J=1,NPTS2) ENDIF IF(STEP1.GT.0.0.AND.STEP2.LT.0.0) THEN DO 130 I=1,NPTS1 DO 120 J=NPTS2,1,-1 N=N+1 120 UMPZ(N)=SURFAC(J,I) WRITE(6,'(11F7.2)')(SURFAC(J,I),J=NPTS2,1,-1) 130 WRITE(12,'(11F7.2)')(SURFAC(J,I),J=NPTS2,1,-1) ENDIF IF(STEP1.LT.0.0.AND.STEP2.LT.0.0) THEN DO 150 I=NPTS1,1,-1 DO 140 J=NPTS2,1,-1 N=N+1 140 UMPZ(N)=SURFAC(J,I) WRITE(6,'(11F7.2)')(SURFAC(J,I),J=NPTS2,1,-1) 150 WRITE(12,'(11F7.2)')(SURFAC(J,I),J=NPTS2,1,-1) ENDIF DO 160 I=0,NPTS1-1 DO 160 J=1,NPTS2 N=I*NPTS2+J 160 WRITE(20,'(3(1X,F8.3))')UMPX(J),UMPY(I+1),UMPZ(N) CLOSE(20) END mopac7-1.15/fortran/ef.f0000644000175000017500000027613211053302063011767 00000000000000 SUBROUTINE EF(XPARAM, NVAR, FUNCT) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DOUBLE PRECISION LAMDA,LAMDA0 INCLUDE 'SIZES' DIMENSION XPARAM(MAXPAR) ********************************************************************** * * EF IS A QUASI NEWTON RAPHSON OPTIMIZATION ROUTINE BASED ON * Jacs Simons P-RFO algorithm as implemented by Jon Baker * (J.COMP.CHEM. 7, 385). Step scaling to keep length within * trust radius is taken from Culot et al. (Theo. Chim. Acta 82, 189) * The trust radius can be updated dynamically according to Fletcher. * Safeguards on valid step for TS searches based on actual/predicted * function change and change in TS mode are own modifications * * ON ENTRY XPARAM = VALUES OF PARAMETERS TO BE OPTIMISED. * NVAR = NUMBER OF PARAMETERS TO BE OPTIMISED. * * ON EXIT XPARAM = OPTIMISED PARAMETERS. * FUNCT = HEAT OF FORMATION IN KCAL/MOL. * * Current version implementing combined NR, P-RFO and QA algorithm * together with thrust radius update and step rejection was * made october 1992 by F.Jensen, Odense, DK * ********************************************************************** C COMMON /MESAGE/ IFLEPO,ISCF COMMON /GEOVAR/ NDUM,LOC(2,MAXPAR), IDUMY, XARAM(MAXPAR) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /ISTOPE/ AMS(107) COMMON /LAST / LAST COMMON /KEYWRD/ KEYWRD C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON /TIME / TIME0 COMMON /TIMEC / TIME0 C ***************************** at 1994-05-25 ***** COMMON /GRADNT/ GRAD(MAXPAR),GNFINA COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /NUMCAL/ NUMCAL COMMON /TIMDMP/ TLEFT, TDUMP COMMON /SIGMA2/ GNEXT1(MAXPAR), GMIN1(MAXPAR) CONVEX COMMON /NLLCOM/ HESS(MAXPAR,MAXPAR),BMAT(MAXPAR,MAXPAR), CONVEX 1PMAT(MAXPAR*MAXPAR) COMMON /NLLCOM/ HESS(MAXPAR,MAXPAR),BMAT(MAXPAR,MAXPAR), 1PMAT(MAXPAR**2) CONVEX COMMON /SCRACH/ PVEC COMMON /SCFTYP/ EMIN, LIMSCF COMMON/OPTEF/OLDF(MAXPAR),D(MAXPAR),VMODE(MAXPAR), $U(MAXPAR,MAXPAR),DD,rmin,rmax,omin,xlamd,xlamd0,skal, $MODE,NSTEP,NEGREQ,IPRNT COMMON/THREADS/NUM_THREADS C ***** Modified by Jiro Toyoda at 1994-05-25 ***** C COMMON/FLUSH/NFLUSH COMMON/FLUSHC/NFLUSH C ***************************** at 1994-05-25 ***** DIMENSION IPOW(9), EIGVAL(MAXPAR),TVEC(MAXPAR),SVEC(MAXPAR), 1FX(MAXPAR),HESSC(MAXHES),UC(MAXPAR**2),oldfx(maxpar), 1oldeig(maxpar), $oldhss(maxpar,maxpar),oldu(maxpar,maxpar),ooldf(maxpar) DIMENSION BB(MAXPAR,MAXPAR) LOGICAL RESTRT,SCF1,LIMSCF,LOG LOGICAL LUPD,lts,lrjk,lorjk,rrscal,donr,gnmin CHARACTER KEYWRD*241 EQUIVALENCE(IPOW(1),IHESS) DATA ICALCN,ZERO,ONE,TWO /0,0.D0,1.D0,2.D0/ DATA tmone /1.0d-1/, TMTWO/1.0D-2/, TMSIX/1.0D-06/ data three/3.0d0/, four/4.0d0/, 1pt25/0.25d0/, pt5/0.50d0/, pt75/0.75d0/ data demin/2.0d-2/, gmin/5.0d0/ C GET ALL INITIALIZATION DATA IF(ICALCN.NE.NUMCAL) 1CALL EFSTR(XPARAM,FUNCT,IHESS,NTIME,ILOOP,IGTHES, $MXSTEP,IRECLC,IUPD,DMAX,DDMAX,dmin,TOL2,TOTIME,TIME1,TIME2,nvar, $SCF1,LUPD,ldump,log,rrscal,donr,gnmin) lts=.false. if (negreq.eq.1) lts=.true. lorjk=.false. c osmin is smallest step for which a ts-mode overlap less than omin c will be rejected. for updated hessians there is little hope of c better overlap by reducing the step below 0.005. for exact hessian c the overlap should go toward one as the step become smaller, but c don't allow very small steps osmin=0.005d0 if(ireclc.eq.1)osmin=0.001d0 IF (SCF1) THEN GNFINA=SQRT(DOT(GRAD,GRAD,NVAR)) IFLEPO=1 RETURN ENDIF C CHECK THAT GEOMETRY IS NOT ALREADY OPTIMIZED RMX=SQRT(DOT(GRAD,GRAD,NVAR)) IF (RMX.LT.TOL2) THEN IFLEPO=2 LAST=1 RETURN ENDIF C GET INITIAL HESSIAN. IF ILOOP IS .LE.0 THIS IS AN OPTIMIZATION RESTART C AND HESSIAN SHOULD ALREADY BE AVAILABLE IF (ILOOP .GT. 0) CALL GETHES(XPARAM,IGTHES,NVAR,iloop,TOTIME) C START OF MAIN LOOP C WE NOW HAVE GRADIENTS AND A HESSIAN. IF THIS IS THE FIRST C TIME THROUGH DON'T UPDATE THE HESSIAN. FOR LATER LOOPS ALSO C CHECK IF WE NEED TO RECALCULATE THE HESSIAN IFLEPO=0 itime=0 10 CONTINUE c store various things for possibly omin rejection do 30 i=1,nvar oldfx(i)=fx(i) ooldf(i)=oldf(i) oldeig(i)=eigval(i) do 20 j=1,nvar oldhss(i,j)=hess(i,j) oldu(i,j)=u(i,j) 20 continue 30 continue IF (IHESS.GE.IRECLC.AND.IFLEPO.NE.15) THEN ILOOP=1 IHESS=0 if (igthes.ne.3)IGTHES=1 CALL GETHES(XPARAM,IGTHES,NVAR,iloop,TOTIME) ENDIF IF (IHESS.GT.0) CALL UPDHES(SVEC,TVEC,NVAR,IUPD) IF(IPRNT.GE.2) call geout(6) IF(IPRNT.GE.2) THEN WRITE(6,'('' XPARAM '')') WRITE(6,'(5(2I3,F10.4))')(LOC(1,I),LOC(2,I),XPARAM(I),I=1,NV 1AR) WRITE(6,'('' GRADIENTS'')') WRITE(6,'(3X,8F9.3)')(GRAD(I),I=1,NVAR) ENDIF C C PRINT RESULTS IN CYCLE GNFINA=SQRT(DOT(GRAD,GRAD,NVAR)) TIME2=SECOND() if (itime.eq.0) time1=time0 TSTEP=TIME2-TIME1 IF (TSTEP.LT.ZERO)TSTEP=ZERO TLEFT=TLEFT-TSTEP TIME1=TIME2 itime=itime+1 IF (TLEFT .LT. TSTEP*TWO) GOTO 280 IF(LDUMP.EQ.0)THEN WRITE(6,40)NSTEP+1,MIN(TSTEP,9999.99D0), 1MIN(TLEFT,9999999.9D0),MIN(GNFINA,999999.999D0),FUNCT IF(LOG)WRITE(11,40)NSTEP+1,MIN(TSTEP,9999.99D0), 1MIN(TLEFT,9999999.9D0),MIN(GNFINA,999999.999D0),FUNCT 40 FORMAT(' CYCLE:',I4,' TIME:',F7.2,' TIME LEFT:',F9.1, 1' GRAD.:',F10.3,' HEAT:',G13.7) IF ( NFLUSH.NE.0 ) THEN IF ( MOD(NSTEP+1,NFLUSH).EQ.0) THEN call flush(6) call flush(11) ENDIF ENDIF ELSE WRITE(6,50)MIN(TLEFT,9999999.9D0), 1MIN(GNFINA,999999.999D0),FUNCT IF(LOG)WRITE(11,50)MIN(TLEFT,9999999.9D0), 1MIN(GNFINA,999999.999D0),FUNCT 50 FORMAT(' RESTART FILE WRITTEN, TIME LEFT:',F9.1, 1' GRAD.:',F10.3,' HEAT:',G13.7) IF ( NFLUSH.NE.0 ) THEN IF ( MOD(NSTEP+1,NFLUSH).EQ.0) THEN call flush(6) call flush(11) ENDIF ENDIF ENDIF IHESS=IHESS+1 NSTEP=NSTEP+1 C C TEST FOR CONVERGENCE C RMX=SQRT(DOT(GRAD,GRAD,NVAR)) IF (RMX.LT.TOL2)GOTO 250 OLDE = FUNCT oldgn = rmx DO 60 I=1,NVAR OLDF(I)=GRAD(I) 60 CONTINUE C C if the optimization is in cartesian coordinates, we should remove C translation and rotation modes. Possible problem if run is in C internal but with exactly 3*natoms variable (i.e. dummy atoms C are also optimized). if (nvar.eq.3*numat) then if (nstep.eq.1) write(6,70) 70 format(1x,'WARNING! EXACTLY 3N VARIABLES. EF ASSUMES THIS IS', $ ' A CARTESIAN OPTIMIZATION.',/,1x,'IF THE OPTIMIZATION IS', $ ' IN INTERNAL COORDINATES, EF WILL NOT WORK') call prjfc(hess,xparam,nvar) endif IJ=0 DO 80 I=1,NVAR DO 80 J=1,I IJ=IJ+1 HESSC(IJ)=HESS(J,I) 80 CONTINUE CONVEX CALL HQRII(HESSC,NVAR,NVAR,EIGVAL,UC) CALL RSP(HESSC,NVAR,NVAR,EIGVAL,UC) IJ=0 DO 90 I=1,NVAR IF (ABS(EIGVAL(I)).LT.TMSIX) EIGVAL(I)=ZERO DO 90 J=1,NVAR IJ=IJ+1 U(J,I)=UC(IJ) 90 CONTINUE IF (IPRNT.GE.3) CALL PRTHES(EIGVAL,NVAR) IF (MXSTEP.EQ.0) nstep=0 IF (MXSTEP.EQ.0) GOTO 280 NEG=0 DO 100 I=1,NVAR IF (EIGVAL(I) .LT. ZERO)NEG=NEG+1 100 CONTINUE IF (IPRNT.GE.1)WRITE(6,110)NEG,(eigval(i),i=1,neg) 110 FORMAT(/,10X,'HESSIAN HAS',I3,' NEGATIVE EIGENVALUE(S)',6f7.1,/) c if an eigenvalue has been zero out it is probably one of the T,R modes c in a cartesian optimization. zero corresponding fx to allow formation c of step without these contributions. a more safe criteria for deciding c whether this actually is a cartesian optimization should be put in c some day... DO 120 I=1,NVAR FX(I)=DOT(U(1,I),GRAD,NVAR) if (abs(eigval(i)).eq.zero) fx(i)=zero 120 CONTINUE c form geometry step d 130 CALL FORMD(EIGVAL,FX,NVAR,DMAX,osmin,LTS,lrjk,lorjk,rrscal,donr) c if lorjk is true, then ts mode overlap is less than omin, reject prev step if (lorjk) then if (iprnt.ge.1)write(6,*)' Now undoing previous step' dmax=odmax dd=odd olde=oolde do i=1,nvar fx(i)=oldfx(i) oldf(i)=ooldf(i) eigval(i)=oldeig(i) do j=1,nvar hess(i,j)=oldhss(i,j) u(i,j)=oldu(i,j) enddo enddo DO 140 I=1,NVAR XPARAM(I)=XPARAM(I)-D(I) K=LOC(1,I) L=LOC(2,I) GEO(L,K)=XPARAM(I) 140 CONTINUE IF(NDEP.NE.0) CALL SYMTRY dmax=min(dmax,dd)/two odmax=dmax odd=dd nstep=nstep-1 if (dmax.lt.dmin) goto 230 if (iprnt.ge.1)write(6,*) 1' Finish undoing, now going for new step' goto 130 endif C C FORM NEW TRIAL XPARAM AND GEO C DO 150 I=1,NVAR XPARAM(I)=XPARAM(I)+D(I) K=LOC(1,I) L=LOC(2,I) GEO(L,K)=XPARAM(I) 150 CONTINUE IF(NDEP.NE.0) CALL SYMTRY C C COMPARE PREDICTED E-CHANGE WITH ACTUAL C depre=zero imode=1 if (mode.ne.0)imode=mode do 160 i=1,nvar xtmp=xlamd if (lts .and. i.eq.imode) xtmp=xlamd0 if (abs(xtmp-eigval(i)).lt.tmtwo) then ss=zero else ss=skal*fx(i)/(xtmp-eigval(i)) endif frodo=ss*fx(i) + pt5*ss*ss*eigval(i) c write(6,88)i,fx(i),ss,xtmp,eigval(i),frodo depre=depre+frodo 160 continue c88 format(i3,f10.3,f10.6,f10.3,4f10.6) C C GET GRADIENT FOR NEW GEOMETRY C CALL COMPFG(XPARAM, .TRUE., FUNCT, .TRUE., GRAD, .TRUE.) if(gnmin)gntest=sqrt(dot(grad,grad,nvar)) DEACT = FUNCT-OLDE RATIO = DEACT/DEPRE if(iprnt.ge.1)WRITE(6,170)DEACT,DEPRE,RATIO 170 FORMAT(5X,'ACTUAL, PREDICTED ENERGY CHANGE, RATIO',2F10.3,F10.5) lrjk=.false. C if this is a minimum search, don't allow the energy to raise if (.not.lts .and. funct.gt.olde) then if (iprnt.ge.1)write(6,180)funct,min(dmax,dd)/two 180 format(1x,'energy raises ',f10.4,' rejecting step, ', $ 'reducing dmax to',f7.4) lrjk=.true. endif if (gnmin .and. gntest.gt.oldgn) then if (iprnt.ge.1)write(6,181)gntest,min(dmax,dd)/two 181 format(1x,'gradient norm raises ',f10.4,' rejecting step, ', $ 'reducing dmax to',f7.4) lrjk=.true. endif if (lts .and. (ratio.lt.rmin .or. ratio.gt.rmax) .and. $(abs(depre).gt.demin .or. abs(deact).gt.demin)) then if (iprnt.ge.1)write(6,190)min(dmax,dd)/two 190 format(1x,'unacceptable ratio,', $ ' rejecting step, reducing dmax to',f7.4) lrjk=.true. endif if (lrjk) then DO 200 I=1,NVAR XPARAM(I)=XPARAM(I)-D(I) K=LOC(1,I) L=LOC(2,I) GEO(L,K)=XPARAM(I) 200 CONTINUE IF(NDEP.NE.0) CALL SYMTRY dmax=min(dmax,dd)/two if (dmax.lt.dmin) goto 230 goto 130 endif IF(IPRNT.GE.1)WRITE(6,210)DD 210 FORMAT(5X,'STEPSIZE USED IS',F9.5) IF(IPRNT.GE.2) THEN WRITE(6,'('' CALCULATED STEP'')') WRITE(6,'(3X,8F9.5)')(D(I),I=1,NVAR) ENDIF C C POSSIBLE USE DYNAMICAL TRUST RADIUS odmax=dmax odd=dd oolde=olde IF (LUPD .and. ( (RMX.gt.gmin) .or. $ (abs(depre).gt.demin .or. abs(deact).gt.demin) ) ) THEN c Fletcher recommend dmax=dmax/4 and dmax=dmax*2 c these are are a little more conservative since hessian is being updated c don't reduce trust radius due to ratio for min searches if (lts .and. ratio.le.tmone .or. ratio.ge.three) $ dmax=min(dmax,dd)/two if (lts .and. ratio.ge.pt75 .and. ratio.le.(four/three) $ .and. dd.gt.(dmax-tmsix)) $ dmax=dmax*sqrt(two) c allow wider limits for increasing trust radius for min searches if (.not.lts .and. ratio.ge.pt5 $ .and. dd.gt.(dmax-tmsix)) $ dmax=dmax*sqrt(two) c be brave if 0.90 < ratio < 1.10 ... if (abs(ratio-one).lt.tmone) dmax=dmax*sqrt(two) dmax=max(dmax,dmin-tmsix) dmax=min(dmax,ddmax) ENDIF c allow stepsize up to 0.1 in the end-game where changes are less c than demin and gradient is less than gmin IF (LUPD .and. RMX.lt.gmin .and. $ (abs(depre).lt.demin .and. abs(deact).lt.demin) ) $ dmax=max(dmax,tmone) if(iprnt.ge.1)WRITE(6,220)DMAX 220 FORMAT(5X,'CURRENT TRUST RADIUS = ',F7.5) 230 if (dmax.lt.dmin) then write(6,240)dmin 240 format(/,5x,'TRUST RADIUS NOW LESS THAN ',F7.5,' OPTIMIZATION', $ ' TERMINATING',/,5X, 1' GEOMETRY MAY NOT BE COMPLETELY OPTIMIZED') goto 270 endif C CHECK STEPS AND ENOUGH TIME FOR ANOTHER PASS if (nstep.ge.mxstep) goto 280 C IN USER UNFRIENDLY ENVIROMENT, SAVE RESULTS EVERY 1 CPU HRS ITTEST=AINT((TIME2-TIME0)/TDUMP) IF (ITTEST.GT.NTIME) THEN LDUMP=1 NTIME=MAX(ITTEST,(NTIME+1)) IPOW(9)=2 TT0=SECOND()-TIME0 CALL EFSAV(TT0,HESS,FUNCT,GRAD,XPARAM,PMAT,-NSTEP,NSTEP,BMAT,I 1POW) ELSE LDUMP=0 ENDIF C RETURN FOR ANOTHER CYCLE GOTO 10 C C ****** OPTIMIZATION TERMINATION ****** C 250 CONTINUE WRITE(6,260)RMX,TOL2 260 FORMAT(/,5X,'RMS GRADIENT =',F9.5,' IS LESS THAN CUTOFF =', 1F9.5,//) 270 IFLEPO=15 LAST=1 C SAVE HESSIAN ON FILE 9 IPOW(9)=2 TT0=SECOND()-TIME0 CALL EFSAV(TT0,HESS,FUNCT,GRAD,XPARAM,PMAT,-NSTEP,NSTEP,BMAT,I 1POW) C CALL COMPFG TO CALCULATE ENERGY FOR FIXING MO-VECTOR BUG CALL COMPFG(XPARAM, .TRUE., FUNCT, .TRUE., GRAD, .FALSE.) RETURN 280 CONTINUE C WE RAN OUT OF TIME or too many iterations. DUMP RESULTS IF (TLEFT .LT. TSTEP*TWO) THEN WRITE(6,290) 290 FORMAT(/,5X,'NOT ENOUGH TIME FOR ANOTHER CYCLE') ENDIF IF (nstep.ge.mxstep) THEN WRITE(6,300) 300 FORMAT(/,5X,'EXCESS NUMBER OF OPTIMIZATION CYCLES') ENDIF IPOW(9)=1 TT0=SECOND()-TIME0 CALL EFSAV(TT0,HESS,FUNCT,GRAD,XPARAM,PMAT,-NSTEP,NSTEP,BMAT,I 1POW) STOP END SUBROUTINE EFSAV(TT0,HESS,FUNCT,GRAD,XPARAM,PMAT,IL,JL,BMAT,IPOW) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' CHARACTER ELEMNT*2, KEYWRD*241, KOMENT*81, TITLE*81 DIMENSION HESS(MAXPAR,*),GRAD(*),BMAT(MAXPAR,*),IPOW(9), 1 XPARAM(*), PMAT(*) ********************************************************************** * * EFSAV STORES AND RETRIEVE DATA USED IN THE EF GEOMETRY * OPTIMISATION. VERY SIMILAR TO POWSAV. * * ON INPUT HESS = HESSIAN MATRIX, PARTIAL OR WHOLE. * GRAD = GRADIENTS. * XPARAM = CURRENT STATE OF PARAMETERS. * IL = INDEX OF HESSIAN, * JL = CYCLE NUMBER REACHED SO-FAR. * BMAT = "B" MATRIX! * IPOW = INDICES AND FLAGS. * IPOW(9)= 0 FOR RESTORE, 1 FOR DUMP, 2 FOR SILENT DUMP * ********************************************************************** COMMON /GEOVAR/ NVAR,LOC(2,MAXPAR), IDUMY, DUMY(MAXPAR) COMMON /ELEMTS/ ELEMNT(107) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR), 1 LOCDEP(MAXPAR) COMMON/OPTEF/OLDF(MAXPAR),D(MAXPAR),VMODE(MAXPAR), $U(MAXPAR,MAXPAR),DD,rmin,rmax,omin,xlamd,xlamd0,skal, $MODE,NSTEP,NEGREQ,IPRNT COMMON /TITLES/ KOMENT,TITLE COMMON /GEOKST/ NATOMS,LABELS(NUMATM), 1 NA(NUMATM),NB(NUMATM),NC(NUMATM) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /LOCVAR/ LOCVAR(2,MAXPAR) COMMON /NUMSCF/ NSCF COMMON /KEYWRD/ KEYWRD COMMON /VALVAR/ VALVAR(MAXPAR),NUMVAR COMMON /DENSTY/ P(MPACK), PA(MPACK), PB(MPACK) COMMON /ALPARM/ ALPARM(3,MAXPAR),X0, X1, X2, JLOOP COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /PATH / LATOM,LPARAM,REACT(200) OPEN(UNIT=9,FILE='FOR009',STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 9 OPEN(UNIT=10,FILE='FOR010',STATUS='UNKNOWN',FORM='UNFORMATTED') REWIND 10 IR=9 IF(IPOW(9) .EQ. 1 .OR. IPOW(9) .EQ. 2) THEN FUNCT1=SQRT(DOT(GRAD,GRAD,NVAR)) IF(IPOW(9).EQ.1)THEN WRITE(6,'(//10X,''CURRENT VALUE OF GRADIENT NORM ='' 1 ,F12.6)')FUNCT1 WRITE(6,'(/10X,''CURRENT VALUE OF GEOMETRY'',/)') CALL GEOUT(6) ENDIF C C IPOW(1) AND IPOW(9) ARE USED ALREADY, THE REST ARE FREE FOR USE C IPOW(8)=NSCF WRITE(IR)IPOW,IL,JL,FUNCT,TT0 WRITE(IR)(XPARAM(I),I=1,NVAR) WRITE(IR)( GRAD(I),I=1,NVAR) WRITE(IR)((HESS(J,I),J=1,NVAR),I=1,NVAR) WRITE(IR)((BMAT(J,I),J=1,NVAR),I=1,NVAR) WRITE(IR)(OLDF(I),I=1,NVAR),(D(I),I=1,NVAR),(VMODE(I),I=1,NVAR) WRITE(IR)DD,MODE,NSTEP,NEGREQ LINEAR=(NVAR*(NVAR+1))/2 WRITE(IR)(PMAT(I),I=1,LINEAR) LINEAR=(NORBS*(NORBS+1))/2 WRITE(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)WRITE(10)(PB(I),I=1,LINEAR) IF(LATOM .NE. 0) THEN WRITE(IR)((ALPARM(J,I),J=1,3),I=1,NVAR) WRITE(IR)JLOOP,X0, X1, X2 ENDIF CLOSE(9) CLOSE(10) RETURN ELSE C# WRITE(6,'(//10X,'' READING DATA FROM DISK''/)') READ(IR,END=10,ERR=10)IPOW,IL,JL,FUNCT,TT0 NSCF=IPOW(8) I=TT0/1000000 TT0=TT0-I*1000000 WRITE(6,'(//10X,''TOTAL TIME USED SO FAR:'', 1 F13.2,'' SECONDS'')')TT0 WRITE(6,'( 10X,'' FUNCTION:'',F17.6)')FUNCT READ(IR)(XPARAM(I),I=1,NVAR) READ(IR)( GRAD(I),I=1,NVAR) READ(IR)((HESS(J,I),J=1,NVAR),I=1,NVAR) READ(IR)((BMAT(J,I),J=1,NVAR),I=1,NVAR) READ(IR)(OLDF(I),I=1,NVAR),(D(I),I=1,NVAR),(VMODE(I),I=1,NVAR) READ(IR)DD,MODE,NSTEP,NEGREQ LINEAR=(NVAR*(NVAR+1))/2 READ(IR)(PMAT(I),I=1,LINEAR) LINEAR=(NORBS*(NORBS+1))/2 C READ DENSITY MATRIX READ(10)(PA(I),I=1,LINEAR) IF(NALPHA.NE.0)READ(10)(PB(I),I=1,LINEAR) IF(LATOM.NE.0) THEN READ(IR)((ALPARM(J,I),J=1,3),I=1,NVAR) READ(IR)JLOOP,X0, X1, X2 IL=IL+1 ENDIF CLOSE(9) CLOSE(10) RETURN 10 WRITE(6,'(//10X,''NO RESTART FILE EXISTS!'')') STOP ENDIF END SUBROUTINE EFSTR(XPARAM,FUNCT,IHESS,NTIME,ILOOP,IGTHES,MXSTEP, $IRECLC,IUPD,DMAX,DDMAX,dmin,TOL2,TOTIME,TIME1,TIME2,nvar, $SCF1,LUPD,ldump,log,rrscal,donr,gnmin) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION XPARAM(*) C COMMON /ISTOPE/ AMS(107) COMMON /LAST / LAST COMMON /KEYWRD/ KEYWRD COMMON /TIMEX / TIME0 COMMON /GRADNT/ GRAD(MAXPAR),GNFINA COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /NUMCAL/ NUMCAL COMMON /SCFTYP/ EMIN, LIMSCF COMMON /NLLCOM/ HESS(MAXPAR,MAXPAR),BMAT(MAXPAR,MAXPAR), *PMAT(MAXPAR**2) COMMON/OPTEF/OLDF(MAXPAR),D(MAXPAR),VMODE(MAXPAR), $U(MAXPAR,MAXPAR),DD,rmin,rmax,omin,xlamd,xlamd0,skal, $MODE,NSTEP,NEGREQ,IPRNT DIMENSION IPOW(9) LOGICAL RESTRT,SCF1,LDUM,LUPD,log,rrscal,donr,gnmin C ***** Added by Jiro Toyoda at 1994-05-25 ***** LOGICAL LIMSCF C ***************************** at 1994-05-25 ***** CHARACTER*241 KEYWRD,LINE CHARACTER CHDOT*1,ZERO*1,NINE*1,CH*1 DATA CHDOT,ZERO,NINE /'.','0','9'/ DATA ICALCN,ZZERO /0,0.D0/ C GET ALL INITIALIZATION DATA NVAR=ABS(NVAR) LDUMP=0 ICALCN=NUMCAL LUPD=(INDEX(KEYWRD,' NOUPD') .EQ. 0) RESTRT=(INDEX(KEYWRD,'RESTART') .NE. 0) LOG = INDEX(KEYWRD,'NOLOG').EQ.0 SCF1=(INDEX(KEYWRD,'1SCF') .NE. 0) NSTEP=0 IHESS=0 LAST=0 NTIME=0 ILOOP=1 IMIN=INDEX(KEYWRD,' EF') IF(IMIN.NE.0) THEN MODE=0 IGTHES=0 IUPD =2 NEGREQ=0 ddmax=0.5d0 ENDIF LIMSCF=.FALSE. ITS=INDEX(KEYWRD,' TS') IF(ITS.NE.0) THEN MODE=1 IGTHES=1 IUPD =1 NEGREQ=1 rmin=0.0d0 rmax=4.0d0 omin=0.8d0 ddmax=0.3d0 ENDIF rrscal=.false. I=INDEX(KEYWRD,' RSCAL') IF(I.NE.0) rrscal=.true. donr=.true. I=INDEX(KEYWRD,' NONR') IF(I.NE.0) donr=.false. gnmin=.false. I=INDEX(KEYWRD,' GNMIN') IF(I.NE.0) gnmin=.true. IPRNT=0 IP=INDEX(KEYWRD,' PRNT=') IF(IP.NE.0) IPRNT=READA(KEYWRD,IP) IF(IPRNT.GT.5)IPRNT=5 IF(IPRNT.LT.0)IPRNT=0 MXSTEP=100 I=INDEX(KEYWRD,' CYCLES=') IF(I.NE.0) MXSTEP=READA(KEYWRD,I) IF (I.NE.0 .AND. MXSTEP.EQ.0 .AND. IP.EQ.0) IPRNT=3 IRECLC=999999 I=INDEX(KEYWRD,' RECALC=') IF(I.NE.0) IRECLC=READA(KEYWRD,I) I=INDEX(KEYWRD,' IUPD=') IF(I.NE.0) IUPD=READA(KEYWRD,I) I=INDEX(KEYWRD,' MODE=') IF(I.NE.0) MODE=READA(KEYWRD,I) DMIN=1.0D-3 I=INDEX(KEYWRD,' DDMIN=') IF(I.NE.0) DMIN=READA(KEYWRD,I) DMAX=0.2D0 I=INDEX(KEYWRD,' DMAX=') IF(I.NE.0) DMAX=READA(KEYWRD,I) I=INDEX(KEYWRD,' DDMAX=') IF(I.NE.0) DDMAX=READA(KEYWRD,I) TOL2=1.D+0 C------- modified by I. Cserny, June 21, 1995 ------- IF(INDEX(KEYWRD,' PREC') .NE. 0) TOL2=1.D-2 C---------------------------------------------------- I=INDEX(KEYWRD,' GNORM=') IF(I.NE.0) TOL2=READA(KEYWRD,I) IF(INDEX(KEYWRD,' LET').EQ.0.AND.TOL2.LT.0.01D0)THEN WRITE(6,'(/,A)')' GNORM HAS BEEN SET TOO LOW, RESET TO 0 1.01. SPECIFY LET AS KEYWORD TO ALLOW GNORM LESS THAN 0.01' TOL2=0.01D0 ENDIF I=INDEX(KEYWRD,' HESS=') IF(I.NE.0) IGTHES=READA(KEYWRD,I) I=INDEX(KEYWRD,' RMIN=') IF(I.NE.0) RMIN=READA(KEYWRD,I) I=INDEX(KEYWRD,' RMAX=') IF(I.NE.0) RMAX=READA(KEYWRD,I) I=INDEX(KEYWRD,' OMIN=') IF(I.NE.0) OMIN=READA(KEYWRD,I) TIME1=TIME0 TIME2=TIME1 C DONE WITH ALL INITIALIZING STUFF. C CHECK THAT OPTIONS REQUESTED ARE RESONABLE IF(NVAR.GT.(3*NUMAT-6) .and. numat.ge.3)WRITE(6,25) 25 FORMAT(/,'*** WARNING! MORE VARIABLES THAN DEGREES OF FREEDOM', 1/) IF((ITS.NE.0).AND.(IUPD.EQ.2))THEN WRITE(6,*)' TS SEARCH AND BFGS UPDATE WILL NOT WORK' STOP ENDIF IF((ITS.NE.0).AND.(IGTHES.EQ.0))THEN WRITE(6,*)' TS SEARCH REQUIRE BETTER THAN DIAGONAL HESSIAN' STOP ENDIF IF((IGTHES.LT.0).OR.(IGTHES.GT.3))THEN WRITE(6,*)' UNRECOGNIZED HESS OPTION',IGTHES STOP ENDIF IF((OMIN.LT.0.d0).OR.(OMIN.GT.1.d0))THEN WRITE(6,*)' OMIN MUST BE BETWEEN 0 AND 1',OMIN STOP ENDIF IF (RESTRT) THEN C C RESTORE DATA. I INDICATES (HESSIAN RESTART OR OPTIMIZATION C RESTART). IF I .GT. 0 THEN HESSIAN RESTART AND I IS LAST C STEP CALCULATED IN THE HESSIAN. IF I .LE. 0 THEN J (NSTEP) C IN AN OPTIMIZATION HAS BEEN DONE. C IPOW(9)=0 mtmp=mode CALL EFSAV(TT0,HESS,FUNCT,GRAD,XPARAM,PMAT,I,J,BMAT,IPOW) mode=mtmp K=TT0/1000000.D0 TIME0=TIME0-TT0+K*1000000.D0 ILOOP=I IF (I .GT. 0) THEN IGTHES=4 NSTEP=J WRITE(6,'(10X,''RESTARTING HESSIAN AT POINT'',I4)')ILOOP IF(NSTEP.NE.0)WRITE(6,'(10X,''IN OPTIMIZATION STEP'',I4)' 1)NSTEP ELSE NSTEP=J WRITE(6,'(//10X,''RESTARTING OPTIMIZATION AT STEP'',I4)') 1NSTEP DO 26 I=1,NVAR 26 GRAD(I)=ZZERO CALL COMPFG(XPARAM, .TRUE., FUNCT, .TRUE., GRAD, .TRUE.) ENDIF ELSE C NOT A RESTART, WE NEED TO GET THE GRADIENTS DO 30 I=1,NVAR 30 GRAD(I)=ZZERO CALL COMPFG(XPARAM, .TRUE., FUNCT, .TRUE., GRAD, .TRUE.) ENDIF return end SUBROUTINE FORMD(EIGVAL,FX,NVAR,DMAX, 1osmin,ts,lrjk,lorjk,rrscal,donr) C This version forms geometry step by either pure NR, P-RFO or QA C algorithm, under the condition that the steplength is less than dmax IMPLICIT DOUBLE PRECISION(A-H,O-Z) DOUBLE PRECISION LAMDA,lamda0 INCLUDE 'SIZES' logical ts,rscal,frodo1,frodo2,lrjk,lorjk,rrscal,donr DIMENSION EIGVAL(MAXPAR),FX(MAXPAR) COMMON/OPTEF/OLDF(MAXPAR),D(MAXPAR),VMODE(MAXPAR), $U(MAXPAR,MAXPAR),DD,rmin,rmax,omin,xlamd,xlamd0,skal, $MODE,NSTEP,NEGREQ,IPRNT DATA ZERO/0.0D0/, HALF/0.5D0/, TWO/2.0D+00/, TOLL/1.0D-8/ DATA STEP/5.0D-02/, TEN/1.0D+1/, ONE/1.0D+0/, BIG/1.0D+3/ DATA FOUR/4.0D+00/ DATA TMTWO/1.0D-2/, TMSIX/1.0D-06/, SFIX/1.0D+01/, EPS/1.0D-12/ C MAXIT=999 NUMIT=0 SKAL=ONE rscal=rrscal it=0 jt=1 if (ts) then IF(MODE.NE.0) THEN CALL OVERLP(dmax,osmin,NEWMOD,NVAR,lorjk) if (lorjk) return C C ON RETURN FROM OVERLP, NEWMOD IS THE TS MODE C IF(NEWMOD.NE.MODE .and. iprnt.ge.1) WRITE(6,1000) MODE,NEWMOD 1000 FORMAT(5X,'WARNING! MODE SWITCHING. WAS FOLLOWING MODE ',I3, $ ' NOW FOLLOWING MODE ',I3) MODE=NEWMOD IT=MODE ELSE IT=1 ENDIF eigit=eigval(it) IF (IPRNT.GE.1) THEN WRITE(6,900)IT,EIGIT WRITE(6,910)(U(I,IT),I=1,NVAR) 900 FORMAT(/,5X,'TS MODE IS NUMBER',I3,' WITH EIGENVALUE',F9.1,/, *5X,'AND COMPONENTS',/) 910 FORMAT(5X,8F9.4) ENDIF endif if (it.eq.1) jt=2 eone=eigval(jt) ssmin=max(abs(eone)*eps,(ten*eps)) ssmax=max(big,abs(eone)) ssmax=ssmax*big sstoll=toll d2max=dmax*dmax c write(6,*)'from formd, eone, ssmin, ssmax, sstoll', c $eone,ssmin,ssmax,sstoll C SOLVE ITERATIVELY FOR LAMDA C INITIAL GUESS FOR LAMDA IS ZERO EXCEPT NOTE THAT C LAMDA SHOULD BE LESS THAN EIGVAL(1) C START BY BRACKETING ROOT, THEN HUNT IT DOWN WITH BRUTE FORCE BISECT. C frodo1=.false. frodo2=.false. LAMDA=ZERO lamda0=zero if (ts .and. eigit.lt.zero .and. eone.ge.zero .and. donr) then if (iprnt.ge.1) then write(6,*)' ts search, correct hessian, trying pure NR step' endif goto 776 endif if (.not.ts .and. eone.ge.zero .and. donr) then if (iprnt.ge.1) then write(6,*)' min search, correct hessian, trying pure NR step' endif goto 776 endif 5 if (ts) then lamda0=eigval(it)+sqrt(eigval(it)**2+four*fx(it)**2) lamda0=lamda0*half if (iprnt.ge.1)WRITE(6,1030) LAMDA0 endif SSTEP = STEP IF(EONE.LE.ZERO) LAMDA=EONE-SSTEP IF(EONE.GT.ZERO) SSTEP=EONE BL = LAMDA - SSTEP BU = LAMDA + SSTEP*HALF 20 FL = ZERO FU = ZERO DO 30 I = 1,NVAR if (i.eq.it) goto 30 FL = FL + (FX(I)*FX(I))/(BL-EIGVAL(I)) FU = FU + (FX(I)*FX(I))/(BU-EIGVAL(I)) 30 CONTINUE FL = FL - BL FU = FU - BU c write(6,*)'bl,bu,fl,fu from brack' c write(6,668)bl,bu,fl,fu c668 format(6f20.15) IF (FL*FU .LT. ZERO) GOTO 40 BL = BL - (EONE-BL) BU = BU + HALF*(EONE-BU) IF (BL.LE.-SSMAX) then BL = -SSMAX frodo1=.true. endif IF (abs(eone-bu).le.ssmin) then BU = EONE-SSMIN frodo2=.true. endif IF (frodo1.and.frodo2) THEN WRITE(6,*)'NUMERICAL PROBLEMS IN BRACKETING LAMDA', $ EONE,BL,BU,FL,FU write(6,*)' going for fixed step size....' goto 450 ENDIF GOTO 20 40 CONTINUE NCNT = 0 XLAMDA = ZERO 50 CONTINUE FL = ZERO FU = ZERO FM = ZERO LAMDA = HALF*(BL+BU) DO 60 I = 1,NVAR if (i.eq.it) goto 60 FL = FL + (FX(I)*FX(I))/(BL-EIGVAL(I)) FU = FU + (FX(I)*FX(I))/(BU-EIGVAL(I)) FM = FM + (FX(I)*FX(I))/(LAMDA-EIGVAL(I)) 60 CONTINUE FL = FL - BL FU = FU - BU FM = FM - LAMDA c write(6,*)'bl,bu,lamda,fl,fu,fm from search' c write(6,668)bl,bu,lamda,fl,fu,fm IF (ABS(XLAMDA-LAMDA).LT.sstoll) GOTO 776 NCNT = NCNT + 1 IF (NCNT.GT.1000) THEN WRITE(6,*)'TOO MANY ITERATIONS IN LAMDA BISECT', $ BL,BU,LAMDA,FL,FU STOP ENDIF XLAMDA = LAMDA IF (FM*FU.LT.ZERO) BL = LAMDA IF (FM*FL.LT.ZERO) BU = LAMDA GOTO 50 C 776 if (iprnt.ge.1) WRITE(6,1031) LAMDA C C CALCULATE THE STEP C DO 310 I=1,NVAR D(I)=ZERO 310 CONTINUE DO 330 I=1,NVAR if (lamda.eq.zero .and. abs(eigval(i)).lt.tmtwo) then temp=zero else TEMP=FX(I)/(LAMDA-EIGVAL(I)) endif if (i.eq.it) then TEMP=FX(IT)/(LAMDA0-EIGVAL(IT)) endif if (iprnt.ge.5) write(6,*)'formd, delta step',i,temp DO 320 J=1,NVAR D(J)=D(J)+TEMP*U(J,I) 320 CONTINUE 330 CONTINUE dd=sqrt(dot(d,d,nvar)) if(lamda.eq.zero .and. lamda0.eq.zero .and.iprnt.ge.1) 1 write(6,777)dd 777 format(1x,'pure NR-step has length',f10.5) if(lamda.ne.zero .and. lamda0.ne.-lamda .and.iprnt.ge.1) 1write(6,778)dd 778 format(1x,'P-RFO-step has length',f10.5) if (dd.lt.(dmax+tmsix)) then xlamd=lamda xlamd0=lamda0 return endif if (lamda.eq.zero .and. lamda0.eq.zero) goto 5 if (rscal) then SKAL=DMAX/DD DO 160 I=1,NVAR D(I)=D(I)*SKAL 160 CONTINUE DD=SQRT(DOT(D,D,NVAR)) IF(IPRNT.GE.1)WRITE(6,170)SKAL 170 FORMAT(5X,'CALCULATED STEP SIZE TOO LARGE, SCALED WITH',F9.5) xlamd=lamda xlamd0=lamda0 return endif 450 LAMDA=ZERO frodo1=.false. frodo2=.false. SSTEP = STEP IF(EONE.LE.ZERO) LAMDA=EONE-SSTEP if (ts .and. -eigit.lt.eone) lamda=-eigit-sstep IF(EONE.GT.ZERO) SSTEP=EONE BL = LAMDA - SSTEP BU = LAMDA + SSTEP*HALF 520 FL = ZERO FU = ZERO DO 530 I = 1,NVAR if (i.eq.it) goto 530 FL = FL + (FX(I)/(BL-EIGVAL(I)))**2 FU = FU + (FX(I)/(BU-EIGVAL(I)))**2 530 CONTINUE if (ts) then FL = FL + (FX(IT)/(BL+EIGVAL(IT)))**2 FU = FU + (FX(IT)/(BU+EIGVAL(IT)))**2 endif FL = FL - d2max FU = FU - d2max c write(6,*)'bl,bu,fl,fu from brack2' c write(6,668)bl,bu,fl,fu IF (FL*FU .LT. ZERO) GOTO 540 BL = BL - (EONE-BL) BU = BU + HALF*(EONE-BU) IF (BL.LE.-SSMAX) then BL = -SSMAX frodo1=.true. endif IF (abs(eone-bu).le.ssmin) then BU = EONE-SSMIN frodo2=.true. endif IF (frodo1.and.frodo2) THEN WRITE(6,*)'NUMERICAL PROBLEMS IN BRACKETING LAMDA', $ EONE,BL,BU,FL,FU write(6,*)' going for fixed level shifted NR step...' c both lamda searches failed, go for fixed level shifted nr c this is unlikely to produce anything useful, but maybe we're lucky lamda=eone-sfix lamda0=eigit+sfix rscal=.true. goto 776 ENDIF GOTO 520 540 CONTINUE NCNT = 0 XLAMDA = ZERO 550 CONTINUE FL = ZERO FU = ZERO FM = ZERO LAMDA = HALF*(BL+BU) DO 560 I = 1,NVAR if (i.eq.it) goto 560 FL = FL + (FX(I)/(BL-EIGVAL(I)))**2 FU = FU + (FX(I)/(BU-EIGVAL(I)))**2 FM = FM + (FX(I)/(LAMDA-EIGVAL(I)))**2 560 CONTINUE if (ts) then FL = FL + (FX(IT)/(BL+EIGVAL(IT)))**2 FU = FU + (FX(IT)/(BU+EIGVAL(IT)))**2 FM = FM + (FX(IT)/(LAMDA+EIGVAL(IT)))**2 endif FL = FL - d2max FU = FU - d2max FM = FM - d2max c write(6,*)'bl,bu,lamda,fl,fu,fm from search2' c write(6,668)bl,bu,lamda,fl,fu,fm IF (ABS(XLAMDA-LAMDA).LT.sstoll) GOTO 570 NCNT = NCNT + 1 IF (NCNT.GT.1000) THEN WRITE(6,*)'TOO MANY ITERATIONS IN LAMDA BISECT', $ BL,BU,LAMDA,FL,FU STOP ENDIF XLAMDA = LAMDA IF (FM*FU.LT.ZERO) BL = LAMDA IF (FM*FL.LT.ZERO) BU = LAMDA GOTO 550 C 570 CONTINUE lamda0=-lamda rscal=.true. goto 776 C 1030 FORMAT(1X,'lamda that maximizes along ts modes = ',F15.5) 1031 FORMAT(1X,'lamda that minimizes along all modes = ',F15.5) END SUBROUTINE GETHES(XPARAM,IGTHES,NVAR,iloop,TOTIME) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' C GET THE HESSIAN. DEPENDING ON IGTHES WE GET IT FROM : C C 0 : DIAGONAL MATRIX, DGHSX*I (DEFAULT FOR MIN-SEARCH) C 1 : CALCULATE IT NUMERICALLY (DEFAULT FOR TS-SEARCH) C 2 : READ IN FROM FTN009 C 3 : CALCULATE IT BY DOUBLE NUMERICAL DIFFERENTIATION C 4 : READ IN FROM FTN009 (DURING RESTART, PARTLY OR WHOLE, C ALREADY DONE AT THIS POINT) COMMON /GEOVAR/ NDUM,LOC(2,MAXPAR), IDUMY, XARAM(MAXPAR) COMMON /GEOM / GEO(3,NUMATM), XCOORD(3,NUMATM) COMMON /GEOSYM/ NDEP,LOCPAR(MAXPAR),IDEPFN(MAXPAR),LOCDEP(MAXPAR) COMMON /LAST / LAST COMMON /KEYWRD/ KEYWRD COMMON /TIMEX / TIME0 COMMON /GRADNT/ GRAD(MAXPAR),GNFINA COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT COMMON /NUMCAL/ NUMCAL COMMON /SIGMA2/ GNEXT1(MAXPAR), GMIN1(MAXPAR) COMMON /NLLCOM/ HESS(MAXPAR,MAXPAR),BMAT(MAXPAR,MAXPAR), *PMAT(MAXPAR**2) COMMON /SCRACH/ PVEC(MAXPAR**2) COMMON /TIMDMP/ TLEFT, TDUMP COMMON/OPTEF/OLDF(MAXPAR),D(MAXPAR),VMODE(MAXPAR), $U(MAXPAR,MAXPAR),DD,rmin,rmax,omin,xlamd,xlamd0,skal, $MODE,NSTEP,NEGREQ,IPRNT DIMENSION IPOW(9), EIGVAL(MAXPAR),TVEC(MAXPAR),SVEC(MAXPAR), *FX(MAXPAR),HESSC(MAXHES),UC(MAXPAR**2) DIMENSION XPARAM(*),tmp(150,150) LOGICAL RESTRT,SCF1,LDUM CHARACTER*241 KEYWRD,LINE CHARACTER CHDOT*1,ZERO*1,NINE*1,CH*1 DATA CHDOT,ZERO,NINE /'.','0','9'/ DATA ICALCN,ZZERO,ONE,TWO /0,0.D0,1.D0,2.D0/ C DATA DGHSS,DGHSA,DGHSD /1000.d0,500.d0,200.d0/ DATA XINC /1.d-3/ C DGHSX IS HESSIAN DIAGONAL FOR IGTHES=0 (STRETCHING, ANGLE, C DIHEDRAL). THE VALUES SHOULD BE 'OPTIMUM' FOR CYCLOHEXANONE C XINC IS STEPSIZE FOR HESSIAN CALCULATION. TESTS SHOWS THAT IT SHOULD C BE IN THE RANGE 10(-2) TO 10(-4). 10(-3) APPEARS TO BE C A REASONABLE COMPROMISE BETWEEN ACCURACY AND NUMERICAL PROBLEMS IF (IGTHES.EQ.0) THEN WRITE(6,60) 60 FORMAT(/,10X,'DIAGONAL MATRIX USED AS START HESSIAN',/) DO 70 I=1,NVAR DO 70 J=1,NVAR HESS(I,J)=ZZERO 70 CONTINUE IJ=1 DO 80 J=1,NUMATM DO 80 I=1,3 IF (LOC(2,IJ).EQ.I.AND.LOC(1,IJ).EQ.J)THEN IF (I.EQ.1)HESS(IJ,IJ)=DGHSS IF (I.EQ.2)HESS(IJ,IJ)=DGHSA IF (I.EQ.3)HESS(IJ,IJ)=DGHSD IJ=IJ+1 ENDIF 80 CONTINUE IJ=IJ-1 IF(IJ.NE.NVAR)WRITE(*,*)'ERROR IN IGTHES=0,IJ,NVAR',IJ,NVAR ENDIF C IF (IGTHES.EQ.2) THEN WRITE(6,100) 100 FORMAT(/,10X,'HESSIAN READ FROM DISK',/) IPOW(9)=0 C USE DUMMY ARRAY FOR CALL EXCEPT FOR HESSIAN C TEMPORARY SET NALPHA = 0, THEN WE CAN READ HESSIAN FROM RHF C RUN FOR USE IN SAY UHF RUNS C ALSO SAVE MODE, TO ALLOW FOLLOWING A DIFFERENT MODE THAN THE ONE C CURRENTLY ON RESTART FILE nxxx=nalpha nalpha=0 mtmp=mode CALL EFSAV(TDM,HESS,FDMY,GNEXT1,GMIN1,PMAT,IIDUM,J,BMAT,IPOW) nalpha=nxxx mode=mtmp nstep=0 ENDIF IF((IGTHES.EQ.1).OR.(IGTHES.EQ.3).OR.(IGTHES.EQ.4))THEN C IF IGTHES IS .EQ. 4, THEN THIS IS A HESSIAN RESTART. C USE GNEXT1 AND DUMMY FOR CALLS TO COMPFG DURING HESSIAN C CALCULATION IF (IGTHES.EQ.1)WRITE(6,190) 190 FORMAT(/,10X,'HESSIAN CALCULATED NUMERICALLY',/) IF (IGTHES.EQ.3)WRITE(6,191) 191 FORMAT(/,10X,'HESSIAN CALCULATED DOUBLE NUMERICALLY',/) IF(IPRNT.GE.5)WRITE(6,'(I3,12(8F9.4,/3X))') 1 0,(Grad(IF),IF=1,NVAR) TIME1=SECOND() TSTORE=TIME1 DO 210 I=ILOOP,NVAR XPARAM(I)=XPARAM(I) + XINC CALL COMPFG(XPARAM, .TRUE., DUMMY, .TRUE., GNEXT1, .TRUE.) IF(IPRNT.GE.5)WRITE(6,'(I3,12(8F9.4,/3X))') 1 I,(GNEXT1(IF),IF=1,NVAR) XPARAM(I)=XPARAM(I) - XINC if (igthes.eq.3) then XPARAM(I)=XPARAM(I) - XINC CALL COMPFG(XPARAM, .TRUE., DUMMY, .TRUE., GMIN1, .TRUE.) IF(IPRNT.GE.5)WRITE(6,'(I3,12(8F9.4,/3X))') 1 -I,(GMIN1(IF),IF=1,NVAR) XPARAM(I)=XPARAM(I) + XINC DO 199 J=1,NVAR 199 HESS(I,J)= (GNEXT1(J)-GMIN1(J))/(XINC+XINC) else DO 200 J=1,NVAR 200 HESS(I,J)= (GNEXT1(J)-GRAD(J))/XINC endif TIME2=SECOND() TSTEP=TIME2-TIME1 TLEFT=TLEFT-TSTEP TIME1=TIME2 IF( TLEFT .LT. TSTEP*TWO) THEN C C STORE PARTIAL HESSIAN PATRIX C STORE GRADIENTS FOR GEOMETRY AND ILOOP AS POSITIVE WRITE(6,'(A)')' NOT ENOUGH TIME TO COMPLETE HESSIAN' WRITE(6,'(A,I4)')' STOPPING IN HESSIAN AT COORDINATE:',I IPOW(9)=1 TT0=SECOND()-TIME0 CALL EFSAV(TT0,HESS,FUNCT,GRAD,XPARAM,PMAT,I,NSTEP,BMAT, 1IPOW) STOP ENDIF 210 CONTINUE C fix last entry in geo array, this is currently at value-xinc K=LOC(1,nvar) L=LOC(2,nvar) GEO(L,K)=XPARAM(nvar) IF(NDEP.NE.0) CALL SYMTRY c add all time used back to tleft, this will then be subtracted c again in main ef routine TIME2=SECOND() TSTEP=TIME2-TSTORE TLEFT=TLEFT+TSTEP ENDIF C C SYMMETRIZE HESSIAN DO 220 I=1,NVAR C$DIR NO_RECURRENCE DO 220 J=1,I-1 HESS(I,J)=(HESS(I,J)+HESS(J,I))/TWO HESS(J,I)=HESS(I,J) 220 CONTINUE RETURN END C*MODULE BLAS1 *DECK IDAMAX INTEGER FUNCTION IDAMAX(N,DX,INCX) IMPLICIT DOUBLE PRECISION(A-H,O-Z) DIMENSION DX(1) C C FINDS THE INDEX OF ELEMENT HAVING MAX. ABSOLUTE VALUE. C JACK DONGARRA, LINPACK, 3/11/78. C IDAMAX = 0 IF( N .LT. 1 ) RETURN IDAMAX = 1 IF(N.EQ.1)RETURN IF(INCX.EQ.1)GO TO 20 C C CODE FOR INCREMENT NOT EQUAL TO 1 C IX = 1 RMAX = ABS(DX(1)) IX = IX + INCX DO 10 I = 2,N IF(ABS(DX(IX)).LE.RMAX) GO TO 5 IDAMAX = I RMAX = ABS(DX(IX)) 5 IX = IX + INCX 10 CONTINUE RETURN C C CODE FOR INCREMENT EQUAL TO 1 C 20 RMAX = ABS(DX(1)) DO 30 I = 2,N IF(ABS(DX(I)).LE.RMAX) GO TO 30 IDAMAX = I RMAX = ABS(DX(I)) 30 CONTINUE RETURN END SUBROUTINE OVERLP(dmax,osmin,NEWMOD,NVAR,lorjk) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON/OPTEF/OLDF(MAXPAR),D(MAXPAR),VMODE(MAXPAR), $U(MAXPAR,MAXPAR),DD,rmin,rmax,omin,xlamd,xlamd0,skal, $MODE,NSTEP,NEGREQ,IPRNT dimension xo(maxpar) logical lorjk,first data first/.true./ C C ON THE FIRST STEP SIMPLY DETERMINE WHICH MODE TO FOLLOW C c IF(NSTEP.EQ.1) THEN IF(first) THEN first=.false. IF(MODE.GT.NVAR)THEN WRITE(6,*)'ERROR!! MODE IS LARGER THAN NVAR',MODE STOP ENDIF IT=MODE if (iprnt.ge.1) WRITE(6,40) MODE 40 FORMAT(5X,'HESSIAN MODE FOLLOWING SWITCHED ON'/ 1 ' FOLLOWING MODE ',I3) C ELSE C C ON SUBSEQUENT STEPS DETERMINE WHICH HESSIAN EIGENVECTOR HAS C THE GREATEST OVERLAP WITH THE MODE WE ARE FOLLOWING C IT=1 lorjk=.false. TOVLP=DOT(U(1,1),VMODE,NVAR) TOVLP=ABS(TOVLP) c xo(1)=tovlp DO 10 I=2,NVAR OVLP=DOT(U(1,I),VMODE,NVAR) OVLP=ABS(OVLP) c xo(i)=ovlp IF(OVLP.GT.TOVLP) THEN TOVLP=OVLP IT=I ENDIF 10 CONTINUE C if (iprnt.ge.5) then do j=1,5 xxx=0.d0 do i=1,nvar if (xo(i).gt.xxx)ix=i if (xo(i).gt.xxx)xxx=xo(i) enddo xo(ix)=0.d0 write(6,*)'overlaps',ix,xxx enddo endif if(iprnt.ge.1)WRITE(6,30) IT,TOVLP if (tovlp.lt.omin) then if (dmax.gt.osmin) then lorjk=.true. if (iprnt.ge.1)write(6,31)omin return else if (iprnt.ge.1)write(6,32)omin,dmax,osmin endif endif ENDIF 30 FORMAT(5X,'OVERLAP OF CURRENT MODE',I3,' WITH PREVIOUS MODE IS ', $ F6.3) 31 FORMAT(5X,'OVERLAP LESS THAN OMIN', 1F6.3,' REJECTING PREVIOUS STEP') 32 FORMAT(5X,'OVERLAP LESS THAN OMIN',F6.3,' BUT TRUST RADIUS',F6.3, $ ' IS LESS THAN',F6.3,/,5X,' ACCEPTING STEP') C C SAVE THE EIGENVECTOR IN VMODE C DO 20 I=1,NVAR VMODE(I)=U(I,IT) 20 CONTINUE C NEWMOD=IT RETURN C END SUBROUTINE PRJFC(F,xparam,nvar) IMPLICIT DOUBLE PRECISION(A-H,O-Z) INCLUDE 'SIZES' C C CALCULATES PROJECTED FORCE CONSTANT MATRIX (F). C THIS ROUTINE CAME ORIGINALLY FROM POLYRATE. IT IS USED BY PERMISSION C OF D. TRUHLAR. THE CURRENT VERSION IS LIFTED FROM GAMESS AND C ADAPTED BY F.JENSEN, ODENSE, DK C IF WE ARE AT A STATIONARY POINT (STPT=.T.), I.E. GNORM .LT. 10, C THEN THE ROTATIONAL AND TRANSLATIONAL MODES ARE PROJECTED OUT C AND THEIR FREQUENCIES BECOME IDENTICAL ZERO. IF NOT AT A STATIONARY C POINT THEN THE MASS-WEIGHTED GRADIENT IS ALSO PROJECTED OUT AND C THE CORRESPONDING FREQUENCY BECOME ZERO. C ************************************************ C X : MASS-WEIGHTED COORDINATE C DX: NORMALIZED MASS-WEIGHTED GRADIENT VECTOR C F : MASS-WEIGHTED FORCE CONSTANT MATRIX C RM: INVERSION OF SQUARE ROOT OF MASS C P, COF: BUFFER C COMMON /ATMASS/ ATMASS(NUMATM) DIMENSION X(MAXPAR),RM(MAXPAR),F(MAXPAR,MAXPAR), * P(MAXPAR,MAXPAR),COF(MAXPAR,MAXPAR) DIMENSION TENS(3,3,3),ROT(3,3),SCR(3,3),ISCR(6),CMASS(3) dimension coord(3,numatm),dx(maxpar),xparam(maxpar) DIMENSION DETX(2) EQUIVALENCE (DET,DETX(1)) PARAMETER (ZERO=0.0d+00, ONE=1.0d+00, EPS=1.0d-14, * CUT5=1.0d-05, CUT8=1.0d-08) C C TOTALLY ASYMMETRIC CARTESIAN TENSOR. DATA TENS/ 0.0d+00, 0.0d+00, 0.0d+00, X 0.0d+00, 0.0d+00, -1.0d+00, X 0.0d+00, 1.0d+00, 0.0d+00, Y 0.0d+00, 0.0d+00, 1.0d+00, Y 0.0d+00, 0.0d+00, 0.0d+00, Y -1.0d+00, 0.0d+00, 0.0d+00, Z 0.0d+00, -1.0d+00, 0.0d+00, Z 1.0d+00, 0.0d+00, 0.0d+00, Z 0.0d+00, 0.0d+00, 0.0d+00 / C natm=nvar/3 nc1=nvar ij=1 do 2 i=1,natm coord(1,i)=xparam(ij) coord(2,i)=xparam(ij+1) coord(3,i)=xparam(ij+2) ij=ij+3 2 continue C CALCULATE 1/SQRT(MASS) L=0 DO 3 I=1,NATM TMP=ONE/SQRT(ATMASS(I)) DO 3 J=1,3 L=L+1 3 RM(L)=TMP C PREPARE GRADIENT DO 4 I=1,NC1 4 DX(I)=ZERO C FIND CMS AND CALCULATED MASS WEIGHTED COORDINATES totm=zero cmass(1)=zero cmass(2)=zero cmass(3)=zero DO 6 I=1,NATM TOTM=TOTM+ATMASS(I) DO 6 J=1,3 CMASS(J)=CMASS(J)+ATMASS(I)*COORD(J,I) 6 CONTINUE DO 7 J=1,3 7 CMASS(J)=CMASS(J)/TOTM L=0 DO 8 I=1,NATM DO 8 J=1,3 TMP=SQRT(ATMASS(I)) L=L+1 X(L)=TMP*(COORD(J,I)-CMASS(J)) 8 CONTINUE c WRITE(6,9020) c CALL prsq(f,nc1,nc1,maxpar,1) c9020 FORMAT(/1X,'ENTER THE SUBROUTINE '// c * 1X,'UNPROJECTED FORCE CONSTANT MATRIX (HARTREE/BOHR**2)') c WRITE(6,*)' MASS-WEIGHTED COORDINATES AND CORRESPONDING GRADIENT' c DO 9 I=1,NC1 c9 WRITE(6,*)X(I),DX(I) C C 2. COMPUTE INERTIA TENSOR. DO 10 I=1,3 DO 10 J=1,3 10 ROT(I,J)=ZERO DO 20 I=1,NATM L=3*(I-1)+1 ROT(1,1)=ROT(1,1)+X(L+1)**2+X(L+2)**2 ROT(1,2)=ROT(1,2)-X(L)*X(L+1) ROT(1,3)=ROT(1,3)-X(L)*X(L+2) ROT(2,2)=ROT(2,2)+X(L)**2+X(L+2)**2 ROT(2,3)=ROT(2,3)-X(L+1)*X(L+2) 20 ROT(3,3)=ROT(3,3)+X(L)**2+X(L+1)**2 ROT(2,1)=ROT(1,2) ROT(3,1)=ROT(1,3) ROT(3,2)=ROT(2,3) C CHECK THE INERTIA TENSOR. CHK=ROT(1,1)*ROT(2,2)*ROT(3,3) IF(ABS(CHK).GT.CUT8) GO TO 21 c WRITE(6,23) c 23 FORMAT(/1X,'MATRIX OF INERTIA MOMENT') c CALL PRSQ(ROT,3,3,3,3) IF(ABS(ROT(1,1)).GT.CUT8) GO TO 11 C X=0 IF(ABS(ROT(2,2)).GT.CUT8) GO TO 12 C X,Y=0 IF(ABS(ROT(3,3)).GT.CUT8) GO TO 13 WRITE(6,14) ROT(1,1),ROT(2,2),ROT(3,3) 14 FORMAT(1X,'EVERY DIAGONAL ELEMENTS ARE ZERO ?',3F20.10) RETURN C C* 1. X,Y=0 BUT Z.NE.0 13 ROT(3,3)=ONE/ROT(3,3) GO TO 22 C Y.NE.0 12 IF(ABS(ROT(3,3)).GT.CUT8) GO TO 15 C* 2. X,Z=0 BUT Y.NE.0 ROT(2,2)=ONE/ROT(2,2) GO TO 22 C X.NE.0 11 IF(ABS(ROT(2,2)).GT.CUT8) GO TO 16 IF(ABS(ROT(3,3)).GT.CUT8) GO TO 17 C* 3. Y,Z=0 BUT X.NE.0 ROT(1,1)=ONE/ROT(1,1) GO TO 22 C* 4. X,Y.NE.0 BUT Z=0 16 DET=ROT(1,1)*ROT(2,2)-ROT(1,2)*ROT(2,1) TRP=ROT(1,1) ROT(1,1)=ROT(2,2)/DET ROT(2,2)=TRP/DET ROT(1,2)=-ROT(1,2)/DET ROT(2,1)=-ROT(2,1)/DET GO TO 22 C* 5. X,Z.NE.0 BUT Y=0 17 DET=ROT(1,1)*ROT(3,3)-ROT(1,3)*ROT(3,1) TRP=ROT(1,1) ROT(1,1)=ROT(3,3)/DET ROT(3,3)=TRP/DET ROT(1,3)=-ROT(1,3)/DET ROT(3,1)=-ROT(3,1)/DET GO TO 22 C* 6. Y,Z.NE.0 BUT X=0 15 DET=ROT(3,3)*ROT(2,2)-ROT(3,2)*ROT(2,3) TRP=ROT(3,3) ROT(3,3)=ROT(2,2)/DET ROT(2,2)=TRP/DET ROT(3,2)=-ROT(3,2)/DET ROT(2,3)=-ROT(2,3)/DET GO TO 22 21 CONTINUE C C.DEBUG. c CALL PRSQ(TENS(1,1,1),3,3,3,3) c CALL PRSQ(TENS(1,1,2),3,3,3,3) c CALL PRSQ(TENS(1,1,3),3,3,3,3) c CALL PRSQ(ROT,3,3,3,3) C C 4. COMPUTE INVERSION MATRIX OF ROT. C CALL MXLNEQ(ROT,3,3,DET,JRNK,EPS,SCR,+0) C IF(JRNK.LT.3) STOP 1 INFO=0 CALL DGEFA(ROT,3,3,ISCR,INFO) IF(INFO.NE.0) STOP DET=ZERO CALL DGEDI(ROT,3,3,ISCR,DETX,SCR,1) C 22 CONTINUE c WRITE (6,702) c 702 FORMAT(/1X,'INVERSE MATRIX OF MOMENT OF INERTIA.') c CALL PRSQ(ROT,3,3,3,3) C C 5. TOTAL MASS ---> TOTM. C C 6. COMPUTE P MATRIX C ---------------- DO 100 IP=1,NATM INDX=3*(IP-1) DO 100 JP=1,IP JNDX=3*(JP-1) DO 70 IC=1,3 JEND=3 IF(JP.EQ.IP) JEND=IC DO 70 JC=1,JEND SUM=ZERO DO 50 IA=1,3 DO 50 IB=1,3 IF(TENS(IA,IB,IC).EQ.0) GO TO 50 DO 30 JA=1,3 DO 30 JB=1,3 IF(TENS(JA,JB,JC).EQ.0) GO TO 30 SUM=SUM+TENS(IA,IB,IC)*TENS(JA,JB,JC)*ROT(IA,JA)* & X(INDX+IB)*X(JNDX+JB) 30 CONTINUE 50 CONTINUE II=INDX+IC JJ=JNDX+JC P(II,JJ)=SUM+DX(II)*DX(JJ) IF(IC.EQ.JC) P(II,JJ)=P(II,JJ)+ONE/(RM(II)*RM(JJ)*TOTM) 70 CONTINUE 100 CONTINUE C C 7. COMPUTE DELTA(I,J)-P(I,J) DO 110 I=1,NC1 DO 110 J=1,I P(I,J)=-P(I,J) IF(I.EQ.J) P(I,J) = ONE +P(I,J) 110 CONTINUE C C 8. NEGLECT SMALLER VALUES THAN 10**-8. DO 120 I=1,NC1 DO 120 J=1,I IF(ABS(P(I,J)).LT.CUT8) P(I,J)=ZERO P(J,I)=P(I,J) 120 CONTINUE C C.DEBUG. c WRITE(6,703) c 703 FORMAT(/1X,'PROJECTION MATRIX') c CALL PRSQ(P,NC1,NC1,NC1) c CALL PRSQ(P,NC1,NC1,maxpar,3) C C 10. POST AND PREMULTIPLY F BY P. C USE COF FOR SCRATCH. DO 150 I=1,NC1 DO 150 J=1,NC1 SUM=ZERO DO 140 K=1,NC1 140 SUM=SUM+F(I,K)*P(K,J) 150 COF(I,J)=SUM C C 11. COMPUTE P*F*P. DO 200 I=1,NC1 DO 200 J=1,NC1 SUM=ZERO DO 190 K=1,NC1 190 SUM=SUM+P(I,K)*COF(K,J) 200 F(I,J)=SUM C c WRITE(6,9030) c CALL prsq(f,nc1,nc1,maxpar,1) c9030 FORMAT(/1X,'LEAVE THE SUBROUTINE '// c * 1X,'PROJECTED FORCE CONSTANT MATRIX (HARTREE/BOHR**2)') RETURN END SUBROUTINE PRTHES(EIGVAL,NVAR) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' COMMON /NLLCOM/ HESS(MAXPAR,MAXPAR),BMAT(MAXPAR,MAXPAR), *PMAT(MAXPAR**2) COMMON/OPTEF/OLDF(MAXPAR),D(MAXPAR),VMODE(MAXPAR), $U(MAXPAR,MAXPAR),DD,rmin,rmax,omin,xlamd,xlamd0,skal, $MODE,NSTEP,NEGREQ,IPRNT DIMENSION EIGVAL(MAXPAR) IF (IPRNT.GE.4) THEN WRITE(6,*)' ' WRITE(6,*)' HESSIAN MATRIX' LOW=1 NUP=8 540 NUP=MIN(NUP,NVAR) WRITE(6,1000) (I,I=LOW,NUP) DO 550 I=1,NVAR WRITE(6,1010) I,(HESS(I,J),J=LOW,NUP) 550 CONTINUE NUP=NUP+8 LOW=LOW+8 IF(LOW.LE.NVAR) GOTO 540 ENDIF WRITE(6,*)' ' WRITE(6,*)' HESSIAN EIGENVALUES AND -VECTORS' LOW=1 NUP=8 560 NUP=MIN(NUP,NVAR) WRITE(6,1000) (I,I=LOW,NUP) WRITE(6,1020) (EIGVAL(I),I=LOW,NUP) DO 570 I=1,NVAR WRITE(6,1030) I,(U(I,J),J=LOW,NUP) 570 CONTINUE NUP=NUP+8 LOW=LOW+8 IF(LOW.LE.NVAR) GOTO 560 1000 FORMAT(/,3X,8I9) 1010 FORMAT(1X,I3,8F9.1) 1020 FORMAT(/,4X,8F9.1,/) 1030 FORMAT(1X,I3,8F9.4) RETURN END SUBROUTINE UPDHES(SVEC,TVEC,NVAR,IUPD) IMPLICIT DOUBLE PRECISION (A-H,O-Z) INCLUDE 'SIZES' DIMENSION TVEC(*),SVEC(*) LOGICAL FIRST COMMON/OPTEF/OLDF(MAXPAR),D(MAXPAR),VMODE(MAXPAR), $U(MAXPAR,MAXPAR),DD,rmin,rmax,omin,xlamd,xlamd0,skal, $MODE,NSTEP,NEGREQ,IPRNT CONVEX COMMON /NLLCOM/ HESS(MAXPAR,MAXPAR*3) COMMON /NLLCOM/ HESS(MAXPAR,MAXPAR), BMAT(MAXPAR,MAXPAR), . PMAT(MAXPAR**2) COMMON /GRADNT/ GRAD(MAXPAR),GNFINA C DATA ZERO/0.0D0/ C C UPDATING OF THE HESSIAN C DEPENDS ON CURRENT GRADIENTS, OLD GRADIENTS AND THE C CORRECTION VECTOR USED ON THE LAST CYCLE C SVEC & TVEC ARE FOR TEMPORARY STORAGE C C 2 UPDATING PROCEDURES ARE POSSIBLE C (I) THE POWELL UPDATE C THIS PRESERVES THE SYMMETRIC CHARACTER OF THE HESSIAN C WHILST ALLOWING ITS EIGENVALUE STRUCTURE TO CHANGE. C IT IS THE DEFAULT UPDATE FOR A TRANSITION STATE SEARCH C (II) THE BFGS UPDATE C THIS UPDATE HAS THE IMPORTANT CHARACTERISTIC OF RETAINING C POSITIVE DEFINITENESS (NOTE: THIS IS NOT RIGOROUSLY C GUARANTEED, BUT CAN BE CHECKED FOR BY THE PROGRAM). C IT IS THE DEFAULT UPDATE FOR A MINIMUM SEARCH C C SWITCH : IUPD C IUPD = 0 : SKIP UPDATE C IUPD = 1 : POWELL C IUPD = 2 : BFGS C IF (.NOT. FIRST) THEN FIRST=.TRUE. IF(IPRNT.GE.2) THEN IF (IUPD.EQ.0)WRITE(6,90) IF (IUPD.EQ.1)WRITE(6,80) IF (IUPD.EQ.2)WRITE(6,120) ENDIF ENDIF IF(IUPD.EQ.0) RETURN CONVEX DO 10 I=1,NVAR CONVEX TVEC(I)=ZERO CONVEX DO 10 J=1,NVAR CONVEX TVEC(I)=TVEC(I) + HESS(I,J)*D(J) CONVEX 10 CONTINUE DO 5 I=1,NVAR TVEC(I)=ZERO 5 CONTINUE DO 10 J=1,NVAR DO 10 I=1,NVAR TVEC(I)=TVEC(I) + HESS(I,J)*D(J) 10 CONTINUE C IF(IUPD.EQ.1) THEN C C (I) POWELL UPDATE C DO 20 I=1,NVAR TVEC(I)=GRAD(I)-OLDF(I)-TVEC(I) sVEC(I)=GRAD(I)-OLDF(I) 20 CONTINUE DDS=DD*DD DDTD=DOT(TVEC,D,NVAR) DDTD=DDTD/DDS C CONVEX DO 40 I=1,NVAR CONVEX DO 30 J=1,I CONVEX TEMP=TVEC(I)*D(J) + D(I)*TVEC(J) - D(I)*DDTD*D(J) CONVEX HESS(I,J)=HESS(I,J)+TEMP/DDS CONVEX HESS(J,I)=HESS(I,J) CONVEX 30 CONTINUE CONVEX 40 CONTINUE DO 40 I=2,NVAR C$DIR NO_RECURRENCE DO 30 J=1,I-1 TEMP=TVEC(I)*D(J) + D(I)*TVEC(J) - D(I)*DDTD*D(J) HESS(I,J)=HESS(I,J)+TEMP/DDS HESS(J,I)=HESS(I,J) 30 CONTINUE 40 CONTINUE DO 45 I=1,NVAR TEMP=D(I)*(2.0D0*TVEC(I) - D(I)*DDTD) HESS(I,I)=HESS(I,I)+TEMP/DDS 45 CONTINUE C ENDIF IF (IUPD.EQ.2) THEN C C (II) BFGS UPDATE C DO 50 I=1,NVAR SVEC(I)=GRAD(I)-OLDF(I) 50 CONTINUE DDS=DOT(SVEC,D,NVAR) C C IF DDS IS NEGATIVE, RETENTION OF POSITIVE DEFINITENESS IS NOT C GUARANTEED. PRINT A WARNING AND SKIP UPDATE THIS CYCLE. C cfrj With the current level shift technique I think the Hessian should cfrj be allowed to aquire negative eigenvalues. Without updating the cfrj optimization has the potential of stalling cfrj IF(DDS.LT.ZERO) THEN cfrj WRITE(6,100) cfrj WRITE(6,110) cfrj RETURN cfrj ENDIF C DDTD=DOT(D,TVEC,NVAR) C CONVEX DO 70 I=1,NVAR CONVEX DO 60 J=1,I CONVEX TEMP= (SVEC(I)*SVEC(J))/DDS - (TVEC(I)*TVEC(J))/DDTD CONVEX HESS(I,J)=HESS(I,J)+TEMP CONVEX HESS(J,I)=HESS(I,J) CONVEX 60 CONTINUE CONVEX 70 CONTINUE DO 70 I=2,NVAR C$DIR NO_RECURRENCE DO 60 J=1,I-1 TEMP= (SVEC(I)*SVEC(J))/DDS - (TVEC(I)*TVEC(J))/DDTD HESS(I,J)=HESS(I,J)+TEMP HESS(J,I)=HESS(I,J) 60 CONTINUE 70 CONTINUE DO 75 I=1,NVAR TEMP= (SVEC(I)*SVEC(I))/DDS - (TVEC(I)*TVEC(I))/DDTD HESS(I,I)=HESS(I,I)+TEMP 75 CONTINUE ENDIF C RETURN C 80 FORMAT(/,5X,'HESSIAN IS BEING UPDATED USING THE POWELL UPDATE',/) 90 FORMAT(/,5X,'HESSIAN IS NOT BEING UPDATED',/) c 100 FORMAT(5X,'WARNING! HEREDITARY POSITIVE DEFINITENESS ENDANGERED') c 110 FORMAT(5X,'UPDATE SKIPPED THIS CYCLE') 120 FORMAT(/,5X,'HESSIAN IS BEING UPDATED USING THE BFGS UPDATE',/) END C*MODULE BLAS1 *DECK DAXPY SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) IMPLICIT DOUBLE PRECISION(A-H,O-Z) DIMENSION DX(1),DY(1) C C CONSTANT TIMES A VECTOR PLUS A VECTOR. C DY(I) = DY(I) + DA * DX(I) C USES UNROLLED LOOPS FOR INCREMENTS EQUAL TO ONE. C JACK DONGARRA, LINPACK, 3/11/78. C IF(N.LE.0)RETURN IF (DA .EQ. 0.0D+00) RETURN IF(INCX.EQ.1.AND.INCY.EQ.1)GO TO 20 C C CODE FOR UNEQUAL INCREMENTS OR EQUAL INCREMENTS C NOT EQUAL TO 1 C IX = 1 IY = 1 IF(INCX.LT.0)IX = (-N+1)*INCX + 1 IF(INCY.LT.0)IY = (-N+1)*INCY + 1 DO 10 I = 1,N DY(IY) = DY(IY) + DA*DX(IX) IX = IX + INCX IY = IY + INCY 10 CONTINUE RETURN C C CODE FOR BOTH INCREMENTS EQUAL TO 1 C C C CLEAN-UP LOOP C 20 M = MOD(N,4) IF( M .EQ. 0 ) GO TO 40 DO 30 I = 1,M DY(I) = DY(I) + DA*DX(I) 30 CONTINUE IF( N .LT. 4 ) RETURN 40 MP1 = M + 1 DO 50 I = MP1,N,4 DY(I) = DY(I) + DA*DX(I) DY(I + 1) = DY(I + 1) + DA*DX(I + 1) DY(I + 2) = DY(I + 2) + DA*DX(I + 2) DY(I + 3) = DY(I + 3) + DA*DX(I + 3) 50 CONTINUE RETURN END C *********************************************************************** c below are math routines needed for prjfc. they are basicly just c matrix diagonalization routines and should at some point be replaced c with the diagonalization routine used in the rest of the program. c the routines below have been lifted from GAMESS C *********************************************************************** SUBROUTINE DGEDI(A,LDA,N,IPVT,DET,WORK,JOB) IMPLICIT DOUBLE PRECISION(A-H,O-Z) DIMENSION A(LDA,1),DET(2),WORK(1),IPVT(1) C C DGEDI COMPUTES THE DETERMINANT AND INVERSE OF A MATRIX C USING THE FACTORS COMPUTED BY DGECO OR DGEFA. C C ON ENTRY C C A DOUBLE PRECISION(LDA, N) C THE OUTPUT FROM DGECO OR DGEFA. C C LDA INTEGER C THE LEADING DIMENSION OF THE ARRAY A . C C N INTEGER C THE ORDER OF THE MATRIX A . C C IPVT INTEGER(N) C THE PIVOT VECTOR FROM DGECO OR DGEFA. C C WORK DOUBLE PRECISION(N) C WORK VECTOR. CONTENTS DESTROYED. C C JOB INTEGER C = 11 BOTH DETERMINANT AND INVERSE. C = 01 INVERSE ONLY. C = 10 DETERMINANT ONLY. C C ON RETURN C C A INVERSE OF ORIGINAL MATRIX IF REQUESTED. C OTHERWISE UNCHANGED. C C DET DOUBLE PRECISION(2) C DETERMINANT OF ORIGINAL MATRIX IF REQUESTED. C OTHERWISE NOT REFERENCED. C DETERMINANT = DET(1) * 10.0**DET(2) C WITH 1.0 .LE. ABS(DET(1)) .LT. 10.0 C OR DET(1) .EQ. 0.0 . C C ERROR CONDITION C C A DIVISION BY ZERO WILL OCCUR IF THE INPUT FACTOR CONTAINS C A ZERO ON THE DIAGONAL AND THE INVERSE IS REQUESTED. C IT WILL NOT OCCUR IF THE SUBROUTINES ARE CALLED CORRECTLY C AND IF DGECO HAS SET RCOND .GT. 0.0 OR DGEFA HAS SET C INFO .EQ. 0 . C C LINPACK. THIS VERSION DATED 08/14/78 . C CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB. C C SUBROUTINES AND FUNCTIONS C C BLAS DAXPY,DSCAL,DSWAP C FORTRAN ABS,MOD C C COMPUTE DETERMINANT C IF (JOB/10 .EQ. 0) GO TO 70 DET(1) = 1.0D+00 DET(2) = 0.0D+00 TEN = 10.0D+00 DO 50 I = 1, N IF (IPVT(I) .NE. I) DET(1) = -DET(1) DET(1) = A(I,I)*DET(1) C ...EXIT IF (DET(1) .EQ. 0.0D+00) GO TO 60 10 IF (ABS(DET(1)) .GE. 1.0D+00) GO TO 20 DET(1) = TEN*DET(1) DET(2) = DET(2) - 1.0D+00 GO TO 10 20 CONTINUE 30 IF (ABS(DET(1)) .LT. TEN) GO TO 40 DET(1) = DET(1)/TEN DET(2) = DET(2) + 1.0D+00 GO TO 30 40 CONTINUE 50 CONTINUE 60 CONTINUE 70 CONTINUE C C COMPUTE INVERSE(U) C IF (MOD(JOB,10) .EQ. 0) GO TO 150 DO 100 K = 1, N A(K,K) = 1.0D+00/A(K,K) T = -A(K,K) CALL DSCAL(K-1,T,A(1,K),1) KP1 = K + 1 IF (N .LT. KP1) GO TO 90 DO 80 J = KP1, N T = A(K,J) A(K,J) = 0.0D+00 CALL DAXPY(K,T,A(1,K),1,A(1,J),1) 80 CONTINUE 90 CONTINUE 100 CONTINUE C C FORM INVERSE(U)*INVERSE(L) C NM1 = N - 1 IF (NM1 .LT. 1) GO TO 140 DO 130 KB = 1, NM1 K = N - KB KP1 = K + 1 DO 110 I = KP1, N WORK(I) = A(I,K) A(I,K) = 0.0D+00 110 CONTINUE DO 120 J = KP1, N T = WORK(J) CALL DAXPY(N,T,A(1,J),1,A(1,K),1) 120 CONTINUE L = IPVT(K) IF (L .NE. K) CALL DSWAP(N,A(1,K),1,A(1,L),1) 130 CONTINUE 140 CONTINUE 150 CONTINUE RETURN END SUBROUTINE DGEFA(A,LDA,N,IPVT,INFO) IMPLICIT DOUBLE PRECISION(A-H,O-Z) DIMENSION A(LDA,1),IPVT(1) C C DGEFA FACTORS A DOUBLE PRECISION MATRIX BY GAUSSIAN ELIMINATION. C C DGEFA IS USUALLY CALLED BY DGECO, BUT IT CAN BE CALLED C DIRECTLY WITH A SAVING IN TIME IF RCOND IS NOT NEEDED. C (TIME FOR DGECO) = (1 + 9/N)*(TIME FOR DGEFA) . C C ON ENTRY C C A DOUBLE PRECISION(LDA, N) C THE MATRIX TO BE FACTORED. C C LDA INTEGER C THE LEADING DIMENSION OF THE ARRAY A . C C N INTEGER C THE ORDER OF THE MATRIX A . C C ON RETURN C C A AN UPPER TRIANGULAR MATRIX AND THE MULTIPLIERS C WHICH WERE USED TO OBTAIN IT. C THE FACTORIZATION CAN BE WRITTEN A = L*U WHERE C L IS A PRODUCT OF PERMUTATION AND UNIT LOWER C TRIANGULAR MATRICES AND U IS UPPER TRIANGULAR. C C IPVT INTEGER(N) C AN INTEGER VECTOR OF PIVOT INDICES. C C INFO INTEGER C = 0 NORMAL VALUE. C = K IF U(K,K) .EQ. 0.0 . THIS IS NOT AN ERROR C CONDITION FOR THIS SUBROUTINE, BUT IT DOES C INDICATE THAT DGESL OR DGEDI WILL DIVIDE BY ZERO C IF CALLED. USE RCOND IN DGECO FOR A RELIABLE C INDICATION OF SINGULARITY. C C LINPACK. THIS VERSION DATED 08/14/78 . C CLEVE MOLER, UNIVERSITY OF NEW MEXICO, ARGONNE NATIONAL LAB. C C SUBROUTINES AND FUNCTIONS C C BLAS DAXPY,DSCAL,IDAMAX C C GAUSSIAN ELIMINATION WITH PARTIAL PIVOTING C INFO = 0 NM1 = N - 1 IF (NM1 .LT. 1) GO TO 70 DO 60 K = 1, NM1 KP1 = K + 1 C C FIND L = PIVOT INDEX C L = IDAMAX(N-K+1,A(K,K),1) + K - 1 IPVT(K) = L C C ZERO PIVOT IMPLIES THIS COLUMN ALREADY TRIANGULARIZED C IF (A(L,K) .EQ. 0.0D+00) GO TO 40 C C INTERCHANGE IF NECESSARY C IF (L .EQ. K) GO TO 10 T = A(L,K) A(L,K) = A(K,K) A(K,K) = T 10 CONTINUE C C COMPUTE MULTIPLIERS C T = -1.0D+00/A(K,K) CALL DSCAL(N-K,T,A(K+1,K),1) C C ROW ELIMINATION WITH COLUMN INDEXING C DO 30 J = KP1, N T = A(L,J) IF (L .EQ. K) GO TO 20 A(L,J) = A(K,J) A(K,J) = T 20 CONTINUE CALL DAXPY(N-K,T,A(K+1,K),1,A(K+1,J),1) 30 CONTINUE GO TO 50 40 CONTINUE INFO = K 50 CONTINUE 60 CONTINUE 70 CONTINUE IPVT(N) = N IF (A(N,N) .EQ. 0.0D+00) INFO = N RETURN END C*MODULE BLAS1 *DECK DSCAL SUBROUTINE DSCAL(N,DA,DX,INCX) IMPLICIT DOUBLE PRECISION(A-H,O-Z) DIMENSION DX(*) C C SCALES A VECTOR BY A CONSTANT. C DX(I) = DA * DX(I) C USES UNROLLED LOOPS FOR INCREMENT EQUAL TO ONE. C JACK DONGARRA, LINPACK, 3/11/78. C IF(N.LE.0)RETURN IF(INCX.EQ.1)GO TO 20 C C CODE FOR INCREMENT NOT EQUAL TO 1 C NINCX = N*INCX DO 10 I = 1,NINCX,INCX DX(I) = DA*DX(I) 10 CONTINUE RETURN C C CODE FOR INCREMENT EQUAL TO 1 C C C CLEAN-UP LOOP C 20 M = MOD(N,5) IF( M .EQ. 0 ) GO TO 40 DO 30 I = 1,M DX(I) = DA*DX(I) 30 CONTINUE IF( N .LT. 5 ) RETURN 40 MP1 = M + 1 DO 50 I = MP1,N,5 DX(I) = DA*DX(I) DX(I + 1) = DA*DX(I + 1) DX(I + 2) = DA*DX(I + 2) DX(I + 3) = DA*DX(I + 3) DX(I + 4) = DA*DX(I + 4) 50 CONTINUE RETURN END C*MODULE BLAS1 *DECK DSWAP SUBROUTINE DSWAP (N,DX,INCX,DY,INCY) IMPLICIT DOUBLE PRECISION(A-H,O-Z) DIMENSION DX(*),DY(*) C C INTERCHANGES TWO VECTORS. C DX(I) <==> DY(I) C USES UNROLLED LOOPS FOR INCREMENTS EQUAL ONE. C JACK DONGARRA, LINPACK, 3/11/78. C IF(N.LE.0)RETURN IF(INCX.EQ.1.AND.INCY.EQ.1)GO TO 20 C C CODE FOR UNEQUAL INCREMENTS OR EQUAL INCREMENTS NOT EQUAL C TO 1 C IX = 1 IY = 1 IF(INCX.LT.0)IX = (-N+1)*INCX + 1 IF(INCY.LT.0)IY = (-N+1)*INCY + 1 DO 10 I = 1,N DTEMP = DX(IX) DX(IX) = DY(IY) DY(IY) = DTEMP IX = IX + INCX IY = IY + INCY 10 CONTINUE RETURN C C CODE FOR BOTH INCREMENTS EQUAL TO 1 C C C CLEAN-UP LOOP C 20 M = MOD(N,3) IF( M .EQ. 0 ) GO TO 40 DO 30 I = 1,M DTEMP = DX(I) DX(I) = DY(I) DY(I) = DTEMP 30 CONTINUE IF( N .LT. 3 ) RETURN 40 MP1 = M + 1 DO 50 I = MP1,N,3 DTEMP = DX(I) DX(I) = DY(I) DY(I) = DTEMP DTEMP = DX(I + 1) DX(I + 1) = DY(I + 1) DY(I + 1) = DTEMP DTEMP = DX(I + 2) DX(I + 2) = DY(I + 2) DY(I + 2) = DTEMP 50 CONTINUE RETURN END mopac7-1.15/fortran/xyzint.f0000644000175000017500000002042511053302063012732 00000000000000 SUBROUTINE XYZINT(XYZ,NUMAT,NA,NB,NC,DEGREE,GEO) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION XYZ(3,*), NA(*), NB(*), NC(*), GEO(3,*) *********************************************************************** * * XYZINT WORKS OUT THE INTERNAL COORDINATES OF A MOLECULE. * THE "RULES" FOR THE CONNECTIVITY ARE AS FOLLOWS: * ATOM I IS DEFINED AS BEING AT A DISTANCE FROM THE NEAREST * ATOM J, ATOM J ALREADY HAVING BEEN DEFINED. * ATOM I MAKES AN ANGLE WITH ATOM J AND THE ATOM K, WHICH HAS * ALREADY BEEN DEFINED, AND IS THE NEAREST ATOM TO J * ATOM I MAKES A DIHEDRAL ANGLE WITH ATOMS J, K, AND L. L HAVING * BEEN DEFINED AND IS THE NEAREST ATOM TO K, AND J, K AND L * HAVE A CONTAINED ANGLE IN THE RANGE 15 TO 165 DEGREES, * IF POSSIBLE. * * IF(NA(2).EQ.-1 OR -2 THEN THE ORIGINAL CONNECTIVITY IS USED. * * NOTE THAT GEO AND XYZ MUST NOT BE THE SAME IN THE CALL. * * ON INPUT XYZ = CARTESIAN ARRAY OF NUMAT ATOMS * DEGREE = 1 IF ANGLES ARE TO BE IN RADIANS * DEGREE = 57.29578 IF ANGLES ARE TO BE IN DEGREES * *********************************************************************** COMMON /GEOOK/ IGEOOK COMMON /NUMCAL/ NUMCAL DATA ICALCN/0/ IGEOOK=99 IF(.NOT.(ICALCN.NE.NUMCAL).AND.NA(2).EQ.-1 .OR. NA(2).EQ.-2)THEN NA(2)=1 DO 10 I=2,NUMAT J=NA(I) IF(I.GT.3)CALL DIHED(XYZ,I,J,NB(I),NC(I),GEO(3,I)) IF(I.GT.2)CALL BANGLE(XYZ,I,J,NB(I),GEO(2,I)) GEO(1,I)=SQRT((XYZ(1,I)-XYZ(1,J))**2+ 1 (XYZ(2,I)-XYZ(2,J))**2+ 2 (XYZ(3,I)-XYZ(3,J))**2) 10 CONTINUE ELSE IF(NA(2).EQ.-1)ICALCN=NUMCAL DO 30 I=1,NUMAT NA(I)=2 NB(I)=3 NC(I)=4 IM1=I-1 IF(IM1.EQ.0)GOTO 30 SUM=1.D30 DO 20 J=1,IM1 R=(XYZ(1,I)-XYZ(1,J))**2+ 1 (XYZ(2,I)-XYZ(2,J))**2+ 2 (XYZ(3,I)-XYZ(3,J))**2 IF(R.LT.SUM.AND.NA(J).NE.J.AND.NB(J).NE.J) THEN SUM=R K=J ENDIF 20 CONTINUE C C ATOM I IS NEAREST TO ATOM K C NA(I)=K IF(I.GT.2)NB(I)=NA(K) IF(I.GT.3)NC(I)=NB(K) C C FIND ANY ATOM TO RELATE TO NA(I) C 30 CONTINUE ENDIF NA(1)=0 NB(1)=0 NC(1)=0 NB(2)=0 NC(2)=0 NC(3)=0 CALL XYZGEO(XYZ,NUMAT,NA,NB,NC,DEGREE,GEO) RETURN END SUBROUTINE XYZGEO(XYZ,NUMAT,NA,NB,NC,DEGREE,GEO) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION XYZ(3,*), NA(*), NB(*), NC(*), GEO(3,*) *********************************************************************** * * XYZGEO CONVERTS COORDINATES FROM CARTESIAN TO INTERNAL. * * ON INPUT XYZ = ARRAY OF CARTESIAN COORDINATES * NUMAT= NUMBER OF ATOMS * NA = NUMBERS OF ATOM TO WHICH ATOMS ARE RELATED * BY DISTANCE * NB = NUMBERS OF ATOM TO WHICH ATOMS ARE RELATED * BY ANGLE * NC = NUMBERS OF ATOM TO WHICH ATOMS ARE RELATED * BY DIHEDRAL * * ON OUTPUT GEO = INTERNAL COORDINATES IN ANGSTROMS, RADIANS, * AND RADIANS * *********************************************************************** DO 30 I=2,NUMAT J=NA(I) K=NB(I) L=NC(I) IF(I.LT.3) GOTO 30 II=I CALL BANGLE(XYZ,II,J,K,GEO(2,I)) GEO(2,I)=GEO(2,I)*DEGREE IF(I.LT.4) GOTO 30 C C MAKE SURE DIHEDRAL IS MEANINGLFUL C CALL BANGLE(XYZ,J,K,L,ANGL) TOL=0.2617994D0 IF(ANGL.GT.3.1415926D0-TOL.OR.ANGL.LT.TOL)THEN C C ANGLE IS UNSATISFACTORY, LET'S SEARCH FOR ANOTHER ATOM FOR C DEFINING THE DIHEDRAL. 10 SUM=100.D0 DO 20 I1=1,II-1 R=(XYZ(1,I1)-XYZ(1,K))**2+ 1 (XYZ(2,I1)-XYZ(2,K))**2+ 2 (XYZ(3,I1)-XYZ(3,K))**2 IF(R.LT.SUM.AND.I1.NE.J.AND.I1.NE.K) THEN CALL BANGLE(XYZ,J,K,I1,ANGL) IF(ANGL.LT.3.1415926D0-TOL.AND.ANGL.GT.TOL)THEN SUM=R L=I1 NC(II)=L ENDIF ENDIF 20 CONTINUE IF(SUM.GT.99.D0.AND.TOL.GT.0.1D0)THEN C C ANYTHING WITHIN 5 DEGREES? C TOL=0.087266D0 GOTO 10 ENDIF ENDIF CALL DIHED(XYZ,II,J,K,L,GEO(3,I)) GEO(3,I)=GEO(3,I)*DEGREE 30 GEO(1,I)= SQRT((XYZ(1,I)-XYZ(1,J))**2+ 1 (XYZ(2,I)-XYZ(2,J))**2+ 2 (XYZ(3,I)-XYZ(3,J))**2) GEO(1,1)=0.D0 GEO(2,1)=0.D0 GEO(3,1)=0.D0 GEO(2,2)=0.D0 GEO(3,2)=0.D0 GEO(3,3)=0.D0 RETURN END SUBROUTINE BANGLE(XYZ,I,J,K,ANGLE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION XYZ(3,*) ********************************************************************* * * BANGLE CALCULATES THE ANGLE BETWEEN ATOMS I,J, AND K. THE * CARTESIAN COORDINATES ARE IN XYZ. * ********************************************************************* D2IJ = (XYZ(1,I)-XYZ(1,J))**2+ 1 (XYZ(2,I)-XYZ(2,J))**2+ 2 (XYZ(3,I)-XYZ(3,J))**2 D2JK = (XYZ(1,J)-XYZ(1,K))**2+ 1 (XYZ(2,J)-XYZ(2,K))**2+ 2 (XYZ(3,J)-XYZ(3,K))**2 D2IK = (XYZ(1,I)-XYZ(1,K))**2+ 1 (XYZ(2,I)-XYZ(2,K))**2+ 2 (XYZ(3,I)-XYZ(3,K))**2 XY = SQRT(D2IJ*D2JK) TEMP = 0.5D0 * (D2IJ+D2JK-D2IK) / XY IF (TEMP .GT. 1.0D0) TEMP=1.0D0 IF (TEMP .LT. -1.0D0) TEMP=-1.0D0 ANGLE = ACOS( TEMP ) RETURN END SUBROUTINE DIHED(XYZ,I,J,K,L,ANGLE) IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION XYZ(3,*) ********************************************************************* * * DIHED CALCULATES THE DIHEDRAL ANGLE BETWEEN ATOMS I, J, K, * AND L. THE CARTESIAN COORDINATES OF THESE ATOMS * ARE IN ARRAY XYZ. * * DIHED IS A MODIFIED VERSION OF A SUBROUTINE OF THE SAME NAME * WHICH WAS WRITTEN BY DR. W. THEIL IN 1973. * ********************************************************************* XI1=XYZ(1,I)-XYZ(1,K) XJ1=XYZ(1,J)-XYZ(1,K) XL1=XYZ(1,L)-XYZ(1,K) YI1=XYZ(2,I)-XYZ(2,K) YJ1=XYZ(2,J)-XYZ(2,K) YL1=XYZ(2,L)-XYZ(2,K) ZI1=XYZ(3,I)-XYZ(3,K) ZJ1=XYZ(3,J)-XYZ(3,K) ZL1=XYZ(3,L)-XYZ(3,K) C ROTATE AROUND Z AXIS TO PUT KJ ALONG Y AXIS DIST= SQRT(XJ1**2+YJ1**2+ZJ1**2) COSA=ZJ1/DIST IF(COSA.GT.1.0D0) COSA=1.0D0 IF(COSA.LT.-1.0D0) COSA=-1.0D0 DDD=1.0D0-COSA**2 IF(DDD.LE.0.0) GO TO 10 YXDIST=DIST* SQRT(DDD) IF(YXDIST.GT.1.0D-6) GO TO 20 10 CONTINUE XI2=XI1 XL2=XL1 YI2=YI1 YL2=YL1 COSTH=COSA SINTH=0.D0 GO TO 30 20 COSPH=YJ1/YXDIST SINPH=XJ1/YXDIST XI2=XI1*COSPH-YI1*SINPH XL2=XL1*COSPH-YL1*SINPH YI2=XI1*SINPH+YI1*COSPH YJ2=XJ1*SINPH+YJ1*COSPH YL2=XL1*SINPH+YL1*COSPH C ROTATE KJ AROUND THE X AXIS SO KJ LIES ALONG THE Z AXIS COSTH=COSA SINTH=YJ2/DIST 30 CONTINUE YI3=YI2*COSTH-ZI1*SINTH YL3=YL2*COSTH-ZL1*SINTH CALL DANG(XL2,YL3,XI2,YI3,ANGLE) IF (ANGLE .LT. 0.) ANGLE=4.0D0* ASIN(1.0D00)+ANGLE IF (ANGLE .GE. 6.2831853D0 ) ANGLE=0.D0 RETURN END SUBROUTINE DANG(A1,A2,B1,B2,RCOS) IMPLICIT DOUBLE PRECISION (A-H,O-Z) ********************************************************************** * * DANG DETERMINES THE ANGLE BETWEEN THE POINTS (A1,A2), (0,0), * AND (B1,B2). THE RESULT IS PUT IN RCOS. * ********************************************************************** ZERO=1.0D-6 IF( ABS(A1).LT.ZERO.AND. ABS(A2).LT.ZERO) GO TO 10 IF( ABS(B1).LT.ZERO.AND. ABS(B2).LT.ZERO) GO TO 10 ANORM=1.0D0/ SQRT(A1**2+A2**2) BNORM=1.0D0/ SQRT(B1**2+B2**2) A1=A1*ANORM A2=A2*ANORM B1=B1*BNORM B2=B2*BNORM SINTH=(A1*B2)-(A2*B1) COSTH=A1*B1+A2*B2 IF(COSTH.GT.1.0D0) COSTH=1.0D0 IF(COSTH.LT.-1.0D0) COSTH=-1.0D0 RCOS= ACOS(COSTH) IF( ABS(RCOS).LT.4.0D-4) GO TO 10 IF(SINTH.GT.0.D0) RCOS=4.0D0* ASIN(1.0D00)-RCOS RCOS=-RCOS RETURN 10 RCOS=0.0D0 RETURN END mopac7-1.15/fortran/hcore.f0000644000175000017500000001544411053302064012473 00000000000000 SUBROUTINE HCORE (COORD,H,W, WJ,WK,ENUCLR) IMPLICIT DOUBLE PRECISION (A-H,O-Z) LOGICAL FLDON INCLUDE 'SIZES' DIMENSION COORD(3,*),H(*), WJ(N2ELEC), WK(N2ELEC), W(N2ELEC) COMMON /MOLKST/ NUMAT,NAT(NUMATM),NFIRST(NUMATM),NMIDLE(NUMATM), 1 NLAST(NUMATM), NORBS, NELECS,NALPHA,NBETA, 2 NCLOSE,NOPEN,NDUMY,FRACT 3 /MOLORB/ USPD(MAXORB),DUMY(MAXORB) 4 /KEYWRD/ KEYWRD COMMON /EULER / TVEC(3,3), ID COMMON /MULTIP/ DD(107),QQ(107),AM(107),AD(107),AQ(107) COMMON /CORE / CORE(107) COMMON /FIELD / EFIELD(3) COMMON /NUMCAL/ NUMCAL C COSMO change LOGICAL ISEPS, USEPS, UPDA COMMON /ISEPS/ ISEPS, USEPS, UPDA C end of COSMO change ************************************************************************ C C HCORE GENERATES THE ONE-ELECTRON MATRIX AND TWO ELECTRON INTEGRALS C FOR A GIVEN MOLECULE WHOSE GEOMETRY IS DEFINED IN CARTESIAN C COORDINATES. C C ON INPUT COORD = COORDINATES OF THE MOLECULE. C C ON OUTPUT H = ONE-ELECTRON MATRIX. C W = TWO-ELECTRON INTEGRALS. C ENUCLR = NUCLEAR ENERGY ************************************************************************ CHARACTER*241 KEYWRD, TMPKEY LOGICAL FIRST,DEBUG SAVE FIRST, IONE, CUTOFF, DEBUG DIMENSION E1B(10),E2A(10),DI(9,9), WJD(100), WKD(100) DATA ICALCN/0/ FIRST=(ICALCN.NE.NUMCAL) ICALCN=NUMCAL IF (FIRST) THEN IONE=1 CUTOFF=1.D10 IF(ID.NE.0)CUTOFF=60.D0 IF(ID.NE.0)IONE=0 DEBUG=(INDEX(KEYWRD,'HCORE') .NE. 0) ******************************************************************* XF=0.D0 YF=0.D0 ZF=0.D0 TMPKEY=KEYWRD I=INDEX(TMPKEY,' FIELD(') IF(I.EQ.0) GOTO 6 C C ERASE ALL TEXT FROM TMPKEY EXCEPT FIELD DATA C TMPKEY(:I)=' ' TMPKEY(INDEX(TMPKEY,')'):)=' ' C C READ IN THE EFFECTIVE FIELD IN X,Y,Z COORDINATES C XF=READA(TMPKEY,I) I=INDEX(TMPKEY,',') IF(I.EQ.0) GOTO 5 TMPKEY(I:I)=' ' YF=READA(TMPKEY,I) I=INDEX(TMPKEY,',') IF(I.EQ.0) GOTO 5 TMPKEY(I:I)=' ' ZF=READA(TMPKEY,I) 5 CONTINUE WRITE(6,'(/10X,''THE ELECTRIC FIELD IS'',3F10.5)')XF,YF,ZF WRITE(6,'(10X,''IN 8*A.U. (8*27.21/0.529 VOLTS/ANGSTROM)'',/)') 6 CONTINUE EFIELD(1)=XF EFIELD(2)=YF EFIELD(3)=ZF C********************************************************************** ENDIF FLDON = .FALSE. IF ((EFIELD(1).NE.0.0D00).OR.(EFIELD(2).NE.0.0D00).OR. 1 (EFIELD(3).NE.0.0D00)) THEN FLDCON = 51.4257D00 FLDON = .TRUE. ENDIF DO 10 I=1,(NORBS*(NORBS+1))/2 10 H(I)=0.D0 ENUCLR=0.D0 KR=1 DO 110 I=1,NUMAT IA=NFIRST(I) IB=NLAST(I) IC=NMIDLE(I) NI=NAT(I) C C FIRST WE FILL THE DIAGONALS, AND OFF-DIAGONALS ON THE SAME ATOM C DO 30 I1=IA,IB I2=I1*(I1-1)/2+IA-1 DO 20 J1=IA,I1 I2=I2+1 H(I2)=0.D0 IF (FLDON) THEN IO1 = I1 - IA JO1 = J1 - IA IF ((JO1.EQ.0).AND.(IO1.EQ.1)) THEN HTERME = -0.529177D00*DD(NI)*EFIELD(1)*FLDCON H(I2) = HTERME ENDIF IF ((JO1.EQ.0).AND.(IO1.EQ.2)) THEN HTERME = -0.529177D00*DD(NI)*EFIELD(2)*FLDCON H(I2) = HTERME ENDIF IF ((JO1.EQ.0).AND.(IO1.EQ.3)) THEN HTERME = -0.529177D00*DD(NI)*EFIELD(3)*FLDCON H(I2) = HTERME ENDIF ENDIF 20 CONTINUE H(I2) = USPD(I1) IF (FLDON) THEN FNUC = -(EFIELD(1)*COORD(1,I) + EFIELD(2)*COORD(2,I) + 1 EFIELD(3)*COORD(3,I))*FLDCON H(I2) = H(I2) + FNUC ENDIF 30 CONTINUE C C FILL THE ATOM-OTHER ATOM ONE-ELECTRON MATRIX C IM1=I-IONE DO 100 J=1,IM1 HALF=1.D0 IF(I.EQ.J)HALF=0.5D0 JA=NFIRST(J) JB=NLAST(J) JC=NMIDLE(J) NJ=NAT(J) CALL H1ELEC(NI,NJ,COORD(1,I),COORD(1,J),DI) I2=0 DO 40 I1=IA,IB II=I1*(I1-1)/2+JA-1 I2=I2+1 J2=0 JJ=MIN(I1,JB) DO 40 J1=JA,JJ II=II+1 J2=J2+1 40 H(II)=H(II)+DI(I2,J2) C C CALCULATE THE TWO-ELECTRON INTEGRALS, W; THE ELECTRON NUCLEAR TERMS C E1B AND E2A; AND THE NUCLEAR-NUCLEAR TERM ENUC. C IF(ID.EQ.0) THEN CALL ROTATE(NI,NJ,COORD(1,I),COORD(1,J), 1 W(KR), KR,E1B,E2A,ENUC,CUTOFF) ELSE KRO=KR CALL SOLROT(NI,NJ,COORD(1,I),COORD(1,J), 1 WJD, WKD,KR,E1B,E2A,ENUC,CUTOFF) JJ=0 DO 50 II=KRO,KR-1 JJ=JJ+1 WJ(II)=WJD(JJ) 50 WK(II)=WKD(JJ) ENDIF ENUCLR = ENUCLR + ENUC C C ADD ON THE ELECTRON-NUCLEAR ATTRACTION TERM FOR ATOM I. C I2=0 DO 60 I1=IA,IC II=I1*(I1-1)/2+IA-1 DO 60 J1=IA,I1 II=II+1 I2=I2+1 60 H(II)=H(II)+E1B(I2)*HALF DO 70 I1=IC+1,IB II=(I1*(I1+1))/2 70 H(II)=H(II)+E1B(1)*HALF C C ADD ON THE ELECTRON-NUCLEAR ATTRACTION TERM FOR ATOM J. C I2=0 DO 80 I1=JA,JC II=I1*(I1-1)/2+JA-1 DO 80 J1=JA,I1 II=II+1 I2=I2+1 80 H(II)=H(II)+E2A(I2)*HALF DO 90 I1=JC+1,JB II=(I1*(I1+1))/2 90 H(II)=H(II)+E2A(1)*HALF 100 CONTINUE 110 CONTINUE C COSMO change C A. KLAMT 16.7.91 IF (USEPS) THEN C The following routine adds the dielectric correction for the electron-core C interaction to the diagonal elements of H CALL ADDHCR (H) C In the following routine the dielectric correction to the core-core- C interaction is added to ENUCLR CALL ADDNUC (ENUCLR) ENDIF C end of COSMO change IF( .NOT. DEBUG) RETURN WRITE(6,'(//10X,''ONE-ELECTRON MATRIX FROM HCORE'')') CALL VECPRT(H,NORBS) J=MIN(400,KR) IF(ID.EQ.0) THEN WRITE(6,'(//10X,''TWO-ELECTRON MATRIX IN HCORE''/)') WRITE(6,120)(W(I),I=1,J) ELSE WRITE(6,'(//10X,''TWO-ELECTRON J MATRIX IN HCORE''/)') WRITE(6,120)(WJ(I),I=1,J) WRITE(6,'(//10X,''TWO-ELECTRON K MATRIX IN HCORE''/)') WRITE(6,120)(WK(I),I=1,J) ENDIF 120 FORMAT(10F8.4) RETURN END mopac7-1.15/mkinstalldirs0000755000175000017500000000277011053302064012355 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1 2004/08/13 12:03:25 thassine Exp $ errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case "${1}" in -h | --help | --h* ) # -h for help echo "${usage}" 1>&2; exit 0 ;; -m ) # -m PERM arg shift test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } dirmode="${1}" shift ;; -- ) shift; break ;; # stop option processing -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option * ) break ;; # first non-opt arg esac done for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod $dirmode "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode:shell-script # sh-indentation:3 # End: