From eed1b4d1428de66b3e71c6c477ec75db77703999 Mon Sep 17 00:00:00 2001 From: momokchung Date: Wed, 15 Mar 2023 16:02:58 -0500 Subject: [PATCH 01/15] implement exrepel3.f --- source/Makefile | 1166 +++++++++++++++++++++++++++++++++++++++++++++ source/analysis.f | 6 +- source/exrepel1.f | 72 +++ source/exrepel3.f | 754 +++++++++++++++++++++++++++++ source/final.f | 16 + source/initprm.f | 9 + source/kxrepel.f | 196 ++++++++ source/kxrepl.f | 26 + source/mechanic.f | 1 + source/readprm.f | 19 +- source/reppot.f | 2 + source/xrepel.f | 30 ++ 12 files changed, 2295 insertions(+), 2 deletions(-) create mode 100644 source/Makefile create mode 100644 source/exrepel1.f create mode 100644 source/exrepel3.f create mode 100644 source/kxrepel.f create mode 100644 source/kxrepl.f create mode 100644 source/xrepel.f diff --git a/source/Makefile b/source/Makefile new file mode 100644 index 000000000..a8636fb1e --- /dev/null +++ b/source/Makefile @@ -0,0 +1,1166 @@ +## +################################################################### +## ## +## Makefile for Building the Tinker Molecular Modeling Package ## +## ## +################################################################### +## + +# source directory +src := $(PWD) +# release / debug / profile / etc. +opt := release +# gfortran / gfortran8 / gfortran-8 / ifort / ifort14 / ifort-14 / etc. +F77 := gfortran +# FFTW directory +fftw := /home/kchung25/tinker/fftw + +################################################################### +## Master Directory Locations; Change as Needed for Local Site ## +################################################################### + +## TINKERDIR Tinker Distribution Directory +## TINKER_LIBDIR Libraries needed to build Tinker +## BINDIR Directory with Tinker Executables +## LINKDIR Linked Copies of Tinker Executables +## FFTWDIR FFTW Top-Level Directory +## FFTW_LIB_DIR Directory with FFTW Libraries +## FFTW_LIBS FFTW Libraries needed to build Tinker +## APBSDIR APBS Top-Level Directory +## APBS_INC_DIR Directory with APBS Include Files +## APBS_LIB_DIR Directory with APBS Libraries +## APBS_LIBS APBS Libraries needed to build Tinker + +TINKERDIR := /home/kchung25/tinker_rel +TINKER_LIBDIR := $(TINKERDIR)/lib +BINDIR := $(TINKERDIR)/bin +LINKDIR := /usr/local/bin + +ifeq ($(fftw), default__) + FFTWDIR := $(TINKERDIR)/fftw +else + FFTWDIR := $(fftw) +endif +FFTW_LIBDIR := -L$(FFTWDIR)/lib +FFTW_LIBS := -lfftw3_threads -lfftw3 + +APBSDIR := $(TINKERDIR)/apbs +APBS_INCDIR := -I$(APBSDIR)/include +APBS_LIBDIR := -L$(APBSDIR)/lib +APBS_LIBS := -lapbsmainroutines -lapbs -lmaloc -lapbsblas + +###################### +## Operating System ## +###################### +# Darwin (macOS) / Linux / CYGWIN_NT +os__ := $(shell uname -s) + +ifeq ($(os__), Darwin) +else ifeq ($(os__), Linux) +else ifeq ($(shell echo $(os__) | cut -c 1-9), CYGWIN_NT) +else +$(error Unknown OS -- $(os__); Please help with us) +endif + +################## +## F77 Compiler ## +################## +use_gfortran__ := false +use_ifort := false +found__ := false + +f77__ := $(shell echo $(F77) | cut -c 1-8) +ifeq ($(f77__), gfortran) + use_gfortran__ := true + found__ := true +endif +f77__ := $(shell echo $(F77) | cut -c 1-5) +ifeq ($(f77__), ifort) + use_ifort__ := true + found__ := true +endif +ifneq ($(found__), true) +$(error Unknown fortran compiler -- $(F77); Please help with us) +endif + +################### +## Compile Flags ## +################### + +ifeq ($(use_gfortran__), true) + ifeq ($(os__), Linux) + ifeq ($(opt), release) + OPTFLAGS := -Ofast -msse3 -fopenmp + else ifeq ($(opt), profile) + OPTFLAGS := + else + # debug + OPTFLAGS := + endif + F77FLAGS := -c + LIBDIR := -L. -L$(TINKER_LIBDIR)/linux + LIBS := + LIBFLAGS := -crusv + RANLIB := ranlib + LINKFLAGS := $(OPTFLAGS) -static-libgcc + RENAME := rename_bin + endif + + ifeq ($(os__), Darwin) + ifeq ($(opt), release) + OPTFLAGS := -Ofast -mssse3 -fopenmp + else ifeq ($(opt), profile) + OPTFLAGS := + else + # debug + OPTFLAGS := + endif + F77FLAGS := -c + LIBDIR := -L. -L$(TINKER_LIBDIR)/macos + LIBS := + LIBFLAGS := -crusv + RANLIB := ranlib -c + LINKFLAGS := $(OPTFLAGS) -static-libgcc + RENAME := rename_bin + endif + + ifeq ($(shell echo $(os__) | cut -c 1-9), CYGWIN_NT) + ifeq ($(opt), release) + OPTFLAGS := -Ofast -msse3 -fopenmp + else ifeq ($(opt), profile) + OPTFLAGS := + else + # debug + OPTFLAGS := + endif + F77FLAGS := -c + LIBDIR := -L. -L$(TINKER_LIBDIR)/windows + LIBS := + LIBFLAGS := -crusv + RANLIB := ranlib + LINKFLAGS := $(OPTFLAGS) -static + RENAME := rename_exe + endif +endif + +ifeq ($(use_ifort__), true) + ifeq ($(os__), Linux) + ifeq ($(opt), release) + OPTFLAGS := -O3 -no-ipo -no-prec-div -recursive -qopenmp + else ifeq ($(opt), profile) + OPTFLAGS := + else + # debug + OPTFLAGS := + endif + F77FLAGS := -c -xHost + LIBDIR := -L. -L$(TINKER_LIBDIR)/linux + LIBS := + LIBFLAGS := -crusv + RANLIB := echo + LINKFLAGS := $(OPTFLAGS) -static-libgcc -static-intel + RENAME := rename_bin + endif + + ifeq ($(os__), Darwin) + ifeq ($(opt), release) + OPTFLAGS := -O3 -no-ipo -no-prec-div -mdynamic-no-pic -qopenmp + else ifeq ($(opt), profile) + OPTFLAGS := + else + # debug + OPTFLAGS := + endif + F77FLAGS := -c -axSSSE3 + LIBDIR := -L. -L$(TINKER_LIBDIR)/macos + LIBS := + LIBFLAGS := -crusv + RANLIB := ranlib -c + LINKFLAGS := $(OPTFLAGS) -static-intel -Wl,-stack_size,0x10000000 + RENAME := rename_bin + endif +endif + +################################################################# +## Should not be Necessary to Change Things Below this Point ## +################################################################# + +LIBOBJS := action.o active.o align.o alterchg.o alterpol.o analysis.o \ + analyz.o angang.o angbnd.o angles.o angpot.o angtor.o argue.o \ + ascii.o atmlst.o atomid.o atoms.o attach.o baoab.o basefile.o \ + bath.o beeman.o bicubic.o bitor.o bitors.o bndpot.o bndstr.o \ + bonds.o born.o bound.o bounds.o boxes.o bussi.o calendar.o cell.o \ + center.o cflux.o charge.o chgpen.o chgpot.o chgtrn.o chkpole.o \ + chkring.o chkxyz.o cholesky.o chrono.o chunks.o clock.o cluster.o \ + column.o command.o connect.o connolly.o control.o couple.o cspline.o \ + ctrpot.o cutoffs.o damping.o dcflux.o deflate.o delete.o deriv.o \ + dexpol.o diagq.o diffeq.o dipole.o disgeo.o disp.o dma.o domega.o \ + dsppot.o eangang.o eangang1.o eangang2.o eangang3.o eangle.o \ + eangle1.o eangle2.o eangle3.o eangtor.o eangtor1.o eangtor2.o \ + eangtor3.o ebond.o ebond1.o ebond2.o ebond3.o ebuck.o ebuck1.o \ + ebuck2.o ebuck3.o echarge.o echarge1.o echarge2.o echarge3.o \ + echgdpl.o echgdpl1.o echgdpl2.o echgdpl3.o echgtrn.o echgtrn1.o \ + echgtrn2.o echgtrn3.o edipole.o edipole1.o edipole2.o edipole3.o \ + edisp.o edisp1.o edisp2.o edisp3.o egauss.o egauss1.o egauss2.o \ + egauss3.o egeom.o egeom1.o egeom2.o egeom3.o ehal.o ehal1.o ehal2.o \ + ehal3.o eimprop.o eimprop1.o eimprop2.o eimprop3.o eimptor.o \ + eimptor1.o eimptor2.o eimptor3.o elj.o elj1.o elj2.o elj3.o embed.o \ + emetal.o emetal1.o emetal2.o emetal3.o emm3hb.o emm3hb1.o emm3hb2.o \ + emm3hb3.o empole.o empole1.o empole2.o empole3.o energi.o energy.o \ + eopbend.o eopbend1.o eopbend2.o eopbend3.o eopdist.o eopdist1.o \ + eopdist2.o eopdist3.o epitors.o epitors1.o epitors2.o epitors3.o \ + epolar.o epolar1.o epolar2.o epolar3.o erepel.o erepel1.o erepel2.o \ + erepel3.o erf.o erxnfld.o erxnfld1.o erxnfld2.o erxnfld3.o esolv.o \ + esolv1.o esolv2.o esolv3.o estrbnd.o estrbnd1.o estrbnd2.o estrbnd3.o \ + estrtor.o estrtor1.o estrtor2.o estrtor3.o etors.o etors1.o etors2.o \ + etors3.o etortor.o etortor1.o etortor2.o etortor3.o eurey.o eurey1.o \ + eurey2.o eurey3.o evcorr.o ewald.o exfield.o expol.o exrepel1.o \ + exrepel3.o extfld.o extra.o extra1.o extra2.o extra3.o faces.o \ + fatal.o fft.o fft3d.o fftpack.o field.o fields.o files.o final.o \ + flatten.o fracs.o freeunit.o freeze.o geometry.o getarc.o getcart.o \ + getdcd.o getint.o getkey.o getmol.o getmol2.o getnumb.o getpdb.o \ + getprm.o getref.o getstring.o gettext.o getword.o getxyz.o ghmcstep.o \ + gkstuf.o gradient.o gradrgd.o gradrot.o group.o groups.o grpline.o \ + gyrate.o hescut.o hessian.o hessn.o hessrgd.o hessrot.o hpmf.o \ + hybrid.o ielscf.o image.o impose.o improp.o imptor.o induce.o \ + inertia.o inform.o initatom.o initial.o initprm.o initres.o initrot.o \ + insert.o inter.o invbeta.o invert.o iounit.o jacobi.o kanang.o \ + kangang.o kangle.o kangs.o kangtor.o kantor.o katom.o katoms.o \ + kbond.o kbonds.o kcflux.o kcharge.o kchgflx.o kchgtrn.o kchrge.o \ + kcpen.o kctrn.o kdipol.o kdipole.o kdisp.o kdsp.o kewald.o kexpl.o \ + kexpol.o kextra.o keys.o kgeom.o khbond.o kimprop.o kimptor.o \ + kinetic.o kiprop.o kitors.o kmetal.o kmpole.o kmulti.o kopbend.o \ + kopbnd.o kopdist.o kopdst.o korbit.o korbs.o kpitor.o kpitors.o \ + kpolar.o kpolpr.o kpolr.o krepel.o krepl.o ksolut.o ksolv.o kstbnd.o \ + kstrbnd.o kstrtor.o ksttor.o ktors.o ktorsn.o ktortor.o ktrtor.o \ + kurey.o kurybr.o kvdw.o kvdwpr.o kvdws.o kxrepel.o kxrepl.o lattice.o \ + lbfgs.o light.o lights.o limits.o linmin.o lusolve.o makeint.o \ + makeref.o makexyz.o math.o maxwell.o mdinit.o mdrest.o mdsave.o \ + mdstat.o mdstuf.o mechanic.o merck.o merge.o minima.o molcul.o \ + moldyn.o molecule.o moment.o moments.o mplpot.o mpole.o mrecip.o \ + mutant.o mutate.o nblist.o neigh.o nextarg.o nexttext.o nonpol.o \ + nose.o nspline.o nucleo.o number.o numeral.o numgrad.o ocvm.o \ + omega.o opbend.o opdist.o openend.o openmp.o optinit.o optsave.o \ + orbital.o orbits.o orient.o orthog.o output.o overlap.o params.o \ + paths.o pbstuf.o pdb.o phipsi.o picalc.o piorbs.o pistuf.o pitors.o \ + pme.o pmestuf.o pmpb.o polar.o polgrp.o polopt.o polpcg.o polpot.o \ + poltcg.o polymer.o potent.o potfit.o predict.o pressure.o prmkey.o \ + promo.o prtarc.o prtdcd.o prtdyn.o prterr.o prtint.o prtmol2.o \ + prtpdb.o prtprm.o prtseq.o prtxyz.o ptable.o qmstuf.o qrsolve.o \ + quatfit.o random.o rattle.o readcart.o readdcd.o readdyn.o readgau.o \ + readgdma.o readint.o readmol.o readmol2.o readpdb.o readprm.o \ + readseq.o readxyz.o refer.o repel.o replica.o reppot.o resdue.o \ + respa.o restrn.o rgddyn.o rgdstep.o rigid.o ring.o rings.o rmsfit.o \ + rotbnd.o rotlist.o rotpole.o rxnfld.o rxnpot.o scales.o sdstep.o \ + search.o sequen.o server.o setprm.o shakeup.o shunt.o sigmoid.o \ + simplex.o sizes.o sktstuf.o socket.o solpot.o solute.o sort.o \ + square.o stodyn.o strbnd.o strtor.o suffix.o surface.o surfatom.o \ + switch.o syntrn.o tarray.o tcgstuf.o temper.o titles.o tncg.o \ + torphase.o torpot.o torque.o tors.o torsions.o tortor.o tree.o \ + trimtext.o unitcell.o units.o uprior.o urey.o urypot.o usage.o \ + valfit.o vdw.o vdwpot.o verlet.o version.o vibs.o virial.o volume.o \ + warp.o xrepel.o xtals.o xyzatm.o zatom.o zclose.o zcoord.o + +EXEOBJS := alchemy.o analyze.o anneal.o arcedit.o bar.o correlate.o \ + critical.o crystal.o diffuse.o distgeom.o document.o dynamic.o \ + freefix.o gda.o intedit.o intxyz.o minimize.o minirot.o minrigid.o \ + mol2xyz.o molxyz.o monte.o newton.o newtrot.o nucleic.o optimize.o \ + optirot.o optrigid.o path.o pdbxyz.o polarize.o poledit.o potential.o \ + prmedit.o protein.o pss.o pssrigid.o pssrot.o radial.o saddle.o \ + scan.o sniffer.o spacefill.o spectrum.o superpose.o testgrad.o \ + testhess.o testpair.o testpol.o testrot.o testvir.o timer.o timerot.o \ + torsfit.o valence.o vibbig.o vibrate.o vibrot.o xtalfit.o xtalmin.o \ + xyzedit.o xyzint.o xyzmol2.o xyzpdb.o + +OBJS := $(LIBOBJS) $(EXEOBJS) + +EXEFILES := alchemy.x analyze.x anneal.x arcedit.x bar.x correlate.x \ + critical.x crystal.x diffuse.x distgeom.x document.x dynamic.x \ + freefix.x gda.x intedit.x intxyz.x minimize.x minirot.x minrigid.x \ + mol2xyz.x molxyz.x monte.x newton.x newtrot.x nucleic.x optimize.x \ + optirot.x optrigid.x path.x pdbxyz.x polarize.x poledit.x potential.x \ + prmedit.x protein.x pss.x pssrigid.x pssrot.x radial.x saddle.x \ + scan.x sniffer.x spacefill.x spectrum.x superpose.x testgrad.x \ + testhess.x testpair.x testpol.x testrot.x testvir.x timer.x timerot.x \ + torsfit.x valence.x vibbig.x vibrate.x vibrot.x xtalfit.x xtalmin.x \ + xyzedit.x xyzint.x xyzmol2.x xyzpdb.x + +%.o: $(src)/%.f + $(F77) $(F77FLAGS) $(OPTFLAGS) $< -o $@ + +%.x: %.o libtinker.a + $(F77) $(LINKFLAGS) -o $@ $(LIBDIR) $(FFTW_LIBDIR) $^ $(LIBS) $(FFTW_LIBS); strip $@ + +all: $(EXEFILES) + +install: $(RENAME) + +clean: + rm -f *.o *.mod *.a *.x + +listing: + cat $(src)/*.f $(src)/*.c > tinker.txt + +rename_bin: + mv alchemy.x $(BINDIR)/alchemy + mv analyze.x $(BINDIR)/analyze + mv anneal.x $(BINDIR)/anneal + mv arcedit.x $(BINDIR)/arcedit + mv bar.x $(BINDIR)/bar + mv correlate.x $(BINDIR)/correlate + mv critical.x $(BINDIR)/critical + mv crystal.x $(BINDIR)/crystal + mv diffuse.x $(BINDIR)/diffuse + mv distgeom.x $(BINDIR)/distgeom + mv document.x $(BINDIR)/document + mv dynamic.x $(BINDIR)/dynamic + mv freefix.x $(BINDIR)/freefix + mv gda.x $(BINDIR)/gda + mv intedit.x $(BINDIR)/intedit + mv intxyz.x $(BINDIR)/intxyz + mv minimize.x $(BINDIR)/minimize + mv minirot.x $(BINDIR)/minirot + mv minrigid.x $(BINDIR)/minrigid + mv mol2xyz.x $(BINDIR)/mol2xyz + mv molxyz.x $(BINDIR)/molxyz + mv monte.x $(BINDIR)/monte + mv newton.x $(BINDIR)/newton + mv newtrot.x $(BINDIR)/newtrot + mv nucleic.x $(BINDIR)/nucleic + mv optimize.x $(BINDIR)/optimize + mv optirot.x $(BINDIR)/optirot + mv optrigid.x $(BINDIR)/optrigid + mv path.x $(BINDIR)/path + mv pdbxyz.x $(BINDIR)/pdbxyz + mv polarize.x $(BINDIR)/polarize + mv poledit.x $(BINDIR)/poledit + mv potential.x $(BINDIR)/potential + mv prmedit.x $(BINDIR)/prmedit + mv protein.x $(BINDIR)/protein + mv pss.x $(BINDIR)/pss + mv pssrigid.x $(BINDIR)/pssrigid + mv pssrot.x $(BINDIR)/pssrot + mv radial.x $(BINDIR)/radial + mv saddle.x $(BINDIR)/saddle + mv scan.x $(BINDIR)/scan + mv sniffer.x $(BINDIR)/sniffer + mv spacefill.x $(BINDIR)/spacefill + mv spectrum.x $(BINDIR)/spectrum + mv superpose.x $(BINDIR)/superpose + mv testgrad.x $(BINDIR)/testgrad + mv testhess.x $(BINDIR)/testhess + mv testpair.x $(BINDIR)/testpair + mv testpol.x $(BINDIR)/testpol + mv testrot.x $(BINDIR)/testrot + mv testvir.x $(BINDIR)/testvir + mv timer.x $(BINDIR)/timer + mv timerot.x $(BINDIR)/timerot + mv torsfit.x $(BINDIR)/torsfit + mv valence.x $(BINDIR)/valence + mv vibbig.x $(BINDIR)/vibbig + mv vibrate.x $(BINDIR)/vibrate + mv vibrot.x $(BINDIR)/vibrot + mv xtalfit.x $(BINDIR)/xtalfit + mv xtalmin.x $(BINDIR)/xtalmin + mv xyzedit.x $(BINDIR)/xyzedit + mv xyzint.x $(BINDIR)/xyzint + mv xyzmol2.x $(BINDIR)/xyzmol2 + mv xyzpdb.x $(BINDIR)/xyzpdb + +rename_exe: + mv alchemy.x $(BINDIR)/alchemy.exe + mv analyze.x $(BINDIR)/analyze.exe + mv anneal.x $(BINDIR)/anneal.exe + mv arcedit.x $(BINDIR)/arcedit.exe + mv bar.x $(BINDIR)/bar.exe + mv correlate.x $(BINDIR)/correlate.exe + mv critical.x $(BINDIR)/critical.exe + mv crystal.x $(BINDIR)/crystal.exe + mv diffuse.x $(BINDIR)/diffuse.exe + mv distgeom.x $(BINDIR)/distgeom.exe + mv document.x $(BINDIR)/document.exe + mv dynamic.x $(BINDIR)/dynamic.exe + mv freefix.x $(BINDIR)/freefix.exe + mv gda.x $(BINDIR)/gda.exe + mv intedit.x $(BINDIR)/intedit.exe + mv intxyz.x $(BINDIR)/intxyz.exe + mv minimize.x $(BINDIR)/minimize.exe + mv minirot.x $(BINDIR)/minirot.exe + mv minrigid.x $(BINDIR)/minrigid.exe + mv mol2xyz.x $(BINDIR)/mol2xyz.exe + mv molxyz.x $(BINDIR)/molxyz.exe + mv monte.x $(BINDIR)/monte.exe + mv newton.x $(BINDIR)/newton.exe + mv newtrot.x $(BINDIR)/newtrot.exe + mv nucleic.x $(BINDIR)/nucleic.exe + mv optimize.x $(BINDIR)/optimize.exe + mv optirot.x $(BINDIR)/optirot.exe + mv optrigid.x $(BINDIR)/optrigid.exe + mv path.x $(BINDIR)/path.exe + mv pdbxyz.x $(BINDIR)/pdbxyz.exe + mv polarize.x $(BINDIR)/polarize.exe + mv poledit.x $(BINDIR)/poledit.exe + mv potential.x $(BINDIR)/potential.exe + mv prmedit.x $(BINDIR)/prmedit.exe + mv protein.x $(BINDIR)/protein.exe + mv pss.x $(BINDIR)/pss.exe + mv pssrigid.x $(BINDIR)/pssrigid.exe + mv pssrot.x $(BINDIR)/pssrot.exe + mv radial.x $(BINDIR)/radial.exe + mv saddle.x $(BINDIR)/saddle.exe + mv scan.x $(BINDIR)/scan.exe + mv sniffer.x $(BINDIR)/sniffer.exe + mv spacefill.x $(BINDIR)/spacefill.exe + mv spectrum.x $(BINDIR)/spectrum.exe + mv superpose.x $(BINDIR)/superpose.exe + mv testgrad.x $(BINDIR)/testgrad.exe + mv testhess.x $(BINDIR)/testhess.exe + mv testpair.x $(BINDIR)/testpair.exe + mv testpol.x $(BINDIR)/testpol.exe + mv testrot.x $(BINDIR)/testrot.exe + mv testvir.x $(BINDIR)/testvir.exe + mv timer.x $(BINDIR)/timer.exe + mv timerot.x $(BINDIR)/timerot.exe + mv torsfit.x $(BINDIR)/torsfit.exe + mv valence.x $(BINDIR)/valence.exe + mv vibbig.x $(BINDIR)/vibbig.exe + mv vibrate.x $(BINDIR)/vibrate.exe + mv vibrot.x $(BINDIR)/vibrot.exe + mv xtalfit.x $(BINDIR)/xtalfit.exe + mv xtalmin.x $(BINDIR)/xtalmin.exe + mv xyzedit.x $(BINDIR)/xyzedit.exe + mv xyzint.x $(BINDIR)/xyzint.exe + mv xyzmol2.x $(BINDIR)/xyzmol2.exe + mv xyzpdb.x $(BINDIR)/xyzpdb.exe + +remove_links: + rm -f $(LINKDIR)/alchemy + rm -f $(LINKDIR)/analyze + rm -f $(LINKDIR)/anneal + rm -f $(LINKDIR)/arcedit + rm -f $(LINKDIR)/bar + rm -f $(LINKDIR)/correlate + rm -f $(LINKDIR)/critical + rm -f $(LINKDIR)/crystal + rm -f $(LINKDIR)/diffuse + rm -f $(LINKDIR)/distgeom + rm -f $(LINKDIR)/document + rm -f $(LINKDIR)/dynamic + rm -f $(LINKDIR)/freefix + rm -f $(LINKDIR)/gda + rm -f $(LINKDIR)/intedit + rm -f $(LINKDIR)/intxyz + rm -f $(LINKDIR)/minimize + rm -f $(LINKDIR)/minirot + rm -f $(LINKDIR)/minrigid + rm -f $(LINKDIR)/mol2xyz + rm -f $(LINKDIR)/molxyz + rm -f $(LINKDIR)/monte + rm -f $(LINKDIR)/newton + rm -f $(LINKDIR)/newtrot + rm -f $(LINKDIR)/nucleic + rm -f $(LINKDIR)/optimize + rm -f $(LINKDIR)/optirot + rm -f $(LINKDIR)/optrigid + rm -f $(LINKDIR)/path + rm -f $(LINKDIR)/pdbxyz + rm -f $(LINKDIR)/polarize + rm -f $(LINKDIR)/poledit + rm -f $(LINKDIR)/potential + rm -f $(LINKDIR)/prmedit + rm -f $(LINKDIR)/protein + rm -f $(LINKDIR)/pss + rm -f $(LINKDIR)/pssrigid + rm -f $(LINKDIR)/pssrot + rm -f $(LINKDIR)/radial + rm -f $(LINKDIR)/saddle + rm -f $(LINKDIR)/scan + rm -f $(LINKDIR)/sniffer + rm -f $(LINKDIR)/spacefill + rm -f $(LINKDIR)/spectrum + rm -f $(LINKDIR)/superpose + rm -f $(LINKDIR)/testgrad + rm -f $(LINKDIR)/testhess + rm -f $(LINKDIR)/testpair + rm -f $(LINKDIR)/testpol + rm -f $(LINKDIR)/testrot + rm -f $(LINKDIR)/testvir + rm -f $(LINKDIR)/timer + rm -f $(LINKDIR)/timerot + rm -f $(LINKDIR)/torsfit + rm -f $(LINKDIR)/valence + rm -f $(LINKDIR)/vibbig + rm -f $(LINKDIR)/vibrate + rm -f $(LINKDIR)/vibrot + rm -f $(LINKDIR)/xtalfit + rm -f $(LINKDIR)/xtalmin + rm -f $(LINKDIR)/xyzedit + rm -f $(LINKDIR)/xyzint + rm -f $(LINKDIR)/xyzmol2 + rm -f $(LINKDIR)/xyzpdb + +create_links: + ln -s $(BINDIR)/alchemy $(LINKDIR)/alchemy + ln -s $(BINDIR)/analyze $(LINKDIR)/analyze + ln -s $(BINDIR)/anneal $(LINKDIR)/anneal + ln -s $(BINDIR)/arcedit $(LINKDIR)/arcedit + ln -s $(BINDIR)/bar $(LINKDIR)/bar + ln -s $(BINDIR)/correlate $(LINKDIR)/correlate + ln -s $(BINDIR)/critical $(LINKDIR)/critical + ln -s $(BINDIR)/crystal $(LINKDIR)/crystal + ln -s $(BINDIR)/diffuse $(LINKDIR)/diffuse + ln -s $(BINDIR)/distgeom $(LINKDIR)/distgeom + ln -s $(BINDIR)/document $(LINKDIR)/document + ln -s $(BINDIR)/dynamic $(LINKDIR)/dynamic + ln -s $(BINDIR)/freefix $(LINKDIR)/freefix + ln -s $(BINDIR)/gda $(LINKDIR)/gda + ln -s $(BINDIR)/intedit $(LINKDIR)/intedit + ln -s $(BINDIR)/intxyz $(LINKDIR)/intxyz + ln -s $(BINDIR)/minimize $(LINKDIR)/minimize + ln -s $(BINDIR)/minirot $(LINKDIR)/minirot + ln -s $(BINDIR)/minrigid $(LINKDIR)/minrigid + ln -s $(BINDIR)/mol2xyz $(LINKDIR)/mol2xyz + ln -s $(BINDIR)/molxyz $(LINKDIR)/molxyz + ln -s $(BINDIR)/monte $(LINKDIR)/monte + ln -s $(BINDIR)/newton $(LINKDIR)/newton + ln -s $(BINDIR)/newtrot $(LINKDIR)/newtrot + ln -s $(BINDIR)/nucleic $(LINKDIR)/nucleic + ln -s $(BINDIR)/optimize $(LINKDIR)/optimize + ln -s $(BINDIR)/optirot $(LINKDIR)/optirot + ln -s $(BINDIR)/optrigid $(LINKDIR)/optrigid + ln -s $(BINDIR)/path $(LINKDIR)/path + ln -s $(BINDIR)/pdbxyz $(LINKDIR)/pdbxyz + ln -s $(BINDIR)/polarize $(LINKDIR)/polarize + ln -s $(BINDIR)/poledit $(LINKDIR)/poledit + ln -s $(BINDIR)/potential $(LINKDIR)/potential + ln -s $(BINDIR)/prmedit $(LINKDIR)/prmedit + ln -s $(BINDIR)/protein $(LINKDIR)/protein + ln -s $(BINDIR)/pss $(LINKDIR)/pss + ln -s $(BINDIR)/pssrigid $(LINKDIR)/pssrigid + ln -s $(BINDIR)/pssrot $(LINKDIR)/pssrot + ln -s $(BINDIR)/radial $(LINKDIR)/radial + ln -s $(BINDIR)/saddle $(LINKDIR)/saddle + ln -s $(BINDIR)/scan $(LINKDIR)/scan + ln -s $(BINDIR)/sniffer $(LINKDIR)/sniffer + ln -s $(BINDIR)/spacefill $(LINKDIR)/spacefill + ln -s $(BINDIR)/spectrum $(LINKDIR)/spectrum + ln -s $(BINDIR)/superpose $(LINKDIR)/superpose + ln -s $(BINDIR)/testgrad $(LINKDIR)/testgrad + ln -s $(BINDIR)/testhess $(LINKDIR)/testhess + ln -s $(BINDIR)/testpair $(LINKDIR)/testpair + ln -s $(BINDIR)/testpol $(LINKDIR)/testpol + ln -s $(BINDIR)/testrot $(LINKDIR)/testrot + ln -s $(BINDIR)/testvir $(LINKDIR)/testvir + ln -s $(BINDIR)/timer $(LINKDIR)/timer + ln -s $(BINDIR)/timerot $(LINKDIR)/timerot + ln -s $(BINDIR)/torsfit $(LINKDIR)/torsfit + ln -s $(BINDIR)/valence $(LINKDIR)/valence + ln -s $(BINDIR)/vibbig $(LINKDIR)/vibbig + ln -s $(BINDIR)/vibrate $(LINKDIR)/vibrate + ln -s $(BINDIR)/vibrot $(LINKDIR)/vibrot + ln -s $(BINDIR)/xtalfit $(LINKDIR)/xtalfit + ln -s $(BINDIR)/xtalmin $(LINKDIR)/xtalmin + ln -s $(BINDIR)/xyzedit $(LINKDIR)/xyzedit + ln -s $(BINDIR)/xyzint $(LINKDIR)/xyzint + ln -s $(BINDIR)/xyzmol2 $(LINKDIR)/xyzmol2 + ln -s $(BINDIR)/xyzpdb $(LINKDIR)/xyzpdb + +libtinker.a: $(LIBOBJS) + ar $(LIBFLAGS) libtinker.a $(LIBOBJS) + $(RANLIB) libtinker.a + +############################################################### +## Next Section has Explicit Dependencies on Include Files ## +############################################################### + +action.o: +active.o: atoms.o inform.o iounit.o keys.o usage.o +alchemy.o: analyz.o atoms.o energi.o files.o inform.o iounit.o katoms.o mutant.o potent.o units.o usage.o +align.o: +alterchg.o: angbnd.o atmlst.o atoms.o bndstr.o bound.o cflux.o charge.o chgpen.o inform.o iounit.o math.o mplpot.o mpole.o sizes.o +alterpol.o: atoms.o bound.o cell.o couple.o expol.o limits.o mpole.o neigh.o polgrp.o polpot.o shunt.o +analysis.o: analyz.o atoms.o energi.o group.o inter.o iounit.o limits.o potent.o reppot.o vdwpot.o +analyz.o: +analyze.o: action.o analyz.o angang.o angbnd.o angpot.o angtor.o atomid.o atoms.o bath.o bitor.o bndstr.o bound.o boxes.o cflux.o charge.o chgpen.o chgpot.o chgtrn.o couple.o deriv.o dipole.o disp.o energi.o ewald.o fields.o files.o improp.o imptor.o inform.o inter.o iounit.o korbs.o ktrtor.o kvdws.o limits.o math.o molcul.o moment.o mplpot.o mpole.o opbend.o opdist.o output.o piorbs.o pistuf.o pitors.o pme.o polar.o polgrp.o polpot.o potent.o repel.o solute.o strbnd.o strtor.o titles.o tors.o tortor.o units.o urey.o vdw.o vdwpot.o virial.o +angang.o: +angbnd.o: +angles.o: angbnd.o atmlst.o atoms.o couple.o iounit.o +angpot.o: +angtor.o: +anneal.o: atomid.o atoms.o bath.o bndstr.o bound.o inform.o iounit.o mdstuf.o potent.o solute.o usage.o warp.o +arcedit.o: atoms.o bound.o files.o inform.o iounit.o output.o usage.o +argue.o: +ascii.o: +atmlst.o: +atomid.o: sizes.o +atoms.o: sizes.o +attach.o: atoms.o couple.o iounit.o +baoab.o: atomid.o atoms.o bath.o freeze.o limits.o mdstuf.o moldyn.o potent.o stodyn.o units.o usage.o virial.o +bar.o: boxes.o files.o inform.o iounit.o keys.o output.o titles.o units.o +basefile.o: ascii.o files.o +bath.o: +beeman.o: atomid.o atoms.o freeze.o ielscf.o mdstuf.o moldyn.o polar.o units.o usage.o +bicubic.o: +bitor.o: +bitors.o: angbnd.o atoms.o bitor.o couple.o iounit.o +bndpot.o: +bndstr.o: +bonds.o: atmlst.o atoms.o bndstr.o couple.o iounit.o +born.o: atomid.o atoms.o bath.o chgpot.o couple.o deriv.o inform.o iounit.o math.o mpole.o pbstuf.o solpot.o solute.o virial.o +bound.o: +bounds.o: atomid.o atoms.o boxes.o math.o molcul.o +boxes.o: +bussi.o: atomid.o atoms.o bath.o boxes.o freeze.o ielscf.o mdstuf.o moldyn.o polar.o units.o usage.o +calendar.o: +cell.o: +center.o: align.o +cflux.o: +charge.o: +chgpen.o: +chgpot.o: +chgtrn.o: +chkpole.o: atoms.o mpole.o repel.o +chkring.o: couple.o +chkxyz.o: atoms.o iounit.o +cholesky.o: +chrono.o: +chunks.o: +clock.o: chrono.o +cluster.o: atomid.o atoms.o bound.o group.o inform.o iounit.o keys.o limits.o molcul.o +column.o: +command.o: argue.o +connect.o: atoms.o couple.o zclose.o zcoord.o +connolly.o: atoms.o faces.o inform.o iounit.o math.o +control.o: argue.o inform.o keys.o output.o +correlate.o: ascii.o atomid.o atoms.o files.o inform.o iounit.o +couple.o: sizes.o +critical.o: atoms.o files.o inform.o iounit.o keys.o minima.o output.o sizes.o usage.o +crystal.o: atomid.o atoms.o bound.o boxes.o couple.o files.o iounit.o math.o molcul.o +cspline.o: iounit.o +ctrpot.o: +cutoffs.o: atoms.o bound.o hescut.o keys.o limits.o neigh.o polpot.o tarray.o +damping.o: atoms.o ewald.o math.o mplpot.o mpole.o polar.o polpot.o +dcflux.o: angbnd.o atoms.o bndstr.o bound.o cflux.o sizes.o +deflate.o: iounit.o +delete.o: atomid.o atoms.o couple.o inform.o iounit.o +deriv.o: +dexpol.o: atoms.o bound.o cell.o chgpot.o couple.o deriv.o expol.o limits.o math.o mpole.o neigh.o polar.o polgrp.o polpot.o shunt.o units.o virial.o +diagq.o: +diffeq.o: atoms.o iounit.o math.o warp.o +diffuse.o: atomid.o atoms.o bound.o inform.o iounit.o molcul.o usage.o +dipole.o: +disgeo.o: +disp.o: +distgeom.o: angbnd.o atomid.o atoms.o bndstr.o couple.o disgeo.o files.o inform.o iounit.o kvdws.o math.o refer.o restrn.o tors.o +dma.o: +document.o: iounit.o +domega.o: +dsppot.o: +dynamic.o: atoms.o bath.o bndstr.o bound.o inform.o iounit.o keys.o mdstuf.o potent.o stodyn.o usage.o +eangang.o: angang.o angbnd.o angpot.o atoms.o bound.o energi.o group.o math.o usage.o +eangang1.o: angang.o angbnd.o angpot.o atoms.o bound.o deriv.o energi.o group.o math.o usage.o virial.o +eangang2.o: angang.o angbnd.o angpot.o atoms.o bound.o group.o hessn.o math.o +eangang3.o: action.o analyz.o angang.o angbnd.o angpot.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o usage.o +eangle.o: angbnd.o angpot.o atoms.o bound.o energi.o group.o math.o usage.o +eangle1.o: angbnd.o angpot.o atoms.o bound.o deriv.o energi.o group.o math.o usage.o virial.o +eangle2.o: angbnd.o angpot.o atoms.o bound.o group.o hessn.o math.o +eangle3.o: action.o analyz.o angbnd.o angpot.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o usage.o +eangtor.o: angbnd.o angtor.o atoms.o bound.o energi.o group.o math.o torpot.o tors.o usage.o +eangtor1.o: angbnd.o angtor.o atoms.o bound.o deriv.o energi.o group.o math.o torpot.o tors.o usage.o virial.o +eangtor2.o: angbnd.o angtor.o atoms.o bound.o group.o hessn.o math.o torpot.o tors.o +eangtor3.o: action.o analyz.o angbnd.o angtor.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o torpot.o tors.o usage.o +ebond.o: atoms.o bndpot.o bndstr.o bound.o energi.o group.o usage.o +ebond1.o: atoms.o bndpot.o bndstr.o bound.o deriv.o energi.o group.o usage.o virial.o +ebond2.o: atmlst.o atoms.o bndpot.o bndstr.o bound.o couple.o group.o hessn.o +ebond3.o: action.o analyz.o atomid.o atoms.o bndpot.o bndstr.o bound.o energi.o group.o inform.o iounit.o usage.o +ebuck.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o iounit.o light.o limits.o math.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o +ebuck1.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o deriv.o energi.o group.o iounit.o light.o limits.o math.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o warp.o +ebuck2.o: atomid.o atoms.o bound.o cell.o couple.o group.o hessn.o iounit.o math.o shunt.o vdw.o vdwpot.o warp.o +ebuck3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o math.o molcul.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o +echarge.o: atoms.o bound.o boxes.o cell.o charge.o chgpot.o couple.o energi.o ewald.o extfld.o group.o iounit.o light.o limits.o math.o neigh.o pme.o shunt.o usage.o warp.o +echarge1.o: atoms.o bound.o boxes.o cell.o charge.o chgpot.o couple.o deriv.o energi.o ewald.o extfld.o group.o light.o limits.o math.o neigh.o pme.o shunt.o usage.o virial.o warp.o +echarge2.o: atoms.o bound.o boxes.o cell.o charge.o chgpot.o couple.o deriv.o ewald.o group.o hessn.o limits.o math.o neigh.o pme.o shunt.o warp.o +echarge3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o charge.o chgpot.o couple.o energi.o ewald.o extfld.o group.o inform.o inter.o iounit.o light.o limits.o math.o molcul.o neigh.o pme.o shunt.o usage.o warp.o +echgdpl.o: atoms.o bound.o cell.o charge.o chgpot.o couple.o dipole.o energi.o group.o shunt.o units.o usage.o +echgdpl1.o: atoms.o bound.o cell.o charge.o chgpot.o couple.o deriv.o dipole.o energi.o group.o shunt.o units.o usage.o virial.o +echgdpl2.o: atoms.o bound.o cell.o charge.o chgpot.o couple.o dipole.o group.o hessn.o shunt.o units.o +echgdpl3.o: action.o analyz.o atomid.o atoms.o bound.o cell.o charge.o chgpot.o couple.o dipole.o energi.o group.o inform.o inter.o iounit.o molcul.o shunt.o units.o usage.o +echgtrn.o: atoms.o bound.o boxes.o cell.o chgpot.o chgtrn.o couple.o ctrpot.o energi.o group.o light.o limits.o mplpot.o mpole.o mutant.o neigh.o shunt.o usage.o +echgtrn1.o: atoms.o bound.o cell.o chgpot.o chgtrn.o couple.o ctrpot.o deriv.o energi.o group.o limits.o mplpot.o mpole.o mutant.o neigh.o shunt.o usage.o virial.o +echgtrn2.o: atoms.o bound.o cell.o chgpot.o chgtrn.o couple.o ctrpot.o group.o hessn.o mplpot.o mpole.o mutant.o shunt.o usage.o +echgtrn3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o chgpot.o chgtrn.o couple.o ctrpot.o energi.o group.o inform.o inter.o iounit.o light.o limits.o molcul.o mplpot.o mpole.o mutant.o neigh.o shunt.o usage.o +edipole.o: atoms.o bound.o cell.o chgpot.o dipole.o energi.o group.o shunt.o units.o usage.o +edipole1.o: atoms.o bound.o cell.o chgpot.o deriv.o dipole.o energi.o group.o shunt.o units.o usage.o virial.o +edipole2.o: atoms.o bound.o cell.o chgpot.o dipole.o group.o hessn.o shunt.o units.o +edipole3.o: action.o analyz.o atomid.o atoms.o bound.o cell.o chgpot.o dipole.o energi.o group.o inform.o inter.o iounit.o molcul.o shunt.o units.o usage.o +edisp.o: atoms.o bound.o boxes.o cell.o couple.o disp.o dsppot.o energi.o ewald.o group.o limits.o math.o mutant.o neigh.o pme.o shunt.o usage.o +edisp1.o: atoms.o bound.o boxes.o cell.o couple.o deriv.o disp.o dsppot.o energi.o ewald.o group.o limits.o math.o mutant.o neigh.o pme.o shunt.o usage.o virial.o +edisp2.o: atoms.o bound.o cell.o couple.o disp.o dsppot.o group.o hessn.o shunt.o usage.o +edisp3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o disp.o dsppot.o energi.o ewald.o group.o inform.o inter.o iounit.o limits.o molcul.o mutant.o neigh.o pme.o shunt.o usage.o +egauss.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o light.o limits.o math.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o +egauss1.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o deriv.o energi.o group.o light.o limits.o math.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o warp.o +egauss2.o: atomid.o atoms.o bound.o cell.o couple.o group.o hessn.o shunt.o vdw.o vdwpot.o warp.o +egauss3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o math.o molcul.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o +egeom.o: atomid.o atoms.o bound.o boxes.o cell.o energi.o group.o math.o molcul.o restrn.o usage.o +egeom1.o: atomid.o atoms.o bound.o boxes.o cell.o deriv.o energi.o group.o math.o molcul.o restrn.o usage.o virial.o +egeom2.o: atomid.o atoms.o bound.o boxes.o cell.o deriv.o group.o hessn.o math.o molcul.o restrn.o +egeom3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o energi.o group.o inform.o inter.o iounit.o math.o molcul.o restrn.o usage.o +ehal.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o light.o limits.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o +ehal1.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o deriv.o energi.o group.o light.o limits.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o +ehal2.o: atomid.o atoms.o bound.o cell.o couple.o group.o hessn.o shunt.o vdw.o vdwpot.o +ehal3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o molcul.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o +eimprop.o: atoms.o bound.o energi.o group.o improp.o math.o torpot.o usage.o +eimprop1.o: atoms.o bound.o deriv.o energi.o group.o improp.o math.o torpot.o usage.o virial.o +eimprop2.o: atoms.o bound.o group.o hessn.o improp.o math.o torpot.o +eimprop3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o improp.o inform.o iounit.o math.o torpot.o usage.o +eimptor.o: atoms.o bound.o energi.o group.o imptor.o torpot.o usage.o +eimptor1.o: atoms.o bound.o deriv.o energi.o group.o imptor.o torpot.o usage.o virial.o +eimptor2.o: atoms.o bound.o group.o hessn.o imptor.o torpot.o +eimptor3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o imptor.o inform.o iounit.o math.o torpot.o usage.o +elj.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o light.o limits.o math.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o +elj1.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o deriv.o energi.o group.o light.o limits.o math.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o warp.o +elj2.o: atomid.o atoms.o bound.o cell.o couple.o group.o hessn.o math.o shunt.o vdw.o vdwpot.o warp.o +elj3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o math.o molcul.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o +embed.o: angbnd.o atoms.o bndstr.o couple.o disgeo.o files.o inform.o iounit.o keys.o light.o math.o minima.o output.o refer.o restrn.o tors.o units.o +emetal.o: atomid.o atoms.o couple.o energi.o kchrge.o +emetal1.o: atomid.o atoms.o couple.o deriv.o energi.o kchrge.o +emetal2.o: +emetal3.o: action.o analyz.o atomid.o atoms.o energi.o kchrge.o +emm3hb.o: atmlst.o atomid.o atoms.o bndstr.o bound.o boxes.o cell.o chgpot.o couple.o energi.o group.o light.o limits.o neigh.o shunt.o usage.o vdw.o vdwpot.o +emm3hb1.o: atmlst.o atomid.o atoms.o bndstr.o bound.o boxes.o cell.o chgpot.o couple.o deriv.o energi.o group.o light.o limits.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o +emm3hb2.o: atmlst.o atomid.o atoms.o bndstr.o bound.o cell.o chgpot.o couple.o group.o hessn.o shunt.o vdw.o vdwpot.o +emm3hb3.o: action.o analyz.o atmlst.o atomid.o atoms.o bndstr.o bound.o boxes.o cell.o chgpot.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o molcul.o neigh.o shunt.o usage.o vdw.o vdwpot.o +empole.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o energi.o ewald.o extfld.o group.o limits.o math.o mplpot.o mpole.o mrecip.o neigh.o pme.o polpot.o shunt.o usage.o +empole1.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o deriv.o energi.o ewald.o extfld.o group.o limits.o math.o mplpot.o mpole.o mrecip.o neigh.o pme.o potent.o shunt.o usage.o virial.o +empole2.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o deriv.o energi.o group.o hessn.o limits.o molcul.o mplpot.o mpole.o potent.o shunt.o usage.o +empole3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o energi.o ewald.o extfld.o group.o inform.o inter.o iounit.o limits.o math.o molcul.o mplpot.o mpole.o mrecip.o neigh.o pme.o potent.o shunt.o usage.o +energi.o: +energy.o: energi.o iounit.o limits.o potent.o rigid.o vdwpot.o +eopbend.o: angbnd.o angpot.o atoms.o bound.o energi.o fields.o group.o math.o opbend.o usage.o +eopbend1.o: angbnd.o angpot.o atoms.o bound.o deriv.o energi.o group.o math.o opbend.o usage.o virial.o +eopbend2.o: angbnd.o angpot.o atoms.o bound.o group.o hessn.o math.o opbend.o +eopbend3.o: action.o analyz.o angbnd.o angpot.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o opbend.o usage.o +eopdist.o: angpot.o atoms.o bound.o energi.o group.o opdist.o usage.o +eopdist1.o: angpot.o atoms.o bound.o deriv.o energi.o group.o opdist.o usage.o virial.o +eopdist2.o: angpot.o atoms.o bound.o group.o hessn.o opdist.o usage.o +eopdist3.o: action.o analyz.o angpot.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o opdist.o usage.o +epitors.o: atoms.o bound.o energi.o group.o pitors.o torpot.o usage.o +epitors1.o: atoms.o bound.o deriv.o energi.o group.o pitors.o torpot.o usage.o virial.o +epitors2.o: angbnd.o atoms.o bound.o deriv.o group.o hessn.o pitors.o torpot.o usage.o +epitors3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o pitors.o torpot.o usage.o +epolar.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o energi.o ewald.o extfld.o limits.o math.o mplpot.o mpole.o mrecip.o neigh.o pme.o polar.o polgrp.o polpot.o potent.o shunt.o +epolar1.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o deriv.o energi.o ewald.o iounit.o limits.o math.o molcul.o mplpot.o mpole.o mrecip.o neigh.o pme.o polar.o polgrp.o polopt.o polpot.o poltcg.o potent.o shunt.o virial.o +epolar2.o: atoms.o bound.o cell.o chgpen.o chgpot.o couple.o deriv.o hessn.o limits.o mplpot.o mpole.o polar.o polgrp.o polopt.o polpot.o poltcg.o potent.o shunt.o +epolar3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o energi.o ewald.o extfld.o inform.o inter.o iounit.o limits.o math.o molcul.o mplpot.o mpole.o mrecip.o neigh.o pme.o polar.o polgrp.o polpot.o potent.o shunt.o units.o +erepel.o: atoms.o bound.o cell.o couple.o energi.o group.o inform.o inter.o limits.o mpole.o mutant.o neigh.o polar.o repel.o reppot.o shunt.o usage.o +erepel1.o: atoms.o bound.o cell.o couple.o deriv.o energi.o group.o inform.o limits.o mpole.o mutant.o neigh.o repel.o reppot.o shunt.o usage.o virial.o +erepel2.o: atoms.o bound.o cell.o couple.o deriv.o group.o hessn.o mpole.o potent.o repel.o reppot.o shunt.o usage.o +erepel3.o: action.o analyz.o atomid.o atoms.o bound.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o limits.o molcul.o mpole.o mutant.o neigh.o polar.o repel.o reppot.o shunt.o usage.o +erf.o: iounit.o math.o +erxnfld.o: atoms.o chgpot.o energi.o mpole.o rxnfld.o rxnpot.o shunt.o usage.o +erxnfld1.o: atoms.o deriv.o energi.o +erxnfld2.o: +erxnfld3.o: action.o analyz.o atomid.o atoms.o chgpot.o energi.o inform.o iounit.o mpole.o shunt.o usage.o +esolv.o: atomid.o atoms.o bound.o charge.o chgpot.o couple.o deriv.o energi.o gkstuf.o group.o hpmf.o kvdws.o limits.o math.o mpole.o neigh.o nonpol.o pbstuf.o polar.o polgrp.o polpot.o potent.o shunt.o solpot.o solute.o usage.o vdw.o warp.o +esolv1.o: atomid.o atoms.o bound.o boxes.o charge.o chgpot.o couple.o deriv.o energi.o gkstuf.o group.o hpmf.o kvdws.o limits.o math.o mplpot.o mpole.o neigh.o nonpol.o pbstuf.o polar.o polgrp.o polpot.o potent.o shunt.o solpot.o solute.o usage.o vdw.o virial.o warp.o +esolv2.o: atoms.o charge.o chgpot.o deriv.o hessn.o math.o mpole.o potent.o shunt.o solpot.o solute.o warp.o +esolv3.o: action.o analyz.o atomid.o atoms.o bound.o charge.o chgpot.o couple.o deriv.o energi.o gkstuf.o group.o hpmf.o inform.o inter.o iounit.o kvdws.o limits.o math.o molcul.o mpole.o neigh.o nonpol.o pbstuf.o polar.o polgrp.o polpot.o potent.o shunt.o solpot.o solute.o usage.o vdw.o warp.o +estrbnd.o: angbnd.o angpot.o atoms.o bndstr.o bound.o energi.o group.o math.o strbnd.o usage.o +estrbnd1.o: angbnd.o angpot.o atoms.o bndstr.o bound.o deriv.o energi.o group.o math.o strbnd.o usage.o virial.o +estrbnd2.o: angbnd.o angpot.o atoms.o bndstr.o bound.o group.o hessn.o math.o strbnd.o +estrbnd3.o: action.o analyz.o angbnd.o angpot.o atomid.o atoms.o bndstr.o bound.o energi.o group.o inform.o iounit.o math.o strbnd.o usage.o +estrtor.o: atoms.o bndstr.o bound.o energi.o group.o strtor.o torpot.o tors.o usage.o +estrtor1.o: atoms.o bndstr.o bound.o deriv.o energi.o group.o strtor.o torpot.o tors.o usage.o virial.o +estrtor2.o: atoms.o bndstr.o bound.o group.o hessn.o strtor.o torpot.o tors.o +estrtor3.o: action.o analyz.o atomid.o atoms.o bndstr.o bound.o energi.o group.o inform.o iounit.o math.o strtor.o torpot.o tors.o usage.o +etors.o: atoms.o bound.o energi.o group.o math.o torpot.o tors.o usage.o warp.o +etors1.o: atoms.o bound.o deriv.o energi.o group.o math.o torpot.o tors.o usage.o virial.o warp.o +etors2.o: atoms.o bound.o group.o hessn.o math.o torpot.o tors.o warp.o +etors3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o torpot.o tors.o usage.o warp.o +etortor.o: atomid.o atoms.o bitor.o bound.o couple.o energi.o group.o ktrtor.o math.o torpot.o tortor.o usage.o +etortor1.o: atoms.o bitor.o bound.o deriv.o energi.o group.o ktrtor.o math.o torpot.o tortor.o usage.o virial.o +etortor2.o: atoms.o bitor.o bound.o group.o hessn.o ktrtor.o math.o torpot.o tortor.o units.o +etortor3.o: action.o analyz.o atoms.o bitor.o bound.o energi.o group.o inform.o iounit.o ktrtor.o math.o torpot.o tortor.o usage.o +eurey.o: atoms.o bound.o energi.o group.o urey.o urypot.o usage.o +eurey1.o: atoms.o bound.o deriv.o energi.o group.o urey.o urypot.o usage.o virial.o +eurey2.o: atoms.o bound.o couple.o group.o hessn.o urey.o urypot.o +eurey3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o urey.o urypot.o usage.o +evcorr.o: atomid.o atoms.o bound.o boxes.o kdsp.o limits.o math.o mutant.o potent.o shunt.o vdw.o vdwpot.o +ewald.o: +exfield.o: action.o analyz.o atoms.o charge.o chgpot.o deriv.o energi.o extfld.o mpole.o usage.o virial.o +expol.o: +exrepel1.o: atoms.o bound.o cell.o couple.o deriv.o energi.o group.o limits.o mpole.o mutant.o repel.o reppot.o shunt.o units.o usage.o virial.o xrepel.o +exrepel3.o: action.o analyz.o atomid.o atoms.o bound.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o limits.o molcul.o mutant.o repel.o reppot.o shunt.o units.o usage.o xrepel.o +extfld.o: +extra.o: energi.o +extra1.o: atoms.o deriv.o energi.o +extra2.o: atoms.o hessn.o +extra3.o: action.o analyz.o atoms.o energi.o +faces.o: +fatal.o: iounit.o +fft.o: +fft3d.o: fft.o openmp.o pme.o +fftpack.o: math.o +field.o: fields.o inform.o iounit.o keys.o potent.o sizes.o +fields.o: +files.o: +final.o: align.o analyz.o angang.o angbnd.o angtor.o atmlst.o bitor.o bndstr.o cell.o cflux.o charge.o chgpen.o chgtrn.o chunks.o couple.o deriv.o dipole.o disgeo.o domega.o expol.o faces.o fft.o fields.o fracs.o freeze.o group.o hessn.o hpmf.o ielscf.o improp.o imptor.o inform.o iounit.o kanang.o kangs.o kantor.o katoms.o kbonds.o kcflux.o kchrge.o kcpen.o kctrn.o kdipol.o kdsp.o kexpl.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kpolr.o krepl.o ksolut.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o kvdws.o kxrepl.o light.o limits.o merck.o molcul.o moldyn.o mpole.o mrecip.o mutant.o neigh.o nonpol.o omega.o opbend.o opdist.o orbits.o paths.o pbstuf.o pdb.o piorbs.o pistuf.o pitors.o pme.o polar.o polgrp.o polopt.o polpcg.o poltcg.o potfit.o qmstuf.o refer.o repel.o restrn.o rgddyn.o rigid.o ring.o rotbnd.o socket.o solpot.o solute.o stodyn.o strbnd.o strtor.o syntrn.o tarray.o tors.o tortor.o uprior.o urey.o usage.o vdw.o vibs.o warp.o xrepel.o +flatten.o: atoms.o fields.o inform.o iounit.o keys.o warp.o +fracs.o: +freefix.o: iounit.o math.o units.o +freeunit.o: iounit.o +freeze.o: +gda.o: atoms.o files.o iounit.o minima.o potent.o vdwpot.o warp.o +geometry.o: atoms.o math.o +getarc.o: files.o inform.o iounit.o output.o +getcart.o: files.o inform.o iounit.o output.o +getdcd.o: files.o inform.o iounit.o output.o +getint.o: atoms.o files.o inform.o iounit.o output.o +getkey.o: argue.o files.o iounit.o keys.o openmp.o +getmol.o: files.o inform.o iounit.o +getmol2.o: files.o inform.o iounit.o +getnumb.o: ascii.o +getpdb.o: files.o inform.o iounit.o +getprm.o: files.o inform.o iounit.o keys.o params.o +getref.o: atomid.o atoms.o boxes.o couple.o files.o refer.o titles.o +getstring.o: ascii.o +gettext.o: ascii.o +getword.o: ascii.o +getxyz.o: files.o inform.o iounit.o output.o +ghmcstep.o: atomid.o atoms.o bath.o freeze.o iounit.o moldyn.o stodyn.o units.o usage.o virial.o +gkstuf.o: sizes.o +gradient.o: atoms.o couple.o deriv.o energi.o inform.o inter.o iounit.o limits.o potent.o rigid.o vdwpot.o virial.o +gradrgd.o: atoms.o group.o rigid.o +gradrot.o: atoms.o deriv.o domega.o omega.o potent.o rotbnd.o +group.o: +groups.o: group.o +grpline.o: atomid.o atoms.o group.o rgddyn.o +gyrate.o: atoms.o usage.o +hescut.o: +hessian.o: atoms.o couple.o hescut.o hessn.o inform.o iounit.o limits.o mpole.o potent.o rigid.o usage.o vdw.o vdwpot.o +hessn.o: +hessrgd.o: atoms.o group.o rigid.o +hessrot.o: math.o omega.o zcoord.o +hpmf.o: +hybrid.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o charge.o couple.o dipole.o imptor.o inform.o iounit.o kangs.o katoms.o kbonds.o kchrge.o kdipol.o kitors.o kstbnd.o ksttor.o ktorsn.o kvdws.o math.o mutant.o strbnd.o strtor.o tors.o vdw.o vdwpot.o +ielscf.o: +image.o: boxes.o cell.o math.o +impose.o: align.o inform.o iounit.o +improp.o: +imptor.o: +induce.o: atoms.o bound.o boxes.o cell.o chgpen.o couple.o ewald.o expol.o extfld.o gkstuf.o group.o ielscf.o inform.o iounit.o limits.o math.o mplpot.o mpole.o neigh.o openmp.o pbstuf.o pme.o polar.o polgrp.o polopt.o polpcg.o polpot.o potent.o shunt.o solpot.o solute.o tarray.o units.o uprior.o +inertia.o: atomid.o atoms.o iounit.o math.o +inform.o: +initatom.o: ptable.o +initial.o: align.o atoms.o bath.o bound.o boxes.o cell.o fft.o files.o group.o inform.o iounit.o keys.o linmin.o minima.o molcul.o mutant.o neigh.o openmp.o output.o params.o pdb.o rigid.o scales.o sequen.o socket.o virial.o warp.o zclose.o +initprm.o: angpot.o bndpot.o chgpot.o ctrpot.o dsppot.o expol.o extfld.o fields.o ielscf.o kanang.o kangs.o kantor.o katoms.o kbonds.o kcflux.o kchrge.o kcpen.o kctrn.o kdipol.o kdsp.o kexpl.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kpolr.o krepl.o ksolut.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o kvdws.o kxrepl.o math.o merck.o mplpot.o polpot.o reppot.o rxnpot.o sizes.o solpot.o solute.o torpot.o units.o uprior.o urypot.o vdwpot.o xrepel.o +initres.o: resdue.o +initrot.o: atoms.o couple.o group.o inform.o iounit.o math.o omega.o potent.o restrn.o rotbnd.o usage.o zcoord.o +insert.o: atomid.o atoms.o couple.o inform.o iounit.o +intedit.o: atomid.o atoms.o files.o iounit.o katoms.o zcoord.o +inter.o: +intxyz.o: files.o iounit.o titles.o +invbeta.o: +invert.o: iounit.o +iounit.o: +jacobi.o: iounit.o +kanang.o: +kangang.o: angang.o angbnd.o atmlst.o atomid.o atoms.o couple.o inform.o iounit.o kanang.o keys.o potent.o tors.o +kangle.o: angbnd.o angpot.o atomid.o atoms.o bndstr.o couple.o fields.o inform.o iounit.o kangs.o keys.o merck.o potent.o ring.o usage.o +kangs.o: +kangtor.o: angtor.o atmlst.o atomid.o atoms.o couple.o inform.o iounit.o kantor.o keys.o potent.o tors.o +kantor.o: +katom.o: atomid.o atoms.o couple.o inform.o iounit.o katoms.o keys.o +katoms.o: +kbond.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o couple.o fields.o inform.o iounit.o kbonds.o keys.o merck.o potent.o tors.o usage.o +kbonds.o: +kcflux.o: +kcharge.o: atomid.o atoms.o charge.o chgpot.o couple.o fields.o inform.o iounit.o kchrge.o keys.o merck.o potent.o +kchgflx.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o cflux.o couple.o inform.o iounit.o kangs.o kbonds.o kcflux.o keys.o potent.o sizes.o usage.o +kchgtrn.o: atomid.o atoms.o chgpen.o chgtrn.o expol.o inform.o iounit.o kctrn.o keys.o mplpot.o mpole.o polar.o polpot.o potent.o sizes.o +kchrge.o: +kcpen.o: +kctrn.o: +kdipol.o: +kdipole.o: atmlst.o atoms.o bndstr.o couple.o dipole.o inform.o iounit.o kdipol.o keys.o potent.o +kdisp.o: atomid.o atoms.o disp.o dsppot.o inform.o iounit.o kdsp.o keys.o limits.o potent.o sizes.o +kdsp.o: +kewald.o: atoms.o bound.o boxes.o chunks.o ewald.o fft.o inform.o iounit.o keys.o limits.o openmp.o pme.o potent.o +kexpl.o: +kexpol.o: atomid.o atoms.o expol.o inform.o iounit.o kexpl.o keys.o sizes.o +kextra.o: +keys.o: +kgeom.o: atomid.o atoms.o bound.o couple.o group.o iounit.o keys.o molcul.o potent.o restrn.o +khbond.o: +kimprop.o: atomid.o atoms.o couple.o improp.o inform.o iounit.o keys.o kiprop.o potent.o tors.o +kimptor.o: atomid.o atoms.o couple.o imptor.o inform.o iounit.o keys.o kitors.o math.o potent.o tors.o +kinetic.o: atomid.o atoms.o bath.o group.o ielscf.o mdstuf.o moldyn.o rgddyn.o units.o usage.o +kiprop.o: +kitors.o: +kmetal.o: +kmpole.o: atomid.o atoms.o chgpen.o couple.o inform.o iounit.o kcpen.o keys.o kmulti.o math.o mplpot.o mpole.o polar.o polgrp.o potent.o units.o +kmulti.o: +kopbend.o: angbnd.o atomid.o atoms.o couple.o fields.o inform.o iounit.o keys.o kopbnd.o merck.o opbend.o potent.o usage.o +kopbnd.o: +kopdist.o: angbnd.o atmlst.o atomid.o atoms.o couple.o inform.o iounit.o keys.o kopdst.o opdist.o potent.o +kopdst.o: +korbit.o: atomid.o atoms.o bndstr.o inform.o iounit.o keys.o korbs.o orbits.o piorbs.o pistuf.o tors.o units.o +korbs.o: +kpitor.o: +kpitors.o: atomid.o atoms.o bndstr.o couple.o inform.o iounit.o keys.o kpitor.o pitors.o potent.o tors.o +kpolar.o: atoms.o chgpen.o couple.o expol.o inform.o iounit.o keys.o kpolpr.o kpolr.o mplpot.o mpole.o polar.o polgrp.o polopt.o polpcg.o polpot.o poltcg.o potent.o +kpolpr.o: +kpolr.o: +krepel.o: atomid.o atoms.o inform.o iounit.o keys.o krepl.o mpole.o potent.o repel.o reppot.o sizes.o +krepl.o: +ksolut.o: +ksolv.o: angbnd.o atmlst.o atomid.o atoms.o bath.o bndstr.o chgpot.o couple.o gkstuf.o hpmf.o inform.o iounit.o keys.o ksolut.o kvdws.o math.o nonpol.o pbstuf.o polar.o polopt.o polpot.o potent.o ptable.o sizes.o solpot.o solute.o vdw.o +kstbnd.o: +kstrbnd.o: angbnd.o angpot.o atmlst.o atomid.o atoms.o couple.o fields.o inform.o iounit.o keys.o kstbnd.o merck.o potent.o ring.o strbnd.o +kstrtor.o: atmlst.o atomid.o atoms.o couple.o inform.o iounit.o keys.o ksttor.o potent.o strtor.o tors.o +ksttor.o: +ktors.o: atomid.o atoms.o couple.o fields.o inform.o iounit.o keys.o ktorsn.o math.o merck.o potent.o ring.o tors.o usage.o +ktorsn.o: +ktortor.o: atomid.o atoms.o bitor.o inform.o iounit.o keys.o ktrtor.o potent.o tortor.o +ktrtor.o: +kurey.o: angbnd.o atomid.o atoms.o inform.o iounit.o keys.o kurybr.o potent.o urey.o +kurybr.o: +kvdw.o: atomid.o atoms.o couple.o fields.o inform.o iounit.o keys.o khbond.o kvdwpr.o kvdws.o math.o merck.o potent.o vdw.o vdwpot.o +kvdwpr.o: +kvdws.o: +kxrepel.o: atomid.o atoms.o inform.o iounit.o keys.o kxrepl.o mpole.o potent.o repel.o reppot.o sizes.o xrepel.o +kxrepl.o: +lattice.o: bound.o boxes.o cell.o inform.o iounit.o math.o +lbfgs.o: inform.o iounit.o keys.o linmin.o math.o minima.o output.o scales.o +light.o: +lights.o: bound.o boxes.o cell.o iounit.o light.o +limits.o: +linmin.o: +lusolve.o: iounit.o +makeint.o: atoms.o couple.o inform.o iounit.o math.o sizes.o zclose.o zcoord.o +makeref.o: atomid.o atoms.o boxes.o couple.o files.o refer.o titles.o +makexyz.o: atoms.o zcoord.o +math.o: +maxwell.o: units.o +mdinit.o: atomid.o atoms.o bath.o bound.o couple.o extfld.o files.o freeze.o group.o inform.o iounit.o keys.o mdstuf.o molcul.o moldyn.o mpole.o output.o potent.o rgddyn.o rigid.o stodyn.o units.o usage.o +mdrest.o: atomid.o atoms.o bound.o group.o inform.o iounit.o mdstuf.o moldyn.o rgddyn.o units.o +mdsave.o: atomid.o atoms.o bound.o boxes.o deriv.o files.o group.o inform.o iounit.o mdstuf.o moldyn.o mpole.o output.o polar.o potent.o rgddyn.o socket.o titles.o units.o +mdstat.o: atoms.o bath.o bound.o boxes.o inform.o iounit.o limits.o mdstuf.o molcul.o units.o usage.o warp.o +mdstuf.o: +mechanic.o: inform.o iounit.o +merck.o: sizes.o +merge.o: atomid.o atoms.o couple.o iounit.o refer.o +minima.o: +minimize.o: atoms.o bound.o files.o freeze.o inform.o iounit.o scales.o usage.o +minirot.o: files.o inform.o iounit.o math.o omega.o scales.o zcoord.o +minrigid.o: files.o group.o inform.o iounit.o math.o output.o rigid.o +mol2xyz.o: files.o iounit.o titles.o +molcul.o: +moldyn.o: +molecule.o: atomid.o atoms.o couple.o molcul.o +molxyz.o: files.o iounit.o titles.o +moment.o: +moments.o: atomid.o atoms.o bound.o charge.o dipole.o limits.o moment.o mpole.o polar.o potent.o rigid.o solpot.o units.o usage.o +monte.o: atoms.o bound.o files.o inform.o iounit.o omega.o output.o potent.o units.o usage.o zcoord.o +mplpot.o: +mpole.o: +mrecip.o: +mutant.o: +mutate.o: angbnd.o atomid.o atoms.o bndstr.o cflux.o charge.o chgpen.o dipole.o inform.o iounit.o katoms.o keys.o mplpot.o mpole.o mutant.o polar.o potent.o tors.o +nblist.o: atoms.o bound.o boxes.o cell.o charge.o disp.o iounit.o light.o limits.o mpole.o neigh.o potent.o vdw.o +neigh.o: +newton.o: atoms.o bound.o files.o inform.o iounit.o usage.o +newtrot.o: files.o hescut.o inform.o iounit.o math.o omega.o zcoord.o +nextarg.o: argue.o +nexttext.o: +nonpol.o: +nose.o: atomid.o atoms.o bath.o boxes.o freeze.o mdstuf.o moldyn.o units.o usage.o virial.o +nspline.o: +nucleic.o: atoms.o couple.o files.o group.o inform.o iounit.o katoms.o math.o molcul.o nucleo.o output.o potent.o resdue.o restrn.o rigid.o sequen.o titles.o usage.o +nucleo.o: sizes.o +number.o: inform.o iounit.o +numeral.o: +numgrad.o: atoms.o +ocvm.o: inform.o iounit.o keys.o linmin.o math.o minima.o output.o potent.o scales.o +omega.o: +opbend.o: +opdist.o: +openend.o: +openmp.o: +optimize.o: atoms.o bound.o files.o inform.o iounit.o scales.o usage.o +optinit.o: inform.o keys.o output.o potent.o +optirot.o: files.o inform.o iounit.o math.o omega.o scales.o zcoord.o +optrigid.o: files.o group.o inform.o iounit.o math.o output.o rigid.o +optsave.o: atomid.o atoms.o bound.o deriv.o files.o group.o iounit.o math.o mpole.o omega.o output.o polar.o potent.o scales.o socket.o titles.o units.o usage.o zcoord.o +orbital.o: atomid.o atoms.o bndstr.o couple.o iounit.o keys.o piorbs.o potent.o tors.o +orbits.o: +orient.o: atomid.o atoms.o group.o math.o rigid.o +orthog.o: +output.o: +overlap.o: units.o +params.o: +path.o: align.o atomid.o atoms.o files.o inform.o iounit.o linmin.o minima.o output.o paths.o +paths.o: +pbstuf.o: +pdb.o: +pdbxyz.o: atomid.o atoms.o couple.o fields.o files.o inform.o iounit.o katoms.o pdb.o resdue.o sequen.o titles.o +phipsi.o: sizes.o +picalc.o: atomid.o atoms.o bndstr.o couple.o inform.o iounit.o orbits.o piorbs.o pistuf.o tors.o units.o +piorbs.o: +pistuf.o: +pitors.o: +pme.o: +pmestuf.o: atoms.o boxes.o charge.o chunks.o disp.o math.o mpole.o openmp.o pme.o potent.o +pmpb.o: iounit.o +polar.o: +polarize.o: atoms.o inform.o iounit.o molcul.o mpole.o polar.o polopt.o polpcg.o polpot.o potent.o units.o +poledit.o: atomid.o atoms.o bndstr.o chgpen.o couple.o fields.o files.o inform.o iounit.o keys.o kpolr.o mplpot.o mpole.o polar.o polgrp.o polpot.o potent.o ptable.o ring.o sizes.o units.o +polgrp.o: +polopt.o: +polpcg.o: +polpot.o: +poltcg.o: +polymer.o: atoms.o bndstr.o bound.o boxes.o iounit.o keys.o +potent.o: +potential.o: atomid.o atoms.o charge.o chgpen.o chgpot.o dipole.o files.o inform.o iounit.o katoms.o keys.o math.o moment.o mplpot.o mpole.o neigh.o polar.o potent.o potfit.o ptable.o refer.o titles.o units.o +potfit.o: sizes.o +predict.o: atomid.o atoms.o ielscf.o keys.o polar.o uprior.o +pressure.o: atomid.o atoms.o bath.o bound.o boxes.o group.o math.o mdstuf.o molcul.o moldyn.o units.o usage.o virial.o +prmedit.o: angpot.o bndpot.o iounit.o math.o params.o sizes.o urypot.o vdwpot.o +prmkey.o: angpot.o bndpot.o chgpot.o ctrpot.o dsppot.o expol.o extfld.o fields.o mplpot.o polpot.o potent.o reppot.o rxnpot.o torpot.o units.o urypot.o vdwpot.o xrepel.o +promo.o: iounit.o +protein.o: atomid.o atoms.o couple.o files.o group.o inform.o iounit.o katoms.o math.o molcul.o output.o phipsi.o potent.o resdue.o restrn.o rigid.o sequen.o titles.o usage.o +prtarc.o: atomid.o atoms.o bound.o boxes.o couple.o files.o inform.o output.o titles.o usage.o +prtdcd.o: atoms.o bound.o boxes.o files.o titles.o +prtdyn.o: atoms.o boxes.o files.o group.o mdstuf.o moldyn.o rgddyn.o titles.o +prterr.o: files.o output.o +prtint.o: atomid.o atoms.o files.o inform.o titles.o zclose.o zcoord.o +prtmol2.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o couple.o files.o iounit.o ptable.o ring.o titles.o tors.o +prtpdb.o: bound.o boxes.o files.o pdb.o sequen.o titles.o +prtprm.o: angpot.o bndpot.o chgpot.o fields.o kanang.o kangs.o kantor.o katoms.o kbonds.o kcflux.o kchrge.o kcpen.o kctrn.o kdipol.o kdsp.o kexpl.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kpolr.o krepl.o ksolut.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o kvdws.o mplpot.o polpot.o sizes.o urypot.o vdwpot.o +prtseq.o: files.o sequen.o +prtxyz.o: atomid.o atoms.o bound.o boxes.o couple.o files.o inform.o titles.o +pss.o: atoms.o files.o hescut.o inform.o iounit.o math.o omega.o refer.o tree.o warp.o zcoord.o +pssrigid.o: atoms.o files.o group.o inform.o iounit.o math.o minima.o molcul.o refer.o rigid.o sizes.o warp.o +pssrot.o: atoms.o files.o inform.o iounit.o math.o minima.o omega.o refer.o warp.o zcoord.o +ptable.o: +qmstuf.o: +qrsolve.o: +quatfit.o: align.o +radial.o: argue.o atomid.o atoms.o bound.o boxes.o files.o inform.o iounit.o limits.o math.o molcul.o potent.o +random.o: inform.o iounit.o keys.o math.o +rattle.o: atomid.o atoms.o freeze.o group.o inform.o iounit.o moldyn.o units.o usage.o virial.o +readcart.o: output.o +readdcd.o: atoms.o bound.o boxes.o files.o inform.o iounit.o math.o titles.o +readdyn.o: atoms.o boxes.o files.o group.o iounit.o mdstuf.o moldyn.o rgddyn.o +readgau.o: ascii.o iounit.o qmstuf.o units.o +readgdma.o: atomid.o atoms.o dma.o files.o iounit.o mpole.o units.o +readint.o: atomid.o atoms.o files.o inform.o iounit.o titles.o zclose.o zcoord.o +readmol.o: atomid.o atoms.o couple.o files.o iounit.o ptable.o titles.o +readmol2.o: atomid.o atoms.o couple.o files.o iounit.o ptable.o titles.o +readpdb.o: files.o inform.o iounit.o pdb.o resdue.o sequen.o titles.o +readprm.o: fields.o iounit.o kanang.o kangs.o kantor.o katoms.o kbonds.o kcflux.o kchrge.o kcpen.o kctrn.o kdipol.o kdsp.o kexpl.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kpolr.o krepl.o ksolut.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o kvdws.o kxrepl.o merck.o params.o solute.o +readseq.o: files.o iounit.o resdue.o sequen.o +readxyz.o: atomid.o atoms.o boxes.o couple.o files.o inform.o iounit.o titles.o +refer.o: sizes.o +repel.o: +replica.o: bound.o boxes.o cell.o inform.o iounit.o math.o +reppot.o: +resdue.o: +respa.o: atomid.o atoms.o freeze.o ielscf.o limits.o mdstuf.o moldyn.o polar.o potent.o units.o usage.o virial.o +restrn.o: +rgddyn.o: +rgdstep.o: atomid.o atoms.o bound.o group.o iounit.o rgddyn.o units.o virial.o +rigid.o: +ring.o: +rings.o: angbnd.o atoms.o bitor.o bndstr.o couple.o inform.o iounit.o ring.o tors.o +rmsfit.o: align.o +rotbnd.o: +rotlist.o: atoms.o couple.o iounit.o molcul.o rotbnd.o zclose.o +rotpole.o: atoms.o math.o mpole.o repel.o +rxnfld.o: +rxnpot.o: +saddle.o: atoms.o inform.o iounit.o keys.o linmin.o minima.o syntrn.o titles.o zcoord.o +scales.o: +scan.o: atoms.o files.o inform.o iounit.o math.o minima.o omega.o output.o potent.o scales.o zcoord.o +sdstep.o: atomid.o atoms.o bath.o couple.o freeze.o kvdws.o math.o moldyn.o stodyn.o units.o usage.o virial.o +search.o: linmin.o math.o +sequen.o: sizes.o +server.o: +setprm.o: atoms.o couple.o kangs.o kantor.o kbonds.o kcflux.o kdipol.o keys.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o params.o restrn.o +shakeup.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o bound.o couple.o freeze.o keys.o math.o molcul.o ring.o usage.o +shunt.o: +sigmoid.o: +simplex.o: inform.o iounit.o keys.o minima.o +sizes.o: +sktstuf.o: atomid.o atoms.o charge.o couple.o deriv.o fields.o files.o inform.o iounit.o keys.o moldyn.o mpole.o polar.o potent.o socket.o +sniffer.o: atoms.o files.o inform.o iounit.o linmin.o math.o minima.o output.o scales.o usage.o +socket.o: +solpot.o: +solute.o: +sort.o: +spacefill.o: atomid.o atoms.o files.o inform.o iounit.o kvdws.o math.o ptable.o usage.o +spectrum.o: files.o iounit.o math.o units.o +square.o: inform.o iounit.o keys.o minima.o +stodyn.o: +strbnd.o: +strtor.o: +suffix.o: ascii.o +superpose.o: align.o atomid.o atoms.o bound.o files.o inform.o iounit.o titles.o +surface.o: atoms.o inform.o iounit.o math.o usage.o +surfatom.o: atoms.o iounit.o math.o +switch.o: limits.o nonpol.o shunt.o +syntrn.o: +tarray.o: +tcgstuf.o: atoms.o iounit.o limits.o mpole.o polar.o poltcg.o potent.o +temper.o: atomid.o atoms.o bath.o group.o ielscf.o mdstuf.o molcul.o moldyn.o rgddyn.o units.o usage.o +testgrad.o: atoms.o deriv.o energi.o files.o inform.o inter.o iounit.o solute.o usage.o +testhess.o: atoms.o files.o hescut.o inform.o iounit.o usage.o +testpair.o: atoms.o deriv.o energi.o inform.o iounit.o light.o limits.o neigh.o polpot.o potent.o tarray.o vdwpot.o +testpol.o: atoms.o bound.o inform.o iounit.o limits.o minima.o mpole.o polar.o polopt.o polpot.o poltcg.o potent.o rigid.o units.o usage.o +testrot.o: domega.o energi.o inform.o iounit.o math.o omega.o zcoord.o +testvir.o: atoms.o bath.o bound.o boxes.o inform.o iounit.o math.o units.o virial.o +timer.o: atoms.o hescut.o inform.o iounit.o limits.o polpot.o +timerot.o: hescut.o inform.o iounit.o limits.o omega.o polpot.o +titles.o: +tncg.o: atoms.o hescut.o inform.o iounit.o keys.o linmin.o math.o minima.o output.o piorbs.o potent.o +torphase.o: +torpot.o: +torque.o: atoms.o deriv.o mpole.o +tors.o: +torsfit.o: atomid.o atoms.o files.o inform.o iounit.o keys.o ktorsn.o math.o output.o potent.o qmstuf.o restrn.o scales.o tors.o usage.o +torsions.o: atoms.o bndstr.o couple.o iounit.o tors.o +tortor.o: +tree.o: +trimtext.o: +unitcell.o: bound.o boxes.o keys.o math.o +units.o: +uprior.o: +urey.o: +urypot.o: +usage.o: +valence.o: angbnd.o angpot.o atomid.o atoms.o bndpot.o bndstr.o couple.o files.o hescut.o inform.o iounit.o kangs.o kbonds.o keys.o kopbnd.o kstbnd.o ktorsn.o kurybr.o kvdws.o linmin.o math.o minima.o opbend.o output.o potent.o qmstuf.o scales.o strbnd.o torpot.o tors.o units.o urey.o urypot.o usage.o valfit.o vdwpot.o +valfit.o: +vdw.o: +vdwpot.o: +verlet.o: atomid.o atoms.o freeze.o ielscf.o moldyn.o polar.o units.o usage.o +version.o: iounit.o output.o +vibbig.o: atomid.o atoms.o bound.o couple.o files.o hescut.o hessn.o inform.o iounit.o keys.o limits.o mpole.o potent.o rigid.o units.o usage.o vdw.o vdwpot.o vibs.o +vibrate.o: atomid.o atoms.o files.o hescut.o iounit.o math.o units.o usage.o +vibrot.o: iounit.o omega.o +vibs.o: +virial.o: +volume.o: atoms.o iounit.o math.o sizes.o +warp.o: +xrepel.o: +xtalfit.o: atomid.o atoms.o bound.o boxes.o charge.o dipole.o energi.o files.o fracs.o inform.o iounit.o kvdws.o limits.o math.o molcul.o mpole.o polar.o potent.o sizes.o vdw.o vdwpot.o xtals.o +xtalmin.o: atoms.o boxes.o files.o inform.o iounit.o keys.o math.o scales.o +xtals.o: +xyzatm.o: atoms.o inform.o iounit.o math.o +xyzedit.o: atomid.o atoms.o bound.o boxes.o couple.o energi.o files.o inform.o iounit.o katoms.o limits.o linmin.o math.o minima.o molcul.o neigh.o output.o potent.o ptable.o refer.o repel.o scales.o titles.o units.o usage.o vdw.o vdwpot.o +xyzint.o: files.o iounit.o titles.o +xyzmol2.o: files.o iounit.o titles.o +xyzpdb.o: atomid.o atoms.o couple.o fields.o files.o inform.o molcul.o pdb.o resdue.o sequen.o +zatom.o: angbnd.o atomid.o atoms.o bndstr.o fields.o iounit.o kangs.o katoms.o kbonds.o sizes.o zclose.o zcoord.o +zclose.o: sizes.o +zcoord.o: sizes.o diff --git a/source/analysis.f b/source/analysis.f index 5db8e88c3..6dfff695b 100644 --- a/source/analysis.f +++ b/source/analysis.f @@ -26,6 +26,7 @@ subroutine analysis (energy) use iounit use limits use potent + use reppot use vdwpot implicit none integer i @@ -227,7 +228,10 @@ subroutine analysis (energy) if (vdwtyp .eq. 'BUFFERED-14-7') call ehal3 if (vdwtyp .eq. 'GAUSSIAN') call egauss3 end if - if (use_repel) call erepel3 + if (use_repel) then + if (reptyp .eq. 'PAULI') call erepel3 + if (reptyp .eq. 'EXCHANGE') call exrepel3 + end if if (use_disp) call edisp3 c c call any miscellaneous energy component routines diff --git a/source/exrepel1.f b/source/exrepel1.f new file mode 100644 index 000000000..8dbf4f88e --- /dev/null +++ b/source/exrepel1.f @@ -0,0 +1,72 @@ +c +c +c ############################################################ +c ## COPYRIGHT (C) 2022 by Moses KJ Chung & Jay W. Ponder ## +c ## All Rights Reserved ## +c ############################################################ +c +c ############################################################### +c ## ## +c ## subroutine exrepel1 -- exch repulsion energy & derivs ## +c ## ## +c ############################################################### +c +c +c "exrepel1" calculates the exchange repulsion energy and first +c derivatives with respect to Cartesian coordinates +c +c literature reference: +c +c TBD +c +c + subroutine exrepel1 + use limits + implicit none +c +c +c choose the method for summing over pairwise interactions +c +c if (use_mlist) then +c call exrepel1b +c else +c call exrepel1a +c end if + call exrepel1a + return + end +c +c +c ################################################################## +c ## ## +c ## subroutine exrepel1a -- exch repulsion analysis via loop ## +c ## ## +c ################################################################## +c +c +c "exrepel1a" calculates the exchange repulsion energy and first +c derivatives with respect to Cartesian coordinates using a +c pairwise double loop +c +c + subroutine exrepel1a + use atoms + use bound + use cell + use couple + use deriv + use energi + use group + use mpole + use mutant + use repel + use reppot + use shunt + use units + use usage + use virial + use xrepel + implicit none + integer i,j,k + return + end \ No newline at end of file diff --git a/source/exrepel3.f b/source/exrepel3.f new file mode 100644 index 000000000..6530d9d0e --- /dev/null +++ b/source/exrepel3.f @@ -0,0 +1,754 @@ +c +c +c ############################################################ +c ## COPYRIGHT (C) 2022 by Moses KJ Chung & Jay W. Ponder ## +c ## All Rights Reserved ## +c ############################################################ +c +c ################################################################# +c ## ## +c ## subroutine exrepel3 -- exch repulsion energy & analysis ## +c ## ## +c ################################################################# +c +c +c "exrepel3" calculates the exchange repulsion energy and partitions +c the energy among the atoms +c +c literature reference: +c +c TBD +c +c + subroutine exrepel3 + use limits + implicit none +c +c +c choose the method for summing over pairwise interactions +c +c if (use_mlist) then +c call exrepel3b +c else +c call exrepel3a +c end if + call exrepel3a + return + end +c +c +c ################################################################## +c ## ## +c ## subroutine exrepel3a -- exch repulsion analysis via loop ## +c ## ## +c ################################################################## +c +c +c "exrepel3a" calculates the exchange repulsion energy and also +c partitions the energy among the atoms using a double loop +c +c + subroutine exrepel3a + use action + use analyz + use atomid + use atoms + use bound + use cell + use couple + use energi + use group + use inform + use inter + use iounit + use molcul + use mutant + use repel + use reppot + use shunt + use units + use usage + use xrepel + implicit none + integer i,j,k + integer ii,kk + integer ind1,ind2,ind3 + real*8 e,eterm + real*8 fgrp,taper + real*8 xi,yi,zi + real*8 xk,yk,zk + real*8 xr,yr,zr + real*8 r,r2 + real*8 normi + real*8 zxri,zxrk + real*8 vali,valk,valik + real*8 dmpi,dmpk + real*8 dis,dks + real*8 dmpip,dmpkp + real*8 cis,cks + real*8 cix,ckx + real*8 ciy,cky + real*8 ciz,ckz + real*8 rcix,rckx + real*8 rciy,rcky + real*8 rciz,rckz + real*8 intS,intS2 + real*8 intK,intJ + real*8 intaAb,intbBa + real*8 intbAb,intaBa + real*8 overlapTotal + real*8 NEaAbTotal,NEaBbTotal,NEbAbTotal,NEaBaTotal + real*8 coulombTotal,exchangeTotal + real*8 pre,termS0 + real*8 termS1,termS2 + real*8 bi(3) + real*8 bj(3) + real*8 bk(3) + real*8 coeffi(4),coeffk(4) + real*8, allocatable :: rscale(:) + logical proceed,usei + logical muti,mutk,mutik + logical header,huge + character*6 mode + character*8 example +c +c +c +c zero out the repulsion energy and partitioning terms +c + ner = 0 + er = 0.0d0 + do i = 1, n + aer(i) = 0.0d0 + end do + if (nrep .eq. 0) return +c +c determine pseudo orbital coefficients +c + call solvcoeff +c +c rotate the coefficient components into the global frame +c + call rotcoeff +c +c perform dynamic allocation of some local arrays +c + allocate (rscale(n)) +c +c initialize connected atom exclusion coefficients +c + do i = 1, n + rscale(i) = 1.0d0 + end do +c +c calculate the exchange repulsion interaction energy term +c + do ii = 1, nrep-1 + i = irep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kk = ii+1, nrep + k = irep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + xk = x(k) + yk = y(k) + zk = z(k) + xr = xk - xi + yr = yk - yi + zr = zk - zi + if (use_bounds) call image (xr,yr,zr) + r2 = xr * xr + yr * yr + zr * zr + if (r2 .le. off2) then + r = sqrt(r2) + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + coeffi = (/ cis, rcix, rciy, rciz /) + coeffk = (/ cks, rckx, rcky, rckz /) + valik = vali * valk + intS = overlapTotal (coeffi, coeffk, dmpi, dmpk, + & dmpip, dmpkp, 0.0d0, r) + intS2 = intS * intS + e = hartree*(zxri*valk+zxrk*vali)*intS2/r*rscale(k) +c +c scale the interaction based on its group membership +c + if (use_group) e = e * fgrp +c +c increment the overall exchange repulsion energy component +c + if (e .ne. 0.0d0) then + ner = ner + 1 + er = er + e + aer(i) = aer(i) + 0.5d0*e + aer(k) = aer(k) + 0.5d0*e + end if +c +c increment the total intermolecular energy +c + if (molcule(i) .ne. molcule(k)) then + einter = einter + e + end if + end if + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do +c +c perform deallocation of some local arrays +c + deallocate (rscale) + return + end +c +c +c ################################################################ +c ## ## +c ## subroutine solvcoeff -- solve for orbital coefficients ## +c ## ## +c ################################################################ +c +c +c "solvcoeff" finds the coefficients for the pseudo orbital +c +c + subroutine solvcoeff + use repel + use xrepel + implicit none + integer ii,k,jj + integer ind1,ind2,ind3 + real*8 cr,cs + real*8 pcoeff(3) + real*8 ppole(3) + real*8 p2p1,p3p1 + logical l1,l2,l3 +c +c +c determine pseudo orbital coefficients +c + do ii = 1, nrep + do k = 1, 3 + pcoeff(k) = 0.0d0 + end do + ppole(1) = repole(2,ii) + ppole(2) = repole(3,ii) + ppole(3) = repole(4,ii) + cr = crpxr(ii) + l1 = (abs(ppole(1)) < 1.0d-10) + l2 = (abs(ppole(2)) < 1.0d-10) + l3 = (abs(ppole(3)) < 1.0d-10) +c +c case for no dipole +c + if (l1.and.l2.and.l3) then + cs = 1.0d0 + ind1 = 1 + ind2 = 2 + ind3 = 3 +c +c case for p orbital coefficients set to 0 +c + else if (cr < 1.0d-10) then + cs = 1.0d0 + ind1 = 1 + ind2 = 2 + ind3 = 3 +c +c determine normalized coefficients +c + else + cs = 1.0d0 / sqrt(1.0d0 + cr) +c +c determine index for largest absolute dipole component +c + ind1 = maxloc(abs(ppole), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + p2p1 = ppole(ind2) / ppole(ind1) + p3p1 = ppole(ind3) / ppole(ind1) + pcoeff(ind1) = cs * sqrt(cr / (1.0d0 + p2p1**2 + p3p1**2)) + if (ppole(ind1) < 0.0d0) then + pcoeff(ind1) = -pcoeff(ind1) + end if + pcoeff(ind2) = pcoeff(ind1) * p2p1 + pcoeff(ind3) = pcoeff(ind1) * p3p1 + end if + cpxr(1,ii) = cs + cpxr(ind1+1,ii) = pcoeff(ind1) + cpxr(ind2+1,ii) = pcoeff(ind2) + cpxr(ind3+1,ii) = pcoeff(ind3) + end do + return + end +c +c +c ############################################################ +c ## ## +c ## subroutine rotcoeff -- rotate orbital coefficients ## +c ## ## +c ############################################################ +c +c +c "rotcoeff" rotates the coefficients for the pseudo orbital +c to global coordinates +c +c + subroutine rotcoeff + use repel + use xrepel + implicit none + integer isite + integer i,j,k + real*8 a(3,3) + real*8 cpole(4) + logical planar +c +c +c rotate pseudo orbital coefficients +c + do isite = 1, nrep +c +c determine rotation matrix +c + call rotmat (isite,a,planar) +c +c copy local frame coefficients +c + do i = 1, 4 + cpole(i) = cpxr(i,isite) + end do +c +c s orbital coefficients have the same value in any coordinate frame +c + rcpxr(1,isite) = cpole(1) +c +c rotate the p orbital coefficients to the global coordinate frame +c + do i = 2, 4 + rcpxr(i,isite) = 0.0d0 + do j = 2, 4 + rcpxr(i,isite) = rcpxr(i,isite) + cpole(j)*a(i-1,j-1) + end do + end do + end do + return + end +c +c +c ######################################################### +c ## ## +c ## function overlapTotal -- total overlap integral ## +c ## ## +c ######################################################### +c +c +c "overlapTotal" computes the total overlap integral +c +c + function overlapTotal (coeff1, coeff2, a, b, ap, bp, z1, z2) + implicit none + real*8 overlapTotal + real*8 a,b,ap,bp + real*8 z1,z2 + real*8 cscs,cxcx,cycy + real*8 czcz,cscz,czcs + real*8 SS,SPz,PzS + real*8 PxPx,PyPy,PzPz + real*8 stoOSS,stoOSPz,stoOPzS + real*8 stoOPxPx,stoOPzPz + real*8 overlapSS,overlapSPz,overlapPzS + real*8 overlapPxPx,overlapPzPz + real*8 coeff1(4),coeff2(4) +c +c + cscs = coeff1(1) * coeff2(1) + cxcx = coeff1(2) * coeff2(2) + cycy = coeff1(3) * coeff2(3) + czcz = coeff1(4) * coeff2(4) + cscz = coeff1(1) * coeff2(4) + czcs = coeff1(4) * coeff2(1) + SS = overlapSS(a, b, z1, z2) + SPz = overlapSPz(a, bp, z1, z2) + PzS = overlapPzS(ap, b, z1, z2) + PxPx = overlapPxPx(ap, bp, z1, z2) + PyPy = PxPx + PzPz = overlapPzPz(ap, bp, z1, z2) + overlapTotal = cscs * SS + cxcx * PxPx + cycy * PyPy + czcz * PzPz + & + cscz * SPz + czcs * PzS + return + end +c +c +c ################################################### +c ## ## +c ## function overlapSS -- SS overlap integral ## +c ## ## +c ################################################### +c +c +c "overlapSS" computes the overlap integral +c +c + function overlapSS (a, b, z1, z2) + implicit none + real*8 overlapSS,over + real*8 a,b,z1,z2 + real*8 diff,eps,zr,r + real*8 rho,rho2 + real*8 exp1 + real*8 alpha,tau,rhoA,rhoB + real*8 a2,b2,kappa + real*8 pre,term1,term2 + real*8 kappam,kappap + real*8 expA,expB +c +c + diff = abs(a - b) + eps = 0.001d0 + zr = z2 - z1 + r = abs(zr) + if (diff .lt. eps) then + rho = a * r + rho2 = rho * rho + exp1 = exp(-rho) + over = (1.0d0 + rho + rho2 / 3.0d0) * exp1 + else + alpha = 1.0d0 / 2.0d0 * (a + b) + tau = (a - b) / (a + b) + rho = alpha * r + rhoA = a * r + rhoB = b * r + a2 = a * a + b2 = b * b + kappa = (a2 + b2) / (a2 - b2) + kappam = 1.0d0 - kappa + kappap = 1.0d0 + kappa + expA = exp(-rhoA) + expB = exp(-rhoB) + pre = sqrt(1.0d0 - tau**2) / (tau * rho) + term1 =-kappam * (2.0d0 * kappap + rhoA) * expA + term2 = kappap * (2.0d0 * kappam + rhoB) * expB + over = pre * (term1 + term2) + end if + overlapSS = over + return + end +c +c +c ##################################################### +c ## ## +c ## function overlapSPz -- SPz overlap integral ## +c ## ## +c ##################################################### +c +c +c "overlapSPz" computes the overlap integral +c +c + function overlapSPz (a, b, z1, z2) + implicit none + real*8 overlapSPz,over + real*8 a,b,z1,z2 + real*8 diff,eps,zr,r + real*8 rho,rho2 + real*8 exp1 + real*8 alpha,tau,rhoA,rhoB + real*8 a2,b2,kappa + real*8 pre,term1,term2 + real*8 rhoA2 + real*8 rhoB2,rhoB3 + real*8 kappam,kappam2 + real*8 kappap,kappap2 + real*8 expA,expB +c +c + diff = abs(a - b) + eps = 0.001d0 + zr = z2 - z1 + r = abs(zr) + if (diff .lt. eps) then + rho = a * r + rho2 = rho * rho + exp1 = exp(-rho) + over = 0.5d0 * rho * (1.0d0 + rho + rho2 / 3.0d0) * exp1 + else + alpha = 1.0d0 / 2.0d0 * (a + b) + tau = (a - b) / (a + b) + rho = alpha * r + rhoA = a * r + rhoB = b * r + a2 = a * a + b2 = b * b + kappa = (a2 + b2) / (a2 - b2) + rho2 = rho**2 + rhoA2 = rhoA * rhoA + rhoB2 = rhoB * rhoB + rhoB3 = rhoB2 * rhoB + kappam = 1.0d0 - kappa + kappap = 1.0d0 + kappa + kappam2 = kappam**2 + kappap2 = kappap**2 + expA = exp(-rhoA) + expB = exp(-rhoB) + pre = sqrt((1.0d0 + tau) / (1.0d0 - tau)) / (tau * rho2) + term1 =-kappam2 * (6.0d0 * kappap * (1.0d0 + rhoA) + & + 2.0d0 * rhoA2) * expA + term2 = kappap * (6.0d0 * kappam2 * (1.0d0 + rhoB) + & + 4.0d0 * kappam * rhoB2 + rhoB3) * expB + over = pre * (term1 + term2) + end if + overlapSPz = -over + if (z1 > z2) then + overlapSPz = -overlapSPz + end if + return + end +c +c +c ##################################################### +c ## ## +c ## function overlapPzS -- PzS overlap integral ## +c ## ## +c ##################################################### +c +c +c "overlapPzS" computes the overlap integral +c +c + function overlapPzS (a, b, z1, z2) + implicit none + real*8 overlapPzS,overlapSPz + real*8 a,b,z1,z2 +c +c + overlapPzS = overlapSPz(b,a,z2,z1) + return + end +c +c +c ####################################################### +c ## ## +c ## function overlapPxPx -- PxPx overlap integral ## +c ## ## +c ####################################################### +c +c +c "overlapPxPx" computes the overlap integral +c +c + function overlapPxPx (a, b, z1, z2) + implicit none + real*8 overlapPxPx,over + real*8 a,b,z1,z2 + real*8 diff,eps,zr,r + real*8 rho,rho2,rho3 + real*8 exp1 + real*8 alpha,tau,rhoA,rhoB + real*8 a2,b2,kappa + real*8 pre,term1,term2 + real*8 rhoA2,rhoA3 + real*8 rhoB2,rhoB3 + real*8 kappam,kappam2 + real*8 kappap,kappap2 + real*8 expA,expB +c +c + diff = abs(a - b) + eps = 0.001d0 + zr = z2 - z1 + r = abs(zr) + if (diff .lt. eps) then + rho = a * r + rho2 = rho * rho + rho3 = rho2 * rho + exp1 = exp(-rho) + over = (1.0d0 + rho + 2.0d0/5.0d0 * rho2 + rho3/15.0d0) * exp1 + else + alpha = 1.0d0 / 2.0d0 * (a + b) + tau = (a - b) / (a + b) + rho = alpha * r + rhoA = a * r + rhoB = b * r + a2 = a * a + b2 = b * b + kappa = (a2 + b2) / (a2 - b2) + rho3 = rho**3 + rhoA2 = rhoA * rhoA + rhoA3 = rhoA2 * rhoA + rhoB2 = rhoB * rhoB + rhoB3 = rhoB2 * rhoB + kappam = 1.0d0 - kappa + kappap = 1.0d0 + kappa + kappam2 = kappam**2 + kappap2 = kappap**2 + expA = exp(-rhoA) + expB = exp(-rhoB) + pre = 1.0d0 / (sqrt(1.0d0 - tau**2) * tau * rho3) + term1 =-kappam2 * (24.0d0 * kappap2 * (1.0d0 + rhoA) + & + 12.0d0 * kappap * rhoA2 + 2.0d0 * rhoA3) * expA + term2 = kappap2 * (24.0d0 * kappam2 * (1.0d0 + rhoB) + & + 12.0d0 * kappam * rhoB2 + 2.0d0 * rhoB3) * expB + over = pre * (term1 + term2) + end if + overlapPxPx = over + return + end +c +c +c ####################################################### +c ## ## +c ## function overlapPzPz -- PzPz overlap integral ## +c ## ## +c ####################################################### +c +c +c "overlapPzPz" computes the overlap integral +c +c + function overlapPzPz (a, b, z1, z2) + implicit none + real*8 overlapPzPz,over + real*8 a,b,z1,z2 + real*8 diff,eps,zr,r + real*8 rho,rho2,rho3,rho4 + real*8 exp1 + real*8 alpha,tau,rhoA,rhoB + real*8 a2,b2,kappa + real*8 pre,term1,term2 + real*8 rhoA2,rhoA3,rhoA4 + real*8 rhoB2,rhoB3,rhoB4 + real*8 kappam,kappam2 + real*8 kappap,kappap2 + real*8 expA,expB +c +c + diff = abs(a - b) + eps = 0.001d0 + zr = z2 - z1 + r = abs(zr) + if (diff .lt. eps) then + rho = a * r + rho2 = rho * rho + rho3 = rho2 * rho + rho4 = rho3 * rho + exp1 = exp(-rho) + over = (-1.0d0 - rho - rho2 / 5.0d0 + 2.0d0/15.0d0 * rho3 + & + rho4 / 15.0d0) * exp1 + else + alpha = 1.0d0 / 2.0d0 * (a + b) + tau = (a - b) / (a + b) + rho = alpha * r + rhoA = a * r + rhoB = b * r + a2 = a * a + b2 = b * b + kappa = (a2 + b2) / (a2 - b2) + rho3 = rho**3 + rhoA2 = rhoA * rhoA + rhoA3 = rhoA2 * rhoA + rhoA4 = rhoA3 * rhoA + rhoB2 = rhoB * rhoB + rhoB3 = rhoB2 * rhoB + rhoB4 = rhoB3 * rhoB + kappam = 1.0d0 - kappa + kappap = 1.0d0 + kappa + kappam2 = kappam**2 + kappap2 = kappap**2 + expA = exp(-rhoA) + expB = exp(-rhoB) + pre = 1.0d0 / (sqrt(1. - tau**2) * tau * rho3) + term1 =-kappam2 * (48.0d0 * kappap2 * (1.0d0 + rhoA + & + 0.5d0 * rhoA2) + 2.0d0 * (5.0d0 + 6.0d0 * kappa) * rhoA3 + & + 2.0d0 * rhoA4) * expA + term2 = kappap2 * (48.0d0 * kappam2 * (1.0d0 + rhoB + & + 0.5d0 * rhoB2) + 2.0d0 * (5.0d0 - 6.0d0 * kappa) * rhoB3 + & + 2.0d0 * rhoB4) * expB + over = pre * (term1 + term2) + end if + overlapPzPz = -over + return + end diff --git a/source/final.f b/source/final.f index 3910b72b6..b6ad4825a 100644 --- a/source/final.f +++ b/source/final.f @@ -82,6 +82,7 @@ subroutine final use kurybr use kvdwpr use kvdws + use kxrepl use light use limits use merck @@ -133,6 +134,7 @@ subroutine final use vdw use vibs use warp + use xrepel implicit none c c @@ -724,6 +726,12 @@ subroutine final if (allocated(eps4)) deallocate (eps4) if (allocated(reduct)) deallocate (reduct) c +c deallocation of global arrays from module kxrepl +c + if (allocated(pxrz)) deallocate (pxrz) + if (allocated(pxrdmp)) deallocate (pxrdmp) + if (allocated(pxrcr)) deallocate (pxrcr) +c c deallocation of global arrays from module light c if (allocated(kbx)) deallocate (kbx) @@ -1031,6 +1039,14 @@ subroutine final if (allocated(repole)) deallocate (repole) if (allocated(rrepole)) deallocate (rrepole) c +c deallocation of global arrays from module xrepel +c + if (allocated(zpxr)) deallocate (zpxr) + if (allocated(dmppxr)) deallocate (dmppxr) + if (allocated(crpxr)) deallocate (crpxr) + if (allocated(cpxr)) deallocate (cpxr) + if (allocated(rcpxr)) deallocate (rcpxr) +c c deallocation of global arrays from module restrn c if (allocated(ipfix)) deallocate (ipfix) diff --git a/source/initprm.f b/source/initprm.f index 9aa765e82..e494ec008 100644 --- a/source/initprm.f +++ b/source/initprm.f @@ -57,6 +57,7 @@ subroutine initprm use kurybr use kvdws use kvdwpr + use kxrepl use math use mplpot use polpot @@ -70,6 +71,7 @@ subroutine initprm use units use uprior use vdwpot + use xrepel implicit none integer i,j character*3 blank3 @@ -220,6 +222,9 @@ subroutine initprm if (.not. allocated(prsiz)) allocate (prsiz(maxclass)) if (.not. allocated(prdmp)) allocate (prdmp(maxclass)) if (.not. allocated(prele)) allocate (prele(maxclass)) + if (.not. allocated(pxrz)) allocate (pxrz(maxclass)) + if (.not. allocated(pxrdmp)) allocate (pxrdmp(maxclass)) + if (.not. allocated(pxrcr)) allocate (pxrcr(maxclass)) if (.not. allocated(dspsix)) allocate (dspsix(maxclass)) if (.not. allocated(dspdmp)) allocate (dspdmp(maxclass)) if (.not. allocated(chg)) allocate (chg(maxtyp)) @@ -276,6 +281,9 @@ subroutine initprm prsiz(i) = 0.0d0 prdmp(i) = 0.0d0 prele(i) = 0.0d0 + pxrz(i) = 0.0d0 + pxrdmp(i) = 0.0d0 + pxrcr(i) = 0.0d0 dspsix(i) = 0.0d0 dspdmp(i) = 0.0d0 cpele(i) = 0.0d0 @@ -352,6 +360,7 @@ subroutine initprm c c set default control parameters for repulsion terms c + reptyp = 'PAULI' r2scale = 0.0d0 r3scale = 0.0d0 r4scale = 1.0d0 diff --git a/source/kxrepel.f b/source/kxrepel.f new file mode 100644 index 000000000..712e770e4 --- /dev/null +++ b/source/kxrepel.f @@ -0,0 +1,196 @@ +c +c +c ############################################################ +c ## COPYRIGHT (C) 2022 by Moses KJ Chung & Jay W. Ponder ## +c ## All Rights Reserved ## +c ############################################################ +c +c ############################################################## +c ## ## +c ## subroutine kxrepel -- exch repulsion term assignment ## +c ## ## +c ############################################################## +c +c +c "kxrepel" assigns the nuclear charge parameter and exponential +c parameter for exchange repulsion interaction and processes any +c new or changed values for these parameters +c +c + subroutine kxrepel + use atomid + use atoms + use inform + use iounit + use kxrepl + use keys + use mpole + use potent + use xrepel + use repel + use reppot + use sizes + implicit none + integer i,j,k + integer iboys + integer freeunit + integer ia,ic,next + real*8 zpr,apr,cpr + logical header + character*20 keyword + character*240 record + character*240 string +c +c +c exit if using "Pauli" repulsion +c + if (use_repel) return + use_repel = .true. +c +c process keywords containing exch repulsion parameters +c + header = .true. + do i = 1, nkey + next = 1 + record = keyline(i) + call gettext (record,keyword,next) + call upcase (keyword) + if (keyword(1:11) .eq. 'XREPULSION ') then + k = 0 + zpr = 0.0d0 + apr = 0.0d0 + cpr = 0.0d0 + call getnumb (record,k,next) + string = record(next:240) + read (string,*,err=10,end=10) zpr,apr,cpr + 10 continue + if (k .gt. 0) then + if (header .and. .not.silent) then + header = .false. + write (iout,20) + 20 format (/,' Additional Exchange Repulsion', + & ' Parameters :', + & //,5x,'Atom Class',15x,'Core',11x,'Damp', + & 6x,'P/S Coeff'/) + end if + if (k .le. maxclass) then + pxrz(k) = zpr + pxrdmp(k) = apr + pxrcr(k) = cpr + if (.not. silent) then + write (iout,30) k,zpr,apr,cpr + 30 format (6x,i6,7x,3f15.4) + end if + else + write (iout,40) + 40 format (/,' KXREPEL -- Too many Exchange Repulsion', + & ' Parameters') + abort = .true. + end if + end if + end if + end do +c +c perform dynamic allocation of some global arrays +c + if (allocated(irep)) deallocate (irep) + if (allocated(replist)) deallocate (replist) + if (allocated(zpxr)) deallocate (zpxr) + if (allocated(dmppxr)) deallocate (dmppxr) + if (allocated(crpxr)) deallocate (crpxr) + if (allocated(cpxr)) deallocate (cpxr) + if (allocated(rcpxr)) deallocate (rcpxr) + if (allocated(repole)) deallocate (repole) + if (allocated(rrepole)) deallocate (rrepole) + allocate (irep(n)) + allocate (replist(n)) + allocate (zpxr(n)) + allocate (dmppxr(n)) + allocate (crpxr(n)) + allocate (cpxr(4,n)) + allocate (rcpxr(4,n)) + allocate (repole(maxpole,n)) + allocate (rrepole(maxpole,n)) +c +c assign the core, alpha, and coefficient ratio parameters +c + do i = 1, n + irep(i) = 0 + replist(i) = 0 + zpxr(i) = 0.0d0 + dmppxr(i) = 0.0d0 + crpxr(i) = 0.0d0 + ic = class(i) + if (ic .ne. 0) then + zpxr(i) = pxrz(ic) + dmppxr(i) = pxrdmp(ic) + crpxr(i) = pxrcr(ic) + end if + end do +c +c process keywords containing atom specific exchange repulsion +c + header = .true. + do i = 1, nkey + next = 1 + record = keyline(i) + call gettext (record,keyword,next) + call upcase (keyword) + if (keyword(1:11) .eq. 'XREPULSION ') then + ia = 0 + zpr = 0.0d0 + apr = 0.0d0 + cpr = 0.0d0 + string = record(next:240) + read (string,*,err=70,end=70) ia,zpr,apr,cpr + if (ia.lt.0 .and. ia.ge.-n) then + ia = -ia + if (header .and. .not.silent) then + header = .false. + write (iout,50) + 50 format (/,' Additional Exchange Repulsion Values', + & ' for Specific Atoms :', + & //,8x,'Atom',15x,'Core',11x,'Damp', + & 6x,'P/S Coeff'/) + end if + if (.not. silent) then + write (iout,60) ia,zpr,apr,cpr + 60 format (6x,i6,7x,3f15.4) + end if + zpxr(ia) = zpr + dmppxr(ia) = apr + crpxr(ia) = cpr + end if + 70 continue + end if + end do +c +c condense repulsion sites to the list of multipole sites +c + nrep = 0 + if (use_repel) then + do i = 1, n + if (zpxr(i) .ne. 0) then + nrep = nrep + 1 + irep(nrep) = i + replist(i) = nrep + do j = 1, maxpole + repole(j,i) = pole(j,i) + end do + end if + end do + end if +c +c test multipoles at chiral sites and invert if necessary +c + call chkpole +c +c turn off the exchange repulsion potential if not used +c + if (nrep .eq. 0) use_repel = .false. +c +c set repulsion type +c + if (use_repel) reptyp = 'EXCHANGE' + return + end diff --git a/source/kxrepl.f b/source/kxrepl.f new file mode 100644 index 000000000..661c6b740 --- /dev/null +++ b/source/kxrepl.f @@ -0,0 +1,26 @@ +c +c +c ############################################################ +c ## COPYRIGHT (C) 2022 by Moses KJ Chung & Jay W. Ponder ## +c ## All Rights Reserved ## +c ############################################################ +c +c ############################################################### +c ## ## +c ## module kxrepl -- exch repulsion forcefield parameters ## +c ## ## +c ############################################################### +c + +c pxrz nuclear charge parameter value for each atom class +c pxrdmp exch repulsion alpha parameter for each atom class +c pxrcr ratio of p/s orbital cofficients for each atom class +c +c + module kxrepl + implicit none + real*8, allocatable :: pxrz(:) + real*8, allocatable :: pxrdmp(:) + real*8, allocatable :: pxrcr(:) + save + end diff --git a/source/mechanic.f b/source/mechanic.f index 1e6e8a8dd..9cdbd1cad 100644 --- a/source/mechanic.f +++ b/source/mechanic.f @@ -99,6 +99,7 @@ subroutine mechanic c call kvdw call krepel + call kxrepel call kdisp c c assign solvation, metal, pisystem and restraint parameters diff --git a/source/readprm.f b/source/readprm.f index 8269cc898..aecb58bed 100644 --- a/source/readprm.f +++ b/source/readprm.f @@ -50,6 +50,7 @@ subroutine readprm use kurybr use kvdws use kvdwpr + use kxrepl use merck use params use solute @@ -77,7 +78,7 @@ subroutine readprm integer ft(6),pg(maxval) real*8 wght,rd real*8 ep,rdn - real*8 spr,apr,epr + real*8 spr,apr,epr,cpr real*8 cdp,adp real*8 an1,an2,an3 real*8 ba1,ba2 @@ -2004,6 +2005,22 @@ subroutine readprm else if (ie .eq. 1) then mmffaroma(ia,if) = ic end if +c +c exchange repulsion parameters +c + else if (keyword(1:11) .eq. 'XREPULSION ') then + ia = 0 + spr = 0.0d0 + apr = 0.0d0 + cpr = 1.0d0 + string = record(next:240) + read (string,*,err=770,end=770) ia,spr,apr,cpr + 770 continue + if (ia .ne. 0) then + pxrz(ia) = spr + pxrdmp(ia) = apr + pxrcr(ia) = cpr + end if end if end do return diff --git a/source/reppot.f b/source/reppot.f index dd550a0e8..d9d5f0fc6 100644 --- a/source/reppot.f +++ b/source/reppot.f @@ -16,6 +16,7 @@ c r3scale scale factor for 1-3 repulsion energy interactions c r4scale scale factor for 1-4 repulsion energy interactions c r5scale scale factor for 1-5 repulsion energy interactions +c reptyp type of repulsion potential energy function c c module reppot @@ -24,5 +25,6 @@ module reppot real*8 r3scale real*8 r4scale real*8 r5scale + character*8 reptyp save end diff --git a/source/xrepel.f b/source/xrepel.f new file mode 100644 index 000000000..4f1b69a5d --- /dev/null +++ b/source/xrepel.f @@ -0,0 +1,30 @@ +c +c +c ############################################################ +c ## COPYRIGHT (C) 2022 by Moses KJ Chung & Jay W. Ponder ## +c ## All Rights Reserved ## +c ############################################################ +c +c ############################################################### +c ## ## +c ## module xrepel -- exch repulsion for current structure ## +c ## ## +c ############################################################### +c +c +c zpxr nuclear charge parameter value for each atom +c dmppxr exchange repulsion alpha damping value for each atom +c crpxr ratio of p/s orbital cofficients for each atom +c cpxr local pseudo wavefunction coefficient for each atom +c rcpxr global pseudo wavefunction coefficient for each atom +c +c + module xrepel + implicit none + real*8, allocatable :: zpxr(:) + real*8, allocatable :: dmppxr(:) + real*8, allocatable :: crpxr(:) + real*8, allocatable :: cpxr(:,:) + real*8, allocatable :: rcpxr(:,:) + save + end From 42aca1383f10775d1724ca2c8287ead82fa5c7df Mon Sep 17 00:00:00 2001 From: momokchung Date: Fri, 17 Mar 2023 16:24:01 -0500 Subject: [PATCH 02/15] minor edit --- source/exrepel1.f | 24 ++++++++++++++++++++++++ source/exrepel3.f | 6 +++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/source/exrepel1.f b/source/exrepel1.f index 8dbf4f88e..9143eae75 100644 --- a/source/exrepel1.f +++ b/source/exrepel1.f @@ -68,5 +68,29 @@ subroutine exrepel1a use xrepel implicit none integer i,j,k +c +c +c zero out the repulsion energy and derivatives +c + er = 0.0d0 + do i = 1, n + der(1,i) = 0.0d0 + der(2,i) = 0.0d0 + der(3,i) = 0.0d0 + end do +c +c check the sign of multipole components at chiral sites +c + call chkpole +c +c determine pseudo orbital coefficients +c + call solvcoeff +c +c rotate the coefficient components into the global frame +c + call rotcoeff + + if (nrep .eq. 0) return return end \ No newline at end of file diff --git a/source/exrepel3.f b/source/exrepel3.f index 6530d9d0e..ef1e9342d 100644 --- a/source/exrepel3.f +++ b/source/exrepel3.f @@ -123,6 +123,10 @@ subroutine exrepel3a end do if (nrep .eq. 0) return c +c check the sign of multipole components at chiral sites +c + call chkpole +c c determine pseudo orbital coefficients c call solvcoeff @@ -740,7 +744,7 @@ function overlapPzPz (a, b, z1, z2) kappap2 = kappap**2 expA = exp(-rhoA) expB = exp(-rhoB) - pre = 1.0d0 / (sqrt(1. - tau**2) * tau * rho3) + pre = 1.0d0 / (sqrt(1.0d0 - tau**2) * tau * rho3) term1 =-kappam2 * (48.0d0 * kappap2 * (1.0d0 + rhoA & + 0.5d0 * rhoA2) + 2.0d0 * (5.0d0 + 6.0d0 * kappa) * rhoA3 & + 2.0d0 * rhoA4) * expA From 1036a0081de7cad737dc677577bd56bd3626535f Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Thu, 30 Mar 2023 14:51:08 -0500 Subject: [PATCH 03/15] implemented exrepel and exrepel1a --- source/energy.f | 6 +- source/exrepel.f | 267 +++++++++++++++++++++++++++ source/exrepel1.f | 390 +++++++++++++++++++++++++++++++++++++++- source/exrepel3.f | 448 +++++++++++++++++++++++++++++++++++----------- source/gradient.f | 6 +- 5 files changed, 1006 insertions(+), 111 deletions(-) create mode 100644 source/exrepel.f diff --git a/source/energy.f b/source/energy.f index c5f830edd..5c159daa5 100644 --- a/source/energy.f +++ b/source/energy.f @@ -21,6 +21,7 @@ function energy () use iounit use limits use potent + use reppot use rigid use vdwpot implicit none @@ -117,7 +118,10 @@ function energy () if (vdwtyp .eq. 'BUFFERED-14-7') call ehal if (vdwtyp .eq. 'GAUSSIAN') call egauss end if - if (use_repel) call erepel + if (use_repel) then + if (reptyp .eq. 'PAULI') call erepel + if (reptyp .eq. 'EXCHANGE') call exrepel + end if if (use_disp) call edisp c c call any miscellaneous energy component routines diff --git a/source/exrepel.f b/source/exrepel.f new file mode 100644 index 000000000..a4007b0fa --- /dev/null +++ b/source/exrepel.f @@ -0,0 +1,267 @@ +c +c +c ############################################################ +c ## COPYRIGHT (C) 2022 by Moses KJ Chung & Jay W. Ponder ## +c ## All Rights Reserved ## +c ############################################################ +c +c ########################################################## +c ## ## +c ## subroutine exrepel3 -- exchange repulsion energy ## +c ## ## +c ########################################################## +c +c +c "exrepel" calculates the exchange repulsion energy +c +c literature reference: +c +c TBD +c +c + subroutine exrepel + use limits + implicit none +c +c +c choose the method for summing over pairwise interactions +c +c if (use_mlist) then +c call exrepel0b +c else +c call exrepel0a +c end if + call exrepel0a + return + end +c +c +c ################################################################ +c ## ## +c ## subroutine exrepel0a -- exch repulsion energy via loop ## +c ## ## +c ################################################################ +c +c +c "exrepel0a" calculates the exchange repulsion energy using a +c double loop +c +c + subroutine exrepel0a + use atoms + use bound + use cell + use couple + use energi + use group + use mutant + use polar + use repel + use reppot + use shunt + use units + use usage + use xrepel + implicit none + integer i,j,k + integer ii,kk + integer ind1,ind2,ind3 + real*8 e,fgrp + real*8 eterm + real*8 xi,yi,zi + real*8 xr,yr,zr + real*8 r,r2 + real*8 normi + real*8 zxri,zxrk + real*8 vali,valk + real*8 dmpi,dmpk + real*8 dis,dks + real*8 dmpip,dmpkp + real*8 cis,cks + real*8 cix,ckx + real*8 ciy,cky + real*8 ciz,ckz + real*8 rcix,rckx + real*8 rciy,rcky + real*8 rciz,rckz + real*8 cscs,cxcx,cycy + real*8 czcz,cscz,czcs + real*8 SS,SPz,PzS + real*8 PxPx,PyPy,PzPz + real*8 dSS,dSPz,dPzS + real*8 dPxPx,dPyPy,dPzPz + real*8 intS,intS2 + real*8 dintS + real*8 bi(3) + real*8 bj(3) + real*8 bk(3) + real*8, allocatable :: rscale(:) + logical proceed,usei + logical muti,mutk,mutik + logical grad + character*6 mode +c +c +c zero out the repulsion energy contribution +c + er = 0.0d0 + if (nrep .eq. 0) return +c +c check the sign of multipole components at chiral sites +c + call chkpole +c +c determine pseudo orbital coefficients +c + call solvcoeff +c +c rotate the coefficient components into the global frame +c + call rotcoeff +c +c perform dynamic allocation of some local arrays +c + allocate (rscale(n)) +c +c initialize connected atom exclusion coefficients +c + do i = 1, n + rscale(i) = 1.0d0 + end do +c +c set gradient mode to false +c + grad = .false. +c +c calculate the exchange repulsion interaction energy term +c + do ii = 1, nrep-1 + i = irep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kk = ii+1, nrep + k = irep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi + if (use_bounds) call image (xr,yr,zr) + r2 = xr * xr + yr * yr + zr * zr + if (r2 .le. off2) then + r = sqrt(r2) + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, 0.0d0, + & r, grad, SS, dSS, SPz, dSPz, PzS, dPzS, + & PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + intS2 = intS * intS + e = hartree*(zxri*valk+zxrk*vali)*intS2/r*rscale(k) +c +c scale the interaction based on its group membership +c + if (use_group) e = e * fgrp +c +c increment the overall exchange repulsion energy component +c + er = er + e + end if + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do +c +c perform deallocation of some local arrays +c + deallocate (rscale) + return + end \ No newline at end of file diff --git a/source/exrepel1.f b/source/exrepel1.f index 9143eae75..70b54a123 100644 --- a/source/exrepel1.f +++ b/source/exrepel1.f @@ -68,6 +68,64 @@ subroutine exrepel1a use xrepel implicit none integer i,j,k + integer ii,kk + integer ind1,ind2,ind3 + real*8 e,fgrp + real*8 eterm,de + real*8 xi,yi,zi + real*8 xr,yr,zr + real*8 r,r2,r3 + real*8 normi + real*8 zxri,zxrk + real*8 vali,valk + real*8 dmpi,dmpk + real*8 dis,dks + real*8 dmpip,dmpkp + real*8 cis,cks + real*8 cix,ckx + real*8 ciy,cky + real*8 ciz,ckz + real*8 rcix,rckx + real*8 rciy,rcky + real*8 rciz,rckz + real*8 cscs,cxcx,cycy + real*8 czcz,cscz,czcs + real*8 SS,SPz,PzS + real*8 PxPx,PyPy,PzPz + real*8 dSS,dSPz,dPzS + real*8 dPxPx,dPyPy,dPzPz + real*8 intS,intS2 + real*8 dintS + real*8 dintSx,dintSy,dintSz + real*8 intSR,preintSR + real*8 pre + real*8 term1,term2 + real*8 term2x,term2y,term2z + real*8 frcx,frcy,frcz + real*8 ncix,nciy,nciz + real*8 nckx,ncky,nckz + real*8 nrcix,nrciy,nrciz + real*8 nrckx,nrcky,nrckz + real*8 drcixdx,drcixdy,drcixdz + real*8 drciydx,drciydy,drciydz + real*8 drcizdx,drcizdy,drcizdz + real*8 drckxdx,drckxdy,drckxdz + real*8 drckydx,drckydy,drckydz + real*8 drckzdx,drckzdy,drckzdz + real*8 tixintS,tiyintS,tizintS + real*8 tkxintS,tkyintS,tkzintS + real*8 bi(3) + real*8 bj(3) + real*8 bk(3) + real*8 ttri(3),ttrk(3) + real*8 fix(3),fiy(3),fiz(3) + real*8, allocatable :: rscale(:) + real*8, allocatable :: ter(:,:) + logical proceed,usei + logical muti,mutk,mutik + logical header,huge + logical grad + character*6 mode c c c zero out the repulsion energy and derivatives @@ -78,6 +136,7 @@ subroutine exrepel1a der(2,i) = 0.0d0 der(3,i) = 0.0d0 end do + if (nrep .eq. 0) return c c check the sign of multipole components at chiral sites c @@ -90,7 +149,332 @@ subroutine exrepel1a c rotate the coefficient components into the global frame c call rotcoeff - - if (nrep .eq. 0) return +c +c perform dynamic allocation of some local arrays +c + allocate (rscale(n)) + allocate (ter(3,n)) +c +c initialize connected atom exclusion coefficients +c + do i = 1, n + rscale(i) = 1.0d0 + do j = 1, 3 + ter(j,i) = 0.0d0 + end do + end do +c +c set gradient mode to true +c + grad = .true. +c +c calculate the exchange repulsion energy and derivative +c + do ii = 1, nrep-1 + i = irep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kk = ii+1, nrep + k = irep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi + if (use_bounds) call image (xr,yr,zr) + r2 = xr * xr + yr * yr + zr * zr + if (r2 .le. off2) then + r = sqrt(r2) + r3 = r2 * r + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, 0.0d0, + & r, grad, SS, dSS, SPz, dSPz, PzS, dPzS, + & PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + intS2 = intS * intS + dintS = cscs * dSS + cxcx * dPxPx + cycy * dPyPy + & + czcz * dPzPz + cscz * dSPz + czcs * dPzS + dintSx = dintS * bk(1) + dintSy = dintS * bk(2) + dintSz = dintS * bk(3) + drcixdx = bi(1)*(-rciz/r) + drcixdy = bi(2)*(-rciz/r) + drcixdz = bi(3)*(-rciz/r) + drciydx = bj(1)*(-rciz/r) + drciydy = bj(2)*(-rciz/r) + drciydz = bj(3)*(-rciz/r) + drcizdx = bi(1)*( rcix/r) + bj(1)*( rciy/r) + drcizdy = bi(2)*( rcix/r) + bj(2)*( rciy/r) + drcizdz = bi(3)*( rcix/r) + bj(3)*( rciy/r) + drckxdx = bi(1)*(-rckz/r) + drckxdy = bi(2)*(-rckz/r) + drckxdz = bi(3)*(-rckz/r) + drckydx = bj(1)*(-rckz/r) + drckydy = bj(2)*(-rckz/r) + drckydz = bj(3)*(-rckz/r) + drckzdx = bi(1)*( rckx/r) + bj(1)*( rcky/r) + drckzdy = bi(2)*( rckx/r) + bj(2)*( rcky/r) + drckzdz = bi(3)*( rckx/r) + bj(3)*( rcky/r) + dintSx = dintSx + drcizdx*cks*pzs + drcixdx*rckx*pxpx + & + drciydx*rcky*pypy + drcizdx*rckz*pzpz + dintSy = dintSy + drcizdy*cks*pzs + drcixdy*rckx*pxpx + & + drciydy*rcky*pypy + drcizdy*rckz*pzpz + dintSz = dintSz + drcizdz*cks*pzs + drcixdz*rckx*pxpx + & + drciydz*rcky*pypy + drcizdz*rckz*pzpz + dintSx = dintSx + cis*drckzdx*spz + rcix*drckxdx*pxpx + & + rciy*drckydx*pypy + rciz*drckzdx*pzpz + dintSy = dintSy + cis*drckzdy*spz + rcix*drckxdy*pxpx + & + rciy*drckydy*pypy + rciz*drckzdy*pzpz + dintSz = dintSz + cis*drckzdz*spz + rcix*drckxdz*pxpx + & + rciy*drckydz*pypy + rciz*drckzdz*pzpz + pre = hartree * (zxri*valk + zxrk*vali) * rscale(k) + e = pre * intS2 / r + term1 = -intS2 / r3 + intSR = 2.0d0 * intS / r + term2x = intSR * dintSx + term2y = intSR * dintSy + term2z = intSR * dintSz + +c +c compute the force components for this interaction +c + frcx = pre * (xr * term1 + term2x) + frcy = pre * (yr * term1 + term2y) + frcz = pre * (zr * term1 + term2z) +c +c compute the torque components for this interaction +c + ncix = 0.0d0 + nciy = -ciz + nciz = ciy + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tixintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + ncix = ciz + nciy = 0.0d0 + nciz = -cix + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tiyintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + ncix = -ciy + nciy = cix + nciz = 0.0d0 + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tizintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = 0.0d0 + ncky = -ckz + nckz = cky + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkxintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = ckz + ncky = 0.0d0 + nckz = -ckx + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkyintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = -cky + ncky = ckx + nckz = 0.0d0 + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkzintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + preintSR = -pre * intSR + ttri(1) = preintSR * tixintS + ttri(2) = preintSR * tiyintS + ttri(3) = preintSR * tizintS + ttrk(1) = preintSR * tkxintS + ttrk(2) = preintSR * tkyintS + ttrk(3) = preintSR * tkzintS +c +c scale the interaction based on its group membership +c + if (use_group) then + e = fgrp * e + frcx = fgrp * frcx + frcy = fgrp * frcy + frcz = fgrp * frcz + do j = 1, 3 + ttri(j) = fgrp * ttri(j) + ttrk(j) = fgrp * ttrk(j) + end do + end if +c +c increment the overall exchange repulsion energy component +c + er = er + e +c +c increment force-based gradient on first site +c + der(1,i) = der(1,i) - frcx + der(2,i) = der(2,i) - frcy + der(3,i) = der(3,i) - frcz + ter(1,i) = ter(1,i) + ttri(1) + ter(2,i) = ter(2,i) + ttri(2) + ter(3,i) = ter(3,i) + ttri(3) +c +c increment force-based gradient and torque on second site +c + der(1,k) = der(1,k) + frcx + der(2,k) = der(2,k) + frcy + der(3,k) = der(3,k) + frcz + ter(1,k) = ter(1,k) + ttrk(1) + ter(2,k) = ter(2,k) + ttrk(2) + ter(3,k) = ter(3,k) + ttrk(3) + end if + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do +c +c resolve site torques then increment forces and virial +c + do ii = 1, nrep + i = irep(ii) + call torque (i,ter(1,i),fix,fiy,fiz,der) + end do +c +c perform deallocation of some local arrays +c + deallocate (rscale) + deallocate (ter) return - end \ No newline at end of file + end diff --git a/source/exrepel3.f b/source/exrepel3.f index ef1e9342d..9c0eda5f6 100644 --- a/source/exrepel3.f +++ b/source/exrepel3.f @@ -73,15 +73,14 @@ subroutine exrepel3a integer i,j,k integer ii,kk integer ind1,ind2,ind3 - real*8 e,eterm - real*8 fgrp,taper + real*8 e,fgrp + real*8 eterm real*8 xi,yi,zi - real*8 xk,yk,zk real*8 xr,yr,zr real*8 r,r2 real*8 normi real*8 zxri,zxrk - real*8 vali,valk,valik + real*8 vali,valk real*8 dmpi,dmpk real*8 dis,dks real*8 dmpip,dmpkp @@ -92,26 +91,23 @@ subroutine exrepel3a real*8 rcix,rckx real*8 rciy,rcky real*8 rciz,rckz + real*8 cscs,cxcx,cycy + real*8 czcz,cscz,czcs + real*8 SS,SPz,PzS + real*8 PxPx,PyPy,PzPz + real*8 dSS,dSPz,dPzS + real*8 dPxPx,dPyPy,dPzPz real*8 intS,intS2 - real*8 intK,intJ - real*8 intaAb,intbBa - real*8 intbAb,intaBa - real*8 overlapTotal - real*8 NEaAbTotal,NEaBbTotal,NEbAbTotal,NEaBaTotal - real*8 coulombTotal,exchangeTotal - real*8 pre,termS0 - real*8 termS1,termS2 + real*8 dintS real*8 bi(3) real*8 bj(3) real*8 bk(3) - real*8 coeffi(4),coeffk(4) real*8, allocatable :: rscale(:) logical proceed,usei logical muti,mutk,mutik logical header,huge + logical grad character*6 mode - character*8 example -c c c c zero out the repulsion energy and partitioning terms @@ -145,6 +141,10 @@ subroutine exrepel3a rscale(i) = 1.0d0 end do c +c set gradient mode to false +c + grad = .false. +c c calculate the exchange repulsion interaction energy term c do ii = 1, nrep-1 @@ -161,8 +161,6 @@ subroutine exrepel3a cix = rcpxr(2,i) ciy = rcpxr(3,i) ciz = rcpxr(4,i) - usei = use(i) - muti = mut(i) c c set exclusion coefficients for connected atoms c @@ -189,12 +187,9 @@ subroutine exrepel3a if (.not. use_intra) proceed = .true. if (proceed) proceed = (usei .or. use(k)) if (proceed) then - xk = x(k) - yk = y(k) - zk = z(k) - xr = xk - xi - yr = yk - yi - zr = zk - zi + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi if (use_bounds) call image (xr,yr,zr) r2 = xr * xr + yr * yr + zr * zr if (r2 .le. off2) then @@ -236,11 +231,17 @@ subroutine exrepel3a rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz - coeffi = (/ cis, rcix, rciy, rciz /) - coeffk = (/ cks, rckx, rcky, rckz /) - valik = vali * valk - intS = overlapTotal (coeffi, coeffk, dmpi, dmpk, - & dmpip, dmpkp, 0.0d0, r) + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, 0.0d0, + & r, grad, SS, dSS, SPz, dSPz, PzS, dPzS, + & PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS intS2 = intS * intS e = hartree*(zxri*valk+zxrk*vali)*intS2/r*rscale(k) c @@ -382,6 +383,7 @@ subroutine solvcoeff c c subroutine rotcoeff + use mpole use repel use xrepel implicit none @@ -390,6 +392,7 @@ subroutine rotcoeff real*8 a(3,3) real*8 cpole(4) logical planar + character*8 axetyp c c c rotate pseudo orbital coefficients @@ -405,6 +408,16 @@ subroutine rotcoeff do i = 1, 4 cpole(i) = cpxr(i,isite) end do + if (planar) then + axetyp = polaxe(isite) + if (axetyp .eq. 'Z-Bisect') then + cpole(2) = 0.0d0 + else if (axetyp .eq. '3-Fold') then + do i = 2, 4 + cpole(i) = 0.0d0 + end do + end if + end if c c s orbital coefficients have the same value in any coordinate frame c @@ -423,63 +436,216 @@ subroutine rotcoeff end c c -c ######################################################### -c ## ## -c ## function overlapTotal -- total overlap integral ## -c ## ## -c ######################################################### +c ################################################################# +c ## ## +c ## subroutine computeOverlap -- computes overlap integrals ## +c ## ## +c ################################################################# c c -c "overlapTotal" computes the total overlap integral +c "computeOverlap" computes overlap integrals c c - function overlapTotal (coeff1, coeff2, a, b, ap, bp, z1, z2) + subroutine computeOverlap (a, b, ap, bp, z1, z2, grad, SS, dSS, + & SPz, dSPz, PzS, dPzS, PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) implicit none - real*8 overlapTotal real*8 a,b,ap,bp real*8 z1,z2 - real*8 cscs,cxcx,cycy - real*8 czcz,cscz,czcs real*8 SS,SPz,PzS real*8 PxPx,PyPy,PzPz - real*8 stoOSS,stoOSPz,stoOPzS - real*8 stoOPxPx,stoOPzPz - real*8 overlapSS,overlapSPz,overlapPzS - real*8 overlapPxPx,overlapPzPz - real*8 coeff1(4),coeff2(4) -c -c - cscs = coeff1(1) * coeff2(1) - cxcx = coeff1(2) * coeff2(2) - cycy = coeff1(3) * coeff2(3) - czcz = coeff1(4) * coeff2(4) - cscz = coeff1(1) * coeff2(4) - czcs = coeff1(4) * coeff2(1) - SS = overlapSS(a, b, z1, z2) - SPz = overlapSPz(a, bp, z1, z2) - PzS = overlapPzS(ap, b, z1, z2) - PxPx = overlapPxPx(ap, bp, z1, z2) + real*8 dSS,dSPz,dPzS + real*8 dPxPx,dPyPy,dPzPz + real*8 eps, diffa, diffb + logical grad +c +c + eps = 1.0d-10 + diffa = abs(a - ap) + diffb = abs(b - bp) + if (diffa.lt.eps .and. diffb.lt.eps) then + call overlapAll(a, b, z1, z2, grad, SS, dSS, SPz, dSPz, + & PzS, dPzS, PxPx, dPxPx, PzPz, dPzPz) + else + call overlapSS(a, b, z1, z2, grad, SS, dSS) + call overlapSPz(a, bp, z1, z2, grad, SPz, dSPz) + call overlapPzS(ap, b, z1, z2, grad, PzS, dPzS) + call overlapPxPx(ap, bp, z1, z2, grad, PxPx, dPxPx) + call overlapPzPz(ap, bp, z1, z2, grad, PzPz, dPzPz) + end if PyPy = PxPx - PzPz = overlapPzPz(ap, bp, z1, z2) - overlapTotal = cscs * SS + cxcx * PxPx + cycy * PyPy + czcz * PzPz - & + cscz * SPz + czcs * PzS + dPyPy = dPxPx + return + end +c +c +c ######################################################## +c ## ## +c ## subroutine overlapAll -- all overlap integrals ## +c ## ## +c ######################################################## +c +c +c "overlapAll" computes all the overlap integrals +c +c + subroutine overlapAll (a, b, z1, z2, grad, SS, dSS, SPz, dSPz, + & PzS, dPzS, PxPx, dPxPx, PzPz, dPzPz) + implicit none + real*8 over,dover + real*8 SS,SPz,PzS + real*8 PxPx,PzPz + real*8 dSS,dSPz,dPzS + real*8 dPxPx,dPzPz + real*8 a,b,z1,z2 + real*8 diff,eps,zr,r + real*8 rho,rho2,rho3,rho4 + real*8 exp1 + real*8 alpha,tau,rhoA,rhoB + real*8 a2,b2,kappa + real*8 pre,term1,term2 + real*8 rhoA2,rhoA3,rhoA4,rhoA5 + real*8 rhoB2,rhoB3,rhoB4,rhoB5 + real*8 kappam,kappam2 + real*8 kappap,kappap2 + real*8 expA,expB + logical grad +c +c + diff = abs(a - b) + eps = 0.001d0 + zr = z2 - z1 + r = abs(zr) + if (diff .lt. eps) then + rho = a * r + rho2 = rho * rho + rho3 = rho2 * rho + rho4 = rho3 * rho + exp1 = exp(-rho) + SS = (1.0d0 + rho + rho2 / 3.0d0) * exp1 + SPz = -0.5d0 * rho * (1.0d0 + rho + rho2 / 3.0d0) * exp1 + PzS = -SPz + PxPx = (1.0d0 + rho + 2.0d0/5.0d0 * rho2 + rho3/15.0d0) * exp1 + PzPz = -(-1.0d0 - rho - rho2 / 5.0d0 + 2.0d0/15.0d0 * rho3 + & + rho4 / 15.0d0) * exp1 + if (grad) then + dSS = -1.0d0/3.0d0 * a * rho * (1.0d0 + rho) * exp1 + dSPz = -0.5d0 * a * (1.0d0 + rho - rho3 / 3.0d0) * exp1 + dPzS = -dSPz + dPxPx = -0.2d0 * a * rho * (1.0d0 + rho + rho2 / 3.0d0) + & * exp1 + dPzPz = -0.6d0 * a * rho * (1.0d0 + rho + 2.0d0/9.0d0 * rho2 + & - rho3 / 9.0d0) * exp1 + end if + else + alpha = 1.0d0 / 2.0d0 * (a + b) + tau = (a - b) / (a + b) + rho = alpha * r + rhoA = a * r + rhoB = b * r + a2 = a * a + b2 = b * b + kappa = (a2 + b2) / (a2 - b2) + rho2 = rho * rho + rho3 = rho2 * rho + rhoA2 = rhoA * rhoA + rhoA3 = rhoA2 * rhoA + rhoA4 = rhoA3 * rhoA + rhoB2 = rhoB * rhoB + rhoB3 = rhoB2 * rhoB + rhoB4 = rhoB3 * rhoB + kappam = 1.0d0 - kappa + kappap = 1.0d0 + kappa + kappam2 = kappam**2 + kappap2 = kappap**2 + expA = exp(-rhoA) + expB = exp(-rhoB) + pre = sqrt(1.0d0 - tau**2) / (tau * rho) + term1 =-kappam * (2.0d0 * kappap + rhoA) * expA + term2 = kappap * (2.0d0 * kappam + rhoB) * expB + SS = pre * (term1 + term2) + pre = sqrt((1.0d0 + tau) / (1.0d0 - tau)) / (tau * rho2) + term1 =-kappam2 * (6.0d0 * kappap * (1.0d0 + rhoA) + & + 2.0d0 * rhoA2) * expA + term2 = kappap * (6.0d0 * kappam2 * (1.0d0 + rhoB) + & + 4.0d0 * kappam * rhoB2 + rhoB3) * expB + SPz = -pre * (term1 + term2) + pre = sqrt((1.0d0 - tau) / (1.0d0 + tau)) / (-tau * rho2) + term1 =-kappap2 * (6.0d0 * kappam * (1.0d0 + rhoB) + & + 2.0d0 * rhoB2) * expB + term2 = kappam * (6.0d0 * kappap2 * (1.0d0 + rhoA) + & + 4.0d0 * kappap * rhoA2 + rhoA3) * expA + PzS = pre * (term1 + term2) + pre = 1.0d0 / (sqrt(1.0d0 - tau**2) * tau * rho3) + term1 =-kappam2 * (24.0d0 * kappap2 * (1.0d0 + rhoA) + & + 12.0d0 * kappap * rhoA2 + 2.0d0 * rhoA3) * expA + term2 = kappap2 * (24.0d0 * kappam2 * (1.0d0 + rhoB) + & + 12.0d0 * kappam * rhoB2 + 2.0d0 * rhoB3) * expB + PxPx = pre * (term1 + term2) + term1 =-kappam2 * (48.0d0 * kappap2 * (1.0d0 + rhoA + & + 0.5d0 * rhoA2) + 2.0d0 * (5.0d0 + 6.0d0 * kappa) * rhoA3 + & + 2.0d0 * rhoA4) * expA + term2 = kappap2 * (48.0d0 * kappam2 * (1.0d0 + rhoB + & + 0.5d0 * rhoB2) + 2.0d0 * (5.0d0 - 6.0d0 * kappa) * rhoB3 + & + 2.0d0 * rhoB4) * expB + PzPz = -pre * (term1 + term2) + if (grad) then + rhoA5 = rhoA4 * rhoA + rhoB5 = rhoB4 * rhoB + pre = sqrt(1.0d0 - tau**2) / (tau * rho) + term1 = kappam * (2.0d0 * kappap * (1.0d0 + rhoA) + rhoA2) + & * expA + term2 =-kappap * (2.0d0 * kappam * (1.0d0 + rhoB) + rhoB2) + & * expB + dSS = pre / r * (term1 + term2) + pre = sqrt((1.0d0 + tau) / (1.0d0 - tau)) / (tau * rho2) + term1 = 2.0d0 * kappam2 * (6.0d0 * kappap * (1.0d0 + rhoA + & + 0.5d0 * rhoA2) + rhoA3) * expA + term2 = kappap * (-12.0d0 * kappam2 * (1.0d0 + rhoB + 0.5d0 + & * rhoB2) + (1.0d0 - 4.0d0 * kappam) * rhoB3 - rhoB4) + & * expB + dSPz = -pre / r * (term1 + term2) + pre = sqrt((1.0d0 - tau) / (1.0d0 + tau)) / (-tau * rho2) + term1 = 2.0d0 * kappap2 * (6.0d0 * kappam * (1.0d0 + rhoB + & + 0.5d0 * rhoB2) + rhoB3) * expB + term2 = kappam * (-12.0d0 * kappap2 * (1.0d0 + rhoA + 0.5d0 + & * rhoA2) + (1.0d0 - 4.0d0 * kappap) * rhoA3 - rhoA4) + & * expA + dPzS = pre / r * (term1 + term2) + pre = 1.0d0 / (sqrt(1.0d0 - tau**2) * tau * rho3) + term1 = 2.0d0 * kappam2 * (36.0d0 * kappap2 * (1.0d0 + rhoA) + & + 6.0d0 * kappap * (1.0d0 + 2.0d0 * kappap) * rhoA2 + & + 6.0d0 * kappap * rhoA3 + rhoA4) * expA + term2 =-2.0d0 * kappap2 * (36.0d0 * kappam2 * (1.0d0 + rhoB) + & + 6.0d0 * kappam * (1.0d0 + 2.0d0 * kappam) * rhoB2 + & + 6.0d0 * kappam * rhoB3 + rhoB4) * expB + dPxPx = pre / r * (term1 + term2) + term1 = kappam2 * (72.0d0 * kappap2 * (1.0d0 + rhoA + & + 0.5d0 * rhoA2 + rhoA3 / 6.0d0) + 2.0d0 * (2.0d0 + & + 3.0d0 * kappa) * rhoA4 + rhoA5) * expA + term2 =-kappap2 * (72.0d0 * kappam2 * (1.0d0 + rhoB + & + 0.5d0 * rhoB2 + rhoB3 / 6.0d0) + 2.0d0 * (2.0d0 + & - 3.0d0 * kappa) * rhoB4 + rhoB5) * expB + dPzPz = -2.0d0 * pre / r * (term1 + term2) + end if + end if return end c c -c ################################################### -c ## ## -c ## function overlapSS -- SS overlap integral ## -c ## ## -c ################################################### +c ##################################################### +c ## ## +c ## subroutine overlapSS -- SS overlap integral ## +c ## ## +c ##################################################### c c c "overlapSS" computes the overlap integral c c - function overlapSS (a, b, z1, z2) + subroutine overlapSS (a, b, z1, z2, grad, SS, dSS) implicit none - real*8 overlapSS,over + real*8 over,dover + real*8 SS,dSS real*8 a,b,z1,z2 real*8 diff,eps,zr,r real*8 rho,rho2 @@ -487,8 +653,10 @@ function overlapSS (a, b, z1, z2) real*8 alpha,tau,rhoA,rhoB real*8 a2,b2,kappa real*8 pre,term1,term2 + real*8 rhoA2,rhoB2 real*8 kappam,kappap real*8 expA,expB + logical grad c c diff = abs(a - b) @@ -500,6 +668,9 @@ function overlapSS (a, b, z1, z2) rho2 = rho * rho exp1 = exp(-rho) over = (1.0d0 + rho + rho2 / 3.0d0) * exp1 + if (grad) then + dover = -1.0d0/3.0d0 * a * rho * (1.0d0 + rho) * exp1 + end if else alpha = 1.0d0 / 2.0d0 * (a + b) tau = (a - b) / (a + b) @@ -517,37 +688,49 @@ function overlapSS (a, b, z1, z2) term1 =-kappam * (2.0d0 * kappap + rhoA) * expA term2 = kappap * (2.0d0 * kappam + rhoB) * expB over = pre * (term1 + term2) + if (grad) then + rhoA2 = rhoA * rhoA + rhoB2 = rhoB * rhoB + term1 = kappam * (2.0d0 * kappap * (1.0d0 + rhoA) + rhoA2) + & * expA + term2 =-kappap * (2.0d0 * kappam * (1.0d0 + rhoB) + rhoB2) + & * expB + dover = pre / r * (term1 + term2) end if - overlapSS = over + end if + SS = over + dSS = dover return end c c -c ##################################################### -c ## ## -c ## function overlapSPz -- SPz overlap integral ## -c ## ## -c ##################################################### +c ####################################################### +c ## ## +c ## subroutine overlapSPz -- SPz overlap integral ## +c ## ## +c ####################################################### c c c "overlapSPz" computes the overlap integral c c - function overlapSPz (a, b, z1, z2) + subroutine overlapSPz (a, b, z1, z2, grad, SPz, dSPz) implicit none - real*8 overlapSPz,over + real*8 over,dover + real*8 SPz,dSPz real*8 a,b,z1,z2 real*8 diff,eps,zr,r - real*8 rho,rho2 + real*8 rho,rho2,rho3 real*8 exp1 real*8 alpha,tau,rhoA,rhoB real*8 a2,b2,kappa real*8 pre,term1,term2 - real*8 rhoA2 - real*8 rhoB2,rhoB3 + real*8 rhoA2,rhoA3 + real*8 rhoB2,rhoB3,rhoB4 real*8 kappam,kappam2 real*8 kappap,kappap2 real*8 expA,expB + logical grad c c diff = abs(a - b) @@ -559,6 +742,10 @@ function overlapSPz (a, b, z1, z2) rho2 = rho * rho exp1 = exp(-rho) over = 0.5d0 * rho * (1.0d0 + rho + rho2 / 3.0d0) * exp1 + if (grad) then + rho3 = rho2 * rho + dover = 0.5d0 * a * (1.0d0 + rho - rho3 / 3.0d0) * exp1 + end if else alpha = 1.0d0 / 2.0d0 * (a + b) tau = (a - b) / (a + b) @@ -584,49 +771,63 @@ function overlapSPz (a, b, z1, z2) term2 = kappap * (6.0d0 * kappam2 * (1.0d0 + rhoB) & + 4.0d0 * kappam * rhoB2 + rhoB3) * expB over = pre * (term1 + term2) + if (grad) then + rhoA3 = rhoA2 * rhoA + rhoB4 = rhoB3 * rhoB + term1 = 2.0d0 * kappam2 * (6.0d0 * kappap * (1.0d0 + rhoA + & + 0.5d0 * rhoA2) + rhoA3) * expA + term2 = kappap * (-12.0d0 * kappam2 * (1.0d0 + rhoB + 0.5d0 + & * rhoB2) + (1.0d0 - 4.0d0 * kappam) * rhoB3 - rhoB4) + & * expB + dover = pre / r * (term1 + term2) end if - overlapSPz = -over + end if + SPz = -over + dSPz = -dover if (z1 > z2) then - overlapSPz = -overlapSPz + SPz = -SPz + dSPz = -dSPz end if return end c c -c ##################################################### -c ## ## -c ## function overlapPzS -- PzS overlap integral ## -c ## ## -c ##################################################### +c ####################################################### +c ## ## +c ## subroutine overlapPzS -- PzS overlap integral ## +c ## ## +c ####################################################### c c c "overlapPzS" computes the overlap integral c c - function overlapPzS (a, b, z1, z2) + subroutine overlapPzS (a, b, z1, z2, grad, PzS, dPzS) implicit none - real*8 overlapPzS,overlapSPz + real*8 PzS,dPzS real*8 a,b,z1,z2 + logical grad c c - overlapPzS = overlapSPz(b,a,z2,z1) + call overlapSPz(b, a, z2, z1, grad, PzS, dPzS) return end c c -c ####################################################### -c ## ## -c ## function overlapPxPx -- PxPx overlap integral ## -c ## ## -c ####################################################### +c ######################################################### +c ## ## +c ## subroutine overlapPxPx -- PxPx overlap integral ## +c ## ## +c ######################################################### c c c "overlapPxPx" computes the overlap integral c c - function overlapPxPx (a, b, z1, z2) + subroutine overlapPxPx (a, b, z1, z2, grad, PxPx, dPxPx) implicit none - real*8 overlapPxPx,over + real*8 over,dover + real*8 PxPx,dPxPx real*8 a,b,z1,z2 real*8 diff,eps,zr,r real*8 rho,rho2,rho3 @@ -634,11 +835,12 @@ function overlapPxPx (a, b, z1, z2) real*8 alpha,tau,rhoA,rhoB real*8 a2,b2,kappa real*8 pre,term1,term2 - real*8 rhoA2,rhoA3 - real*8 rhoB2,rhoB3 + real*8 rhoA2,rhoA3,rhoA4 + real*8 rhoB2,rhoB3,rhoB4 real*8 kappam,kappam2 real*8 kappap,kappap2 real*8 expA,expB + logical grad c c diff = abs(a - b) @@ -651,6 +853,10 @@ function overlapPxPx (a, b, z1, z2) rho3 = rho2 * rho exp1 = exp(-rho) over = (1.0d0 + rho + 2.0d0/5.0d0 * rho2 + rho3/15.0d0) * exp1 + if (grad) then + dover = -0.2d0 * a * rho * (1.0d0 + rho + rho2 / 3.0d0) + & * exp1 + end if else alpha = 1.0d0 / 2.0d0 * (a + b) tau = (a - b) / (a + b) @@ -677,25 +883,38 @@ function overlapPxPx (a, b, z1, z2) term2 = kappap2 * (24.0d0 * kappam2 * (1.0d0 + rhoB) & + 12.0d0 * kappam * rhoB2 + 2.0d0 * rhoB3) * expB over = pre * (term1 + term2) + if (grad) then + rhoA4 = rhoA3 * rhoA + rhoB4 = rhoB3 * rhoB + term1 = 2.0d0 * kappam2 * (36.0d0 * kappap2 * (1.0d0 + rhoA) + & + 6.0d0 * kappap * (1.0d0 + 2.0d0 * kappap) * rhoA2 + & + 6.0d0 * kappap * rhoA3 + rhoA4) * expA + term2 =-2.0d0 * kappap2 * (36.0d0 * kappam2 * (1.0d0 + rhoB) + & + 6.0d0 * kappam * (1.0d0 + 2.0d0 * kappam) * rhoB2 + & + 6.0d0 * kappam * rhoB3 + rhoB4) * expB + dover = pre / r * (term1 + term2) end if - overlapPxPx = over + end if + PxPx = over + dPxPx = dover return end c c -c ####################################################### -c ## ## -c ## function overlapPzPz -- PzPz overlap integral ## -c ## ## -c ####################################################### +c ######################################################### +c ## ## +c ## subroutine overlapPzPz -- PzPz overlap integral ## +c ## ## +c ######################################################### c c c "overlapPzPz" computes the overlap integral c c - function overlapPzPz (a, b, z1, z2) + subroutine overlapPzPz (a, b, z1, z2, grad, PzPz, dPzPz) implicit none - real*8 overlapPzPz,over + real*8 over,dover + real*8 PzPz,dPzPz real*8 a,b,z1,z2 real*8 diff,eps,zr,r real*8 rho,rho2,rho3,rho4 @@ -703,11 +922,12 @@ function overlapPzPz (a, b, z1, z2) real*8 alpha,tau,rhoA,rhoB real*8 a2,b2,kappa real*8 pre,term1,term2 - real*8 rhoA2,rhoA3,rhoA4 - real*8 rhoB2,rhoB3,rhoB4 + real*8 rhoA2,rhoA3,rhoA4,rhoA5 + real*8 rhoB2,rhoB3,rhoB4,rhoB5 real*8 kappam,kappam2 real*8 kappap,kappap2 real*8 expA,expB + logical grad c c diff = abs(a - b) @@ -722,6 +942,10 @@ function overlapPzPz (a, b, z1, z2) exp1 = exp(-rho) over = (-1.0d0 - rho - rho2 / 5.0d0 + 2.0d0/15.0d0 * rho3 & + rho4 / 15.0d0) * exp1 + if (grad) then + dover = 0.6d0 * a * rho * (1.0d0 + rho + 2.0d0/9.0d0 * rho2 + & - rho3 / 9.0d0) * exp1 + end if else alpha = 1.0d0 / 2.0d0 * (a + b) tau = (a - b) / (a + b) @@ -752,7 +976,19 @@ function overlapPzPz (a, b, z1, z2) & + 0.5d0 * rhoB2) + 2.0d0 * (5.0d0 - 6.0d0 * kappa) * rhoB3 & + 2.0d0 * rhoB4) * expB over = pre * (term1 + term2) + if (grad) then + rhoA5 = rhoA4 * rhoA + rhoB5 = rhoB4 * rhoB + term1 = kappam2 * (72.0d0 * kappap2 * (1.0d0 + rhoA + & + 0.5d0 * rhoA2 + rhoA3 / 6.0d0) + 2.0d0 * (2.0d0 + & + 3.0d0 * kappa) * rhoA4 + rhoA5) * expA + term2 =-kappap2 * (72.0d0 * kappam2 * (1.0d0 + rhoB + & + 0.5d0 * rhoB2 + rhoB3 / 6.0d0) + 2.0d0 * (2.0d0 + & - 3.0d0 * kappa) * rhoB4 + rhoB5) * expB + dover = 2.0d0 * pre / r * (term1 + term2) end if - overlapPzPz = -over + end if + PzPz = -over + dPzPz = -dover return end diff --git a/source/gradient.f b/source/gradient.f index e8f5f39d0..b368f812d 100644 --- a/source/gradient.f +++ b/source/gradient.f @@ -26,6 +26,7 @@ subroutine gradient (energy,derivs) use iounit use limits use potent + use reppot use rigid use vdwpot use virial @@ -241,7 +242,10 @@ subroutine gradient (energy,derivs) if (vdwtyp .eq. 'BUFFERED-14-7') call ehal1 if (vdwtyp .eq. 'GAUSSIAN') call egauss1 end if - if (use_repel) call erepel1 + if (use_repel) then + if (reptyp .eq. 'PAULI') call erepel1 + if (reptyp .eq. 'EXCHANGE') call exrepel1 + end if if (use_disp) call edisp1 c c call any miscellaneous energy and gradient routines From 337f21b1a70267cde34798912c3190e36b415133 Mon Sep 17 00:00:00 2001 From: momokchung Date: Thu, 1 Jun 2023 15:57:06 -0500 Subject: [PATCH 04/15] added switch to exrepel --- source/exrepel.f | 5 +++++ source/exrepel1.f | 5 +++++ source/exrepel3.f | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/source/exrepel.f b/source/exrepel.f index a4007b0fa..776751f05 100644 --- a/source/exrepel.f +++ b/source/exrepel.f @@ -129,6 +129,11 @@ subroutine exrepel0a rscale(i) = 1.0d0 end do c +c set cutoff distances and switching coefficients +c + mode = 'REPULS' + call switch (mode) +c c set gradient mode to false c grad = .false. diff --git a/source/exrepel1.f b/source/exrepel1.f index 70b54a123..b40592457 100644 --- a/source/exrepel1.f +++ b/source/exrepel1.f @@ -164,6 +164,11 @@ subroutine exrepel1a end do end do c +c set cutoff distances and switching coefficients +c + mode = 'REPULS' + call switch (mode) +c c set gradient mode to true c grad = .true. diff --git a/source/exrepel3.f b/source/exrepel3.f index 9c0eda5f6..b749fc745 100644 --- a/source/exrepel3.f +++ b/source/exrepel3.f @@ -141,6 +141,11 @@ subroutine exrepel3a rscale(i) = 1.0d0 end do c +c set cutoff distances and switching coefficients +c + mode = 'REPULS' + call switch (mode) +c c set gradient mode to false c grad = .false. From 0bc6b0785ebdb26aef437e1ebfccb0c6e9f96deb Mon Sep 17 00:00:00 2001 From: momokchung Date: Thu, 1 Jun 2023 16:29:08 -0500 Subject: [PATCH 05/15] remove unused variables --- source/exrepel.f | 4 ++-- source/exrepel1.f | 5 +++-- source/exrepel3.f | 9 ++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/source/exrepel.f b/source/exrepel.f index 776751f05..6cd1a17cc 100644 --- a/source/exrepel.f +++ b/source/exrepel.f @@ -67,7 +67,6 @@ subroutine exrepel0a integer ii,kk integer ind1,ind2,ind3 real*8 e,fgrp - real*8 eterm real*8 xi,yi,zi real*8 xr,yr,zr real*8 r,r2 @@ -91,7 +90,6 @@ subroutine exrepel0a real*8 dSS,dSPz,dPzS real*8 dPxPx,dPyPy,dPzPz real*8 intS,intS2 - real*8 dintS real*8 bi(3) real*8 bj(3) real*8 bk(3) @@ -154,6 +152,8 @@ subroutine exrepel0a cix = rcpxr(2,i) ciy = rcpxr(3,i) ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) c c set exclusion coefficients for connected atoms c diff --git a/source/exrepel1.f b/source/exrepel1.f index b40592457..e55355d1b 100644 --- a/source/exrepel1.f +++ b/source/exrepel1.f @@ -71,7 +71,6 @@ subroutine exrepel1a integer ii,kk integer ind1,ind2,ind3 real*8 e,fgrp - real*8 eterm,de real*8 xi,yi,zi real*8 xr,yr,zr real*8 r,r2,r3 @@ -99,7 +98,7 @@ subroutine exrepel1a real*8 dintSx,dintSy,dintSz real*8 intSR,preintSR real*8 pre - real*8 term1,term2 + real*8 term1 real*8 term2x,term2y,term2z real*8 frcx,frcy,frcz real*8 ncix,nciy,nciz @@ -189,6 +188,8 @@ subroutine exrepel1a cix = rcpxr(2,i) ciy = rcpxr(3,i) ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) c c set exclusion coefficients for connected atoms c diff --git a/source/exrepel3.f b/source/exrepel3.f index b749fc745..fdb9c02d6 100644 --- a/source/exrepel3.f +++ b/source/exrepel3.f @@ -74,7 +74,6 @@ subroutine exrepel3a integer ii,kk integer ind1,ind2,ind3 real*8 e,fgrp - real*8 eterm real*8 xi,yi,zi real*8 xr,yr,zr real*8 r,r2 @@ -98,7 +97,6 @@ subroutine exrepel3a real*8 dSS,dSPz,dPzS real*8 dPxPx,dPyPy,dPzPz real*8 intS,intS2 - real*8 dintS real*8 bi(3) real*8 bj(3) real*8 bk(3) @@ -166,6 +164,8 @@ subroutine exrepel3a cix = rcpxr(2,i) ciy = rcpxr(3,i) ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) c c set exclusion coefficients for connected atoms c @@ -309,7 +309,7 @@ subroutine solvcoeff use repel use xrepel implicit none - integer ii,k,jj + integer ii,k integer ind1,ind2,ind3 real*8 cr,cs real*8 pcoeff(3) @@ -393,7 +393,7 @@ subroutine rotcoeff use xrepel implicit none integer isite - integer i,j,k + integer i,j real*8 a(3,3) real*8 cpole(4) logical planar @@ -496,7 +496,6 @@ subroutine computeOverlap (a, b, ap, bp, z1, z2, grad, SS, dSS, subroutine overlapAll (a, b, z1, z2, grad, SS, dSS, SPz, dSPz, & PzS, dPzS, PxPx, dPxPx, PzPz, dPzPz) implicit none - real*8 over,dover real*8 SS,SPz,PzS real*8 PxPx,PzPz real*8 dSS,dSPz,dPzS From 9dd0efd7e88d0ec1d9eaf4d10ee8c4f0536d8690 Mon Sep 17 00:00:00 2001 From: momokchung Date: Mon, 5 Jun 2023 13:56:48 -0500 Subject: [PATCH 06/15] neighbor list implementation of exrepel --- source/analysis.f | 5 +- source/analyze.f | 7 + source/chkpole.f | 8 +- source/energy.f | 5 +- source/exrepel.f | 454 +++++++++++++++++++- source/exrepel1.f | 1037 +++++++++++++++++++++++++++++++++++++++++++-- source/exrepel3.f | 498 +++++++++++++++++++++- source/field.f | 1 + source/final.f | 3 + source/gradient.f | 5 +- source/initprm.f | 1 - source/kmpole.f | 2 +- source/kpolar.f | 3 +- source/kxrepel.f | 45 +- source/nblist.f | 2 +- source/potent.f | 2 + source/prmkey.f | 8 +- source/reppot.f | 2 - source/respa.f | 4 + source/testpair.f | 42 +- source/xrepel.f | 8 + 21 files changed, 2033 insertions(+), 109 deletions(-) diff --git a/source/analysis.f b/source/analysis.f index 6dfff695b..18e761cc9 100644 --- a/source/analysis.f +++ b/source/analysis.f @@ -229,8 +229,9 @@ subroutine analysis (energy) if (vdwtyp .eq. 'GAUSSIAN') call egauss3 end if if (use_repel) then - if (reptyp .eq. 'PAULI') call erepel3 - if (reptyp .eq. 'EXCHANGE') call exrepel3 + call erepel3 + else if (use_xrepel) then + call exrepel3 end if if (use_disp) call edisp3 c diff --git a/source/analyze.f b/source/analyze.f index b440e0430..735aaec0b 100644 --- a/source/analyze.f +++ b/source/analyze.f @@ -679,6 +679,13 @@ subroutine partyze fstr = '('' Repulsion'',18x,'//form2//')' end if write (iout,fstr) er,ner + else if (use_xrepel .and. (ner.ne.0.or.er.ne.0.0d0)) then + if (abs(er) .lt. 1.0d10) then + fstr = '('' Repulsion'',18x,'//form1//')' + else + fstr = '('' Repulsion'',18x,'//form2//')' + end if + write (iout,fstr) er,ner end if if (use_disp .and. (nedsp.ne.0.or.edsp.ne.0.0d0)) then fstr = '('' Dispersion'',17x,'//form1//')' diff --git a/source/chkpole.f b/source/chkpole.f index 31c1e4b2b..38f7cf6a1 100644 --- a/source/chkpole.f +++ b/source/chkpole.f @@ -20,6 +20,7 @@ subroutine chkpole use atoms use mpole use repel + use xrepel implicit none integer i,k integer ia,ib,ic,id @@ -28,6 +29,7 @@ subroutine chkpole real*8 xcd,ycd,zcd real*8 c1,c2,c3,vol logical dopol,dorep + logical doxrep logical check c c @@ -41,8 +43,10 @@ subroutine chkpole end if if (allocated(replist)) then if (replist(i) .ne. 0) dorep = .true. + else if (allocated(xreplist)) then + if (xreplist(i) .ne. 0) doxrep = .true. end if - if (dopol .or. dorep) then + if (dopol .or. dorep .or. doxrep) then check = .true. if (polaxe(i) .ne. 'Z-then-X') check = .false. if (yaxis(i) .eq. 0) check = .false. @@ -87,6 +91,8 @@ subroutine chkpole repole(8,i) = -repole(8,i) repole(10,i) = -repole(10,i) repole(12,i) = -repole(12,i) + else if (doxrep) then + xrepole(3,i) = -xrepole(3,i) end if end if end if diff --git a/source/energy.f b/source/energy.f index 5c159daa5..5e3358b16 100644 --- a/source/energy.f +++ b/source/energy.f @@ -119,8 +119,9 @@ function energy () if (vdwtyp .eq. 'GAUSSIAN') call egauss end if if (use_repel) then - if (reptyp .eq. 'PAULI') call erepel - if (reptyp .eq. 'EXCHANGE') call exrepel + call erepel + else if (use_xrepel) then + call exrepel end if if (use_disp) call edisp c diff --git a/source/exrepel.f b/source/exrepel.f index 6cd1a17cc..ed781f35f 100644 --- a/source/exrepel.f +++ b/source/exrepel.f @@ -26,12 +26,11 @@ subroutine exrepel c c choose the method for summing over pairwise interactions c -c if (use_mlist) then -c call exrepel0b -c else -c call exrepel0a -c end if - call exrepel0a + if (use_mlist) then + call exrepel0b + else + call exrepel0a + end if return end c @@ -56,7 +55,6 @@ subroutine exrepel0a use group use mutant use polar - use repel use reppot use shunt use units @@ -66,10 +64,11 @@ subroutine exrepel0a integer i,j,k integer ii,kk integer ind1,ind2,ind3 - real*8 e,fgrp + integer jcell + real*8 e,fgrp,taper real*8 xi,yi,zi real*8 xr,yr,zr - real*8 r,r2 + real*8 r,r2,r3,r4,r5 real*8 normi real*8 zxri,zxrk real*8 vali,valk @@ -103,7 +102,7 @@ subroutine exrepel0a c zero out the repulsion energy contribution c er = 0.0d0 - if (nrep .eq. 0) return + if (nxrep .eq. 0) return c c check the sign of multipole components at chiral sites c @@ -138,8 +137,8 @@ subroutine exrepel0a c c calculate the exchange repulsion interaction energy term c - do ii = 1, nrep-1 - i = irep(ii) + do ii = 1, nxrep-1 + i = ixrep(ii) xi = x(i) yi = y(i) zi = z(i) @@ -172,8 +171,8 @@ subroutine exrepel0a c c evaluate all sites within the cutoff distance c - do kk = ii+1, nrep - k = irep(kk) + do kk = ii+1, nxrep + k = ixrep(kk) mutk = mut(k) proceed = .true. if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) @@ -238,6 +237,426 @@ subroutine exrepel0a intS2 = intS * intS e = hartree*(zxri*valk+zxrk*vali)*intS2/r*rscale(k) c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + r3 = r2 * r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + e = e * taper + end if +c +c scale the interaction based on its group membership +c + if (use_group) e = e * fgrp +c +c increment the overall exchange repulsion energy component +c + er = er + e + end if + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do +c +c for periodic boundary conditions with large cutoffs +c neighbors must be found by the replicates method +c + if (use_replica) then +c +c calculate interaction energy with other unit cells +c + do ii = 1, nxrep + i = ixrep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kk = ii, nxrep + k = ixrep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + do jcell = 2, ncell + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi + call imager (xr,yr,zr,jcell) + r2 = xr*xr + yr* yr + zr*zr + if (r2 .le. off2) then + r = sqrt(r2) + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, + & 0.0d0, r, grad, SS, dSS, SPz, dSPz, PzS, + & dPzS, PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + intS2 = intS * intS + e = hartree*(zxri*valk+zxrk*vali)*intS2/r* + & rscale(k) +c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + r3 = r2 * r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + e = e * taper + end if +c +c scale the interaction based on its group membership +c + if (use_group) e = e * fgrp +c +c increment the overall exchange repulsion energy component; +c interaction of an atom with its own image counts half +c + if (i .eq. k) e = 0.5d0 * e + er = er + e + end if + end do + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do + end if +c +c perform deallocation of some local arrays +c + deallocate (rscale) + return + end +c +c +c ################################################################ +c ## ## +c ## subroutine exrepel0B -- exch repulsion energy via list ## +c ## ## +c ################################################################ +c +c +c "exrepel0b" calculates the exchange repulsion energy using a +c pairwise neightbor list +c +c + subroutine exrepel0b + use atoms + use bound + use couple + use energi + use group + use mutant + use neigh + use polar + use reppot + use shunt + use units + use usage + use xrepel + implicit none + integer i,j,k + integer ii,kk,kkk + integer ind1,ind2,ind3 + real*8 e,fgrp,taper + real*8 xi,yi,zi + real*8 xr,yr,zr + real*8 r,r2,r3,r4,r5 + real*8 normi + real*8 zxri,zxrk + real*8 vali,valk + real*8 dmpi,dmpk + real*8 dis,dks + real*8 dmpip,dmpkp + real*8 cis,cks + real*8 cix,ckx + real*8 ciy,cky + real*8 ciz,ckz + real*8 rcix,rckx + real*8 rciy,rcky + real*8 rciz,rckz + real*8 cscs,cxcx,cycy + real*8 czcz,cscz,czcs + real*8 SS,SPz,PzS + real*8 PxPx,PyPy,PzPz + real*8 dSS,dSPz,dPzS + real*8 dPxPx,dPyPy,dPzPz + real*8 intS,intS2 + real*8 bi(3) + real*8 bj(3) + real*8 bk(3) + real*8, allocatable :: rscale(:) + logical proceed,usei + logical muti,mutk,mutik + logical grad + character*6 mode +c +c +c zero out the repulsion energy contribution +c + er = 0.0d0 + if (nxrep .eq. 0) return +c +c check the sign of multipole components at chiral sites +c + call chkpole +c +c determine pseudo orbital coefficients +c + call solvcoeff +c +c rotate the coefficient components into the global frame +c + call rotcoeff +c +c perform dynamic allocation of some local arrays +c + allocate (rscale(n)) +c +c initialize connected atom exclusion coefficients +c + do i = 1, n + rscale(i) = 1.0d0 + end do +c +c set cutoff distances and switching coefficients +c + mode = 'REPULS' + call switch (mode) +c +c set gradient mode to false +c + grad = .false. +c +c OpenMP directives for the major loop structure +c +!$OMP PARALLEL default(private) +!$OMP& shared(nxrep,ixrep,x,y,z,zpxr,dmppxr,rcpxr,n12,i12, +!$OMP& n13,i13,n14,i14,n15,i15,r2scale,r3scale,r4scale,r5scale, +!$OMP& nelst,elst,use,use_group,use_intra,use_bounds,grad, +!$OMP& mut,cut2,off2,c0,c1,c2,c3,c4,c5) +!$OMP& firstprivate(rscale) +!$OMP& shared (er) +!$OMP DO reduction(+:er) schedule(guided) +c +c calculate the exchange repulsion interaction energy term +c + do ii = 1, nxrep + i = ixrep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kkk = 1, nelst(ii) + kk = elst(kkk,ii) + k = ixrep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi + if (use_bounds) call image (xr,yr,zr) + r2 = xr * xr + yr * yr + zr * zr + if (r2 .le. off2) then + r = sqrt(r2) + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, 0.0d0, + & r, grad, SS, dSS, SPz, dSPz, PzS, dPzS, + & PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + intS2 = intS * intS + e = hartree*(zxri*valk+zxrk*vali)*intS2/r*rscale(k) +c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + r3 = r2 * r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + e = e * taper + end if +c c scale the interaction based on its group membership c if (use_group) e = e * fgrp @@ -265,8 +684,13 @@ subroutine exrepel0a end do end do c +c OpenMP directives for the major loop structure +c +!$OMP END DO +!$OMP END PARALLEL +c c perform deallocation of some local arrays c deallocate (rscale) return - end \ No newline at end of file + end diff --git a/source/exrepel1.f b/source/exrepel1.f index e55355d1b..883da1895 100644 --- a/source/exrepel1.f +++ b/source/exrepel1.f @@ -27,12 +27,11 @@ subroutine exrepel1 c c choose the method for summing over pairwise interactions c -c if (use_mlist) then -c call exrepel1b -c else -c call exrepel1a -c end if - call exrepel1a + if (use_mlist) then + call exrepel1b + else + call exrepel1a + end if return end c @@ -59,7 +58,6 @@ subroutine exrepel1a use group use mpole use mutant - use repel use reppot use shunt use units @@ -68,12 +66,18 @@ subroutine exrepel1a use xrepel implicit none integer i,j,k - integer ii,kk + integer ii,kk,jcell + integer ix,iy,iz integer ind1,ind2,ind3 real*8 e,fgrp + real*8 taper,dtaper real*8 xi,yi,zi real*8 xr,yr,zr - real*8 r,r2,r3 + real*8 xix,yix,zix + real*8 xiy,yiy,ziy + real*8 xiz,yiz,ziz + real*8 rr1 + real*8 r,r2,r3,r4,r5 real*8 normi real*8 zxri,zxrk real*8 vali,valk @@ -113,6 +117,8 @@ subroutine exrepel1a real*8 drckzdx,drckzdy,drckzdz real*8 tixintS,tiyintS,tizintS real*8 tkxintS,tkyintS,tkzintS + real*8 vxx,vyy,vzz + real*8 vxy,vxz,vyz real*8 bi(3) real*8 bj(3) real*8 bk(3) @@ -135,7 +141,7 @@ subroutine exrepel1a der(2,i) = 0.0d0 der(3,i) = 0.0d0 end do - if (nrep .eq. 0) return + if (nxrep .eq. 0) return c c check the sign of multipole components at chiral sites c @@ -174,8 +180,8 @@ subroutine exrepel1a c c calculate the exchange repulsion energy and derivative c - do ii = 1, nrep-1 - i = irep(ii) + do ii = 1, nxrep-1 + i = ixrep(ii) xi = x(i) yi = y(i) zi = z(i) @@ -208,8 +214,8 @@ subroutine exrepel1a c c evaluate all sites within the cutoff distance c - do kk = ii+1, nrep - k = irep(kk) + do kk = ii+1, nxrep + k = ixrep(kk) mutk = mut(k) proceed = .true. if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) @@ -319,9 +325,9 @@ subroutine exrepel1a c c compute the force components for this interaction c - frcx = pre * (xr * term1 + term2x) - frcy = pre * (yr * term1 + term2y) - frcz = pre * (zr * term1 + term2z) + frcx = -pre * (xr * term1 + term2x) + frcy = -pre * (yr * term1 + term2y) + frcz = -pre * (zr * term1 + term2z) c c compute the torque components for this interaction c @@ -430,27 +436,965 @@ subroutine exrepel1a end do end if c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + rr1 = 1.0d0 / r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + dtaper = 5.0d0*c5*r4 + 4.0d0*c4*r3 + & + 3.0d0*c3*r2 + 2.0d0*c2*r + c1 + dtaper = dtaper * e * rr1 + e = e * taper + frcx = frcx*taper - dtaper*xr + frcy = frcy*taper - dtaper*yr + frcz = frcz*taper - dtaper*zr + do j = 1, 3 + ttri(j) = ttri(j) * taper + ttrk(j) = ttrk(j) * taper + end do + end if +c +c increment the overall exchange repulsion energy component +c + er = er + e +c +c increment force-based gradient on first site +c + der(1,i) = der(1,i) + frcx + der(2,i) = der(2,i) + frcy + der(3,i) = der(3,i) + frcz + ter(1,i) = ter(1,i) + ttri(1) + ter(2,i) = ter(2,i) + ttri(2) + ter(3,i) = ter(3,i) + ttri(3) +c +c increment force-based gradient and torque on second site +c + der(1,k) = der(1,k) - frcx + der(2,k) = der(2,k) - frcy + der(3,k) = der(3,k) - frcz + ter(1,k) = ter(1,k) + ttrk(1) + ter(2,k) = ter(2,k) + ttrk(2) + ter(3,k) = ter(3,k) + ttrk(3) +c +c increment the virial due to pairwise Cartesian forces +c + vxx = -xr * frcx + vxy = -0.5d0 * (yr*frcx+xr*frcy) + vxz = -0.5d0 * (zr*frcx+xr*frcz) + vyy = -yr * frcy + vyz = -0.5d0 * (zr*frcy+yr*frcz) + vzz = -zr * frcz + vir(1,1) = vir(1,1) + vxx + vir(2,1) = vir(2,1) + vxy + vir(3,1) = vir(3,1) + vxz + vir(1,2) = vir(1,2) + vxy + vir(2,2) = vir(2,2) + vyy + vir(3,2) = vir(3,2) + vyz + vir(1,3) = vir(1,3) + vxz + vir(2,3) = vir(2,3) + vyz + vir(3,3) = vir(3,3) + vzz + end if + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do +c +c for periodic boundary conditions with large cutoffs +c neighbors must be found by the replicates method +c + if (use_replica) then +c +c calculate interaction energy with other unit cells +c + do ii = 1, nxrep + i = ixrep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kk = ii, nxrep + k = ixrep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + do jcell = 2, ncell + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi + call imager (xr,yr,zr,jcell) + r2 = xr*xr + yr* yr + zr*zr + if (r2 .le. off2) then + r = sqrt(r2) + r3 = r2 * r + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, + & 0.0d0, r, grad, SS, dSS, SPz, dSPz, PzS, + & dPzS, PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + intS2 = intS * intS + dintS = cscs * dSS + cxcx * dPxPx + cycy * dPyPy + & + czcz * dPzPz + cscz * dSPz + czcs * dPzS + dintSx = dintS * bk(1) + dintSy = dintS * bk(2) + dintSz = dintS * bk(3) + drcixdx = bi(1)*(-rciz/r) + drcixdy = bi(2)*(-rciz/r) + drcixdz = bi(3)*(-rciz/r) + drciydx = bj(1)*(-rciz/r) + drciydy = bj(2)*(-rciz/r) + drciydz = bj(3)*(-rciz/r) + drcizdx = bi(1)*( rcix/r) + bj(1)*( rciy/r) + drcizdy = bi(2)*( rcix/r) + bj(2)*( rciy/r) + drcizdz = bi(3)*( rcix/r) + bj(3)*( rciy/r) + drckxdx = bi(1)*(-rckz/r) + drckxdy = bi(2)*(-rckz/r) + drckxdz = bi(3)*(-rckz/r) + drckydx = bj(1)*(-rckz/r) + drckydy = bj(2)*(-rckz/r) + drckydz = bj(3)*(-rckz/r) + drckzdx = bi(1)*( rckx/r) + bj(1)*( rcky/r) + drckzdy = bi(2)*( rckx/r) + bj(2)*( rcky/r) + drckzdz = bi(3)*( rckx/r) + bj(3)*( rcky/r) + dintSx =dintSx+drcizdx*cks*pzs+drcixdx*rckx*pxpx + & + drciydx*rcky*pypy + drcizdx*rckz*pzpz + dintSy =dintSy+drcizdy*cks*pzs+drcixdy*rckx*pxpx + & + drciydy*rcky*pypy + drcizdy*rckz*pzpz + dintSz =dintSz+drcizdz*cks*pzs+drcixdz*rckx*pxpx + & + drciydz*rcky*pypy + drcizdz*rckz*pzpz + dintSx =dintSx+cis*drckzdx*spz+rcix*drckxdx*pxpx + & + rciy*drckydx*pypy + rciz*drckzdx*pzpz + dintSy =dintSy+cis*drckzdy*spz+rcix*drckxdy*pxpx + & + rciy*drckydy*pypy + rciz*drckzdy*pzpz + dintSz =dintSz+cis*drckzdz*spz+rcix*drckxdz*pxpx + & + rciy*drckydz*pypy + rciz*drckzdz*pzpz + pre = hartree * (zxri*valk+zxrk*vali)*rscale(k) + e = pre * intS2 / r + term1 = -intS2 / r3 + intSR = 2.0d0 * intS / r + term2x = intSR * dintSx + term2y = intSR * dintSy + term2z = intSR * dintSz +c +c compute the force components for this interaction +c + frcx = -pre * (xr * term1 + term2x) + frcy = -pre * (yr * term1 + term2y) + frcz = -pre * (zr * term1 + term2z) +c +c compute the torque components for this interaction +c + ncix = 0.0d0 + nciy = -ciz + nciz = ciy + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tixintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + ncix = ciz + nciy = 0.0d0 + nciz = -cix + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tiyintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + ncix = -ciy + nciy = cix + nciz = 0.0d0 + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tizintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = 0.0d0 + ncky = -ckz + nckz = cky + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkxintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = ckz + ncky = 0.0d0 + nckz = -ckx + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkyintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = -cky + ncky = ckx + nckz = 0.0d0 + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkzintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + preintSR = -pre * intSR + ttri(1) = preintSR * tixintS + ttri(2) = preintSR * tiyintS + ttri(3) = preintSR * tizintS + ttrk(1) = preintSR * tkxintS + ttrk(2) = preintSR * tkyintS + ttrk(3) = preintSR * tkzintS +c +c scale the interaction based on its group membership +c + if (use_group) then + e = fgrp * e + frcx = fgrp * frcx + frcy = fgrp * frcy + frcz = fgrp * frcz + do j = 1, 3 + ttri(j) = fgrp * ttri(j) + ttrk(j) = fgrp * ttrk(j) + end do + end if +c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + rr1 = 1.0d0 / r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + dtaper = 5.0d0*c5*r4 + 4.0d0*c4*r3 + & + 3.0d0*c3*r2 + 2.0d0*c2*r + c1 + dtaper = dtaper * e * rr1 + e = e * taper + frcx = frcx*taper - dtaper*xr + frcy = frcy*taper - dtaper*yr + frcz = frcz*taper - dtaper*zr + do j = 1, 3 + ttri(j) = ttri(j) * taper + ttrk(j) = ttrk(j) * taper + end do + end if +c +c increment the overall exchange repulsion energy component; +c interaction of an atom with its own image counts half +c + if (i .eq. k) then + e = 0.5d0 * e + frcx = 0.5d0 * frcx + frcy = 0.5d0 * frcy + frcz = 0.5d0 * frcz + do j = 1, 3 + ttri(j) = 0.5d0 * ttri(j) + ttrk(j) = 0.5d0 * ttrk(j) + end do + end if +c +c increment the overall exchange repulsion energy component +c + er = er + e +c +c increment force-based gradient on first site +c + der(1,i) = der(1,i) + frcx + der(2,i) = der(2,i) + frcy + der(3,i) = der(3,i) + frcz + ter(1,i) = ter(1,i) + ttri(1) + ter(2,i) = ter(2,i) + ttri(2) + ter(3,i) = ter(3,i) + ttri(3) +c +c increment force-based gradient and torque on second site +c + der(1,k) = der(1,k) - frcx + der(2,k) = der(2,k) - frcy + der(3,k) = der(3,k) - frcz + ter(1,k) = ter(1,k) + ttrk(1) + ter(2,k) = ter(2,k) + ttrk(2) + ter(3,k) = ter(3,k) + ttrk(3) +c +c increment the virial due to pairwise Cartesian forces +c + vxx = -xr * frcx + vxy = -0.5d0 * (yr*frcx+xr*frcy) + vxz = -0.5d0 * (zr*frcx+xr*frcz) + vyy = -yr * frcy + vyz = -0.5d0 * (zr*frcy+yr*frcz) + vzz = -zr * frcz + vir(1,1) = vir(1,1) + vxx + vir(2,1) = vir(2,1) + vxy + vir(3,1) = vir(3,1) + vxz + vir(1,2) = vir(1,2) + vxy + vir(2,2) = vir(2,2) + vyy + vir(3,2) = vir(3,2) + vyz + vir(1,3) = vir(1,3) + vxz + vir(2,3) = vir(2,3) + vyz + vir(3,3) = vir(3,3) + vzz + end if + end do + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do + end if +c +c resolve site torques then increment forces and virial +c + do ii = 1, nxrep + i = ixrep(ii) + call torque (i,ter(1,i),fix,fiy,fiz,der) + iz = zaxis(i) + ix = xaxis(i) + iy = abs(yaxis(i)) + if (iz .eq. 0) iz = i + if (ix .eq. 0) ix = i + if (iy .eq. 0) iy = i + xiz = x(iz) - x(i) + yiz = y(iz) - y(i) + ziz = z(iz) - z(i) + xix = x(ix) - x(i) + yix = y(ix) - y(i) + zix = z(ix) - z(i) + xiy = x(iy) - x(i) + yiy = y(iy) - y(i) + ziy = z(iy) - z(i) + vxx = xix*fix(1) + xiy*fiy(1) + xiz*fiz(1) + vxy = 0.5d0 * (yix*fix(1) + yiy*fiy(1) + yiz*fiz(1) + & + xix*fix(2) + xiy*fiy(2) + xiz*fiz(2)) + vxz = 0.5d0 * (zix*fix(1) + ziy*fiy(1) + ziz*fiz(1) + & + xix*fix(3) + xiy*fiy(3) + xiz*fiz(3)) + vyy = yix*fix(2) + yiy*fiy(2) + yiz*fiz(2) + vyz = 0.5d0 * (zix*fix(2) + ziy*fiy(2) + ziz*fiz(2) + & + yix*fix(3) + yiy*fiy(3) + yiz*fiz(3)) + vzz = zix*fix(3) + ziy*fiy(3) + ziz*fiz(3) + vir(1,1) = vir(1,1) + vxx + vir(2,1) = vir(2,1) + vxy + vir(3,1) = vir(3,1) + vxz + vir(1,2) = vir(1,2) + vxy + vir(2,2) = vir(2,2) + vyy + vir(3,2) = vir(3,2) + vyz + vir(1,3) = vir(1,3) + vxz + vir(2,3) = vir(2,3) + vyz + vir(3,3) = vir(3,3) + vzz + end do +c +c perform deallocation of some local arrays +c + deallocate (rscale) + deallocate (ter) + return + end +c +c +c ################################################################## +c ## ## +c ## subroutine exrepel1b -- exch repulsion analysis via list ## +c ## ## +c ################################################################## +c +c +c "exrepel1b" calculates the exchange repulsion energy and first +c derivatives with respect to Cartesian coordinates using a +c pairwise neightbor list +c +c + subroutine exrepel1b + use atoms + use bound + use couple + use deriv + use energi + use group + use mpole + use mutant + use neigh + use reppot + use shunt + use units + use usage + use virial + use xrepel + implicit none + integer i,j,k + integer ii,kk,kkk + integer ix,iy,iz + integer ind1,ind2,ind3 + real*8 e,fgrp + real*8 taper,dtaper + real*8 xi,yi,zi + real*8 xr,yr,zr + real*8 xix,yix,zix + real*8 xiy,yiy,ziy + real*8 xiz,yiz,ziz + real*8 rr1 + real*8 r,r2,r3,r4,r5 + real*8 normi + real*8 zxri,zxrk + real*8 vali,valk + real*8 dmpi,dmpk + real*8 dis,dks + real*8 dmpip,dmpkp + real*8 cis,cks + real*8 cix,ckx + real*8 ciy,cky + real*8 ciz,ckz + real*8 rcix,rckx + real*8 rciy,rcky + real*8 rciz,rckz + real*8 cscs,cxcx,cycy + real*8 czcz,cscz,czcs + real*8 SS,SPz,PzS + real*8 PxPx,PyPy,PzPz + real*8 dSS,dSPz,dPzS + real*8 dPxPx,dPyPy,dPzPz + real*8 intS,intS2 + real*8 dintS + real*8 dintSx,dintSy,dintSz + real*8 intSR,preintSR + real*8 pre + real*8 term1 + real*8 term2x,term2y,term2z + real*8 frcx,frcy,frcz + real*8 ncix,nciy,nciz + real*8 nckx,ncky,nckz + real*8 nrcix,nrciy,nrciz + real*8 nrckx,nrcky,nrckz + real*8 drcixdx,drcixdy,drcixdz + real*8 drciydx,drciydy,drciydz + real*8 drcizdx,drcizdy,drcizdz + real*8 drckxdx,drckxdy,drckxdz + real*8 drckydx,drckydy,drckydz + real*8 drckzdx,drckzdy,drckzdz + real*8 tixintS,tiyintS,tizintS + real*8 tkxintS,tkyintS,tkzintS + real*8 vxx,vyy,vzz + real*8 vxy,vxz,vyz + real*8 bi(3) + real*8 bj(3) + real*8 bk(3) + real*8 ttri(3),ttrk(3) + real*8 fix(3),fiy(3),fiz(3) + real*8, allocatable :: rscale(:) + real*8, allocatable :: ter(:,:) + logical proceed,usei + logical muti,mutk,mutik + logical header,huge + logical grad + character*6 mode +c +c +c zero out the repulsion energy and derivatives +c + er = 0.0d0 + do i = 1, n + der(1,i) = 0.0d0 + der(2,i) = 0.0d0 + der(3,i) = 0.0d0 + end do + if (nxrep .eq. 0) return +c +c check the sign of multipole components at chiral sites +c + call chkpole +c +c determine pseudo orbital coefficients +c + call solvcoeff +c +c rotate the coefficient components into the global frame +c + call rotcoeff +c +c perform dynamic allocation of some local arrays +c + allocate (rscale(n)) + allocate (ter(3,n)) +c +c initialize connected atom exclusion coefficients +c + do i = 1, n + rscale(i) = 1.0d0 + do j = 1, 3 + ter(j,i) = 0.0d0 + end do + end do +c +c set cutoff distances and switching coefficients +c + mode = 'REPULS' + call switch (mode) +c +c set gradient mode to true +c + grad = .true. +c +c OpenMP directives for the major loop structure +c +!$OMP PARALLEL default(private) +!$OMP& shared(nxrep,ixrep,x,y,z,zpxr,dmppxr,rcpxr,n12,i12, +!$OMP& n13,i13,n14,i14,n15,i15,r2scale,r3scale,r4scale,r5scale, +!$OMP& nelst,elst,use,use_group,use_intra,use_bounds,grad, +!$OMP& mut,cut2,off2,xaxis,yaxis,zaxis, +!$OMP& c0,c1,c2,c3,c4,c5) +!$OMP& firstprivate(rscale) shared (er,der,ter,vir) +!$OMP DO reduction(+:er,der,ter,vir) schedule(guided) +c +c calculate the exchange repulsion energy and derivatives +c + do ii = 1, nxrep + i = ixrep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kkk = 1, nelst(ii) + kk = elst(kkk,ii) + k = ixrep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi + if (use_bounds) call image (xr,yr,zr) + r2 = xr * xr + yr * yr + zr * zr + if (r2 .le. off2) then + r = sqrt(r2) + r3 = r2 * r + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, 0.0d0, + & r, grad, SS, dSS, SPz, dSPz, PzS, dPzS, + & PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + intS2 = intS * intS + dintS = cscs * dSS + cxcx * dPxPx + cycy * dPyPy + & + czcz * dPzPz + cscz * dSPz + czcs * dPzS + dintSx = dintS * bk(1) + dintSy = dintS * bk(2) + dintSz = dintS * bk(3) + drcixdx = bi(1)*(-rciz/r) + drcixdy = bi(2)*(-rciz/r) + drcixdz = bi(3)*(-rciz/r) + drciydx = bj(1)*(-rciz/r) + drciydy = bj(2)*(-rciz/r) + drciydz = bj(3)*(-rciz/r) + drcizdx = bi(1)*( rcix/r) + bj(1)*( rciy/r) + drcizdy = bi(2)*( rcix/r) + bj(2)*( rciy/r) + drcizdz = bi(3)*( rcix/r) + bj(3)*( rciy/r) + drckxdx = bi(1)*(-rckz/r) + drckxdy = bi(2)*(-rckz/r) + drckxdz = bi(3)*(-rckz/r) + drckydx = bj(1)*(-rckz/r) + drckydy = bj(2)*(-rckz/r) + drckydz = bj(3)*(-rckz/r) + drckzdx = bi(1)*( rckx/r) + bj(1)*( rcky/r) + drckzdy = bi(2)*( rckx/r) + bj(2)*( rcky/r) + drckzdz = bi(3)*( rckx/r) + bj(3)*( rcky/r) + dintSx = dintSx + drcizdx*cks*pzs + drcixdx*rckx*pxpx + & + drciydx*rcky*pypy + drcizdx*rckz*pzpz + dintSy = dintSy + drcizdy*cks*pzs + drcixdy*rckx*pxpx + & + drciydy*rcky*pypy + drcizdy*rckz*pzpz + dintSz = dintSz + drcizdz*cks*pzs + drcixdz*rckx*pxpx + & + drciydz*rcky*pypy + drcizdz*rckz*pzpz + dintSx = dintSx + cis*drckzdx*spz + rcix*drckxdx*pxpx + & + rciy*drckydx*pypy + rciz*drckzdx*pzpz + dintSy = dintSy + cis*drckzdy*spz + rcix*drckxdy*pxpx + & + rciy*drckydy*pypy + rciz*drckzdy*pzpz + dintSz = dintSz + cis*drckzdz*spz + rcix*drckxdz*pxpx + & + rciy*drckydz*pypy + rciz*drckzdz*pzpz + pre = hartree * (zxri*valk + zxrk*vali) * rscale(k) + e = pre * intS2 / r + term1 = -intS2 / r3 + intSR = 2.0d0 * intS / r + term2x = intSR * dintSx + term2y = intSR * dintSy + term2z = intSR * dintSz + +c +c compute the force components for this interaction +c + frcx = -pre * (xr * term1 + term2x) + frcy = -pre * (yr * term1 + term2y) + frcz = -pre * (zr * term1 + term2z) +c +c compute the torque components for this interaction +c + ncix = 0.0d0 + nciy = -ciz + nciz = ciy + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tixintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + ncix = ciz + nciy = 0.0d0 + nciz = -cix + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tiyintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + ncix = -ciy + nciy = cix + nciz = 0.0d0 + nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz + nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz + nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz + cscs = 0.0d0 * cks + cxcx = nrcix * rckx + cycy = nrciy * rcky + czcz = nrciz * rckz + cscz = 0.0d0 * rckz + czcs = nrciz * cks + tizintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = 0.0d0 + ncky = -ckz + nckz = cky + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkxintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = ckz + ncky = 0.0d0 + nckz = -ckx + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkyintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + nckx = -cky + ncky = ckx + nckz = 0.0d0 + nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz + nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz + nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz + cscs = cis * 0.0d0 + cxcx = rcix * nrckx + cycy = rciy * nrcky + czcz = rciz * nrckz + cscz = cis * nrckz + czcs = rciz * 0.0d0 + tkzintS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + preintSR = -pre * intSR + ttri(1) = preintSR * tixintS + ttri(2) = preintSR * tiyintS + ttri(3) = preintSR * tizintS + ttrk(1) = preintSR * tkxintS + ttrk(2) = preintSR * tkyintS + ttrk(3) = preintSR * tkzintS +c +c scale the interaction based on its group membership +c + if (use_group) then + e = fgrp * e + frcx = fgrp * frcx + frcy = fgrp * frcy + frcz = fgrp * frcz + do j = 1, 3 + ttri(j) = fgrp * ttri(j) + ttrk(j) = fgrp * ttrk(j) + end do + end if +c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + rr1 = 1.0d0 / r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + dtaper = 5.0d0*c5*r4 + 4.0d0*c4*r3 + & + 3.0d0*c3*r2 + 2.0d0*c2*r + c1 + dtaper = dtaper * e * rr1 + e = e * taper + frcx = frcx*taper - dtaper*xr + frcy = frcy*taper - dtaper*yr + frcz = frcz*taper - dtaper*zr + do j = 1, 3 + ttri(j) = ttri(j) * taper + ttrk(j) = ttrk(j) * taper + end do + end if +c c increment the overall exchange repulsion energy component c er = er + e c c increment force-based gradient on first site c - der(1,i) = der(1,i) - frcx - der(2,i) = der(2,i) - frcy - der(3,i) = der(3,i) - frcz + der(1,i) = der(1,i) + frcx + der(2,i) = der(2,i) + frcy + der(3,i) = der(3,i) + frcz ter(1,i) = ter(1,i) + ttri(1) ter(2,i) = ter(2,i) + ttri(2) ter(3,i) = ter(3,i) + ttri(3) c c increment force-based gradient and torque on second site c - der(1,k) = der(1,k) + frcx - der(2,k) = der(2,k) + frcy - der(3,k) = der(3,k) + frcz + der(1,k) = der(1,k) - frcx + der(2,k) = der(2,k) - frcy + der(3,k) = der(3,k) - frcz ter(1,k) = ter(1,k) + ttrk(1) ter(2,k) = ter(2,k) + ttrk(2) ter(3,k) = ter(3,k) + ttrk(3) +c +c increment the virial due to pairwise Cartesian forces +c + vxx = -xr * frcx + vxy = -0.5d0 * (yr*frcx+xr*frcy) + vxz = -0.5d0 * (zr*frcx+xr*frcz) + vyy = -yr * frcy + vyz = -0.5d0 * (zr*frcy+yr*frcz) + vzz = -zr * frcz + vir(1,1) = vir(1,1) + vxx + vir(2,1) = vir(2,1) + vxy + vir(3,1) = vir(3,1) + vxz + vir(1,2) = vir(1,2) + vxy + vir(2,2) = vir(2,2) + vyy + vir(3,2) = vir(3,2) + vyz + vir(1,3) = vir(1,3) + vxz + vir(2,3) = vir(2,3) + vyz + vir(3,3) = vir(3,3) + vzz end if end if end do @@ -471,13 +1415,56 @@ subroutine exrepel1a end do end do c +c OpenMP directives for the major loop structure +c +!$OMP END DO +!$OMP DO reduction(+:der,vir) schedule(guided) +c c resolve site torques then increment forces and virial c - do ii = 1, nrep - i = irep(ii) + do ii = 1, nxrep + i = ixrep(ii) call torque (i,ter(1,i),fix,fiy,fiz,der) + iz = zaxis(i) + ix = xaxis(i) + iy = abs(yaxis(i)) + if (iz .eq. 0) iz = i + if (ix .eq. 0) ix = i + if (iy .eq. 0) iy = i + xiz = x(iz) - x(i) + yiz = y(iz) - y(i) + ziz = z(iz) - z(i) + xix = x(ix) - x(i) + yix = y(ix) - y(i) + zix = z(ix) - z(i) + xiy = x(iy) - x(i) + yiy = y(iy) - y(i) + ziy = z(iy) - z(i) + vxx = xix*fix(1) + xiy*fiy(1) + xiz*fiz(1) + vxy = 0.5d0 * (yix*fix(1) + yiy*fiy(1) + yiz*fiz(1) + & + xix*fix(2) + xiy*fiy(2) + xiz*fiz(2)) + vxz = 0.5d0 * (zix*fix(1) + ziy*fiy(1) + ziz*fiz(1) + & + xix*fix(3) + xiy*fiy(3) + xiz*fiz(3)) + vyy = yix*fix(2) + yiy*fiy(2) + yiz*fiz(2) + vyz = 0.5d0 * (zix*fix(2) + ziy*fiy(2) + ziz*fiz(2) + & + yix*fix(3) + yiy*fiy(3) + yiz*fiz(3)) + vzz = zix*fix(3) + ziy*fiy(3) + ziz*fiz(3) + vir(1,1) = vir(1,1) + vxx + vir(2,1) = vir(2,1) + vxy + vir(3,1) = vir(3,1) + vxz + vir(1,2) = vir(1,2) + vxy + vir(2,2) = vir(2,2) + vyy + vir(3,2) = vir(3,2) + vyz + vir(1,3) = vir(1,3) + vxz + vir(2,3) = vir(2,3) + vyz + vir(3,3) = vir(3,3) + vzz end do c +c OpenMP directives for the major loop structure +c +!$OMP END DO +!$OMP END PARALLEL +c c perform deallocation of some local arrays c deallocate (rscale) diff --git a/source/exrepel3.f b/source/exrepel3.f index fdb9c02d6..78b6c958a 100644 --- a/source/exrepel3.f +++ b/source/exrepel3.f @@ -27,12 +27,11 @@ subroutine exrepel3 c c choose the method for summing over pairwise interactions c -c if (use_mlist) then -c call exrepel3b -c else -c call exrepel3a -c end if - call exrepel3a + if (use_mlist) then + call exrepel3b + else + call exrepel3a + end if return end c @@ -63,7 +62,6 @@ subroutine exrepel3a use iounit use molcul use mutant - use repel use reppot use shunt use units @@ -73,10 +71,11 @@ subroutine exrepel3a integer i,j,k integer ii,kk integer ind1,ind2,ind3 - real*8 e,fgrp + integer jcell + real*8 e,fgrp,taper real*8 xi,yi,zi real*8 xr,yr,zr - real*8 r,r2 + real*8 r,r2,r3,r4,r5 real*8 normi real*8 zxri,zxrk real*8 vali,valk @@ -115,7 +114,7 @@ subroutine exrepel3a do i = 1, n aer(i) = 0.0d0 end do - if (nrep .eq. 0) return + if (nxrep .eq. 0) return c c check the sign of multipole components at chiral sites c @@ -150,8 +149,8 @@ subroutine exrepel3a c c calculate the exchange repulsion interaction energy term c - do ii = 1, nrep-1 - i = irep(ii) + do ii = 1, nxrep-1 + i = ixrep(ii) xi = x(i) yi = y(i) zi = z(i) @@ -184,8 +183,8 @@ subroutine exrepel3a c c evaluate all sites within the cutoff distance c - do kk = ii+1, nrep - k = irep(kk) + do kk = ii+1, nxrep + k = ixrep(kk) mutk = mut(k) proceed = .true. if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) @@ -250,6 +249,17 @@ subroutine exrepel3a intS2 = intS * intS e = hartree*(zxri*valk+zxrk*vali)*intS2/r*rscale(k) c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + r3 = r2 * r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + e = e * taper + end if +c c scale the interaction based on its group membership c if (use_group) e = e * fgrp @@ -288,6 +298,456 @@ subroutine exrepel3a end do end do c +c for periodic boundary conditions with large cutoffs +c neighbors must be found by the replicates method +c + if (use_replica) then +c +c calculate interaction energy with other unit cells +c + do ii = 1, nxrep + i = ixrep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kk = ii, nxrep + k = ixrep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + do jcell = 2, ncell + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi + call imager (xr,yr,zr,jcell) + r2 = xr*xr + yr* yr + zr*zr + if (r2 .le. off2) then + r = sqrt(r2) + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, + & 0.0d0, r, grad, SS, dSS, SPz, dSPz, PzS, + & dPzS, PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + intS2 = intS * intS + e = hartree*(zxri*valk+zxrk*vali)*intS2/r* + & rscale(k) +c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + r3 = r2 * r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + e = e * taper + end if +c +c scale the interaction based on its group membership +c + if (use_group) e = e * fgrp +c +c increment the overall exchange repulsion energy component; +c interaction of an atom with its own image counts half +c + if (e .ne. 0.0d0) then + ner = ner + 1 + if (i .eq. k) then + er = er + 0.5d0*e + aer(i) = aer(i) + 0.5d0*e + else + er = er + e + aer(i) = aer(i) + 0.5d0*e + aer(k) = aer(k) + 0.5d0*e + end if + end if +c +c increment the total intermolecular energy +c + einter = einter + e + end if + end do + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do + end if +c +c perform deallocation of some local arrays +c + deallocate (rscale) + return + end +c +c +c ################################################################## +c ## ## +c ## subroutine exrepel3b -- exch repulsion analysis via list ## +c ## ## +c ################################################################## +c +c +c "exrepel3b" calculates the exchange repulsion energy and also +c partitions the energy among the atoms using a neighbor list +c +c + subroutine exrepel3b + use action + use analyz + use atomid + use atoms + use bound + use couple + use energi + use group + use inform + use inter + use iounit + use molcul + use mutant + use neigh + use reppot + use shunt + use units + use usage + use xrepel + implicit none + integer i,j,k + integer ii,kk,kkk + integer ind1,ind2,ind3 + real*8 e,fgrp,taper + real*8 xi,yi,zi + real*8 xr,yr,zr + real*8 r,r2,r3,r4,r5 + real*8 normi + real*8 zxri,zxrk + real*8 vali,valk + real*8 dmpi,dmpk + real*8 dis,dks + real*8 dmpip,dmpkp + real*8 cis,cks + real*8 cix,ckx + real*8 ciy,cky + real*8 ciz,ckz + real*8 rcix,rckx + real*8 rciy,rcky + real*8 rciz,rckz + real*8 cscs,cxcx,cycy + real*8 czcz,cscz,czcs + real*8 SS,SPz,PzS + real*8 PxPx,PyPy,PzPz + real*8 dSS,dSPz,dPzS + real*8 dPxPx,dPyPy,dPzPz + real*8 intS,intS2 + real*8 bi(3) + real*8 bj(3) + real*8 bk(3) + real*8, allocatable :: rscale(:) + logical proceed,usei + logical muti,mutk,mutik + logical header,huge + logical grad + character*6 mode +c +c +c zero out the repulsion energy and partitioning terms +c + ner = 0 + er = 0.0d0 + do i = 1, n + aer(i) = 0.0d0 + end do + if (nxrep .eq. 0) return +c +c check the sign of multipole components at chiral sites +c + call chkpole +c +c determine pseudo orbital coefficients +c + call solvcoeff +c +c rotate the coefficient components into the global frame +c + call rotcoeff +c +c perform dynamic allocation of some local arrays +c + allocate (rscale(n)) +c +c initialize connected atom exclusion coefficients +c + do i = 1, n + rscale(i) = 1.0d0 + end do +c +c set cutoff distances and switching coefficients +c + mode = 'REPULS' + call switch (mode) +c +c set gradient mode to false +c + grad = .false. +c +c OpenMP directives for the major loop structure +c +!$OMP PARALLEL default(private) +!$OMP& shared(nxrep,ixrep,x,y,z,zpxr,dmppxr,rcpxr,n12,i12, +!$OMP& n13,i13,n14,i14,n15,i15,r2scale,r3scale,r4scale,r5scale, +!$OMP& nelst,elst,use,use_group,use_intra,use_bounds,grad, +!$OMP& mut,cut2,off2,c0,c1,c2,c3,c4,c5,molcule,name, +!$OMP& verbose,debug,header,iout) +!$OMP& firstprivate(rscale) +!$OMP& shared (er,ner,aer,einter) +!$OMP DO reduction(+:er,ner,aer,einter) schedule(guided) +c +c calculate the exchange repulsion interaction energy term +c + do ii = 1, nxrep + i = ixrep(ii) + xi = x(i) + yi = y(i) + zi = z(i) + zxri = zpxr(i) + dmpi = dmppxr(i) + vali = zxri + dis = 1.0d0 + dmpip = dis * dmpi + cis = rcpxr(1,i) + cix = rcpxr(2,i) + ciy = rcpxr(3,i) + ciz = rcpxr(4,i) + usei = use(i) + muti = mut(i) +c +c set exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = r2scale + end do + do j = 1, n13(i) + rscale(i13(j,i)) = r3scale + end do + do j = 1, n14(i) + rscale(i14(j,i)) = r4scale + end do + do j = 1, n15(i) + rscale(i15(j,i)) = r5scale + end do +c +c evaluate all sites within the cutoff distance +c + do kkk = 1, nelst(ii) + kk = elst(kkk,ii) + k = ixrep(kk) + mutk = mut(k) + proceed = .true. + if (use_group) call groups (proceed,fgrp,i,k,0,0,0,0) + if (.not. use_intra) proceed = .true. + if (proceed) proceed = (usei .or. use(k)) + if (proceed) then + xr = x(k) - xi + yr = y(k) - yi + zr = z(k) - zi + if (use_bounds) call image (xr,yr,zr) + r2 = xr * xr + yr * yr + zr * zr + if (r2 .le. off2) then + r = sqrt(r2) + zxrk = zpxr(k) + dmpk = dmppxr(k) + valk = zxrk + dks = 1.0d0 + dmpkp = dks * dmpk + cks = rcpxr(1,k) + ckx = rcpxr(2,k) + cky = rcpxr(3,k) + ckz = rcpxr(4,k) +c +c choose orthogonal 2-body coordinates / solve rotation matrix +c + bk(1) = xr / r + bk(2) = yr / r + bk(3) = zr / r + ind1 = maxloc(abs(bk), dim=1) + ind2 = mod(ind1,3) + 1 + ind3 = mod(ind1+1,3) + 1 + bi(ind1) = -bk(ind2) + bi(ind2) = bk(ind1) + bi(ind3) = 0.0d0 + normi = sqrt(bi(1)**2 + bi(2)**2 + bi(3)**2) + bi(1) = bi(1) / normi + bi(2) = bi(2) / normi + bi(3) = bi(3) / normi + bj(1) = bk(2)*bi(3) - bk(3)*bi(2) + bj(2) = bk(3)*bi(1) - bk(1)*bi(3) + bj(3) = bk(1)*bi(2) - bk(2)*bi(1) +c +c rotate p orbital cofficients to 2-body (prolate spheroid) frame +c + rcix = bi(1)*cix + bi(2)*ciy + bi(3)*ciz + rciy = bj(1)*cix + bj(2)*ciy + bj(3)*ciz + rciz = bk(1)*cix + bk(2)*ciy + bk(3)*ciz + rckx = bi(1)*ckx + bi(2)*cky + bi(3)*ckz + rcky = bj(1)*ckx + bj(2)*cky + bj(3)*ckz + rckz = bk(1)*ckx + bk(2)*cky + bk(3)*ckz + cscs = cis * cks + cxcx = rcix * rckx + cycy = rciy * rcky + czcz = rciz * rckz + cscz = cis * rckz + czcs = rciz * cks + call computeOverlap (dmpi, dmpk, dmpip, dmpkp, 0.0d0, + & r, grad, SS, dSS, SPz, dSPz, PzS, dPzS, + & PxPx, dPxPx, PyPy, dPyPy, PzPz, dPzPz) + intS = cscs * SS + cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz + czcs * PzS + intS2 = intS * intS + e = hartree*(zxri*valk+zxrk*vali)*intS2/r*rscale(k) +c +c use energy switching if near the cutoff distance +c + if (r2 .gt. cut2) then + r3 = r2 * r + r4 = r2 * r2 + r5 = r2 * r3 + taper = c5*r5 + c4*r4 + c3*r3 + & + c2*r2 + c1*r + c0 + e = e * taper + end if +c +c scale the interaction based on its group membership +c + if (use_group) e = e * fgrp +c +c increment the overall exchange repulsion energy component +c + if (e .ne. 0.0d0) then + ner = ner + 1 + er = er + e + aer(i) = aer(i) + 0.5d0*e + aer(k) = aer(k) + 0.5d0*e + end if +c +c increment the total intermolecular energy +c + if (molcule(i) .ne. molcule(k)) then + einter = einter + e + end if + end if + end if + end do +c +c reset exclusion coefficients for connected atoms +c + do j = 1, n12(i) + rscale(i12(j,i)) = 1.0d0 + end do + do j = 1, n13(i) + rscale(i13(j,i)) = 1.0d0 + end do + do j = 1, n14(i) + rscale(i14(j,i)) = 1.0d0 + end do + do j = 1, n15(i) + rscale(i15(j,i)) = 1.0d0 + end do + end do +c +c OpenMP directives for the major loop structure +c +!$OMP END DO +!$OMP END PARALLEL +c c perform deallocation of some local arrays c deallocate (rscale) @@ -320,13 +780,13 @@ subroutine solvcoeff c c determine pseudo orbital coefficients c - do ii = 1, nrep + do ii = 1, nxrep do k = 1, 3 pcoeff(k) = 0.0d0 end do - ppole(1) = repole(2,ii) - ppole(2) = repole(3,ii) - ppole(3) = repole(4,ii) + ppole(1) = xrepole(2,ii) + ppole(2) = xrepole(3,ii) + ppole(3) = xrepole(4,ii) cr = crpxr(ii) l1 = (abs(ppole(1)) < 1.0d-10) l2 = (abs(ppole(2)) < 1.0d-10) @@ -402,7 +862,7 @@ subroutine rotcoeff c c rotate pseudo orbital coefficients c - do isite = 1, nrep + do isite = 1, nxrep c c determine rotation matrix c diff --git a/source/field.f b/source/field.f index de300105a..e58220b28 100644 --- a/source/field.f +++ b/source/field.f @@ -50,6 +50,7 @@ subroutine field use_tortor = .true. use_vdw = .true. use_repel = .true. + use_xrepel = .true. use_disp = .true. use_charge = .true. use_chgdpl = .true. diff --git a/source/final.f b/source/final.f index b6ad4825a..5fe3a31c1 100644 --- a/source/final.f +++ b/source/final.f @@ -1041,11 +1041,14 @@ subroutine final c c deallocation of global arrays from module xrepel c + if (allocated(ixrep)) deallocate (ixrep) + if (allocated(xreplist)) deallocate (xreplist) if (allocated(zpxr)) deallocate (zpxr) if (allocated(dmppxr)) deallocate (dmppxr) if (allocated(crpxr)) deallocate (crpxr) if (allocated(cpxr)) deallocate (cpxr) if (allocated(rcpxr)) deallocate (rcpxr) + if (allocated(xrepole)) deallocate (xrepole) c c deallocation of global arrays from module restrn c diff --git a/source/gradient.f b/source/gradient.f index b368f812d..c536db2ff 100644 --- a/source/gradient.f +++ b/source/gradient.f @@ -243,8 +243,9 @@ subroutine gradient (energy,derivs) if (vdwtyp .eq. 'GAUSSIAN') call egauss1 end if if (use_repel) then - if (reptyp .eq. 'PAULI') call erepel1 - if (reptyp .eq. 'EXCHANGE') call exrepel1 + call erepel1 + else if (use_xrepel) then + call exrepel1 end if if (use_disp) call edisp1 c diff --git a/source/initprm.f b/source/initprm.f index e494ec008..166e9eb93 100644 --- a/source/initprm.f +++ b/source/initprm.f @@ -360,7 +360,6 @@ subroutine initprm c c set default control parameters for repulsion terms c - reptyp = 'PAULI' r2scale = 0.0d0 r3scale = 0.0d0 r4scale = 1.0d0 diff --git a/source/kmpole.f b/source/kmpole.f index 136e19493..6cbb7c4e2 100644 --- a/source/kmpole.f +++ b/source/kmpole.f @@ -685,7 +685,7 @@ subroutine kmpole c c remove zero or undefined electrostatic sites from the list c - if ((use_mpole .or. use_repel) .and. + if ((use_mpole .or. use_repel .or. use_xrepel) .and. & .not.use_polar .and. .not.use_chgtrn) then npole = 0 ncp = 0 diff --git a/source/kpolar.f b/source/kpolar.f index 44d79929c..c4c3aa180 100644 --- a/source/kpolar.f +++ b/source/kpolar.f @@ -532,7 +532,8 @@ subroutine kpolar c c remove zero or undefined electrostatic sites from the list c - if ((use_polar .or. use_repel) .and. .not.use_chgtrn) then + if ((use_polar .or. use_repel .or. use_xrepel) .and. + & .not.use_chgtrn) then npole = 0 ncp = 0 npolar = 0 diff --git a/source/kxrepel.f b/source/kxrepel.f index 712e770e4..4166b6897 100644 --- a/source/kxrepel.f +++ b/source/kxrepel.f @@ -27,8 +27,6 @@ subroutine kxrepel use mpole use potent use xrepel - use repel - use reppot use sizes implicit none integer i,j,k @@ -42,11 +40,6 @@ subroutine kxrepel character*240 string c c -c exit if using "Pauli" repulsion -c - if (use_repel) return - use_repel = .true. -c c process keywords containing exch repulsion parameters c header = .true. @@ -93,30 +86,28 @@ subroutine kxrepel c c perform dynamic allocation of some global arrays c - if (allocated(irep)) deallocate (irep) - if (allocated(replist)) deallocate (replist) + if (allocated(ixrep)) deallocate (ixrep) + if (allocated(xreplist)) deallocate (xreplist) if (allocated(zpxr)) deallocate (zpxr) if (allocated(dmppxr)) deallocate (dmppxr) if (allocated(crpxr)) deallocate (crpxr) if (allocated(cpxr)) deallocate (cpxr) if (allocated(rcpxr)) deallocate (rcpxr) - if (allocated(repole)) deallocate (repole) - if (allocated(rrepole)) deallocate (rrepole) - allocate (irep(n)) - allocate (replist(n)) + if (allocated(xrepole)) deallocate (xrepole) + allocate (ixrep(n)) + allocate (xreplist(n)) allocate (zpxr(n)) allocate (dmppxr(n)) allocate (crpxr(n)) allocate (cpxr(4,n)) allocate (rcpxr(4,n)) - allocate (repole(maxpole,n)) - allocate (rrepole(maxpole,n)) + allocate (xrepole(4,n)) c c assign the core, alpha, and coefficient ratio parameters c do i = 1, n - irep(i) = 0 - replist(i) = 0 + ixrep(i) = 0 + xreplist(i) = 0 zpxr(i) = 0.0d0 dmppxr(i) = 0.0d0 crpxr(i) = 0.0d0 @@ -167,15 +158,15 @@ subroutine kxrepel c c condense repulsion sites to the list of multipole sites c - nrep = 0 - if (use_repel) then + nxrep = 0 + if (use_xrepel) then do i = 1, n if (zpxr(i) .ne. 0) then - nrep = nrep + 1 - irep(nrep) = i - replist(i) = nrep - do j = 1, maxpole - repole(j,i) = pole(j,i) + nxrep = nxrep + 1 + ixrep(nxrep) = i + xreplist(i) = nxrep + do j = 1, 4 + xrepole(j,i) = pole(j,i) end do end if end do @@ -187,10 +178,6 @@ subroutine kxrepel c c turn off the exchange repulsion potential if not used c - if (nrep .eq. 0) use_repel = .false. -c -c set repulsion type -c - if (use_repel) reptyp = 'EXCHANGE' + if (nxrep .eq. 0) use_xrepel = .false. return end diff --git a/source/nblist.f b/source/nblist.f index cd31c9df3..5a51c063a 100644 --- a/source/nblist.f +++ b/source/nblist.f @@ -42,7 +42,7 @@ subroutine nblist if (use_vdw .and. use_vlist) call vlist if (use_disp .and. use_dlist) call dlist if ((use_charge.or.use_solv) .and. use_clist) call clist - if ((use_repel.or.use_mpole.or.use_polar + if ((use_repel.or.use_xrepel.or.use_mpole.or.use_polar & .or.use_chgtrn.or.use_solv) .and. use_mlist) call mlist if (use_polar .and. use_ulist) call ulist return diff --git a/source/potent.f b/source/potent.f index 7c2bebe23..8098de3ee 100644 --- a/source/potent.f +++ b/source/potent.f @@ -28,6 +28,7 @@ c use_tortor logical flag governing use of torsion-torsion term c use_vdw logical flag governing use of van der Waals potential c use_repel logical flag governing use of Pauli repulsion term +c use_xrepel logical flag governing use of exchange repulsion term c use_disp logical flag governing use of dispersion potential c use_charge logical flag governing use of charge-charge potential c use_chgdpl logical flag governing use of charge-dipole potential @@ -56,6 +57,7 @@ module potent logical use_pitors,use_strtor logical use_angtor,use_tortor logical use_vdw,use_repel + logical use_xrepel logical use_disp,use_charge logical use_chgdpl,use_dipole logical use_mpole,use_polar diff --git a/source/prmkey.f b/source/prmkey.f index dd81b90b0..156efb642 100644 --- a/source/prmkey.f +++ b/source/prmkey.f @@ -132,7 +132,11 @@ subroutine prmkey (text) call getword (record,value,next) if (value .eq. 'ONLY') call potoff use_repel = .true. - if (value .eq. 'NONE') use_repel = .false. + use_xrepel = .true. + if (value .eq. 'NONE') then + use_repel = .false. + use_xrepel = .false. + end if else if (keyword(1:15) .eq. 'DISPERSIONTERM ') then call getword (record,value,next) if (value .eq. 'ONLY') call potoff @@ -549,6 +553,7 @@ subroutine potoff use_tortor = .false. use_vdw = .false. use_repel = .false. + use_xrepel = .false. use_disp = .false. use_charge = .false. use_chgdpl = .false. @@ -622,6 +627,7 @@ subroutine nbondoff c use_vdw = .false. use_repel = .false. + use_xrepel = .false. use_disp = .false. use_charge = .false. use_chgdpl = .false. diff --git a/source/reppot.f b/source/reppot.f index d9d5f0fc6..dd550a0e8 100644 --- a/source/reppot.f +++ b/source/reppot.f @@ -16,7 +16,6 @@ c r3scale scale factor for 1-3 repulsion energy interactions c r4scale scale factor for 1-4 repulsion energy interactions c r5scale scale factor for 1-5 repulsion energy interactions -c reptyp type of repulsion potential energy function c c module reppot @@ -25,6 +24,5 @@ module reppot real*8 r3scale real*8 r4scale real*8 r5scale - character*8 reptyp save end diff --git a/source/respa.f b/source/respa.f index 6c71f483e..9542e6546 100644 --- a/source/respa.f +++ b/source/respa.f @@ -244,12 +244,14 @@ subroutine gradfast (energy,derivs) logical save_mpole,save_polar logical save_chgtrn,save_rxnfld logical save_solv,save_list + logical save_xrepel c c c save the original state of slow-evolving potentials c save_vdw = use_vdw save_repel = use_repel + save_xrepel = use_xrepel save_disp = use_disp save_charge = use_charge save_chgdpl = use_chgdpl @@ -265,6 +267,7 @@ subroutine gradfast (energy,derivs) c use_vdw = .false. use_repel = .false. + use_xrepel = .true. use_disp = .false. use_charge = .false. use_chgdpl = .false. @@ -284,6 +287,7 @@ subroutine gradfast (energy,derivs) c use_vdw = save_vdw use_repel = save_repel + use_xrepel = save_xrepel use_disp = save_disp use_charge = save_charge use_chgdpl = save_chgdpl diff --git a/source/testpair.f b/source/testpair.f index e0ac4a817..5dc1c0b98 100644 --- a/source/testpair.f +++ b/source/testpair.f @@ -89,7 +89,11 @@ program testpair npair = 0 nterm = 0 if (use_vdw) nterm = nterm + 1 - if (use_repel) nterm = nterm + 1 + if (use_repel) then + nterm = nterm + 1 + else if (use_xrepel) + nterm = nterm + 1 + end if if (use_disp) nterm = nterm + 1 if (use_charge) nterm = nterm + 1 if (use_chgdpl) nterm = nterm + 1 @@ -269,7 +273,11 @@ program testpair if (vdwtyp .eq. 'BUFFERED-14-7') call ehal if (vdwtyp .eq. 'GAUSSIAN') call egauss end if - if (use_repel) call erepel + if (use_repel) then + call erepel + else if (use_xrepel) then + call exrepel + end if if (use_disp) call edisp if (use_charge) call echarge if (use_chgdpl) call echgdpl @@ -307,7 +315,11 @@ program testpair if (vdwtyp .eq. 'BUFFERED-14-7') call ehal if (vdwtyp .eq. 'GAUSSIAN') call egauss end if - if (use_repel) call erepel + if (use_repel) then + call erepel + else if (use_xrepel) then + call exrepel + end if if (use_disp) call edisp if (use_charge) call echarge if (use_chgdpl) call echgdpl @@ -342,7 +354,11 @@ program testpair if (vdwtyp .eq. 'BUFFERED-14-7') call ehal if (vdwtyp .eq. 'GAUSSIAN') call egauss end if - if (use_repel) call erepel + if (use_repel) then + call erepel + else if (use_xrepel) then + call exrepel + end if if (use_disp) call edisp if (use_charge) call echarge if (use_chgdpl) call echgdpl @@ -388,7 +404,11 @@ program testpair if (vdwtyp .eq. 'BUFFERED-14-7') call ehal1 if (vdwtyp .eq. 'GAUSSIAN') call egauss1 end if - if (use_repel) call erepel1 + if (use_repel) then + call erepel1 + else if (use_xrepel) then + call exrepel1 + end if if (use_disp) call edisp1 if (use_charge) call echarge1 if (use_chgdpl) call echgdpl1 @@ -442,7 +462,11 @@ program testpair if (vdwtyp .eq. 'BUFFERED-14-7') call ehal1 if (vdwtyp .eq. 'GAUSSIAN') call egauss1 end if - if (use_repel) call erepel1 + if (use_repel) then + call erepel1 + else if (use_xrepel) then + call exrepel1 + end if if (use_disp) call edisp1 if (use_charge) call echarge1 if (use_chgdpl) call echgdpl1 @@ -493,7 +517,11 @@ program testpair if (vdwtyp .eq. 'BUFFERED-14-7') call ehal1 if (vdwtyp .eq. 'GAUSSIAN') call egauss1 end if - if (use_repel) call erepel1 + if (use_repel) then + call erepel1 + else if (use_xrepel) then + call exrepel1 + end if if (use_disp) call edisp1 if (use_charge) call echarge1 if (use_chgdpl) call echgdpl1 diff --git a/source/xrepel.f b/source/xrepel.f index 4f1b69a5d..7d747abf4 100644 --- a/source/xrepel.f +++ b/source/xrepel.f @@ -12,19 +12,27 @@ c ############################################################### c c +c nxrep total number of repulsion sites in the system +c ixrep number of the atom for each repulsion site +c xreplist repulsion multipole site for each atom (0=none) c zpxr nuclear charge parameter value for each atom c dmppxr exchange repulsion alpha damping value for each atom c crpxr ratio of p/s orbital cofficients for each atom c cpxr local pseudo wavefunction coefficient for each atom c rcpxr global pseudo wavefunction coefficient for each atom +c xrepole repulsion Cartesian multipoles in the local frame c c module xrepel implicit none + integer nxrep + integer, allocatable :: ixrep(:) + integer, allocatable :: xreplist(:) real*8, allocatable :: zpxr(:) real*8, allocatable :: dmppxr(:) real*8, allocatable :: crpxr(:) real*8, allocatable :: cpxr(:,:) real*8, allocatable :: rcpxr(:,:) + real*8, allocatable :: xrepole(:,:) save end From 8c4222b8377b23a302589832acac99fbea6006f1 Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Fri, 23 Jun 2023 20:17:10 -0500 Subject: [PATCH 07/15] fix bug in testpair.f --- source/testpair.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/testpair.f b/source/testpair.f index 5dc1c0b98..f7d59dce4 100644 --- a/source/testpair.f +++ b/source/testpair.f @@ -91,7 +91,7 @@ program testpair if (use_vdw) nterm = nterm + 1 if (use_repel) then nterm = nterm + 1 - else if (use_xrepel) + else if (use_xrepel) then nterm = nterm + 1 end if if (use_disp) nterm = nterm + 1 From 3e77225573c43d062311e99395caefd123d3dfd7 Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Thu, 26 Oct 2023 22:21:47 -0500 Subject: [PATCH 08/15] small change in exrepel1.f --- source/exrepel1.f | 132 +++++++++++++++++++++++++++------------------- 1 file changed, 78 insertions(+), 54 deletions(-) diff --git a/source/exrepel1.f b/source/exrepel1.f index 883da1895..2b96c222d 100644 --- a/source/exrepel1.f +++ b/source/exrepel1.f @@ -91,6 +91,9 @@ subroutine exrepel1a real*8 rcix,rckx real*8 rciy,rcky real*8 rciz,rckz + real*8 rcixr,rckxr + real*8 rciyr,rckyr + real*8 rcizr,rckzr real*8 cscs,cxcx,cycy real*8 czcz,cscz,czcs real*8 SS,SPz,PzS @@ -284,24 +287,30 @@ subroutine exrepel1a dintSx = dintS * bk(1) dintSy = dintS * bk(2) dintSz = dintS * bk(3) - drcixdx = bi(1)*(-rciz/r) - drcixdy = bi(2)*(-rciz/r) - drcixdz = bi(3)*(-rciz/r) - drciydx = bj(1)*(-rciz/r) - drciydy = bj(2)*(-rciz/r) - drciydz = bj(3)*(-rciz/r) - drcizdx = bi(1)*( rcix/r) + bj(1)*( rciy/r) - drcizdy = bi(2)*( rcix/r) + bj(2)*( rciy/r) - drcizdz = bi(3)*( rcix/r) + bj(3)*( rciy/r) - drckxdx = bi(1)*(-rckz/r) - drckxdy = bi(2)*(-rckz/r) - drckxdz = bi(3)*(-rckz/r) - drckydx = bj(1)*(-rckz/r) - drckydy = bj(2)*(-rckz/r) - drckydz = bj(3)*(-rckz/r) - drckzdx = bi(1)*( rckx/r) + bj(1)*( rcky/r) - drckzdy = bi(2)*( rckx/r) + bj(2)*( rcky/r) - drckzdz = bi(3)*( rckx/r) + bj(3)*( rcky/r) + rcixr = rcix/r + rciyr = rciy/r + rcizr = rciz/r + rckxr = rckx/r + rckyr = rcky/r + rckzr = rckz/r + drcixdx = bi(1)*(-rcizr) + drcixdy = bi(2)*(-rcizr) + drcixdz = bi(3)*(-rcizr) + drciydx = bj(1)*(-rcizr) + drciydy = bj(2)*(-rcizr) + drciydz = bj(3)*(-rcizr) + drcizdx = bi(1)*( rcixr) + bj(1)*( rciyr) + drcizdy = bi(2)*( rcixr) + bj(2)*( rciyr) + drcizdz = bi(3)*( rcixr) + bj(3)*( rciyr) + drckxdx = bi(1)*(-rckzr) + drckxdy = bi(2)*(-rckzr) + drckxdz = bi(3)*(-rckzr) + drckydx = bj(1)*(-rckzr) + drckydy = bj(2)*(-rckzr) + drckydz = bj(3)*(-rckzr) + drckzdx = bi(1)*( rckxr) + bj(1)*( rckyr) + drckzdy = bi(2)*( rckxr) + bj(2)*( rckyr) + drckzdz = bi(3)*( rckxr) + bj(3)*( rckyr) dintSx = dintSx + drcizdx*cks*pzs + drcixdx*rckx*pxpx & + drciydx*rcky*pypy + drcizdx*rckz*pzpz dintSy = dintSy + drcizdy*cks*pzs + drcixdy*rckx*pxpx @@ -628,24 +637,30 @@ subroutine exrepel1a dintSx = dintS * bk(1) dintSy = dintS * bk(2) dintSz = dintS * bk(3) - drcixdx = bi(1)*(-rciz/r) - drcixdy = bi(2)*(-rciz/r) - drcixdz = bi(3)*(-rciz/r) - drciydx = bj(1)*(-rciz/r) - drciydy = bj(2)*(-rciz/r) - drciydz = bj(3)*(-rciz/r) - drcizdx = bi(1)*( rcix/r) + bj(1)*( rciy/r) - drcizdy = bi(2)*( rcix/r) + bj(2)*( rciy/r) - drcizdz = bi(3)*( rcix/r) + bj(3)*( rciy/r) - drckxdx = bi(1)*(-rckz/r) - drckxdy = bi(2)*(-rckz/r) - drckxdz = bi(3)*(-rckz/r) - drckydx = bj(1)*(-rckz/r) - drckydy = bj(2)*(-rckz/r) - drckydz = bj(3)*(-rckz/r) - drckzdx = bi(1)*( rckx/r) + bj(1)*( rcky/r) - drckzdy = bi(2)*( rckx/r) + bj(2)*( rcky/r) - drckzdz = bi(3)*( rckx/r) + bj(3)*( rcky/r) + rcixr = rcix/r + rciyr = rciy/r + rcizr = rciz/r + rckxr = rckx/r + rckyr = rcky/r + rckzr = rckz/r + drcixdx = bi(1)*(-rcizr) + drcixdy = bi(2)*(-rcizr) + drcixdz = bi(3)*(-rcizr) + drciydx = bj(1)*(-rcizr) + drciydy = bj(2)*(-rcizr) + drciydz = bj(3)*(-rcizr) + drcizdx = bi(1)*( rcixr) + bj(1)*( rciyr) + drcizdy = bi(2)*( rcixr) + bj(2)*( rciyr) + drcizdz = bi(3)*( rcixr) + bj(3)*( rciyr) + drckxdx = bi(1)*(-rckzr) + drckxdy = bi(2)*(-rckzr) + drckxdz = bi(3)*(-rckzr) + drckydx = bj(1)*(-rckzr) + drckydy = bj(2)*(-rckzr) + drckydz = bj(3)*(-rckzr) + drckzdx = bi(1)*( rckxr) + bj(1)*( rckyr) + drckzdy = bi(2)*( rckxr) + bj(2)*( rckyr) + drckzdz = bi(3)*( rckxr) + bj(3)*( rckyr) dintSx =dintSx+drcizdx*cks*pzs+drcixdx*rckx*pxpx & + drciydx*rcky*pypy + drcizdx*rckz*pzpz dintSy =dintSy+drcizdy*cks*pzs+drcixdy*rckx*pxpx @@ -978,6 +993,9 @@ subroutine exrepel1b real*8 rcix,rckx real*8 rciy,rcky real*8 rciz,rckz + real*8 rcixr,rckxr + real*8 rciyr,rckyr + real*8 rcizr,rckzr real*8 cscs,cxcx,cycy real*8 czcz,cscz,czcs real*8 SS,SPz,PzS @@ -1183,24 +1201,30 @@ subroutine exrepel1b dintSx = dintS * bk(1) dintSy = dintS * bk(2) dintSz = dintS * bk(3) - drcixdx = bi(1)*(-rciz/r) - drcixdy = bi(2)*(-rciz/r) - drcixdz = bi(3)*(-rciz/r) - drciydx = bj(1)*(-rciz/r) - drciydy = bj(2)*(-rciz/r) - drciydz = bj(3)*(-rciz/r) - drcizdx = bi(1)*( rcix/r) + bj(1)*( rciy/r) - drcizdy = bi(2)*( rcix/r) + bj(2)*( rciy/r) - drcizdz = bi(3)*( rcix/r) + bj(3)*( rciy/r) - drckxdx = bi(1)*(-rckz/r) - drckxdy = bi(2)*(-rckz/r) - drckxdz = bi(3)*(-rckz/r) - drckydx = bj(1)*(-rckz/r) - drckydy = bj(2)*(-rckz/r) - drckydz = bj(3)*(-rckz/r) - drckzdx = bi(1)*( rckx/r) + bj(1)*( rcky/r) - drckzdy = bi(2)*( rckx/r) + bj(2)*( rcky/r) - drckzdz = bi(3)*( rckx/r) + bj(3)*( rcky/r) + rcixr = rcix/r + rciyr = rciy/r + rcizr = rciz/r + rckxr = rckx/r + rckyr = rcky/r + rckzr = rckz/r + drcixdx = bi(1)*(-rcizr) + drcixdy = bi(2)*(-rcizr) + drcixdz = bi(3)*(-rcizr) + drciydx = bj(1)*(-rcizr) + drciydy = bj(2)*(-rcizr) + drciydz = bj(3)*(-rcizr) + drcizdx = bi(1)*( rcixr) + bj(1)*( rciyr) + drcizdy = bi(2)*( rcixr) + bj(2)*( rciyr) + drcizdz = bi(3)*( rcixr) + bj(3)*( rciyr) + drckxdx = bi(1)*(-rckzr) + drckxdy = bi(2)*(-rckzr) + drckxdz = bi(3)*(-rckzr) + drckydx = bj(1)*(-rckzr) + drckydy = bj(2)*(-rckzr) + drckydz = bj(3)*(-rckzr) + drckzdx = bi(1)*( rckxr) + bj(1)*( rckyr) + drckzdy = bi(2)*( rckxr) + bj(2)*( rckyr) + drckzdz = bi(3)*( rckxr) + bj(3)*( rckyr) dintSx = dintSx + drcizdx*cks*pzs + drcixdx*rckx*pxpx & + drciydx*rcky*pypy + drcizdx*rckz*pzpz dintSy = dintSy + drcizdy*cks*pzs + drcixdy*rckx*pxpx From 9af81b162b71dbb7bd321fbcc0cbf3dea6c8d06f Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Fri, 27 Oct 2023 12:41:59 -0500 Subject: [PATCH 09/15] simplification of algebra in exrepel --- source/exrepel1.f | 78 ++++++++++++++++++----------------------------- source/exrepel3.f | 33 ++++++++++++-------- 2 files changed, 51 insertions(+), 60 deletions(-) diff --git a/source/exrepel1.f b/source/exrepel1.f index 2b96c222d..064af7c82 100644 --- a/source/exrepel1.f +++ b/source/exrepel1.f @@ -1254,90 +1254,72 @@ subroutine exrepel1b c c compute the torque components for this interaction c - ncix = 0.0d0 nciy = -ciz nciz = ciy - nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz - nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz - nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz - cscs = 0.0d0 * cks + nrcix = bi(2)*nciy + bi(3)*nciz + nrciy = bj(2)*nciy + bj(3)*nciz + nrciz = bk(2)*nciy + bk(3)*nciz cxcx = nrcix * rckx cycy = nrciy * rcky czcz = nrciz * rckz - cscz = 0.0d0 * rckz czcs = nrciz * cks - tixintS = cscs * SS + cxcx * PxPx + cycy * PyPy - & + czcz * PzPz + cscz * SPz + czcs * PzS + tixintS = cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + czcs * PzS ncix = ciz - nciy = 0.0d0 nciz = -cix - nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz - nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz - nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz - cscs = 0.0d0 * cks + nrcix = bi(1)*ncix + bi(3)*nciz + nrciy = bj(1)*ncix + bj(3)*nciz + nrciz = bk(1)*ncix + bk(3)*nciz cxcx = nrcix * rckx cycy = nrciy * rcky czcz = nrciz * rckz - cscz = 0.0d0 * rckz czcs = nrciz * cks - tiyintS = cscs * SS + cxcx * PxPx + cycy * PyPy - & + czcz * PzPz + cscz * SPz + czcs * PzS + tiyintS = cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + czcs * PzS ncix = -ciy nciy = cix - nciz = 0.0d0 - nrcix = bi(1)*ncix + bi(2)*nciy + bi(3)*nciz - nrciy = bj(1)*ncix + bj(2)*nciy + bj(3)*nciz - nrciz = bk(1)*ncix + bk(2)*nciy + bk(3)*nciz - cscs = 0.0d0 * cks + nrcix = bi(1)*ncix + bi(2)*nciy + nrciy = bj(1)*ncix + bj(2)*nciy + nrciz = bk(1)*ncix + bk(2)*nciy cxcx = nrcix * rckx cycy = nrciy * rcky czcz = nrciz * rckz - cscz = 0.0d0 * rckz czcs = nrciz * cks - tizintS = cscs * SS + cxcx * PxPx + cycy * PyPy - & + czcz * PzPz + cscz * SPz + czcs * PzS - nckx = 0.0d0 + tizintS = cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + czcs * PzS ncky = -ckz nckz = cky - nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz - nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz - nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz - cscs = cis * 0.0d0 + nrckx = bi(2)*ncky + bi(3)*nckz + nrcky = bj(2)*ncky + bj(3)*nckz + nrckz = bk(2)*ncky + bk(3)*nckz cxcx = rcix * nrckx cycy = rciy * nrcky czcz = rciz * nrckz cscz = cis * nrckz - czcs = rciz * 0.0d0 - tkxintS = cscs * SS + cxcx * PxPx + cycy * PyPy - & + czcz * PzPz + cscz * SPz + czcs * PzS + tkxintS = cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz nckx = ckz - ncky = 0.0d0 nckz = -ckx - nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz - nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz - nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz - cscs = cis * 0.0d0 + nrckx = bi(1)*nckx + bi(3)*nckz + nrcky = bj(1)*nckx + bj(3)*nckz + nrckz = bk(1)*nckx + bk(3)*nckz cxcx = rcix * nrckx cycy = rciy * nrcky czcz = rciz * nrckz cscz = cis * nrckz - czcs = rciz * 0.0d0 - tkyintS = cscs * SS + cxcx * PxPx + cycy * PyPy - & + czcz * PzPz + cscz * SPz + czcs * PzS + tkyintS = cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz nckx = -cky ncky = ckx - nckz = 0.0d0 - nrckx = bi(1)*nckx + bi(2)*ncky + bi(3)*nckz - nrcky = bj(1)*nckx + bj(2)*ncky + bj(3)*nckz - nrckz = bk(1)*nckx + bk(2)*ncky + bk(3)*nckz - cscs = cis * 0.0d0 + nrckx = bi(1)*nckx + bi(2)*ncky + nrcky = bj(1)*nckx + bj(2)*ncky + nrckz = bk(1)*nckx + bk(2)*ncky cxcx = rcix * nrckx cycy = rciy * nrcky czcz = rciz * nrckz cscz = cis * nrckz - czcs = rciz * 0.0d0 - tkzintS = cscs * SS + cxcx * PxPx + cycy * PyPy - & + czcz * PzPz + cscz * SPz + czcs * PzS + tkzintS = cxcx * PxPx + cycy * PyPy + & + czcz * PzPz + cscz * SPz preintSR = -pre * intSR ttri(1) = preintSR * tixintS ttri(2) = preintSR * tiyintS diff --git a/source/exrepel3.f b/source/exrepel3.f index 78b6c958a..ca961b2e5 100644 --- a/source/exrepel3.f +++ b/source/exrepel3.f @@ -964,13 +964,16 @@ subroutine overlapAll (a, b, z1, z2, grad, SS, dSS, SPz, dSPz, real*8 diff,eps,zr,r real*8 rho,rho2,rho3,rho4 real*8 exp1 - real*8 alpha,tau,rhoA,rhoB + real*8 alpha,tau,tau2 + real*8 rhoA,rhoB real*8 a2,b2,kappa - real*8 pre,term1,term2 + real*8 pre,pre1,pre2,pre3 + real*8 term1,term2 real*8 rhoA2,rhoA3,rhoA4,rhoA5 real*8 rhoB2,rhoB3,rhoB4,rhoB5 real*8 kappam,kappam2 real*8 kappap,kappap2 + real*8 taurho,taurho2,taurho3 real*8 expA,expB logical grad c @@ -995,14 +998,14 @@ subroutine overlapAll (a, b, z1, z2, grad, SS, dSS, SPz, dSPz, dSS = -1.0d0/3.0d0 * a * rho * (1.0d0 + rho) * exp1 dSPz = -0.5d0 * a * (1.0d0 + rho - rho3 / 3.0d0) * exp1 dPzS = -dSPz - dPxPx = -0.2d0 * a * rho * (1.0d0 + rho + rho2 / 3.0d0) - & * exp1 + dPxPx = -0.2d0 * a * rho * (1.0d0 + rho + rho2 / 3.0d0) * exp1 dPzPz = -0.6d0 * a * rho * (1.0d0 + rho + 2.0d0/9.0d0 * rho2 & - rho3 / 9.0d0) * exp1 end if else alpha = 1.0d0 / 2.0d0 * (a + b) tau = (a - b) / (a + b) + tau2 = tau * tau rho = alpha * r rhoA = a * r rhoB = b * r @@ -1021,25 +1024,31 @@ subroutine overlapAll (a, b, z1, z2, grad, SS, dSS, SPz, dSPz, kappap = 1.0d0 + kappa kappam2 = kappam**2 kappap2 = kappap**2 + taurho = tau * rho + taurho2 = taurho * rho + taurho3 = taurho2 * rho expA = exp(-rhoA) expB = exp(-rhoB) - pre = sqrt(1.0d0 - tau**2) / (tau * rho) + pre1 = sqrt(1.0d0 - tau2) + pre2 = sqrt((1.0d0 + tau) / (1.0d0 - tau)) + pre3 = sqrt((1.0d0 - tau) / (1.0d0 + tau)) + pre = pre1 / taurho term1 =-kappam * (2.0d0 * kappap + rhoA) * expA term2 = kappap * (2.0d0 * kappam + rhoB) * expB SS = pre * (term1 + term2) - pre = sqrt((1.0d0 + tau) / (1.0d0 - tau)) / (tau * rho2) + pre = pre2 / taurho2 term1 =-kappam2 * (6.0d0 * kappap * (1.0d0 + rhoA) & + 2.0d0 * rhoA2) * expA term2 = kappap * (6.0d0 * kappam2 * (1.0d0 + rhoB) & + 4.0d0 * kappam * rhoB2 + rhoB3) * expB SPz = -pre * (term1 + term2) - pre = sqrt((1.0d0 - tau) / (1.0d0 + tau)) / (-tau * rho2) + pre = -pre3 / taurho2 term1 =-kappap2 * (6.0d0 * kappam * (1.0d0 + rhoB) & + 2.0d0 * rhoB2) * expB term2 = kappam * (6.0d0 * kappap2 * (1.0d0 + rhoA) & + 4.0d0 * kappap * rhoA2 + rhoA3) * expA PzS = pre * (term1 + term2) - pre = 1.0d0 / (sqrt(1.0d0 - tau**2) * tau * rho3) + pre = 1.0d0 / (pre1 * taurho3) term1 =-kappam2 * (24.0d0 * kappap2 * (1.0d0 + rhoA) & + 12.0d0 * kappap * rhoA2 + 2.0d0 * rhoA3) * expA term2 = kappap2 * (24.0d0 * kappam2 * (1.0d0 + rhoB) @@ -1055,27 +1064,27 @@ subroutine overlapAll (a, b, z1, z2, grad, SS, dSS, SPz, dSPz, if (grad) then rhoA5 = rhoA4 * rhoA rhoB5 = rhoB4 * rhoB - pre = sqrt(1.0d0 - tau**2) / (tau * rho) + pre = pre1 / taurho term1 = kappam * (2.0d0 * kappap * (1.0d0 + rhoA) + rhoA2) & * expA term2 =-kappap * (2.0d0 * kappam * (1.0d0 + rhoB) + rhoB2) & * expB dSS = pre / r * (term1 + term2) - pre = sqrt((1.0d0 + tau) / (1.0d0 - tau)) / (tau * rho2) + pre = pre2 / taurho2 term1 = 2.0d0 * kappam2 * (6.0d0 * kappap * (1.0d0 + rhoA & + 0.5d0 * rhoA2) + rhoA3) * expA term2 = kappap * (-12.0d0 * kappam2 * (1.0d0 + rhoB + 0.5d0 & * rhoB2) + (1.0d0 - 4.0d0 * kappam) * rhoB3 - rhoB4) & * expB dSPz = -pre / r * (term1 + term2) - pre = sqrt((1.0d0 - tau) / (1.0d0 + tau)) / (-tau * rho2) + pre = -pre3 / taurho2 term1 = 2.0d0 * kappap2 * (6.0d0 * kappam * (1.0d0 + rhoB & + 0.5d0 * rhoB2) + rhoB3) * expB term2 = kappam * (-12.0d0 * kappap2 * (1.0d0 + rhoA + 0.5d0 & * rhoA2) + (1.0d0 - 4.0d0 * kappap) * rhoA3 - rhoA4) & * expA dPzS = pre / r * (term1 + term2) - pre = 1.0d0 / (sqrt(1.0d0 - tau**2) * tau * rho3) + pre = 1.0d0 / (pre1 * taurho3) term1 = 2.0d0 * kappam2 * (36.0d0 * kappap2 * (1.0d0 + rhoA) & + 6.0d0 * kappap * (1.0d0 + 2.0d0 * kappap) * rhoA2 & + 6.0d0 * kappap * rhoA3 + rhoA4) * expA From 82096f9b03add4185411e5d1ed8025c29dba09ce Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Fri, 27 Oct 2023 15:52:44 -0500 Subject: [PATCH 10/15] xrepole dimension from 4 to maxpole --- source/kxrepel.f | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/kxrepel.f b/source/kxrepel.f index 4166b6897..dc3444dfc 100644 --- a/source/kxrepel.f +++ b/source/kxrepel.f @@ -101,7 +101,7 @@ subroutine kxrepel allocate (crpxr(n)) allocate (cpxr(4,n)) allocate (rcpxr(4,n)) - allocate (xrepole(4,n)) + allocate (xrepole(maxpole,n)) c c assign the core, alpha, and coefficient ratio parameters c @@ -165,7 +165,7 @@ subroutine kxrepel nxrep = nxrep + 1 ixrep(nxrep) = i xreplist(i) = nxrep - do j = 1, 4 + do j = 1, maxpole xrepole(j,i) = pole(j,i) end do end if From d13ec465fcc41d2436fbaede5599323130a01ffa Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Sat, 28 Oct 2023 14:50:31 -0500 Subject: [PATCH 11/15] overlapAll cleanup --- source/exrepel3.f | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/exrepel3.f b/source/exrepel3.f index ca961b2e5..9e37edaa0 100644 --- a/source/exrepel3.f +++ b/source/exrepel3.f @@ -995,11 +995,11 @@ subroutine overlapAll (a, b, z1, z2, grad, SS, dSS, SPz, dSPz, PzPz = -(-1.0d0 - rho - rho2 / 5.0d0 + 2.0d0/15.0d0 * rho3 & + rho4 / 15.0d0) * exp1 if (grad) then - dSS = -1.0d0/3.0d0 * a * rho * (1.0d0 + rho) * exp1 - dSPz = -0.5d0 * a * (1.0d0 + rho - rho3 / 3.0d0) * exp1 - dPzS = -dSPz - dPxPx = -0.2d0 * a * rho * (1.0d0 + rho + rho2 / 3.0d0) * exp1 - dPzPz = -0.6d0 * a * rho * (1.0d0 + rho + 2.0d0/9.0d0 * rho2 + dSS = -1.0d0/3.0d0 * a * rho * (1.0d0 + rho) * exp1 + dSPz = -0.5d0 * a * (1.0d0 + rho - rho3 / 3.0d0) * exp1 + dPzS = -dSPz + dPxPx = -0.2d0 * a * rho * (1.0d0 + rho + rho2 / 3.0d0)*exp1 + dPzPz = -0.6d0 * a * rho * (1.0d0 + rho + 2.0d0/9.0d0 * rho2 & - rho3 / 9.0d0) * exp1 end if else From 682f56fcfe14cb169fc7c90ecf2fce9a0d79f97b Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Tue, 3 Sep 2024 18:12:35 -0500 Subject: [PATCH 12/15] remove makefile --- source/Makefile | 1166 ----------------------------------------------- 1 file changed, 1166 deletions(-) delete mode 100644 source/Makefile diff --git a/source/Makefile b/source/Makefile deleted file mode 100644 index a8636fb1e..000000000 --- a/source/Makefile +++ /dev/null @@ -1,1166 +0,0 @@ -## -################################################################### -## ## -## Makefile for Building the Tinker Molecular Modeling Package ## -## ## -################################################################### -## - -# source directory -src := $(PWD) -# release / debug / profile / etc. -opt := release -# gfortran / gfortran8 / gfortran-8 / ifort / ifort14 / ifort-14 / etc. -F77 := gfortran -# FFTW directory -fftw := /home/kchung25/tinker/fftw - -################################################################### -## Master Directory Locations; Change as Needed for Local Site ## -################################################################### - -## TINKERDIR Tinker Distribution Directory -## TINKER_LIBDIR Libraries needed to build Tinker -## BINDIR Directory with Tinker Executables -## LINKDIR Linked Copies of Tinker Executables -## FFTWDIR FFTW Top-Level Directory -## FFTW_LIB_DIR Directory with FFTW Libraries -## FFTW_LIBS FFTW Libraries needed to build Tinker -## APBSDIR APBS Top-Level Directory -## APBS_INC_DIR Directory with APBS Include Files -## APBS_LIB_DIR Directory with APBS Libraries -## APBS_LIBS APBS Libraries needed to build Tinker - -TINKERDIR := /home/kchung25/tinker_rel -TINKER_LIBDIR := $(TINKERDIR)/lib -BINDIR := $(TINKERDIR)/bin -LINKDIR := /usr/local/bin - -ifeq ($(fftw), default__) - FFTWDIR := $(TINKERDIR)/fftw -else - FFTWDIR := $(fftw) -endif -FFTW_LIBDIR := -L$(FFTWDIR)/lib -FFTW_LIBS := -lfftw3_threads -lfftw3 - -APBSDIR := $(TINKERDIR)/apbs -APBS_INCDIR := -I$(APBSDIR)/include -APBS_LIBDIR := -L$(APBSDIR)/lib -APBS_LIBS := -lapbsmainroutines -lapbs -lmaloc -lapbsblas - -###################### -## Operating System ## -###################### -# Darwin (macOS) / Linux / CYGWIN_NT -os__ := $(shell uname -s) - -ifeq ($(os__), Darwin) -else ifeq ($(os__), Linux) -else ifeq ($(shell echo $(os__) | cut -c 1-9), CYGWIN_NT) -else -$(error Unknown OS -- $(os__); Please help with us) -endif - -################## -## F77 Compiler ## -################## -use_gfortran__ := false -use_ifort := false -found__ := false - -f77__ := $(shell echo $(F77) | cut -c 1-8) -ifeq ($(f77__), gfortran) - use_gfortran__ := true - found__ := true -endif -f77__ := $(shell echo $(F77) | cut -c 1-5) -ifeq ($(f77__), ifort) - use_ifort__ := true - found__ := true -endif -ifneq ($(found__), true) -$(error Unknown fortran compiler -- $(F77); Please help with us) -endif - -################### -## Compile Flags ## -################### - -ifeq ($(use_gfortran__), true) - ifeq ($(os__), Linux) - ifeq ($(opt), release) - OPTFLAGS := -Ofast -msse3 -fopenmp - else ifeq ($(opt), profile) - OPTFLAGS := - else - # debug - OPTFLAGS := - endif - F77FLAGS := -c - LIBDIR := -L. -L$(TINKER_LIBDIR)/linux - LIBS := - LIBFLAGS := -crusv - RANLIB := ranlib - LINKFLAGS := $(OPTFLAGS) -static-libgcc - RENAME := rename_bin - endif - - ifeq ($(os__), Darwin) - ifeq ($(opt), release) - OPTFLAGS := -Ofast -mssse3 -fopenmp - else ifeq ($(opt), profile) - OPTFLAGS := - else - # debug - OPTFLAGS := - endif - F77FLAGS := -c - LIBDIR := -L. -L$(TINKER_LIBDIR)/macos - LIBS := - LIBFLAGS := -crusv - RANLIB := ranlib -c - LINKFLAGS := $(OPTFLAGS) -static-libgcc - RENAME := rename_bin - endif - - ifeq ($(shell echo $(os__) | cut -c 1-9), CYGWIN_NT) - ifeq ($(opt), release) - OPTFLAGS := -Ofast -msse3 -fopenmp - else ifeq ($(opt), profile) - OPTFLAGS := - else - # debug - OPTFLAGS := - endif - F77FLAGS := -c - LIBDIR := -L. -L$(TINKER_LIBDIR)/windows - LIBS := - LIBFLAGS := -crusv - RANLIB := ranlib - LINKFLAGS := $(OPTFLAGS) -static - RENAME := rename_exe - endif -endif - -ifeq ($(use_ifort__), true) - ifeq ($(os__), Linux) - ifeq ($(opt), release) - OPTFLAGS := -O3 -no-ipo -no-prec-div -recursive -qopenmp - else ifeq ($(opt), profile) - OPTFLAGS := - else - # debug - OPTFLAGS := - endif - F77FLAGS := -c -xHost - LIBDIR := -L. -L$(TINKER_LIBDIR)/linux - LIBS := - LIBFLAGS := -crusv - RANLIB := echo - LINKFLAGS := $(OPTFLAGS) -static-libgcc -static-intel - RENAME := rename_bin - endif - - ifeq ($(os__), Darwin) - ifeq ($(opt), release) - OPTFLAGS := -O3 -no-ipo -no-prec-div -mdynamic-no-pic -qopenmp - else ifeq ($(opt), profile) - OPTFLAGS := - else - # debug - OPTFLAGS := - endif - F77FLAGS := -c -axSSSE3 - LIBDIR := -L. -L$(TINKER_LIBDIR)/macos - LIBS := - LIBFLAGS := -crusv - RANLIB := ranlib -c - LINKFLAGS := $(OPTFLAGS) -static-intel -Wl,-stack_size,0x10000000 - RENAME := rename_bin - endif -endif - -################################################################# -## Should not be Necessary to Change Things Below this Point ## -################################################################# - -LIBOBJS := action.o active.o align.o alterchg.o alterpol.o analysis.o \ - analyz.o angang.o angbnd.o angles.o angpot.o angtor.o argue.o \ - ascii.o atmlst.o atomid.o atoms.o attach.o baoab.o basefile.o \ - bath.o beeman.o bicubic.o bitor.o bitors.o bndpot.o bndstr.o \ - bonds.o born.o bound.o bounds.o boxes.o bussi.o calendar.o cell.o \ - center.o cflux.o charge.o chgpen.o chgpot.o chgtrn.o chkpole.o \ - chkring.o chkxyz.o cholesky.o chrono.o chunks.o clock.o cluster.o \ - column.o command.o connect.o connolly.o control.o couple.o cspline.o \ - ctrpot.o cutoffs.o damping.o dcflux.o deflate.o delete.o deriv.o \ - dexpol.o diagq.o diffeq.o dipole.o disgeo.o disp.o dma.o domega.o \ - dsppot.o eangang.o eangang1.o eangang2.o eangang3.o eangle.o \ - eangle1.o eangle2.o eangle3.o eangtor.o eangtor1.o eangtor2.o \ - eangtor3.o ebond.o ebond1.o ebond2.o ebond3.o ebuck.o ebuck1.o \ - ebuck2.o ebuck3.o echarge.o echarge1.o echarge2.o echarge3.o \ - echgdpl.o echgdpl1.o echgdpl2.o echgdpl3.o echgtrn.o echgtrn1.o \ - echgtrn2.o echgtrn3.o edipole.o edipole1.o edipole2.o edipole3.o \ - edisp.o edisp1.o edisp2.o edisp3.o egauss.o egauss1.o egauss2.o \ - egauss3.o egeom.o egeom1.o egeom2.o egeom3.o ehal.o ehal1.o ehal2.o \ - ehal3.o eimprop.o eimprop1.o eimprop2.o eimprop3.o eimptor.o \ - eimptor1.o eimptor2.o eimptor3.o elj.o elj1.o elj2.o elj3.o embed.o \ - emetal.o emetal1.o emetal2.o emetal3.o emm3hb.o emm3hb1.o emm3hb2.o \ - emm3hb3.o empole.o empole1.o empole2.o empole3.o energi.o energy.o \ - eopbend.o eopbend1.o eopbend2.o eopbend3.o eopdist.o eopdist1.o \ - eopdist2.o eopdist3.o epitors.o epitors1.o epitors2.o epitors3.o \ - epolar.o epolar1.o epolar2.o epolar3.o erepel.o erepel1.o erepel2.o \ - erepel3.o erf.o erxnfld.o erxnfld1.o erxnfld2.o erxnfld3.o esolv.o \ - esolv1.o esolv2.o esolv3.o estrbnd.o estrbnd1.o estrbnd2.o estrbnd3.o \ - estrtor.o estrtor1.o estrtor2.o estrtor3.o etors.o etors1.o etors2.o \ - etors3.o etortor.o etortor1.o etortor2.o etortor3.o eurey.o eurey1.o \ - eurey2.o eurey3.o evcorr.o ewald.o exfield.o expol.o exrepel1.o \ - exrepel3.o extfld.o extra.o extra1.o extra2.o extra3.o faces.o \ - fatal.o fft.o fft3d.o fftpack.o field.o fields.o files.o final.o \ - flatten.o fracs.o freeunit.o freeze.o geometry.o getarc.o getcart.o \ - getdcd.o getint.o getkey.o getmol.o getmol2.o getnumb.o getpdb.o \ - getprm.o getref.o getstring.o gettext.o getword.o getxyz.o ghmcstep.o \ - gkstuf.o gradient.o gradrgd.o gradrot.o group.o groups.o grpline.o \ - gyrate.o hescut.o hessian.o hessn.o hessrgd.o hessrot.o hpmf.o \ - hybrid.o ielscf.o image.o impose.o improp.o imptor.o induce.o \ - inertia.o inform.o initatom.o initial.o initprm.o initres.o initrot.o \ - insert.o inter.o invbeta.o invert.o iounit.o jacobi.o kanang.o \ - kangang.o kangle.o kangs.o kangtor.o kantor.o katom.o katoms.o \ - kbond.o kbonds.o kcflux.o kcharge.o kchgflx.o kchgtrn.o kchrge.o \ - kcpen.o kctrn.o kdipol.o kdipole.o kdisp.o kdsp.o kewald.o kexpl.o \ - kexpol.o kextra.o keys.o kgeom.o khbond.o kimprop.o kimptor.o \ - kinetic.o kiprop.o kitors.o kmetal.o kmpole.o kmulti.o kopbend.o \ - kopbnd.o kopdist.o kopdst.o korbit.o korbs.o kpitor.o kpitors.o \ - kpolar.o kpolpr.o kpolr.o krepel.o krepl.o ksolut.o ksolv.o kstbnd.o \ - kstrbnd.o kstrtor.o ksttor.o ktors.o ktorsn.o ktortor.o ktrtor.o \ - kurey.o kurybr.o kvdw.o kvdwpr.o kvdws.o kxrepel.o kxrepl.o lattice.o \ - lbfgs.o light.o lights.o limits.o linmin.o lusolve.o makeint.o \ - makeref.o makexyz.o math.o maxwell.o mdinit.o mdrest.o mdsave.o \ - mdstat.o mdstuf.o mechanic.o merck.o merge.o minima.o molcul.o \ - moldyn.o molecule.o moment.o moments.o mplpot.o mpole.o mrecip.o \ - mutant.o mutate.o nblist.o neigh.o nextarg.o nexttext.o nonpol.o \ - nose.o nspline.o nucleo.o number.o numeral.o numgrad.o ocvm.o \ - omega.o opbend.o opdist.o openend.o openmp.o optinit.o optsave.o \ - orbital.o orbits.o orient.o orthog.o output.o overlap.o params.o \ - paths.o pbstuf.o pdb.o phipsi.o picalc.o piorbs.o pistuf.o pitors.o \ - pme.o pmestuf.o pmpb.o polar.o polgrp.o polopt.o polpcg.o polpot.o \ - poltcg.o polymer.o potent.o potfit.o predict.o pressure.o prmkey.o \ - promo.o prtarc.o prtdcd.o prtdyn.o prterr.o prtint.o prtmol2.o \ - prtpdb.o prtprm.o prtseq.o prtxyz.o ptable.o qmstuf.o qrsolve.o \ - quatfit.o random.o rattle.o readcart.o readdcd.o readdyn.o readgau.o \ - readgdma.o readint.o readmol.o readmol2.o readpdb.o readprm.o \ - readseq.o readxyz.o refer.o repel.o replica.o reppot.o resdue.o \ - respa.o restrn.o rgddyn.o rgdstep.o rigid.o ring.o rings.o rmsfit.o \ - rotbnd.o rotlist.o rotpole.o rxnfld.o rxnpot.o scales.o sdstep.o \ - search.o sequen.o server.o setprm.o shakeup.o shunt.o sigmoid.o \ - simplex.o sizes.o sktstuf.o socket.o solpot.o solute.o sort.o \ - square.o stodyn.o strbnd.o strtor.o suffix.o surface.o surfatom.o \ - switch.o syntrn.o tarray.o tcgstuf.o temper.o titles.o tncg.o \ - torphase.o torpot.o torque.o tors.o torsions.o tortor.o tree.o \ - trimtext.o unitcell.o units.o uprior.o urey.o urypot.o usage.o \ - valfit.o vdw.o vdwpot.o verlet.o version.o vibs.o virial.o volume.o \ - warp.o xrepel.o xtals.o xyzatm.o zatom.o zclose.o zcoord.o - -EXEOBJS := alchemy.o analyze.o anneal.o arcedit.o bar.o correlate.o \ - critical.o crystal.o diffuse.o distgeom.o document.o dynamic.o \ - freefix.o gda.o intedit.o intxyz.o minimize.o minirot.o minrigid.o \ - mol2xyz.o molxyz.o monte.o newton.o newtrot.o nucleic.o optimize.o \ - optirot.o optrigid.o path.o pdbxyz.o polarize.o poledit.o potential.o \ - prmedit.o protein.o pss.o pssrigid.o pssrot.o radial.o saddle.o \ - scan.o sniffer.o spacefill.o spectrum.o superpose.o testgrad.o \ - testhess.o testpair.o testpol.o testrot.o testvir.o timer.o timerot.o \ - torsfit.o valence.o vibbig.o vibrate.o vibrot.o xtalfit.o xtalmin.o \ - xyzedit.o xyzint.o xyzmol2.o xyzpdb.o - -OBJS := $(LIBOBJS) $(EXEOBJS) - -EXEFILES := alchemy.x analyze.x anneal.x arcedit.x bar.x correlate.x \ - critical.x crystal.x diffuse.x distgeom.x document.x dynamic.x \ - freefix.x gda.x intedit.x intxyz.x minimize.x minirot.x minrigid.x \ - mol2xyz.x molxyz.x monte.x newton.x newtrot.x nucleic.x optimize.x \ - optirot.x optrigid.x path.x pdbxyz.x polarize.x poledit.x potential.x \ - prmedit.x protein.x pss.x pssrigid.x pssrot.x radial.x saddle.x \ - scan.x sniffer.x spacefill.x spectrum.x superpose.x testgrad.x \ - testhess.x testpair.x testpol.x testrot.x testvir.x timer.x timerot.x \ - torsfit.x valence.x vibbig.x vibrate.x vibrot.x xtalfit.x xtalmin.x \ - xyzedit.x xyzint.x xyzmol2.x xyzpdb.x - -%.o: $(src)/%.f - $(F77) $(F77FLAGS) $(OPTFLAGS) $< -o $@ - -%.x: %.o libtinker.a - $(F77) $(LINKFLAGS) -o $@ $(LIBDIR) $(FFTW_LIBDIR) $^ $(LIBS) $(FFTW_LIBS); strip $@ - -all: $(EXEFILES) - -install: $(RENAME) - -clean: - rm -f *.o *.mod *.a *.x - -listing: - cat $(src)/*.f $(src)/*.c > tinker.txt - -rename_bin: - mv alchemy.x $(BINDIR)/alchemy - mv analyze.x $(BINDIR)/analyze - mv anneal.x $(BINDIR)/anneal - mv arcedit.x $(BINDIR)/arcedit - mv bar.x $(BINDIR)/bar - mv correlate.x $(BINDIR)/correlate - mv critical.x $(BINDIR)/critical - mv crystal.x $(BINDIR)/crystal - mv diffuse.x $(BINDIR)/diffuse - mv distgeom.x $(BINDIR)/distgeom - mv document.x $(BINDIR)/document - mv dynamic.x $(BINDIR)/dynamic - mv freefix.x $(BINDIR)/freefix - mv gda.x $(BINDIR)/gda - mv intedit.x $(BINDIR)/intedit - mv intxyz.x $(BINDIR)/intxyz - mv minimize.x $(BINDIR)/minimize - mv minirot.x $(BINDIR)/minirot - mv minrigid.x $(BINDIR)/minrigid - mv mol2xyz.x $(BINDIR)/mol2xyz - mv molxyz.x $(BINDIR)/molxyz - mv monte.x $(BINDIR)/monte - mv newton.x $(BINDIR)/newton - mv newtrot.x $(BINDIR)/newtrot - mv nucleic.x $(BINDIR)/nucleic - mv optimize.x $(BINDIR)/optimize - mv optirot.x $(BINDIR)/optirot - mv optrigid.x $(BINDIR)/optrigid - mv path.x $(BINDIR)/path - mv pdbxyz.x $(BINDIR)/pdbxyz - mv polarize.x $(BINDIR)/polarize - mv poledit.x $(BINDIR)/poledit - mv potential.x $(BINDIR)/potential - mv prmedit.x $(BINDIR)/prmedit - mv protein.x $(BINDIR)/protein - mv pss.x $(BINDIR)/pss - mv pssrigid.x $(BINDIR)/pssrigid - mv pssrot.x $(BINDIR)/pssrot - mv radial.x $(BINDIR)/radial - mv saddle.x $(BINDIR)/saddle - mv scan.x $(BINDIR)/scan - mv sniffer.x $(BINDIR)/sniffer - mv spacefill.x $(BINDIR)/spacefill - mv spectrum.x $(BINDIR)/spectrum - mv superpose.x $(BINDIR)/superpose - mv testgrad.x $(BINDIR)/testgrad - mv testhess.x $(BINDIR)/testhess - mv testpair.x $(BINDIR)/testpair - mv testpol.x $(BINDIR)/testpol - mv testrot.x $(BINDIR)/testrot - mv testvir.x $(BINDIR)/testvir - mv timer.x $(BINDIR)/timer - mv timerot.x $(BINDIR)/timerot - mv torsfit.x $(BINDIR)/torsfit - mv valence.x $(BINDIR)/valence - mv vibbig.x $(BINDIR)/vibbig - mv vibrate.x $(BINDIR)/vibrate - mv vibrot.x $(BINDIR)/vibrot - mv xtalfit.x $(BINDIR)/xtalfit - mv xtalmin.x $(BINDIR)/xtalmin - mv xyzedit.x $(BINDIR)/xyzedit - mv xyzint.x $(BINDIR)/xyzint - mv xyzmol2.x $(BINDIR)/xyzmol2 - mv xyzpdb.x $(BINDIR)/xyzpdb - -rename_exe: - mv alchemy.x $(BINDIR)/alchemy.exe - mv analyze.x $(BINDIR)/analyze.exe - mv anneal.x $(BINDIR)/anneal.exe - mv arcedit.x $(BINDIR)/arcedit.exe - mv bar.x $(BINDIR)/bar.exe - mv correlate.x $(BINDIR)/correlate.exe - mv critical.x $(BINDIR)/critical.exe - mv crystal.x $(BINDIR)/crystal.exe - mv diffuse.x $(BINDIR)/diffuse.exe - mv distgeom.x $(BINDIR)/distgeom.exe - mv document.x $(BINDIR)/document.exe - mv dynamic.x $(BINDIR)/dynamic.exe - mv freefix.x $(BINDIR)/freefix.exe - mv gda.x $(BINDIR)/gda.exe - mv intedit.x $(BINDIR)/intedit.exe - mv intxyz.x $(BINDIR)/intxyz.exe - mv minimize.x $(BINDIR)/minimize.exe - mv minirot.x $(BINDIR)/minirot.exe - mv minrigid.x $(BINDIR)/minrigid.exe - mv mol2xyz.x $(BINDIR)/mol2xyz.exe - mv molxyz.x $(BINDIR)/molxyz.exe - mv monte.x $(BINDIR)/monte.exe - mv newton.x $(BINDIR)/newton.exe - mv newtrot.x $(BINDIR)/newtrot.exe - mv nucleic.x $(BINDIR)/nucleic.exe - mv optimize.x $(BINDIR)/optimize.exe - mv optirot.x $(BINDIR)/optirot.exe - mv optrigid.x $(BINDIR)/optrigid.exe - mv path.x $(BINDIR)/path.exe - mv pdbxyz.x $(BINDIR)/pdbxyz.exe - mv polarize.x $(BINDIR)/polarize.exe - mv poledit.x $(BINDIR)/poledit.exe - mv potential.x $(BINDIR)/potential.exe - mv prmedit.x $(BINDIR)/prmedit.exe - mv protein.x $(BINDIR)/protein.exe - mv pss.x $(BINDIR)/pss.exe - mv pssrigid.x $(BINDIR)/pssrigid.exe - mv pssrot.x $(BINDIR)/pssrot.exe - mv radial.x $(BINDIR)/radial.exe - mv saddle.x $(BINDIR)/saddle.exe - mv scan.x $(BINDIR)/scan.exe - mv sniffer.x $(BINDIR)/sniffer.exe - mv spacefill.x $(BINDIR)/spacefill.exe - mv spectrum.x $(BINDIR)/spectrum.exe - mv superpose.x $(BINDIR)/superpose.exe - mv testgrad.x $(BINDIR)/testgrad.exe - mv testhess.x $(BINDIR)/testhess.exe - mv testpair.x $(BINDIR)/testpair.exe - mv testpol.x $(BINDIR)/testpol.exe - mv testrot.x $(BINDIR)/testrot.exe - mv testvir.x $(BINDIR)/testvir.exe - mv timer.x $(BINDIR)/timer.exe - mv timerot.x $(BINDIR)/timerot.exe - mv torsfit.x $(BINDIR)/torsfit.exe - mv valence.x $(BINDIR)/valence.exe - mv vibbig.x $(BINDIR)/vibbig.exe - mv vibrate.x $(BINDIR)/vibrate.exe - mv vibrot.x $(BINDIR)/vibrot.exe - mv xtalfit.x $(BINDIR)/xtalfit.exe - mv xtalmin.x $(BINDIR)/xtalmin.exe - mv xyzedit.x $(BINDIR)/xyzedit.exe - mv xyzint.x $(BINDIR)/xyzint.exe - mv xyzmol2.x $(BINDIR)/xyzmol2.exe - mv xyzpdb.x $(BINDIR)/xyzpdb.exe - -remove_links: - rm -f $(LINKDIR)/alchemy - rm -f $(LINKDIR)/analyze - rm -f $(LINKDIR)/anneal - rm -f $(LINKDIR)/arcedit - rm -f $(LINKDIR)/bar - rm -f $(LINKDIR)/correlate - rm -f $(LINKDIR)/critical - rm -f $(LINKDIR)/crystal - rm -f $(LINKDIR)/diffuse - rm -f $(LINKDIR)/distgeom - rm -f $(LINKDIR)/document - rm -f $(LINKDIR)/dynamic - rm -f $(LINKDIR)/freefix - rm -f $(LINKDIR)/gda - rm -f $(LINKDIR)/intedit - rm -f $(LINKDIR)/intxyz - rm -f $(LINKDIR)/minimize - rm -f $(LINKDIR)/minirot - rm -f $(LINKDIR)/minrigid - rm -f $(LINKDIR)/mol2xyz - rm -f $(LINKDIR)/molxyz - rm -f $(LINKDIR)/monte - rm -f $(LINKDIR)/newton - rm -f $(LINKDIR)/newtrot - rm -f $(LINKDIR)/nucleic - rm -f $(LINKDIR)/optimize - rm -f $(LINKDIR)/optirot - rm -f $(LINKDIR)/optrigid - rm -f $(LINKDIR)/path - rm -f $(LINKDIR)/pdbxyz - rm -f $(LINKDIR)/polarize - rm -f $(LINKDIR)/poledit - rm -f $(LINKDIR)/potential - rm -f $(LINKDIR)/prmedit - rm -f $(LINKDIR)/protein - rm -f $(LINKDIR)/pss - rm -f $(LINKDIR)/pssrigid - rm -f $(LINKDIR)/pssrot - rm -f $(LINKDIR)/radial - rm -f $(LINKDIR)/saddle - rm -f $(LINKDIR)/scan - rm -f $(LINKDIR)/sniffer - rm -f $(LINKDIR)/spacefill - rm -f $(LINKDIR)/spectrum - rm -f $(LINKDIR)/superpose - rm -f $(LINKDIR)/testgrad - rm -f $(LINKDIR)/testhess - rm -f $(LINKDIR)/testpair - rm -f $(LINKDIR)/testpol - rm -f $(LINKDIR)/testrot - rm -f $(LINKDIR)/testvir - rm -f $(LINKDIR)/timer - rm -f $(LINKDIR)/timerot - rm -f $(LINKDIR)/torsfit - rm -f $(LINKDIR)/valence - rm -f $(LINKDIR)/vibbig - rm -f $(LINKDIR)/vibrate - rm -f $(LINKDIR)/vibrot - rm -f $(LINKDIR)/xtalfit - rm -f $(LINKDIR)/xtalmin - rm -f $(LINKDIR)/xyzedit - rm -f $(LINKDIR)/xyzint - rm -f $(LINKDIR)/xyzmol2 - rm -f $(LINKDIR)/xyzpdb - -create_links: - ln -s $(BINDIR)/alchemy $(LINKDIR)/alchemy - ln -s $(BINDIR)/analyze $(LINKDIR)/analyze - ln -s $(BINDIR)/anneal $(LINKDIR)/anneal - ln -s $(BINDIR)/arcedit $(LINKDIR)/arcedit - ln -s $(BINDIR)/bar $(LINKDIR)/bar - ln -s $(BINDIR)/correlate $(LINKDIR)/correlate - ln -s $(BINDIR)/critical $(LINKDIR)/critical - ln -s $(BINDIR)/crystal $(LINKDIR)/crystal - ln -s $(BINDIR)/diffuse $(LINKDIR)/diffuse - ln -s $(BINDIR)/distgeom $(LINKDIR)/distgeom - ln -s $(BINDIR)/document $(LINKDIR)/document - ln -s $(BINDIR)/dynamic $(LINKDIR)/dynamic - ln -s $(BINDIR)/freefix $(LINKDIR)/freefix - ln -s $(BINDIR)/gda $(LINKDIR)/gda - ln -s $(BINDIR)/intedit $(LINKDIR)/intedit - ln -s $(BINDIR)/intxyz $(LINKDIR)/intxyz - ln -s $(BINDIR)/minimize $(LINKDIR)/minimize - ln -s $(BINDIR)/minirot $(LINKDIR)/minirot - ln -s $(BINDIR)/minrigid $(LINKDIR)/minrigid - ln -s $(BINDIR)/mol2xyz $(LINKDIR)/mol2xyz - ln -s $(BINDIR)/molxyz $(LINKDIR)/molxyz - ln -s $(BINDIR)/monte $(LINKDIR)/monte - ln -s $(BINDIR)/newton $(LINKDIR)/newton - ln -s $(BINDIR)/newtrot $(LINKDIR)/newtrot - ln -s $(BINDIR)/nucleic $(LINKDIR)/nucleic - ln -s $(BINDIR)/optimize $(LINKDIR)/optimize - ln -s $(BINDIR)/optirot $(LINKDIR)/optirot - ln -s $(BINDIR)/optrigid $(LINKDIR)/optrigid - ln -s $(BINDIR)/path $(LINKDIR)/path - ln -s $(BINDIR)/pdbxyz $(LINKDIR)/pdbxyz - ln -s $(BINDIR)/polarize $(LINKDIR)/polarize - ln -s $(BINDIR)/poledit $(LINKDIR)/poledit - ln -s $(BINDIR)/potential $(LINKDIR)/potential - ln -s $(BINDIR)/prmedit $(LINKDIR)/prmedit - ln -s $(BINDIR)/protein $(LINKDIR)/protein - ln -s $(BINDIR)/pss $(LINKDIR)/pss - ln -s $(BINDIR)/pssrigid $(LINKDIR)/pssrigid - ln -s $(BINDIR)/pssrot $(LINKDIR)/pssrot - ln -s $(BINDIR)/radial $(LINKDIR)/radial - ln -s $(BINDIR)/saddle $(LINKDIR)/saddle - ln -s $(BINDIR)/scan $(LINKDIR)/scan - ln -s $(BINDIR)/sniffer $(LINKDIR)/sniffer - ln -s $(BINDIR)/spacefill $(LINKDIR)/spacefill - ln -s $(BINDIR)/spectrum $(LINKDIR)/spectrum - ln -s $(BINDIR)/superpose $(LINKDIR)/superpose - ln -s $(BINDIR)/testgrad $(LINKDIR)/testgrad - ln -s $(BINDIR)/testhess $(LINKDIR)/testhess - ln -s $(BINDIR)/testpair $(LINKDIR)/testpair - ln -s $(BINDIR)/testpol $(LINKDIR)/testpol - ln -s $(BINDIR)/testrot $(LINKDIR)/testrot - ln -s $(BINDIR)/testvir $(LINKDIR)/testvir - ln -s $(BINDIR)/timer $(LINKDIR)/timer - ln -s $(BINDIR)/timerot $(LINKDIR)/timerot - ln -s $(BINDIR)/torsfit $(LINKDIR)/torsfit - ln -s $(BINDIR)/valence $(LINKDIR)/valence - ln -s $(BINDIR)/vibbig $(LINKDIR)/vibbig - ln -s $(BINDIR)/vibrate $(LINKDIR)/vibrate - ln -s $(BINDIR)/vibrot $(LINKDIR)/vibrot - ln -s $(BINDIR)/xtalfit $(LINKDIR)/xtalfit - ln -s $(BINDIR)/xtalmin $(LINKDIR)/xtalmin - ln -s $(BINDIR)/xyzedit $(LINKDIR)/xyzedit - ln -s $(BINDIR)/xyzint $(LINKDIR)/xyzint - ln -s $(BINDIR)/xyzmol2 $(LINKDIR)/xyzmol2 - ln -s $(BINDIR)/xyzpdb $(LINKDIR)/xyzpdb - -libtinker.a: $(LIBOBJS) - ar $(LIBFLAGS) libtinker.a $(LIBOBJS) - $(RANLIB) libtinker.a - -############################################################### -## Next Section has Explicit Dependencies on Include Files ## -############################################################### - -action.o: -active.o: atoms.o inform.o iounit.o keys.o usage.o -alchemy.o: analyz.o atoms.o energi.o files.o inform.o iounit.o katoms.o mutant.o potent.o units.o usage.o -align.o: -alterchg.o: angbnd.o atmlst.o atoms.o bndstr.o bound.o cflux.o charge.o chgpen.o inform.o iounit.o math.o mplpot.o mpole.o sizes.o -alterpol.o: atoms.o bound.o cell.o couple.o expol.o limits.o mpole.o neigh.o polgrp.o polpot.o shunt.o -analysis.o: analyz.o atoms.o energi.o group.o inter.o iounit.o limits.o potent.o reppot.o vdwpot.o -analyz.o: -analyze.o: action.o analyz.o angang.o angbnd.o angpot.o angtor.o atomid.o atoms.o bath.o bitor.o bndstr.o bound.o boxes.o cflux.o charge.o chgpen.o chgpot.o chgtrn.o couple.o deriv.o dipole.o disp.o energi.o ewald.o fields.o files.o improp.o imptor.o inform.o inter.o iounit.o korbs.o ktrtor.o kvdws.o limits.o math.o molcul.o moment.o mplpot.o mpole.o opbend.o opdist.o output.o piorbs.o pistuf.o pitors.o pme.o polar.o polgrp.o polpot.o potent.o repel.o solute.o strbnd.o strtor.o titles.o tors.o tortor.o units.o urey.o vdw.o vdwpot.o virial.o -angang.o: -angbnd.o: -angles.o: angbnd.o atmlst.o atoms.o couple.o iounit.o -angpot.o: -angtor.o: -anneal.o: atomid.o atoms.o bath.o bndstr.o bound.o inform.o iounit.o mdstuf.o potent.o solute.o usage.o warp.o -arcedit.o: atoms.o bound.o files.o inform.o iounit.o output.o usage.o -argue.o: -ascii.o: -atmlst.o: -atomid.o: sizes.o -atoms.o: sizes.o -attach.o: atoms.o couple.o iounit.o -baoab.o: atomid.o atoms.o bath.o freeze.o limits.o mdstuf.o moldyn.o potent.o stodyn.o units.o usage.o virial.o -bar.o: boxes.o files.o inform.o iounit.o keys.o output.o titles.o units.o -basefile.o: ascii.o files.o -bath.o: -beeman.o: atomid.o atoms.o freeze.o ielscf.o mdstuf.o moldyn.o polar.o units.o usage.o -bicubic.o: -bitor.o: -bitors.o: angbnd.o atoms.o bitor.o couple.o iounit.o -bndpot.o: -bndstr.o: -bonds.o: atmlst.o atoms.o bndstr.o couple.o iounit.o -born.o: atomid.o atoms.o bath.o chgpot.o couple.o deriv.o inform.o iounit.o math.o mpole.o pbstuf.o solpot.o solute.o virial.o -bound.o: -bounds.o: atomid.o atoms.o boxes.o math.o molcul.o -boxes.o: -bussi.o: atomid.o atoms.o bath.o boxes.o freeze.o ielscf.o mdstuf.o moldyn.o polar.o units.o usage.o -calendar.o: -cell.o: -center.o: align.o -cflux.o: -charge.o: -chgpen.o: -chgpot.o: -chgtrn.o: -chkpole.o: atoms.o mpole.o repel.o -chkring.o: couple.o -chkxyz.o: atoms.o iounit.o -cholesky.o: -chrono.o: -chunks.o: -clock.o: chrono.o -cluster.o: atomid.o atoms.o bound.o group.o inform.o iounit.o keys.o limits.o molcul.o -column.o: -command.o: argue.o -connect.o: atoms.o couple.o zclose.o zcoord.o -connolly.o: atoms.o faces.o inform.o iounit.o math.o -control.o: argue.o inform.o keys.o output.o -correlate.o: ascii.o atomid.o atoms.o files.o inform.o iounit.o -couple.o: sizes.o -critical.o: atoms.o files.o inform.o iounit.o keys.o minima.o output.o sizes.o usage.o -crystal.o: atomid.o atoms.o bound.o boxes.o couple.o files.o iounit.o math.o molcul.o -cspline.o: iounit.o -ctrpot.o: -cutoffs.o: atoms.o bound.o hescut.o keys.o limits.o neigh.o polpot.o tarray.o -damping.o: atoms.o ewald.o math.o mplpot.o mpole.o polar.o polpot.o -dcflux.o: angbnd.o atoms.o bndstr.o bound.o cflux.o sizes.o -deflate.o: iounit.o -delete.o: atomid.o atoms.o couple.o inform.o iounit.o -deriv.o: -dexpol.o: atoms.o bound.o cell.o chgpot.o couple.o deriv.o expol.o limits.o math.o mpole.o neigh.o polar.o polgrp.o polpot.o shunt.o units.o virial.o -diagq.o: -diffeq.o: atoms.o iounit.o math.o warp.o -diffuse.o: atomid.o atoms.o bound.o inform.o iounit.o molcul.o usage.o -dipole.o: -disgeo.o: -disp.o: -distgeom.o: angbnd.o atomid.o atoms.o bndstr.o couple.o disgeo.o files.o inform.o iounit.o kvdws.o math.o refer.o restrn.o tors.o -dma.o: -document.o: iounit.o -domega.o: -dsppot.o: -dynamic.o: atoms.o bath.o bndstr.o bound.o inform.o iounit.o keys.o mdstuf.o potent.o stodyn.o usage.o -eangang.o: angang.o angbnd.o angpot.o atoms.o bound.o energi.o group.o math.o usage.o -eangang1.o: angang.o angbnd.o angpot.o atoms.o bound.o deriv.o energi.o group.o math.o usage.o virial.o -eangang2.o: angang.o angbnd.o angpot.o atoms.o bound.o group.o hessn.o math.o -eangang3.o: action.o analyz.o angang.o angbnd.o angpot.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o usage.o -eangle.o: angbnd.o angpot.o atoms.o bound.o energi.o group.o math.o usage.o -eangle1.o: angbnd.o angpot.o atoms.o bound.o deriv.o energi.o group.o math.o usage.o virial.o -eangle2.o: angbnd.o angpot.o atoms.o bound.o group.o hessn.o math.o -eangle3.o: action.o analyz.o angbnd.o angpot.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o usage.o -eangtor.o: angbnd.o angtor.o atoms.o bound.o energi.o group.o math.o torpot.o tors.o usage.o -eangtor1.o: angbnd.o angtor.o atoms.o bound.o deriv.o energi.o group.o math.o torpot.o tors.o usage.o virial.o -eangtor2.o: angbnd.o angtor.o atoms.o bound.o group.o hessn.o math.o torpot.o tors.o -eangtor3.o: action.o analyz.o angbnd.o angtor.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o torpot.o tors.o usage.o -ebond.o: atoms.o bndpot.o bndstr.o bound.o energi.o group.o usage.o -ebond1.o: atoms.o bndpot.o bndstr.o bound.o deriv.o energi.o group.o usage.o virial.o -ebond2.o: atmlst.o atoms.o bndpot.o bndstr.o bound.o couple.o group.o hessn.o -ebond3.o: action.o analyz.o atomid.o atoms.o bndpot.o bndstr.o bound.o energi.o group.o inform.o iounit.o usage.o -ebuck.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o iounit.o light.o limits.o math.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o -ebuck1.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o deriv.o energi.o group.o iounit.o light.o limits.o math.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o warp.o -ebuck2.o: atomid.o atoms.o bound.o cell.o couple.o group.o hessn.o iounit.o math.o shunt.o vdw.o vdwpot.o warp.o -ebuck3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o math.o molcul.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o -echarge.o: atoms.o bound.o boxes.o cell.o charge.o chgpot.o couple.o energi.o ewald.o extfld.o group.o iounit.o light.o limits.o math.o neigh.o pme.o shunt.o usage.o warp.o -echarge1.o: atoms.o bound.o boxes.o cell.o charge.o chgpot.o couple.o deriv.o energi.o ewald.o extfld.o group.o light.o limits.o math.o neigh.o pme.o shunt.o usage.o virial.o warp.o -echarge2.o: atoms.o bound.o boxes.o cell.o charge.o chgpot.o couple.o deriv.o ewald.o group.o hessn.o limits.o math.o neigh.o pme.o shunt.o warp.o -echarge3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o charge.o chgpot.o couple.o energi.o ewald.o extfld.o group.o inform.o inter.o iounit.o light.o limits.o math.o molcul.o neigh.o pme.o shunt.o usage.o warp.o -echgdpl.o: atoms.o bound.o cell.o charge.o chgpot.o couple.o dipole.o energi.o group.o shunt.o units.o usage.o -echgdpl1.o: atoms.o bound.o cell.o charge.o chgpot.o couple.o deriv.o dipole.o energi.o group.o shunt.o units.o usage.o virial.o -echgdpl2.o: atoms.o bound.o cell.o charge.o chgpot.o couple.o dipole.o group.o hessn.o shunt.o units.o -echgdpl3.o: action.o analyz.o atomid.o atoms.o bound.o cell.o charge.o chgpot.o couple.o dipole.o energi.o group.o inform.o inter.o iounit.o molcul.o shunt.o units.o usage.o -echgtrn.o: atoms.o bound.o boxes.o cell.o chgpot.o chgtrn.o couple.o ctrpot.o energi.o group.o light.o limits.o mplpot.o mpole.o mutant.o neigh.o shunt.o usage.o -echgtrn1.o: atoms.o bound.o cell.o chgpot.o chgtrn.o couple.o ctrpot.o deriv.o energi.o group.o limits.o mplpot.o mpole.o mutant.o neigh.o shunt.o usage.o virial.o -echgtrn2.o: atoms.o bound.o cell.o chgpot.o chgtrn.o couple.o ctrpot.o group.o hessn.o mplpot.o mpole.o mutant.o shunt.o usage.o -echgtrn3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o chgpot.o chgtrn.o couple.o ctrpot.o energi.o group.o inform.o inter.o iounit.o light.o limits.o molcul.o mplpot.o mpole.o mutant.o neigh.o shunt.o usage.o -edipole.o: atoms.o bound.o cell.o chgpot.o dipole.o energi.o group.o shunt.o units.o usage.o -edipole1.o: atoms.o bound.o cell.o chgpot.o deriv.o dipole.o energi.o group.o shunt.o units.o usage.o virial.o -edipole2.o: atoms.o bound.o cell.o chgpot.o dipole.o group.o hessn.o shunt.o units.o -edipole3.o: action.o analyz.o atomid.o atoms.o bound.o cell.o chgpot.o dipole.o energi.o group.o inform.o inter.o iounit.o molcul.o shunt.o units.o usage.o -edisp.o: atoms.o bound.o boxes.o cell.o couple.o disp.o dsppot.o energi.o ewald.o group.o limits.o math.o mutant.o neigh.o pme.o shunt.o usage.o -edisp1.o: atoms.o bound.o boxes.o cell.o couple.o deriv.o disp.o dsppot.o energi.o ewald.o group.o limits.o math.o mutant.o neigh.o pme.o shunt.o usage.o virial.o -edisp2.o: atoms.o bound.o cell.o couple.o disp.o dsppot.o group.o hessn.o shunt.o usage.o -edisp3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o disp.o dsppot.o energi.o ewald.o group.o inform.o inter.o iounit.o limits.o molcul.o mutant.o neigh.o pme.o shunt.o usage.o -egauss.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o light.o limits.o math.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o -egauss1.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o deriv.o energi.o group.o light.o limits.o math.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o warp.o -egauss2.o: atomid.o atoms.o bound.o cell.o couple.o group.o hessn.o shunt.o vdw.o vdwpot.o warp.o -egauss3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o math.o molcul.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o -egeom.o: atomid.o atoms.o bound.o boxes.o cell.o energi.o group.o math.o molcul.o restrn.o usage.o -egeom1.o: atomid.o atoms.o bound.o boxes.o cell.o deriv.o energi.o group.o math.o molcul.o restrn.o usage.o virial.o -egeom2.o: atomid.o atoms.o bound.o boxes.o cell.o deriv.o group.o hessn.o math.o molcul.o restrn.o -egeom3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o energi.o group.o inform.o inter.o iounit.o math.o molcul.o restrn.o usage.o -ehal.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o light.o limits.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o -ehal1.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o deriv.o energi.o group.o light.o limits.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o -ehal2.o: atomid.o atoms.o bound.o cell.o couple.o group.o hessn.o shunt.o vdw.o vdwpot.o -ehal3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o molcul.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o -eimprop.o: atoms.o bound.o energi.o group.o improp.o math.o torpot.o usage.o -eimprop1.o: atoms.o bound.o deriv.o energi.o group.o improp.o math.o torpot.o usage.o virial.o -eimprop2.o: atoms.o bound.o group.o hessn.o improp.o math.o torpot.o -eimprop3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o improp.o inform.o iounit.o math.o torpot.o usage.o -eimptor.o: atoms.o bound.o energi.o group.o imptor.o torpot.o usage.o -eimptor1.o: atoms.o bound.o deriv.o energi.o group.o imptor.o torpot.o usage.o virial.o -eimptor2.o: atoms.o bound.o group.o hessn.o imptor.o torpot.o -eimptor3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o imptor.o inform.o iounit.o math.o torpot.o usage.o -elj.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o light.o limits.o math.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o -elj1.o: atomid.o atoms.o bound.o boxes.o cell.o couple.o deriv.o energi.o group.o light.o limits.o math.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o warp.o -elj2.o: atomid.o atoms.o bound.o cell.o couple.o group.o hessn.o math.o shunt.o vdw.o vdwpot.o warp.o -elj3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o math.o molcul.o mutant.o neigh.o shunt.o usage.o vdw.o vdwpot.o warp.o -embed.o: angbnd.o atoms.o bndstr.o couple.o disgeo.o files.o inform.o iounit.o keys.o light.o math.o minima.o output.o refer.o restrn.o tors.o units.o -emetal.o: atomid.o atoms.o couple.o energi.o kchrge.o -emetal1.o: atomid.o atoms.o couple.o deriv.o energi.o kchrge.o -emetal2.o: -emetal3.o: action.o analyz.o atomid.o atoms.o energi.o kchrge.o -emm3hb.o: atmlst.o atomid.o atoms.o bndstr.o bound.o boxes.o cell.o chgpot.o couple.o energi.o group.o light.o limits.o neigh.o shunt.o usage.o vdw.o vdwpot.o -emm3hb1.o: atmlst.o atomid.o atoms.o bndstr.o bound.o boxes.o cell.o chgpot.o couple.o deriv.o energi.o group.o light.o limits.o neigh.o shunt.o usage.o vdw.o vdwpot.o virial.o -emm3hb2.o: atmlst.o atomid.o atoms.o bndstr.o bound.o cell.o chgpot.o couple.o group.o hessn.o shunt.o vdw.o vdwpot.o -emm3hb3.o: action.o analyz.o atmlst.o atomid.o atoms.o bndstr.o bound.o boxes.o cell.o chgpot.o couple.o energi.o group.o inform.o inter.o iounit.o light.o limits.o molcul.o neigh.o shunt.o usage.o vdw.o vdwpot.o -empole.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o energi.o ewald.o extfld.o group.o limits.o math.o mplpot.o mpole.o mrecip.o neigh.o pme.o polpot.o shunt.o usage.o -empole1.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o deriv.o energi.o ewald.o extfld.o group.o limits.o math.o mplpot.o mpole.o mrecip.o neigh.o pme.o potent.o shunt.o usage.o virial.o -empole2.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o deriv.o energi.o group.o hessn.o limits.o molcul.o mplpot.o mpole.o potent.o shunt.o usage.o -empole3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o energi.o ewald.o extfld.o group.o inform.o inter.o iounit.o limits.o math.o molcul.o mplpot.o mpole.o mrecip.o neigh.o pme.o potent.o shunt.o usage.o -energi.o: -energy.o: energi.o iounit.o limits.o potent.o rigid.o vdwpot.o -eopbend.o: angbnd.o angpot.o atoms.o bound.o energi.o fields.o group.o math.o opbend.o usage.o -eopbend1.o: angbnd.o angpot.o atoms.o bound.o deriv.o energi.o group.o math.o opbend.o usage.o virial.o -eopbend2.o: angbnd.o angpot.o atoms.o bound.o group.o hessn.o math.o opbend.o -eopbend3.o: action.o analyz.o angbnd.o angpot.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o opbend.o usage.o -eopdist.o: angpot.o atoms.o bound.o energi.o group.o opdist.o usage.o -eopdist1.o: angpot.o atoms.o bound.o deriv.o energi.o group.o opdist.o usage.o virial.o -eopdist2.o: angpot.o atoms.o bound.o group.o hessn.o opdist.o usage.o -eopdist3.o: action.o analyz.o angpot.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o opdist.o usage.o -epitors.o: atoms.o bound.o energi.o group.o pitors.o torpot.o usage.o -epitors1.o: atoms.o bound.o deriv.o energi.o group.o pitors.o torpot.o usage.o virial.o -epitors2.o: angbnd.o atoms.o bound.o deriv.o group.o hessn.o pitors.o torpot.o usage.o -epitors3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o pitors.o torpot.o usage.o -epolar.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o energi.o ewald.o extfld.o limits.o math.o mplpot.o mpole.o mrecip.o neigh.o pme.o polar.o polgrp.o polpot.o potent.o shunt.o -epolar1.o: atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o deriv.o energi.o ewald.o iounit.o limits.o math.o molcul.o mplpot.o mpole.o mrecip.o neigh.o pme.o polar.o polgrp.o polopt.o polpot.o poltcg.o potent.o shunt.o virial.o -epolar2.o: atoms.o bound.o cell.o chgpen.o chgpot.o couple.o deriv.o hessn.o limits.o mplpot.o mpole.o polar.o polgrp.o polopt.o polpot.o poltcg.o potent.o shunt.o -epolar3.o: action.o analyz.o atomid.o atoms.o bound.o boxes.o cell.o chgpen.o chgpot.o couple.o energi.o ewald.o extfld.o inform.o inter.o iounit.o limits.o math.o molcul.o mplpot.o mpole.o mrecip.o neigh.o pme.o polar.o polgrp.o polpot.o potent.o shunt.o units.o -erepel.o: atoms.o bound.o cell.o couple.o energi.o group.o inform.o inter.o limits.o mpole.o mutant.o neigh.o polar.o repel.o reppot.o shunt.o usage.o -erepel1.o: atoms.o bound.o cell.o couple.o deriv.o energi.o group.o inform.o limits.o mpole.o mutant.o neigh.o repel.o reppot.o shunt.o usage.o virial.o -erepel2.o: atoms.o bound.o cell.o couple.o deriv.o group.o hessn.o mpole.o potent.o repel.o reppot.o shunt.o usage.o -erepel3.o: action.o analyz.o atomid.o atoms.o bound.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o limits.o molcul.o mpole.o mutant.o neigh.o polar.o repel.o reppot.o shunt.o usage.o -erf.o: iounit.o math.o -erxnfld.o: atoms.o chgpot.o energi.o mpole.o rxnfld.o rxnpot.o shunt.o usage.o -erxnfld1.o: atoms.o deriv.o energi.o -erxnfld2.o: -erxnfld3.o: action.o analyz.o atomid.o atoms.o chgpot.o energi.o inform.o iounit.o mpole.o shunt.o usage.o -esolv.o: atomid.o atoms.o bound.o charge.o chgpot.o couple.o deriv.o energi.o gkstuf.o group.o hpmf.o kvdws.o limits.o math.o mpole.o neigh.o nonpol.o pbstuf.o polar.o polgrp.o polpot.o potent.o shunt.o solpot.o solute.o usage.o vdw.o warp.o -esolv1.o: atomid.o atoms.o bound.o boxes.o charge.o chgpot.o couple.o deriv.o energi.o gkstuf.o group.o hpmf.o kvdws.o limits.o math.o mplpot.o mpole.o neigh.o nonpol.o pbstuf.o polar.o polgrp.o polpot.o potent.o shunt.o solpot.o solute.o usage.o vdw.o virial.o warp.o -esolv2.o: atoms.o charge.o chgpot.o deriv.o hessn.o math.o mpole.o potent.o shunt.o solpot.o solute.o warp.o -esolv3.o: action.o analyz.o atomid.o atoms.o bound.o charge.o chgpot.o couple.o deriv.o energi.o gkstuf.o group.o hpmf.o inform.o inter.o iounit.o kvdws.o limits.o math.o molcul.o mpole.o neigh.o nonpol.o pbstuf.o polar.o polgrp.o polpot.o potent.o shunt.o solpot.o solute.o usage.o vdw.o warp.o -estrbnd.o: angbnd.o angpot.o atoms.o bndstr.o bound.o energi.o group.o math.o strbnd.o usage.o -estrbnd1.o: angbnd.o angpot.o atoms.o bndstr.o bound.o deriv.o energi.o group.o math.o strbnd.o usage.o virial.o -estrbnd2.o: angbnd.o angpot.o atoms.o bndstr.o bound.o group.o hessn.o math.o strbnd.o -estrbnd3.o: action.o analyz.o angbnd.o angpot.o atomid.o atoms.o bndstr.o bound.o energi.o group.o inform.o iounit.o math.o strbnd.o usage.o -estrtor.o: atoms.o bndstr.o bound.o energi.o group.o strtor.o torpot.o tors.o usage.o -estrtor1.o: atoms.o bndstr.o bound.o deriv.o energi.o group.o strtor.o torpot.o tors.o usage.o virial.o -estrtor2.o: atoms.o bndstr.o bound.o group.o hessn.o strtor.o torpot.o tors.o -estrtor3.o: action.o analyz.o atomid.o atoms.o bndstr.o bound.o energi.o group.o inform.o iounit.o math.o strtor.o torpot.o tors.o usage.o -etors.o: atoms.o bound.o energi.o group.o math.o torpot.o tors.o usage.o warp.o -etors1.o: atoms.o bound.o deriv.o energi.o group.o math.o torpot.o tors.o usage.o virial.o warp.o -etors2.o: atoms.o bound.o group.o hessn.o math.o torpot.o tors.o warp.o -etors3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o math.o torpot.o tors.o usage.o warp.o -etortor.o: atomid.o atoms.o bitor.o bound.o couple.o energi.o group.o ktrtor.o math.o torpot.o tortor.o usage.o -etortor1.o: atoms.o bitor.o bound.o deriv.o energi.o group.o ktrtor.o math.o torpot.o tortor.o usage.o virial.o -etortor2.o: atoms.o bitor.o bound.o group.o hessn.o ktrtor.o math.o torpot.o tortor.o units.o -etortor3.o: action.o analyz.o atoms.o bitor.o bound.o energi.o group.o inform.o iounit.o ktrtor.o math.o torpot.o tortor.o usage.o -eurey.o: atoms.o bound.o energi.o group.o urey.o urypot.o usage.o -eurey1.o: atoms.o bound.o deriv.o energi.o group.o urey.o urypot.o usage.o virial.o -eurey2.o: atoms.o bound.o couple.o group.o hessn.o urey.o urypot.o -eurey3.o: action.o analyz.o atomid.o atoms.o bound.o energi.o group.o inform.o iounit.o urey.o urypot.o usage.o -evcorr.o: atomid.o atoms.o bound.o boxes.o kdsp.o limits.o math.o mutant.o potent.o shunt.o vdw.o vdwpot.o -ewald.o: -exfield.o: action.o analyz.o atoms.o charge.o chgpot.o deriv.o energi.o extfld.o mpole.o usage.o virial.o -expol.o: -exrepel1.o: atoms.o bound.o cell.o couple.o deriv.o energi.o group.o limits.o mpole.o mutant.o repel.o reppot.o shunt.o units.o usage.o virial.o xrepel.o -exrepel3.o: action.o analyz.o atomid.o atoms.o bound.o cell.o couple.o energi.o group.o inform.o inter.o iounit.o limits.o molcul.o mutant.o repel.o reppot.o shunt.o units.o usage.o xrepel.o -extfld.o: -extra.o: energi.o -extra1.o: atoms.o deriv.o energi.o -extra2.o: atoms.o hessn.o -extra3.o: action.o analyz.o atoms.o energi.o -faces.o: -fatal.o: iounit.o -fft.o: -fft3d.o: fft.o openmp.o pme.o -fftpack.o: math.o -field.o: fields.o inform.o iounit.o keys.o potent.o sizes.o -fields.o: -files.o: -final.o: align.o analyz.o angang.o angbnd.o angtor.o atmlst.o bitor.o bndstr.o cell.o cflux.o charge.o chgpen.o chgtrn.o chunks.o couple.o deriv.o dipole.o disgeo.o domega.o expol.o faces.o fft.o fields.o fracs.o freeze.o group.o hessn.o hpmf.o ielscf.o improp.o imptor.o inform.o iounit.o kanang.o kangs.o kantor.o katoms.o kbonds.o kcflux.o kchrge.o kcpen.o kctrn.o kdipol.o kdsp.o kexpl.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kpolr.o krepl.o ksolut.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o kvdws.o kxrepl.o light.o limits.o merck.o molcul.o moldyn.o mpole.o mrecip.o mutant.o neigh.o nonpol.o omega.o opbend.o opdist.o orbits.o paths.o pbstuf.o pdb.o piorbs.o pistuf.o pitors.o pme.o polar.o polgrp.o polopt.o polpcg.o poltcg.o potfit.o qmstuf.o refer.o repel.o restrn.o rgddyn.o rigid.o ring.o rotbnd.o socket.o solpot.o solute.o stodyn.o strbnd.o strtor.o syntrn.o tarray.o tors.o tortor.o uprior.o urey.o usage.o vdw.o vibs.o warp.o xrepel.o -flatten.o: atoms.o fields.o inform.o iounit.o keys.o warp.o -fracs.o: -freefix.o: iounit.o math.o units.o -freeunit.o: iounit.o -freeze.o: -gda.o: atoms.o files.o iounit.o minima.o potent.o vdwpot.o warp.o -geometry.o: atoms.o math.o -getarc.o: files.o inform.o iounit.o output.o -getcart.o: files.o inform.o iounit.o output.o -getdcd.o: files.o inform.o iounit.o output.o -getint.o: atoms.o files.o inform.o iounit.o output.o -getkey.o: argue.o files.o iounit.o keys.o openmp.o -getmol.o: files.o inform.o iounit.o -getmol2.o: files.o inform.o iounit.o -getnumb.o: ascii.o -getpdb.o: files.o inform.o iounit.o -getprm.o: files.o inform.o iounit.o keys.o params.o -getref.o: atomid.o atoms.o boxes.o couple.o files.o refer.o titles.o -getstring.o: ascii.o -gettext.o: ascii.o -getword.o: ascii.o -getxyz.o: files.o inform.o iounit.o output.o -ghmcstep.o: atomid.o atoms.o bath.o freeze.o iounit.o moldyn.o stodyn.o units.o usage.o virial.o -gkstuf.o: sizes.o -gradient.o: atoms.o couple.o deriv.o energi.o inform.o inter.o iounit.o limits.o potent.o rigid.o vdwpot.o virial.o -gradrgd.o: atoms.o group.o rigid.o -gradrot.o: atoms.o deriv.o domega.o omega.o potent.o rotbnd.o -group.o: -groups.o: group.o -grpline.o: atomid.o atoms.o group.o rgddyn.o -gyrate.o: atoms.o usage.o -hescut.o: -hessian.o: atoms.o couple.o hescut.o hessn.o inform.o iounit.o limits.o mpole.o potent.o rigid.o usage.o vdw.o vdwpot.o -hessn.o: -hessrgd.o: atoms.o group.o rigid.o -hessrot.o: math.o omega.o zcoord.o -hpmf.o: -hybrid.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o charge.o couple.o dipole.o imptor.o inform.o iounit.o kangs.o katoms.o kbonds.o kchrge.o kdipol.o kitors.o kstbnd.o ksttor.o ktorsn.o kvdws.o math.o mutant.o strbnd.o strtor.o tors.o vdw.o vdwpot.o -ielscf.o: -image.o: boxes.o cell.o math.o -impose.o: align.o inform.o iounit.o -improp.o: -imptor.o: -induce.o: atoms.o bound.o boxes.o cell.o chgpen.o couple.o ewald.o expol.o extfld.o gkstuf.o group.o ielscf.o inform.o iounit.o limits.o math.o mplpot.o mpole.o neigh.o openmp.o pbstuf.o pme.o polar.o polgrp.o polopt.o polpcg.o polpot.o potent.o shunt.o solpot.o solute.o tarray.o units.o uprior.o -inertia.o: atomid.o atoms.o iounit.o math.o -inform.o: -initatom.o: ptable.o -initial.o: align.o atoms.o bath.o bound.o boxes.o cell.o fft.o files.o group.o inform.o iounit.o keys.o linmin.o minima.o molcul.o mutant.o neigh.o openmp.o output.o params.o pdb.o rigid.o scales.o sequen.o socket.o virial.o warp.o zclose.o -initprm.o: angpot.o bndpot.o chgpot.o ctrpot.o dsppot.o expol.o extfld.o fields.o ielscf.o kanang.o kangs.o kantor.o katoms.o kbonds.o kcflux.o kchrge.o kcpen.o kctrn.o kdipol.o kdsp.o kexpl.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kpolr.o krepl.o ksolut.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o kvdws.o kxrepl.o math.o merck.o mplpot.o polpot.o reppot.o rxnpot.o sizes.o solpot.o solute.o torpot.o units.o uprior.o urypot.o vdwpot.o xrepel.o -initres.o: resdue.o -initrot.o: atoms.o couple.o group.o inform.o iounit.o math.o omega.o potent.o restrn.o rotbnd.o usage.o zcoord.o -insert.o: atomid.o atoms.o couple.o inform.o iounit.o -intedit.o: atomid.o atoms.o files.o iounit.o katoms.o zcoord.o -inter.o: -intxyz.o: files.o iounit.o titles.o -invbeta.o: -invert.o: iounit.o -iounit.o: -jacobi.o: iounit.o -kanang.o: -kangang.o: angang.o angbnd.o atmlst.o atomid.o atoms.o couple.o inform.o iounit.o kanang.o keys.o potent.o tors.o -kangle.o: angbnd.o angpot.o atomid.o atoms.o bndstr.o couple.o fields.o inform.o iounit.o kangs.o keys.o merck.o potent.o ring.o usage.o -kangs.o: -kangtor.o: angtor.o atmlst.o atomid.o atoms.o couple.o inform.o iounit.o kantor.o keys.o potent.o tors.o -kantor.o: -katom.o: atomid.o atoms.o couple.o inform.o iounit.o katoms.o keys.o -katoms.o: -kbond.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o couple.o fields.o inform.o iounit.o kbonds.o keys.o merck.o potent.o tors.o usage.o -kbonds.o: -kcflux.o: -kcharge.o: atomid.o atoms.o charge.o chgpot.o couple.o fields.o inform.o iounit.o kchrge.o keys.o merck.o potent.o -kchgflx.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o cflux.o couple.o inform.o iounit.o kangs.o kbonds.o kcflux.o keys.o potent.o sizes.o usage.o -kchgtrn.o: atomid.o atoms.o chgpen.o chgtrn.o expol.o inform.o iounit.o kctrn.o keys.o mplpot.o mpole.o polar.o polpot.o potent.o sizes.o -kchrge.o: -kcpen.o: -kctrn.o: -kdipol.o: -kdipole.o: atmlst.o atoms.o bndstr.o couple.o dipole.o inform.o iounit.o kdipol.o keys.o potent.o -kdisp.o: atomid.o atoms.o disp.o dsppot.o inform.o iounit.o kdsp.o keys.o limits.o potent.o sizes.o -kdsp.o: -kewald.o: atoms.o bound.o boxes.o chunks.o ewald.o fft.o inform.o iounit.o keys.o limits.o openmp.o pme.o potent.o -kexpl.o: -kexpol.o: atomid.o atoms.o expol.o inform.o iounit.o kexpl.o keys.o sizes.o -kextra.o: -keys.o: -kgeom.o: atomid.o atoms.o bound.o couple.o group.o iounit.o keys.o molcul.o potent.o restrn.o -khbond.o: -kimprop.o: atomid.o atoms.o couple.o improp.o inform.o iounit.o keys.o kiprop.o potent.o tors.o -kimptor.o: atomid.o atoms.o couple.o imptor.o inform.o iounit.o keys.o kitors.o math.o potent.o tors.o -kinetic.o: atomid.o atoms.o bath.o group.o ielscf.o mdstuf.o moldyn.o rgddyn.o units.o usage.o -kiprop.o: -kitors.o: -kmetal.o: -kmpole.o: atomid.o atoms.o chgpen.o couple.o inform.o iounit.o kcpen.o keys.o kmulti.o math.o mplpot.o mpole.o polar.o polgrp.o potent.o units.o -kmulti.o: -kopbend.o: angbnd.o atomid.o atoms.o couple.o fields.o inform.o iounit.o keys.o kopbnd.o merck.o opbend.o potent.o usage.o -kopbnd.o: -kopdist.o: angbnd.o atmlst.o atomid.o atoms.o couple.o inform.o iounit.o keys.o kopdst.o opdist.o potent.o -kopdst.o: -korbit.o: atomid.o atoms.o bndstr.o inform.o iounit.o keys.o korbs.o orbits.o piorbs.o pistuf.o tors.o units.o -korbs.o: -kpitor.o: -kpitors.o: atomid.o atoms.o bndstr.o couple.o inform.o iounit.o keys.o kpitor.o pitors.o potent.o tors.o -kpolar.o: atoms.o chgpen.o couple.o expol.o inform.o iounit.o keys.o kpolpr.o kpolr.o mplpot.o mpole.o polar.o polgrp.o polopt.o polpcg.o polpot.o poltcg.o potent.o -kpolpr.o: -kpolr.o: -krepel.o: atomid.o atoms.o inform.o iounit.o keys.o krepl.o mpole.o potent.o repel.o reppot.o sizes.o -krepl.o: -ksolut.o: -ksolv.o: angbnd.o atmlst.o atomid.o atoms.o bath.o bndstr.o chgpot.o couple.o gkstuf.o hpmf.o inform.o iounit.o keys.o ksolut.o kvdws.o math.o nonpol.o pbstuf.o polar.o polopt.o polpot.o potent.o ptable.o sizes.o solpot.o solute.o vdw.o -kstbnd.o: -kstrbnd.o: angbnd.o angpot.o atmlst.o atomid.o atoms.o couple.o fields.o inform.o iounit.o keys.o kstbnd.o merck.o potent.o ring.o strbnd.o -kstrtor.o: atmlst.o atomid.o atoms.o couple.o inform.o iounit.o keys.o ksttor.o potent.o strtor.o tors.o -ksttor.o: -ktors.o: atomid.o atoms.o couple.o fields.o inform.o iounit.o keys.o ktorsn.o math.o merck.o potent.o ring.o tors.o usage.o -ktorsn.o: -ktortor.o: atomid.o atoms.o bitor.o inform.o iounit.o keys.o ktrtor.o potent.o tortor.o -ktrtor.o: -kurey.o: angbnd.o atomid.o atoms.o inform.o iounit.o keys.o kurybr.o potent.o urey.o -kurybr.o: -kvdw.o: atomid.o atoms.o couple.o fields.o inform.o iounit.o keys.o khbond.o kvdwpr.o kvdws.o math.o merck.o potent.o vdw.o vdwpot.o -kvdwpr.o: -kvdws.o: -kxrepel.o: atomid.o atoms.o inform.o iounit.o keys.o kxrepl.o mpole.o potent.o repel.o reppot.o sizes.o xrepel.o -kxrepl.o: -lattice.o: bound.o boxes.o cell.o inform.o iounit.o math.o -lbfgs.o: inform.o iounit.o keys.o linmin.o math.o minima.o output.o scales.o -light.o: -lights.o: bound.o boxes.o cell.o iounit.o light.o -limits.o: -linmin.o: -lusolve.o: iounit.o -makeint.o: atoms.o couple.o inform.o iounit.o math.o sizes.o zclose.o zcoord.o -makeref.o: atomid.o atoms.o boxes.o couple.o files.o refer.o titles.o -makexyz.o: atoms.o zcoord.o -math.o: -maxwell.o: units.o -mdinit.o: atomid.o atoms.o bath.o bound.o couple.o extfld.o files.o freeze.o group.o inform.o iounit.o keys.o mdstuf.o molcul.o moldyn.o mpole.o output.o potent.o rgddyn.o rigid.o stodyn.o units.o usage.o -mdrest.o: atomid.o atoms.o bound.o group.o inform.o iounit.o mdstuf.o moldyn.o rgddyn.o units.o -mdsave.o: atomid.o atoms.o bound.o boxes.o deriv.o files.o group.o inform.o iounit.o mdstuf.o moldyn.o mpole.o output.o polar.o potent.o rgddyn.o socket.o titles.o units.o -mdstat.o: atoms.o bath.o bound.o boxes.o inform.o iounit.o limits.o mdstuf.o molcul.o units.o usage.o warp.o -mdstuf.o: -mechanic.o: inform.o iounit.o -merck.o: sizes.o -merge.o: atomid.o atoms.o couple.o iounit.o refer.o -minima.o: -minimize.o: atoms.o bound.o files.o freeze.o inform.o iounit.o scales.o usage.o -minirot.o: files.o inform.o iounit.o math.o omega.o scales.o zcoord.o -minrigid.o: files.o group.o inform.o iounit.o math.o output.o rigid.o -mol2xyz.o: files.o iounit.o titles.o -molcul.o: -moldyn.o: -molecule.o: atomid.o atoms.o couple.o molcul.o -molxyz.o: files.o iounit.o titles.o -moment.o: -moments.o: atomid.o atoms.o bound.o charge.o dipole.o limits.o moment.o mpole.o polar.o potent.o rigid.o solpot.o units.o usage.o -monte.o: atoms.o bound.o files.o inform.o iounit.o omega.o output.o potent.o units.o usage.o zcoord.o -mplpot.o: -mpole.o: -mrecip.o: -mutant.o: -mutate.o: angbnd.o atomid.o atoms.o bndstr.o cflux.o charge.o chgpen.o dipole.o inform.o iounit.o katoms.o keys.o mplpot.o mpole.o mutant.o polar.o potent.o tors.o -nblist.o: atoms.o bound.o boxes.o cell.o charge.o disp.o iounit.o light.o limits.o mpole.o neigh.o potent.o vdw.o -neigh.o: -newton.o: atoms.o bound.o files.o inform.o iounit.o usage.o -newtrot.o: files.o hescut.o inform.o iounit.o math.o omega.o zcoord.o -nextarg.o: argue.o -nexttext.o: -nonpol.o: -nose.o: atomid.o atoms.o bath.o boxes.o freeze.o mdstuf.o moldyn.o units.o usage.o virial.o -nspline.o: -nucleic.o: atoms.o couple.o files.o group.o inform.o iounit.o katoms.o math.o molcul.o nucleo.o output.o potent.o resdue.o restrn.o rigid.o sequen.o titles.o usage.o -nucleo.o: sizes.o -number.o: inform.o iounit.o -numeral.o: -numgrad.o: atoms.o -ocvm.o: inform.o iounit.o keys.o linmin.o math.o minima.o output.o potent.o scales.o -omega.o: -opbend.o: -opdist.o: -openend.o: -openmp.o: -optimize.o: atoms.o bound.o files.o inform.o iounit.o scales.o usage.o -optinit.o: inform.o keys.o output.o potent.o -optirot.o: files.o inform.o iounit.o math.o omega.o scales.o zcoord.o -optrigid.o: files.o group.o inform.o iounit.o math.o output.o rigid.o -optsave.o: atomid.o atoms.o bound.o deriv.o files.o group.o iounit.o math.o mpole.o omega.o output.o polar.o potent.o scales.o socket.o titles.o units.o usage.o zcoord.o -orbital.o: atomid.o atoms.o bndstr.o couple.o iounit.o keys.o piorbs.o potent.o tors.o -orbits.o: -orient.o: atomid.o atoms.o group.o math.o rigid.o -orthog.o: -output.o: -overlap.o: units.o -params.o: -path.o: align.o atomid.o atoms.o files.o inform.o iounit.o linmin.o minima.o output.o paths.o -paths.o: -pbstuf.o: -pdb.o: -pdbxyz.o: atomid.o atoms.o couple.o fields.o files.o inform.o iounit.o katoms.o pdb.o resdue.o sequen.o titles.o -phipsi.o: sizes.o -picalc.o: atomid.o atoms.o bndstr.o couple.o inform.o iounit.o orbits.o piorbs.o pistuf.o tors.o units.o -piorbs.o: -pistuf.o: -pitors.o: -pme.o: -pmestuf.o: atoms.o boxes.o charge.o chunks.o disp.o math.o mpole.o openmp.o pme.o potent.o -pmpb.o: iounit.o -polar.o: -polarize.o: atoms.o inform.o iounit.o molcul.o mpole.o polar.o polopt.o polpcg.o polpot.o potent.o units.o -poledit.o: atomid.o atoms.o bndstr.o chgpen.o couple.o fields.o files.o inform.o iounit.o keys.o kpolr.o mplpot.o mpole.o polar.o polgrp.o polpot.o potent.o ptable.o ring.o sizes.o units.o -polgrp.o: -polopt.o: -polpcg.o: -polpot.o: -poltcg.o: -polymer.o: atoms.o bndstr.o bound.o boxes.o iounit.o keys.o -potent.o: -potential.o: atomid.o atoms.o charge.o chgpen.o chgpot.o dipole.o files.o inform.o iounit.o katoms.o keys.o math.o moment.o mplpot.o mpole.o neigh.o polar.o potent.o potfit.o ptable.o refer.o titles.o units.o -potfit.o: sizes.o -predict.o: atomid.o atoms.o ielscf.o keys.o polar.o uprior.o -pressure.o: atomid.o atoms.o bath.o bound.o boxes.o group.o math.o mdstuf.o molcul.o moldyn.o units.o usage.o virial.o -prmedit.o: angpot.o bndpot.o iounit.o math.o params.o sizes.o urypot.o vdwpot.o -prmkey.o: angpot.o bndpot.o chgpot.o ctrpot.o dsppot.o expol.o extfld.o fields.o mplpot.o polpot.o potent.o reppot.o rxnpot.o torpot.o units.o urypot.o vdwpot.o xrepel.o -promo.o: iounit.o -protein.o: atomid.o atoms.o couple.o files.o group.o inform.o iounit.o katoms.o math.o molcul.o output.o phipsi.o potent.o resdue.o restrn.o rigid.o sequen.o titles.o usage.o -prtarc.o: atomid.o atoms.o bound.o boxes.o couple.o files.o inform.o output.o titles.o usage.o -prtdcd.o: atoms.o bound.o boxes.o files.o titles.o -prtdyn.o: atoms.o boxes.o files.o group.o mdstuf.o moldyn.o rgddyn.o titles.o -prterr.o: files.o output.o -prtint.o: atomid.o atoms.o files.o inform.o titles.o zclose.o zcoord.o -prtmol2.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o couple.o files.o iounit.o ptable.o ring.o titles.o tors.o -prtpdb.o: bound.o boxes.o files.o pdb.o sequen.o titles.o -prtprm.o: angpot.o bndpot.o chgpot.o fields.o kanang.o kangs.o kantor.o katoms.o kbonds.o kcflux.o kchrge.o kcpen.o kctrn.o kdipol.o kdsp.o kexpl.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kpolr.o krepl.o ksolut.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o kvdws.o mplpot.o polpot.o sizes.o urypot.o vdwpot.o -prtseq.o: files.o sequen.o -prtxyz.o: atomid.o atoms.o bound.o boxes.o couple.o files.o inform.o titles.o -pss.o: atoms.o files.o hescut.o inform.o iounit.o math.o omega.o refer.o tree.o warp.o zcoord.o -pssrigid.o: atoms.o files.o group.o inform.o iounit.o math.o minima.o molcul.o refer.o rigid.o sizes.o warp.o -pssrot.o: atoms.o files.o inform.o iounit.o math.o minima.o omega.o refer.o warp.o zcoord.o -ptable.o: -qmstuf.o: -qrsolve.o: -quatfit.o: align.o -radial.o: argue.o atomid.o atoms.o bound.o boxes.o files.o inform.o iounit.o limits.o math.o molcul.o potent.o -random.o: inform.o iounit.o keys.o math.o -rattle.o: atomid.o atoms.o freeze.o group.o inform.o iounit.o moldyn.o units.o usage.o virial.o -readcart.o: output.o -readdcd.o: atoms.o bound.o boxes.o files.o inform.o iounit.o math.o titles.o -readdyn.o: atoms.o boxes.o files.o group.o iounit.o mdstuf.o moldyn.o rgddyn.o -readgau.o: ascii.o iounit.o qmstuf.o units.o -readgdma.o: atomid.o atoms.o dma.o files.o iounit.o mpole.o units.o -readint.o: atomid.o atoms.o files.o inform.o iounit.o titles.o zclose.o zcoord.o -readmol.o: atomid.o atoms.o couple.o files.o iounit.o ptable.o titles.o -readmol2.o: atomid.o atoms.o couple.o files.o iounit.o ptable.o titles.o -readpdb.o: files.o inform.o iounit.o pdb.o resdue.o sequen.o titles.o -readprm.o: fields.o iounit.o kanang.o kangs.o kantor.o katoms.o kbonds.o kcflux.o kchrge.o kcpen.o kctrn.o kdipol.o kdsp.o kexpl.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kpolr.o krepl.o ksolut.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o kvdws.o kxrepl.o merck.o params.o solute.o -readseq.o: files.o iounit.o resdue.o sequen.o -readxyz.o: atomid.o atoms.o boxes.o couple.o files.o inform.o iounit.o titles.o -refer.o: sizes.o -repel.o: -replica.o: bound.o boxes.o cell.o inform.o iounit.o math.o -reppot.o: -resdue.o: -respa.o: atomid.o atoms.o freeze.o ielscf.o limits.o mdstuf.o moldyn.o polar.o potent.o units.o usage.o virial.o -restrn.o: -rgddyn.o: -rgdstep.o: atomid.o atoms.o bound.o group.o iounit.o rgddyn.o units.o virial.o -rigid.o: -ring.o: -rings.o: angbnd.o atoms.o bitor.o bndstr.o couple.o inform.o iounit.o ring.o tors.o -rmsfit.o: align.o -rotbnd.o: -rotlist.o: atoms.o couple.o iounit.o molcul.o rotbnd.o zclose.o -rotpole.o: atoms.o math.o mpole.o repel.o -rxnfld.o: -rxnpot.o: -saddle.o: atoms.o inform.o iounit.o keys.o linmin.o minima.o syntrn.o titles.o zcoord.o -scales.o: -scan.o: atoms.o files.o inform.o iounit.o math.o minima.o omega.o output.o potent.o scales.o zcoord.o -sdstep.o: atomid.o atoms.o bath.o couple.o freeze.o kvdws.o math.o moldyn.o stodyn.o units.o usage.o virial.o -search.o: linmin.o math.o -sequen.o: sizes.o -server.o: -setprm.o: atoms.o couple.o kangs.o kantor.o kbonds.o kcflux.o kdipol.o keys.o khbond.o kiprop.o kitors.o kmulti.o kopbnd.o kopdst.o korbs.o kpitor.o kpolpr.o kstbnd.o ksttor.o ktorsn.o ktrtor.o kurybr.o kvdwpr.o params.o restrn.o -shakeup.o: angbnd.o atmlst.o atomid.o atoms.o bndstr.o bound.o couple.o freeze.o keys.o math.o molcul.o ring.o usage.o -shunt.o: -sigmoid.o: -simplex.o: inform.o iounit.o keys.o minima.o -sizes.o: -sktstuf.o: atomid.o atoms.o charge.o couple.o deriv.o fields.o files.o inform.o iounit.o keys.o moldyn.o mpole.o polar.o potent.o socket.o -sniffer.o: atoms.o files.o inform.o iounit.o linmin.o math.o minima.o output.o scales.o usage.o -socket.o: -solpot.o: -solute.o: -sort.o: -spacefill.o: atomid.o atoms.o files.o inform.o iounit.o kvdws.o math.o ptable.o usage.o -spectrum.o: files.o iounit.o math.o units.o -square.o: inform.o iounit.o keys.o minima.o -stodyn.o: -strbnd.o: -strtor.o: -suffix.o: ascii.o -superpose.o: align.o atomid.o atoms.o bound.o files.o inform.o iounit.o titles.o -surface.o: atoms.o inform.o iounit.o math.o usage.o -surfatom.o: atoms.o iounit.o math.o -switch.o: limits.o nonpol.o shunt.o -syntrn.o: -tarray.o: -tcgstuf.o: atoms.o iounit.o limits.o mpole.o polar.o poltcg.o potent.o -temper.o: atomid.o atoms.o bath.o group.o ielscf.o mdstuf.o molcul.o moldyn.o rgddyn.o units.o usage.o -testgrad.o: atoms.o deriv.o energi.o files.o inform.o inter.o iounit.o solute.o usage.o -testhess.o: atoms.o files.o hescut.o inform.o iounit.o usage.o -testpair.o: atoms.o deriv.o energi.o inform.o iounit.o light.o limits.o neigh.o polpot.o potent.o tarray.o vdwpot.o -testpol.o: atoms.o bound.o inform.o iounit.o limits.o minima.o mpole.o polar.o polopt.o polpot.o poltcg.o potent.o rigid.o units.o usage.o -testrot.o: domega.o energi.o inform.o iounit.o math.o omega.o zcoord.o -testvir.o: atoms.o bath.o bound.o boxes.o inform.o iounit.o math.o units.o virial.o -timer.o: atoms.o hescut.o inform.o iounit.o limits.o polpot.o -timerot.o: hescut.o inform.o iounit.o limits.o omega.o polpot.o -titles.o: -tncg.o: atoms.o hescut.o inform.o iounit.o keys.o linmin.o math.o minima.o output.o piorbs.o potent.o -torphase.o: -torpot.o: -torque.o: atoms.o deriv.o mpole.o -tors.o: -torsfit.o: atomid.o atoms.o files.o inform.o iounit.o keys.o ktorsn.o math.o output.o potent.o qmstuf.o restrn.o scales.o tors.o usage.o -torsions.o: atoms.o bndstr.o couple.o iounit.o tors.o -tortor.o: -tree.o: -trimtext.o: -unitcell.o: bound.o boxes.o keys.o math.o -units.o: -uprior.o: -urey.o: -urypot.o: -usage.o: -valence.o: angbnd.o angpot.o atomid.o atoms.o bndpot.o bndstr.o couple.o files.o hescut.o inform.o iounit.o kangs.o kbonds.o keys.o kopbnd.o kstbnd.o ktorsn.o kurybr.o kvdws.o linmin.o math.o minima.o opbend.o output.o potent.o qmstuf.o scales.o strbnd.o torpot.o tors.o units.o urey.o urypot.o usage.o valfit.o vdwpot.o -valfit.o: -vdw.o: -vdwpot.o: -verlet.o: atomid.o atoms.o freeze.o ielscf.o moldyn.o polar.o units.o usage.o -version.o: iounit.o output.o -vibbig.o: atomid.o atoms.o bound.o couple.o files.o hescut.o hessn.o inform.o iounit.o keys.o limits.o mpole.o potent.o rigid.o units.o usage.o vdw.o vdwpot.o vibs.o -vibrate.o: atomid.o atoms.o files.o hescut.o iounit.o math.o units.o usage.o -vibrot.o: iounit.o omega.o -vibs.o: -virial.o: -volume.o: atoms.o iounit.o math.o sizes.o -warp.o: -xrepel.o: -xtalfit.o: atomid.o atoms.o bound.o boxes.o charge.o dipole.o energi.o files.o fracs.o inform.o iounit.o kvdws.o limits.o math.o molcul.o mpole.o polar.o potent.o sizes.o vdw.o vdwpot.o xtals.o -xtalmin.o: atoms.o boxes.o files.o inform.o iounit.o keys.o math.o scales.o -xtals.o: -xyzatm.o: atoms.o inform.o iounit.o math.o -xyzedit.o: atomid.o atoms.o bound.o boxes.o couple.o energi.o files.o inform.o iounit.o katoms.o limits.o linmin.o math.o minima.o molcul.o neigh.o output.o potent.o ptable.o refer.o repel.o scales.o titles.o units.o usage.o vdw.o vdwpot.o -xyzint.o: files.o iounit.o titles.o -xyzmol2.o: files.o iounit.o titles.o -xyzpdb.o: atomid.o atoms.o couple.o fields.o files.o inform.o molcul.o pdb.o resdue.o sequen.o -zatom.o: angbnd.o atomid.o atoms.o bndstr.o fields.o iounit.o kangs.o katoms.o kbonds.o sizes.o zclose.o zcoord.o -zclose.o: sizes.o -zcoord.o: sizes.o From 698d686ee395950ff56e1d15ca17799e191effaf Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Wed, 4 Sep 2024 16:57:00 -0500 Subject: [PATCH 13/15] add literature reference to exrepel --- source/exrepel.f | 14 ++++++++------ source/exrepel1.f | 4 +++- source/exrepel3.f | 4 +++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/source/exrepel.f b/source/exrepel.f index ed781f35f..3995fdd8e 100644 --- a/source/exrepel.f +++ b/source/exrepel.f @@ -5,18 +5,20 @@ c ## All Rights Reserved ## c ############################################################ c -c ########################################################## -c ## ## -c ## subroutine exrepel3 -- exchange repulsion energy ## -c ## ## -c ########################################################## +c ######################################################### +c ## ## +c ## subroutine exrepel -- exchange repulsion energy ## +c ## ## +c ######################################################### c c c "exrepel" calculates the exchange repulsion energy c c literature reference: c -c TBD +c M. K. J. Chung and J. W. Ponder, "Beyond isotropic repulsion: +c Classical anisotropic repulsion by inclusion of p orbitals", +c Journal of Chemical Physics, 160, 174118 (2024) c c subroutine exrepel diff --git a/source/exrepel1.f b/source/exrepel1.f index 064af7c82..8f57860d4 100644 --- a/source/exrepel1.f +++ b/source/exrepel1.f @@ -17,7 +17,9 @@ c c literature reference: c -c TBD +c M. K. J. Chung and J. W. Ponder, "Beyond isotropic repulsion: +c Classical anisotropic repulsion by inclusion of p orbitals", +c Journal of Chemical Physics, 160, 174118 (2024) c c subroutine exrepel1 diff --git a/source/exrepel3.f b/source/exrepel3.f index 9e37edaa0..039279605 100644 --- a/source/exrepel3.f +++ b/source/exrepel3.f @@ -17,7 +17,9 @@ c c literature reference: c -c TBD +c M. K. J. Chung and J. W. Ponder, "Beyond isotropic repulsion: +c Classical anisotropic repulsion by inclusion of p orbitals", +c Journal of Chemical Physics, 160, 174118 (2024) c c subroutine exrepel3 From c8a029e52dea8019585996d0f8c358300dd1ad1f Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Wed, 4 Sep 2024 16:59:26 -0500 Subject: [PATCH 14/15] use_xrepel respa bug --- source/respa.f | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/respa.f b/source/respa.f index 9542e6546..5f8f8ba0c 100644 --- a/source/respa.f +++ b/source/respa.f @@ -267,7 +267,7 @@ subroutine gradfast (energy,derivs) c use_vdw = .false. use_repel = .false. - use_xrepel = .true. + use_xrepel = .false. use_disp = .false. use_charge = .false. use_chgdpl = .false. From 09bc73f11afc6816c09a517dbd618097b57b8b36 Mon Sep 17 00:00:00 2001 From: Moses Chung Date: Wed, 4 Sep 2024 18:30:30 -0500 Subject: [PATCH 15/15] systyze and paramyze for xrepel --- source/analyze.f | 424 +++++++++++++++++++++++++---------------------- source/krepel.f | 2 +- source/kxrepel.f | 8 +- 3 files changed, 231 insertions(+), 203 deletions(-) diff --git a/source/analyze.f b/source/analyze.f index 735aaec0b..491abb90b 100644 --- a/source/analyze.f +++ b/source/analyze.f @@ -400,7 +400,7 @@ subroutine systyze c c details of vdw potential energy functional form c - if (use_vdw .or. use_repel .or. use_disp) then + if (use_vdw .or. use_repel .or. use_xrepel .or. use_disp) then write (iout,70) 70 format () end if @@ -429,20 +429,25 @@ subroutine systyze call justify (value) write (iout,100) value 100 format (' VDW Function',16x,a20) + else if (use_xrepel) then + value = 'EXCHANGE REPULSION' + call justify (value) + write (iout,110) value + 110 format (' VDW Function',16x,a20) end if if (use_disp) then value = 'DAMPED DISPERSION' call justify (value) - write (iout,110) value - 110 format (' VDW Function',16x,a20) + write (iout,120) value + 120 format (' VDW Function',16x,a20) end if c c details of dispersion particle mesh Ewald calculation c if (use_dewald) then - write (iout,120) adewald,dewaldcut,ndfft1, + write (iout,130) adewald,dewaldcut,ndfft1, & ndfft2,ndfft3,bsdorder - 120 format (/,' PME for Dispersion :', + 130 format (/,' PME for Dispersion :', & //,' Ewald Coefficient',19x,f12.4, & /,' Real-Space Cutoff',19x,f12.4, & /,' Grid Dimensions',21x,3i4, @@ -452,59 +457,59 @@ subroutine systyze c details of electrostatic energy functional form c if (use_charge .or. use_dipole .or. use_mpole .or. use_polar) then - write (iout,130) - 130 format () + write (iout,140) + 140 format () end if if (use_charge) then value = 'PARTIAL CHARGE' call justify (value) - write (iout,140) value - 140 format (' Electrostatics',14x,a20) + write (iout,150) value + 150 format (' Electrostatics',14x,a20) end if if (use_dipole) then value = 'BOND DIPOLE' call justify (value) - write (iout,150) value - 150 format (' Electrostatics',14x,a20) + write (iout,160) value + 160 format (' Electrostatics',14x,a20) end if if (use_mpole) then value = 'ATOMIC MULTIPOLE' call justify (value) - write (iout,160) value - 160 format (' Electrostatics',14x,a20) + write (iout,170) value + 170 format (' Electrostatics',14x,a20) end if if (use_chgpen) then value = 'CHARGE PENETRATION' call justify (value) - write (iout,170) value - 170 format (' Electrostatics',14x,a20) + write (iout,180) value + 180 format (' Electrostatics',14x,a20) end if if (use_chgtrn) then value = 'CHARGE TRANSFER' call justify (value) - write (iout,180) value - 180 format (' Induction',19x,a20) + write (iout,190) value + 190 format (' Induction',19x,a20) end if if (use_polar) then value = 'INDUCED DIPOLE' call justify (value) - write (iout,190) value - 190 format (' Induction',19x,a20) + write (iout,200) value + 200 format (' Induction',19x,a20) value = poltyp call justify (value) - write (iout,200) value - 200 format (' Polarization',16x,a20) + write (iout,210) value + 210 format (' Polarization',16x,a20) if (use_thole) then value = 'THOLE DAMPING' call justify (value) - write (iout,210) value - 210 format (' Polarization',16x,a20) + write (iout,220) value + 220 format (' Polarization',16x,a20) end if if (use_chgpen) then value = 'CHGPEN DAMPING' call justify (value) - write (iout,220) value - 220 format (' Polarization',16x,a20) + write (iout,230) value + 230 format (' Polarization',16x,a20) end if end if c @@ -513,9 +518,9 @@ subroutine systyze if (use_ewald) then value = boundary call justify (value) - write (iout,230) aeewald,ewaldcut,nefft1,nefft2, + write (iout,240) aeewald,ewaldcut,nefft1,nefft2, & nefft3,bseorder,value - 230 format (/,' PME for Electrostatics :', + 240 format (/,' PME for Electrostatics :', & //,' Ewald Coefficient',19x,f12.4, & /,' Real-Space Cutoff',19x,f12.4, & /,' Grid Dimensions',21x,3i4, @@ -672,7 +677,7 @@ subroutine partyze end if write (iout,fstr) ev,nev end if - if (use_repel .and. (ner.ne.0.or.er.ne.0.0d0)) then + if ((use_repel.or.use_xrepel).and.(ner.ne.0.or.er.ne.0.0d0)) then if (abs(er) .lt. 1.0d10) then fstr = '('' Repulsion'',18x,'//form1//')' else @@ -1248,6 +1253,7 @@ subroutine paramyze (active) use urey use vdw use vdwpot + use xrepel implicit none integer i,j,k integer ia,ib,ic @@ -1336,50 +1342,53 @@ subroutine paramyze (active) if (use_repel .and. nrep.ne.0) then write (iout,180) nrep 180 format (' Repulsion Sites',18x,i15) + else if (use_xrepel .and. nxrep.ne.0) then + write (iout,190) nxrep + 190 format (' Repulsion Sites',18x,i15) end if if (use_disp .and. ndisp.ne.0) then - write (iout,190) ndisp - 190 format (' Dispersion Sites',17x,i15) + write (iout,200) ndisp + 200 format (' Dispersion Sites',17x,i15) end if if (use_charge .and. nion.ne.0) then - write (iout,200) nion - 200 format (' Atomic Partial Charges',11x,i15) + write (iout,210) nion + 210 format (' Atomic Partial Charges',11x,i15) end if if (use_dipole .and. ndipole.ne.0) then - write (iout,210) ndipole - 210 format (' Bond Dipole Moments',14x,i15) + write (iout,220) ndipole + 220 format (' Bond Dipole Moments',14x,i15) end if if (use_mpole .and. npole.ne.0) then - write (iout,220) npole - 220 format (' Atomic Multipoles',16x,i15) + write (iout,230) npole + 230 format (' Atomic Multipoles',16x,i15) end if if (use_chgpen .and. ncp.ne.0) then - write (iout,230) ncp - 230 format (' Charge Penetration',15x,i15) + write (iout,240) ncp + 240 format (' Charge Penetration',15x,i15) end if if (use_polar .and. npolar.ne.0) then - write (iout,240) npolar - 240 format (' Polarizable Sites',16x,i15) + write (iout,250) npolar + 250 format (' Polarizable Sites',16x,i15) end if if (use_chgtrn .and. nct.ne.0) then - write (iout,250) nct - 250 format (' Charge Transfer Sites',12x,i15) + write (iout,260) nct + 260 format (' Charge Transfer Sites',12x,i15) end if if (use_chgflx .and. nbflx.ne.0) then - write (iout,260) nbflx - 260 format (' Bond Charge Flux',17x,i15) + write (iout,270) nbflx + 270 format (' Bond Charge Flux',17x,i15) end if if (use_chgflx .and. naflx.ne.0) then - write (iout,270) naflx - 270 format (' Angle Charge Flux',16x,i15) + write (iout,280) naflx + 280 format (' Angle Charge Flux',16x,i15) end if if (use_orbit .and. norbit.ne.0) then - write (iout,280) norbit - 280 format (' Pisystem Atoms',19x,i15) + write (iout,290) norbit + 290 format (' Pisystem Atoms',19x,i15) end if if (use_orbit .and. nbpi.ne.0) then - write (iout,290) nbpi - 290 format (' Conjugated Pi-Bonds',14x,i15) + write (iout,300) nbpi + 300 format (' Conjugated Pi-Bonds',14x,i15) end if c c parameters used for molecular mechanics atom types @@ -1389,15 +1398,15 @@ subroutine paramyze (active) if (active(i)) then if (header) then header = .false. - write (iout,300) - 300 format (/,' Atom Definition Parameters :', + write (iout,310) + 310 format (/,' Atom Definition Parameters :', & //,3x,'Atom',2x,'Symbol',2x,'Type', & 2x,'Class',2x,'Atomic',3x,'Mass', & 2x,'Valence',2x,'Description',/) end if - write (iout,310) i,name(i),type(i),class(i),atomic(i), + write (iout,320) i,name(i),type(i),class(i),atomic(i), & mass(i),valence(i),story(i) - 310 format (i6,5x,a3,2i7,i6,f10.3,i5,5x,a24) + 320 format (i6,5x,a3,2i7,i6,f10.3,i5,5x,a24) end if end do c @@ -1411,12 +1420,12 @@ subroutine paramyze (active) if (active(ia) .or. active(ib)) then if (header) then header = .false. - write (iout,320) - 320 format (/,' Bond Stretching Parameters :', + write (iout,330) + 330 format (/,' Bond Stretching Parameters :', & //,10x,'Atom Numbers',25x,'KS',7x,'Bond',/) end if - write (iout,330) i,ia,ib,bk(i),bl(i) - 330 format (i6,3x,2i6,19x,f10.3,f10.4) + write (iout,340) i,ia,ib,bk(i),bl(i) + 340 format (i6,3x,2i6,19x,f10.3,f10.4) end if end do end if @@ -1432,23 +1441,23 @@ subroutine paramyze (active) if (active(ia) .or. active(ib) .or. active(ic)) then if (header) then header = .false. - write (iout,340) - 340 format (/,' Angle Bending Parameters :', + write (iout,350) + 350 format (/,' Angle Bending Parameters :', & //,13x,'Atom Numbers',22x,'KB', & 6x,'Angle',3x,'Fold',4x,'Type',/) end if if (angtyp(i) .eq. 'HARMONIC') then - write (iout,350) i,ia,ib,ic,ak(i),anat(i) - 350 format (i6,3x,3i6,13x,2f10.3) - else if (angtyp(i) .eq. 'IN-PLANE') then write (iout,360) i,ia,ib,ic,ak(i),anat(i) - 360 format (i6,3x,3i6,13x,2f10.3,9x,'In-Plane') - else if (angtyp(i) .eq. 'LINEAR') then + 360 format (i6,3x,3i6,13x,2f10.3) + else if (angtyp(i) .eq. 'IN-PLANE') then write (iout,370) i,ia,ib,ic,ak(i),anat(i) - 370 format (i6,3x,3i6,13x,2f10.3,9x,'Linear') + 370 format (i6,3x,3i6,13x,2f10.3,9x,'In-Plane') + else if (angtyp(i) .eq. 'LINEAR') then + write (iout,380) i,ia,ib,ic,ak(i),anat(i) + 380 format (i6,3x,3i6,13x,2f10.3,9x,'Linear') else if (angtyp(i) .eq. 'FOURIER ') then - write (iout,380) i,ia,ib,ic,ak(i),anat(i),afld(i) - 380 format (i6,3x,3i6,13x,2f10.3,f7.1,2x,'Fourier') + write (iout,390) i,ia,ib,ic,ak(i),anat(i),afld(i) + 390 format (i6,3x,3i6,13x,2f10.3,f7.1,2x,'Fourier') end if end if end do @@ -1466,8 +1475,8 @@ subroutine paramyze (active) if (active(ia) .or. active(ib) .or. active(ic)) then if (header) then header = .false. - write (iout,390) - 390 format (/,' Stretch-Bend Parameters :', + write (iout,400) + 400 format (/,' Stretch-Bend Parameters :', & //,13x,'Atom Numbers',8x,'KSB 1',5x,'KSB 2', & 6x,'Angle',3x,'Bond 1',3x,'Bond 2',/) end if @@ -1475,9 +1484,9 @@ subroutine paramyze (active) blc = 0.0d0 if (isb(2,i) .ne. 0) bla = bl(isb(2,i)) if (isb(3,i) .ne. 0) blc = bl(isb(3,i)) - write (iout,400) i,ia,ib,ic,sbk(1,i),sbk(2,i), + write (iout,410) i,ia,ib,ic,sbk(1,i),sbk(2,i), & anat(k),bla,blc - 400 format (i6,3x,3i6,1x,2f10.3,2x,f9.3,2f9.4) + 410 format (i6,3x,3i6,1x,2f10.3,2x,f9.3,2f9.4) end if end do end if @@ -1493,13 +1502,13 @@ subroutine paramyze (active) if (active(ia) .or. active(ic)) then if (header) then header = .false. - write (iout,410) - 410 format (/,' Urey-Bradley Parameters :', + write (iout,420) + 420 format (/,' Urey-Bradley Parameters :', & //,13x,'Atom Numbers',21x,'KUB', & 4x,'Distance',/) end if - write (iout,420) i,ia,ib,ic,uk(i),ul(i) - 420 format (i6,3x,3i6,13x,f10.3,f10.4) + write (iout,430) i,ia,ib,ic,uk(i),ul(i) + 430 format (i6,3x,3i6,13x,f10.3,f10.4) end if end do end if @@ -1518,12 +1527,12 @@ subroutine paramyze (active) & active(ic) .or. active(id)) then if (header) then header = .false. - write (iout,430) - 430 format (/,' Out-of-Plane Bend Parameters :', + write (iout,440) + 440 format (/,' Out-of-Plane Bend Parameters :', & //,17x,'Atom Numbers',19x,'KOPB',/) end if - write (iout,440) i,id,ib,ia,ic,opbk(i) - 440 format (i6,3x,4i6,9x,f10.3) + write (iout,450) i,id,ib,ia,ic,opbk(i) + 450 format (i6,3x,4i6,9x,f10.3) end if end do end if @@ -1541,12 +1550,12 @@ subroutine paramyze (active) & active(ic) .or. active(id)) then if (header) then header = .false. - write (iout,450) - 450 format (/,' Out-of-Plane Distance Parameters :', + write (iout,460) + 460 format (/,' Out-of-Plane Distance Parameters :', & //,17x,'Atom Numbers',19x,'KOPD',/) end if - write (iout,460) i,ia,ib,ic,id,opdk(i) - 460 format (i6,3x,4i6,9x,f10.3) + write (iout,470) i,ia,ib,ic,id,opdk(i) + 470 format (i6,3x,4i6,9x,f10.3) end if end do end if @@ -1564,13 +1573,13 @@ subroutine paramyze (active) & active(ic) .or. active(id)) then if (header) then header = .false. - write (iout,470) - 470 format (/,' Improper Dihedral Parameters :', + write (iout,480) + 480 format (/,' Improper Dihedral Parameters :', & //,17x,'Atom Numbers',19x,'KID', & 4x,'Dihedral',/) end if - write (iout,480) i,ia,ib,ic,id,kprop(i),vprop(i) - 480 format (i6,3x,4i6,9x,2f10.4) + write (iout,490) i,ia,ib,ic,id,kprop(i),vprop(i) + 490 format (i6,3x,4i6,9x,2f10.4) end if end do end if @@ -1588,8 +1597,8 @@ subroutine paramyze (active) & active(ic) .or. active(id)) then if (header) then header = .false. - write (iout,490) - 490 format (/,' Improper Torsion Parameters :', + write (iout,500) + 500 format (/,' Improper Torsion Parameters :', & //,17x,'Atom Numbers',11x, & 'Amplitude, Phase and Periodicity',/) end if @@ -1613,20 +1622,20 @@ subroutine paramyze (active) phase(j) = itors3(2,i) end if if (j .eq. 0) then - write (iout,500) i,ia,ib,ic,id - 500 format (i6,3x,4i6) + write (iout,510) i,ia,ib,ic,id + 510 format (i6,3x,4i6) else if (j .eq. 1) then - write (iout,510) i,ia,ib,ic,id, + write (iout,520) i,ia,ib,ic,id, & ampli(1),phase(1),fold(1) - 510 format (i6,3x,4i6,10x,f10.3,f8.1,i4) + 520 format (i6,3x,4i6,10x,f10.3,f8.1,i4) else if (j .eq. 2) then - write (iout,520) i,ia,ib,ic,id,(ampli(k), + write (iout,530) i,ia,ib,ic,id,(ampli(k), & phase(k),fold(k),k=1,j) - 520 format (i6,3x,4i6,2x,2(f10.3,f6.1,i4)) + 530 format (i6,3x,4i6,2x,2(f10.3,f6.1,i4)) else - write (iout,530) i,ia,ib,ic,id,(ampli(k), + write (iout,540) i,ia,ib,ic,id,(ampli(k), & nint(phase(k)),fold(k),k=1,j) - 530 format (i6,3x,4i6,4x,3(f8.3,i4,'/',i1)) + 540 format (i6,3x,4i6,4x,3(f8.3,i4,'/',i1)) end if end if end do @@ -1645,8 +1654,8 @@ subroutine paramyze (active) & active(ic) .or. active(id)) then if (header) then header = .false. - write (iout,540) - 540 format (/,' Torsional Angle Parameters :', + write (iout,550) + 550 format (/,' Torsional Angle Parameters :', & //,17x,'Atom Numbers',11x, & 'Amplitude, Phase and Periodicity',/) end if @@ -1688,12 +1697,12 @@ subroutine paramyze (active) phase(j) = tors6(2,i) end if if (j .eq. 0) then - write (iout,550) i,ia,ib,ic,id - 550 format (i6,3x,4i6) + write (iout,560) i,ia,ib,ic,id + 560 format (i6,3x,4i6) else - write (iout,560) i,ia,ib,ic,id,(ampli(k), + write (iout,570) i,ia,ib,ic,id,(ampli(k), & nint(phase(k)),fold(k),k=1,j) - 560 format (i6,3x,4i6,4x,6(f8.3,i4,'/',i1)) + 570 format (i6,3x,4i6,4x,6(f8.3,i4,'/',i1)) end if end if end do @@ -1714,12 +1723,12 @@ subroutine paramyze (active) & active(id) .or. active(ie) .or. active(ig)) then if (header) then header = .false. - write (iout,570) - 570 format (/,' Pi-Orbital Torsion Parameters :', + write (iout,580) + 580 format (/,' Pi-Orbital Torsion Parameters :', & //,10x,'Atom Numbers',19x,'Amplitude',/) end if - write (iout,580) i,ic,id,kpit(i) - 580 format (i6,3x,2i6,19x,f10.4) + write (iout,590) i,ic,id,kpit(i) + 590 format (i6,3x,2i6,19x,f10.4) end if end do end if @@ -1738,8 +1747,8 @@ subroutine paramyze (active) & active(ic) .or. active(id)) then if (header) then header = .false. - write (iout,590) - 590 format (/,' Stretch-Torsion Parameters :', + write (iout,600) + 600 format (/,' Stretch-Torsion Parameters :', & //,17x,'Atom Numbers',10x,'Bond', & 5x,'Amplitude and Phase (1-3 Fold)',/) end if @@ -1761,11 +1770,11 @@ subroutine paramyze (active) phase(8) = tors2(2,k) ampli(9) = kst(9,i) phase(9) = tors3(2,k) - write (iout,600) i,ia,ib,ic,id, + write (iout,610) i,ia,ib,ic,id, & '1st',(ampli(k),nint(phase(k)),k=1,3), & '2nd',(ampli(k),nint(phase(k)),k=4,6), & '3rd',(ampli(k),nint(phase(k)),k=7,9) - 600 format (i6,3x,4i6,7x,a3,3x,3(f7.3,i4), + 610 format (i6,3x,4i6,7x,a3,3x,3(f7.3,i4), & /,40x,a3,3x,3(f7.3,i4), & /,40x,a3,3x,3(f7.3,i4)) end if @@ -1786,8 +1795,8 @@ subroutine paramyze (active) & active(ic) .or. active(id)) then if (header) then header = .false. - write (iout,610) - 610 format (/,' Angle-Torsion Parameters :', + write (iout,620) + 620 format (/,' Angle-Torsion Parameters :', & //,17x,'Atom Numbers',10x,'Angle', & 4x,'Amplitude and Phase (1-3 Fold)',/) end if @@ -1803,10 +1812,10 @@ subroutine paramyze (active) phase(5) = tors2(2,k) ampli(6) = kant(6,i) phase(6) = tors3(2,k) - write (iout,620) i,ia,ib,ic,id, + write (iout,630) i,ia,ib,ic,id, & '1st',(ampli(k),nint(phase(k)),k=1,3), & '2nd',(ampli(k),nint(phase(k)),k=4,6) - 620 format (i6,3x,4i6,7x,a3,3x,3(f7.3,i4), + 630 format (i6,3x,4i6,7x,a3,3x,3(f7.3,i4), & /,40x,a3,3x,3(f7.3,i4)) end if end do @@ -1827,13 +1836,13 @@ subroutine paramyze (active) & active(id) .or. active(ie)) then if (header) then header = .false. - write (iout,630) - 630 format (/,' Torsion-Torsion Parameters :', + write (iout,640) + 640 format (/,' Torsion-Torsion Parameters :', & //,20x,'Atom Numbers',18x,'Spline Grid',/) end if j = itt(2,i) - write (iout,640) i,ia,ib,ic,id,ie,tnx(j),tny(j) - 640 format (i6,3x,5i6,10x,2i6) + write (iout,650) i,ia,ib,ic,id,ie,tnx(j),tny(j) + 650 format (i6,3x,5i6,10x,2i6) end if end do end if @@ -1848,8 +1857,8 @@ subroutine paramyze (active) k = k + 1 if (header) then header = .false. - write (iout,650) - 650 format (/,' Van der Waals Parameters :', + write (iout,660) + 660 format (/,' Van der Waals Parameters :', & //,10x,'Atom Number',7x,'Size', & 3x,'Epsilon',3x,'Size 1-4', & 3x,'Eps 1-4',3x,'Reduction',/) @@ -1861,11 +1870,11 @@ subroutine paramyze (active) if (radsiz .eq. 'DIAMETER') radj = 2.0d0 * radj if (radtyp .eq. 'SIGMA') radj = radj / twosix if (reduct(j) .eq. 0.0d0) then - write (iout,660) k,i,radj,eps(j) - 660 format (i6,3x,i6,7x,2f10.4) + write (iout,670) k,i,radj,eps(j) + 670 format (i6,3x,i6,7x,2f10.4) else - write (iout,670) k,i,radj,eps(j),reduct(j) - 670 format (i6,3x,i6,7x,2f10.4,22x,f10.4) + write (iout,680) k,i,radj,eps(j),reduct(j) + 680 format (i6,3x,i6,7x,2f10.4,22x,f10.4) end if else radj = rad(j) @@ -1879,12 +1888,12 @@ subroutine paramyze (active) rad4j = rad4j / twosix end if if (reduct(j) .eq. 0.0d0) then - write (iout,680) k,i,radj,eps(j),rad4j,eps4(j) - 680 format (i6,3x,i6,7x,2f10.4,1x,2f10.4) + write (iout,690) k,i,radj,eps(j),rad4j,eps4(j) + 690 format (i6,3x,i6,7x,2f10.4,1x,2f10.4) else - write (iout,690) k,i,radj,eps(j),rad4j, + write (iout,700) k,i,radj,eps(j),rad4j, & eps4(j),reduct(j) - 690 format (i6,3x,i6,7x,2f10.4,1x,2f10.4,1x,f10.4) + 700 format (i6,3x,i6,7x,2f10.4,1x,2f10.4,1x,f10.4) end if end if end if @@ -1900,13 +1909,32 @@ subroutine paramyze (active) if (active(ia)) then if (header) then header = .false. - write (iout,700) - 700 format (/,' Pauli Repulsion Parameters :', + write (iout,710) + 710 format (/,' Pauli Repulsion Parameters :', & //,10x,'Atom Number',25x,'Size',6x,'Damp', & 3x,'Valence',/) end if - write (iout,710) i,ia,sizpr(i),dmppr(i),elepr(i) - 710 format (i6,3x,i6,25x,2f10.4,f10.3) + write (iout,720) i,ia,sizpr(i),dmppr(i),elepr(i) + 720 format (i6,3x,i6,25x,2f10.4,f10.3) + end if + end do +c +c parameters used for exchange repulsion interactions +c + else if (use_xrepel) then + header = .true. + do i = 1, nxrep + ia = ixrep(i) + if (active(ia)) then + if (header) then + header = .false. + write (iout,730) + 730 format (/,' Exchange Repulsion Parameters :', + & //,10x,'Atom Number',23x,'Charge',6x,'Damp', + & 2x,'PS-Ratio',/) + end if + write (iout,740) i,ia,zpxr(i),dmppxr(i),crpxr(i) + 740 format (i6,3x,i6,25x,2f10.4,f10.3) end if end do end if @@ -1920,12 +1948,12 @@ subroutine paramyze (active) if (active(ia)) then if (header) then header = .false. - write (iout,720) - 720 format (/,' Damped Dispersion Parameters :', + write (iout,750) + 750 format (/,' Damped Dispersion Parameters :', & //,10x,'Atom Number',26x,'C6',7x,'Damp',/) end if - write (iout,730) i,ia,csix(i),adisp(i) - 730 format (i6,3x,i6,25x,f10.3,f10.4) + write (iout,760) i,ia,csix(i),adisp(i) + 760 format (i6,3x,i6,25x,f10.3,f10.4) end if end do end if @@ -1941,18 +1969,18 @@ subroutine paramyze (active) if (active(ia) .or. active(ic)) then if (header) then header = .false. - write (iout,740) - 740 format (/,' Atomic Partial Charge Parameters :', + write (iout,770) + 770 format (/,' Atomic Partial Charge Parameters :', & /,45x,'Neighbor',3x,'Cutoff', & /,10x,'Atom Number',13x,'Charge', & 7x,'Site',6x,'Site',/) end if if (ia.eq.ib .and. ia.eq.ic) then - write (iout,750) i,ia,pchg(ia) - 750 format (i6,3x,i6,15x,f10.4) + write (iout,780) i,ia,pchg(ia) + 780 format (i6,3x,i6,15x,f10.4) else - write (iout,760) i,ia,pchg(ia),ib,ic - 760 format (i6,3x,i6,15x,f10.4,5x,i6,4x,i6) + write (iout,790) i,ia,pchg(ia),ib,ic + 790 format (i6,3x,i6,15x,f10.4,5x,i6,4x,i6) end if end if end do @@ -1968,13 +1996,13 @@ subroutine paramyze (active) if (active(ia) .or. active(ib)) then if (header) then header = .false. - write (iout,770) - 770 format (/,' Bond Dipole Moment Parameters :', + write (iout,800) + 800 format (/,' Bond Dipole Moment Parameters :', & //,10x,'Atom Numbers',22x,'Dipole', & 3x,'Position',/) end if - write (iout,780) i,ia,ib,bdpl(i),sdpl(i) - 780 format (i6,3x,2i6,19x,f10.4,f10.3) + write (iout,810) i,ia,ib,bdpl(i),sdpl(i) + 810 format (i6,3x,2i6,19x,f10.4,f10.3) end if end do end if @@ -1988,8 +2016,8 @@ subroutine paramyze (active) if (active(ia)) then if (header) then header = .false. - write (iout,790) - 790 format (/,' Atomic Multipole Parameters :', + write (iout,820) + 820 format (/,' Atomic Multipole Parameters :', & //,11x,'Atom',3x,'Z-Axis',1x,'X-Axis', & 1x,'Y-Axis',2x, & 'Frame',11x,'Multipole Moments',/) @@ -2006,28 +2034,28 @@ subroutine paramyze (active) mpl(j) = 3.0d0 * pole(j,ia) / bohr**2 end do if (izaxe .eq. 0) then - write (iout,800) i,ia,polaxe(i), + write (iout,830) i,ia,polaxe(i), & (mpl(j),j=1,5),mpl(8),mpl(9), & (mpl(j),j=11,13) - 800 format (i6,3x,i6,25x,a8,2x,f9.5,/,50x,3f9.5, + 830 format (i6,3x,i6,25x,a8,2x,f9.5,/,50x,3f9.5, & /,50x,f9.5,/,50x,2f9.5,/,50x,3f9.5) else if (ixaxe .eq. 0) then - write (iout,810) i,ia,izaxe,polaxe(i), + write (iout,840) i,ia,izaxe,polaxe(i), & (mpl(j),j=1,5),mpl(8),mpl(9), & (mpl(j),j=11,13) - 810 format (i6,3x,i6,1x,i7,17x,a8,2x,f9.5,/,50x,3f9.5, + 840 format (i6,3x,i6,1x,i7,17x,a8,2x,f9.5,/,50x,3f9.5, & /,50x,f9.5,/,50x,2f9.5,/,50x,3f9.5) else if (iyaxe .eq. 0) then - write (iout,820) i,ia,izaxe,ixaxe,polaxe(i), + write (iout,850) i,ia,izaxe,ixaxe,polaxe(i), & (mpl(j),j=1,5),mpl(8),mpl(9), & (mpl(j),j=11,13) - 820 format (i6,3x,i6,1x,2i7,10x,a8,2x,f9.5,/,50x,3f9.5, + 850 format (i6,3x,i6,1x,2i7,10x,a8,2x,f9.5,/,50x,3f9.5, & /,50x,f9.5,/,50x,2f9.5,/,50x,3f9.5) else - write (iout,830) i,ia,izaxe,ixaxe,iyaxe,polaxe(i), + write (iout,860) i,ia,izaxe,ixaxe,iyaxe,polaxe(i), & (mpl(j),j=1,5),mpl(8),mpl(9), & (mpl(j),j=11,13) - 830 format (i6,3x,i6,1x,3i7,3x,a8,2x,f9.5,/,50x,3f9.5, + 860 format (i6,3x,i6,1x,3i7,3x,a8,2x,f9.5,/,50x,3f9.5, & /,50x,f9.5,/,50x,2f9.5,/,50x,3f9.5) end if end if @@ -2043,13 +2071,13 @@ subroutine paramyze (active) if (active(ia)) then if (header) then header = .false. - write (iout,840) - 840 format (/,' Charge Penetration Parameters :', + write (iout,870) + 870 format (/,' Charge Penetration Parameters :', & //,10x,'Atom Number',25x,'Core',3x,'Valence', & 6x,'Damp',/) end if - write (iout,850) i,ia,pcore(ia),pval(ia),palpha(ia) - 850 format (i6,3x,i6,25x,2f10.3,f10.4) + write (iout,880) i,ia,pcore(ia),pval(ia),palpha(ia) + 880 format (i6,3x,i6,25x,2f10.3,f10.4) end if end do end if @@ -2064,34 +2092,34 @@ subroutine paramyze (active) if (header) then header = .false. if (use_tholed) then - write (iout,860) - 860 format (/,' Dipole Polarizability Parameters :', + write (iout,890) + 890 format (/,' Dipole Polarizability Parameters :', & //,10x,'Atom Number',5x,'Alpha',4x,'Thole', & 3x,'TholeD',6x,'Polarization Group',/) else if (use_thole) then - write (iout,870) - 870 format (/,' Dipole Polarizability Parameters :', + write (iout,900) + 900 format (/,' Dipole Polarizability Parameters :', & //,10x,'Atom Number',5x,'Alpha',4x,'Thole', & 6x,'Polarization Group',/) else - write (iout,880) - 880 format (/,' Dipole Polarizability Parameters :', + write (iout,910) + 910 format (/,' Dipole Polarizability Parameters :', & //,10x,'Atom Number',5x,'Alpha', & 6x,'Polarization Group',/) end if end if if (use_tholed) then - write (iout,890) i,ia,polarity(ia),thole(ia), + write (iout,920) i,ia,polarity(ia),thole(ia), & tholed(ia),(ip11(j,ia),j=1,np11(ia)) - 890 format (i6,3x,i6,6x,f10.4,2f9.3,3x,120i6) + 920 format (i6,3x,i6,6x,f10.4,2f9.3,3x,120i6) else if (use_thole) then - write (iout,900) i,ia,polarity(ia),thole(ia), + write (iout,930) i,ia,polarity(ia),thole(ia), & (ip11(j,ia),j=1,np11(ia)) - 900 format (i6,3x,i6,6x,f10.4,f9.3,3x,120i6) + 930 format (i6,3x,i6,6x,f10.4,f9.3,3x,120i6) else - write (iout,910) i,ia,polarity(ia), + write (iout,940) i,ia,polarity(ia), & (ip11(j,ia),j=1,np11(ia)) - 910 format (i6,3x,i6,6x,f10.4,3x,120i6) + 940 format (i6,3x,i6,6x,f10.4,3x,120i6) end if end if end do @@ -2106,13 +2134,13 @@ subroutine paramyze (active) if (active(ia)) then if (header) then header = .false. - write (iout,920) - 920 format (/,' Charge Transfer Parameters :', + write (iout,950) + 950 format (/,' Charge Transfer Parameters :', & //,10x,'Atom Number',23x,'Charge', & 6x,'Damp',/) end if - write (iout,930) i,ia,chgct(ia),dmpct(ia) - 930 format (i6,3x,i6,25x,f10.3,f10.4) + write (iout,960) i,ia,chgct(ia),dmpct(ia) + 960 format (i6,3x,i6,25x,f10.3,f10.4) end if end do end if @@ -2129,13 +2157,13 @@ subroutine paramyze (active) if (active(ia) .or. active(ib)) then if (header) then header = .false. - write (iout,940) - 940 format (/,' Bond Charge Flux Parameters :', + write (iout,970) + 970 format (/,' Bond Charge Flux Parameters :', & //,10x,'Atom Numbers',24x,'KCFB',/) end if k = k + 1 - write (iout,950) k,ia,ib,bflx(i) - 950 format (i6,3x,2i6,19x,f10.4) + write (iout,980) k,ia,ib,bflx(i) + 980 format (i6,3x,2i6,19x,f10.4) end if end if end do @@ -2155,15 +2183,15 @@ subroutine paramyze (active) if (active(ia) .or. active(ib) .or. active(ic)) then if (header) then header = .false. - write (iout,960) - 960 format (/,' Angle Charge Flux Parameters :', + write (iout,990) + 990 format (/,' Angle Charge Flux Parameters :', & //,13x,'Atom Numbers',17x,'KACF1', & 5x,'KACF2',5x,'KBCF1',5x,'KBCF2',/) end if k = k + 1 - write (iout,970) k,ia,ib,ic,aflx(1,i),aflx(2,i), + write (iout,1000) k,ia,ib,ic,aflx(1,i),aflx(2,i), & abflx(1,i),abflx(2,i) - 970 format (i6,3x,3i6,10x,4f10.4) + 1000 format (i6,3x,3i6,10x,4f10.4) end if end if end do @@ -2179,13 +2207,13 @@ subroutine paramyze (active) k = k + 1 if (header) then header = .false. - write (iout,980) - 980 format (/,' Implicit Solvation Parameters :', + write (iout,1010) + 1010 format (/,' Implicit Solvation Parameters :', & //,10x,'Atom Number',13x,'Radius', & 3x,'ASP Value',/) end if - write (iout,990) k,i,rsolv(i),asolv(i) - 990 format (i6,3x,i6,15x,2f10.4) + write (iout,1020) k,i,rsolv(i),asolv(i) + 1020 format (i6,3x,i6,15x,2f10.4) end if end do end if @@ -2199,13 +2227,13 @@ subroutine paramyze (active) j = class(ia) if (header) then header = .false. - write (iout,1000) - 1000 format (/,' Conjugated Pi-Atom Parameters :', + write (iout,1030) + 1030 format (/,' Conjugated Pi-Atom Parameters :', & //,10x,'Atom Number',14x,'Nelect', & 6x,'Ionize',4x,'Repulsion',/) end if - write (iout,1010) i,ia,electron(j),ionize(j),repulse(j) - 1010 format (i6,3x,i6,17x,f8.1,3x,f10.4,2x,f10.4) + write (iout,1040) i,ia,electron(j),ionize(j),repulse(j) + 1040 format (i6,3x,i6,17x,f8.1,3x,f10.4,2x,f10.4) end do end if c @@ -2218,13 +2246,13 @@ subroutine paramyze (active) ib = ibpi(3,i) if (header) then header = .false. - write (iout,1020) - 1020 format (/,' Conjugated Pi-Bond Parameters :', + write (iout,1050) + 1050 format (/,' Conjugated Pi-Bond Parameters :', & //,10x,'Atom Numbers',21x,'K Slope', & 3x,'L Slope',/) end if - write (iout,1030) i,ia,ib,kslope(i),lslope(i) - 1030 format (i6,3x,2i6,19x,2f10.4) + write (iout,1060) i,ia,ib,kslope(i),lslope(i) + 1060 format (i6,3x,2i6,19x,2f10.4) end do end if return diff --git a/source/krepel.f b/source/krepel.f index 7f148759e..c5e8f1393 100644 --- a/source/krepel.f +++ b/source/krepel.f @@ -138,7 +138,7 @@ subroutine krepel write (iout,50) 50 format (/,' Additional Pauli Repulsion Values', & ' for Specific Atoms :', - & //,8x,'Atom',17x,'Size',12x,'Damp', + & //,8x,'Atom',18x,'Size',11x,'Damp', & 8x,'Valence'/) end if if (.not. silent) then diff --git a/source/kxrepel.f b/source/kxrepel.f index dc3444dfc..55c8e18ed 100644 --- a/source/kxrepel.f +++ b/source/kxrepel.f @@ -63,8 +63,8 @@ subroutine kxrepel write (iout,20) 20 format (/,' Additional Exchange Repulsion', & ' Parameters :', - & //,5x,'Atom Class',15x,'Core',11x,'Damp', - & 6x,'P/S Coeff'/) + & //,5x,'Atom Class',13x,'Charge',11x,'Damp', + & 7x,'PS-Ratio'/) end if if (k .le. maxclass) then pxrz(k) = zpr @@ -141,8 +141,8 @@ subroutine kxrepel write (iout,50) 50 format (/,' Additional Exchange Repulsion Values', & ' for Specific Atoms :', - & //,8x,'Atom',15x,'Core',11x,'Damp', - & 6x,'P/S Coeff'/) + & //,8x,'Atom',16x,'Charge',11x,'Damp', + & 7x,'PS-Ratio'/) end if if (.not. silent) then write (iout,60) ia,zpr,apr,cpr