These Fortran kernels are no longer used in the code.
Based on benchmarks, we will decide whether to provide
new generated Fortran kernels (possibly for ia64,
Power and/or BlueGene architectures) before the final
Gromacs 4.6 release. I would prefer to keep the Fortran
detection code in CMake until we make that call.
Change-Id: Ia73fbfe968983289bba8896f8b84fdfb262d9105
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel010
-C Coulomb interaction: Not calculated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel010(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 33 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel010nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel010nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 19 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 4 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel020
-C Coulomb interaction: Not calculated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel020(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 66 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel020nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel020nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 53 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 4 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel030
-C Coulomb interaction: Not calculated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel030(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 59 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel030nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel030nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 38 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 4 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel100
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel100(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 32 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel100nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel100nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 iq
- real*8 qq,vcoul,vctot
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Inner loop uses 21 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 5 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel101
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel101(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 95 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel101nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel101nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Inner loop uses 62 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel102
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel102(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 279 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel102nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel102nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Inner loop uses 180 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel103
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel103(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 95 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel103nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel103nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
-
-C Inner loop uses 62 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel104
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel104(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 279 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel104nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel104nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
-
-C Inner loop uses 180 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel110
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel110(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (vcoul+12.0*Vvdw12-6.0*Vvdw6)
- & *rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 43 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel110nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel110nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 29 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel111
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel111(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (vcoul+12.0*Vvdw12-6.0*Vvdw6)
- & *rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 106 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel111nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel111nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Inner loop uses 70 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel112
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel112(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (vcoul+12.0*Vvdw12-6.0*Vvdw6)
- & *rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 290 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel112nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel112nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Inner loop uses 188 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel113
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel113(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 128 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel113nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel113nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
-
-C Inner loop uses 81 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel114
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel114(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 312 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel114nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel114nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
-
-C Inner loop uses 199 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel120
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel120(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (vcoul+br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 69 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel120nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel120nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 56 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel121
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel121(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (vcoul+br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 132 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel121nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel121nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Inner loop uses 97 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel122
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel122(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (vcoul+br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 316 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel122nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel122nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Inner loop uses 215 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel123
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel123(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 161 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel123nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel123nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
-
-C Inner loop uses 115 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel124
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel124(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 345 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel124nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel124nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
-
-C Inner loop uses 233 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel130
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel130(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (vcoul)*rinvsq-((fijD+fijR)
- & *tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 64 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel130nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel130nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 41 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel131
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel131(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (vcoul)*rinvsq-((fijD+fijR)
- & *tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 127 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel131nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel131nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Inner loop uses 82 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel132
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel132(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (vcoul)*rinvsq-((fijD+fijR)
- & *tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 311 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel132nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel132nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Inner loop uses 200 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel133
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel133(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 154 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel133nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel133nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
-
-C Inner loop uses 100 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel134
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel134(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 338 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel134nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel134nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
-
-C Inner loop uses 218 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel200
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel200(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 38 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel200nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel200nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 iq
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 24 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 5 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel201
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel201(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 113 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel201nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel201nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 71 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel202
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel202(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv12-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv13-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 333 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel202nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel202nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 207 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel203
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel203(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv41-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 113 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel203nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel203nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 71 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel204
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel204(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv24-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv34-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv42-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv43-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv44-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 333 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel204nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel204nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- real*8 krsq
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 207 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel210
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel210(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+12.0*Vvdw12
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 49 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel210nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel210nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 32 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel211
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel211(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+12.0*Vvdw12
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 124 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel211nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel211nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 79 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel212
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel212(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+12.0*Vvdw12
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv12-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv13-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 344 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel212nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel212nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 215 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel213
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel213(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv41-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 146 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel213nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel213nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 90 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel214
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel214(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv24-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv34-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv42-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv43-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv44-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 366 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel214nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel214nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 226 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel220
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel220(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+br*Vvdwexp
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 75 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel220nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel220nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 59 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel221
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel221(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+br*Vvdwexp
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 150 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel221nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel221nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 106 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel222
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel222(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+br*Vvdwexp
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv12-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv13-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 370 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel222nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel222nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 242 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel223
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel223(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv41-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 179 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel223nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel223nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 124 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel224
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel224(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv24-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv34-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv42-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv43-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv44-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 399 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel224nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel224nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 krsq
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 260 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel230
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel230(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
- & -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 70 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel230nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel230nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 44 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel231
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel231(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
- & -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 145 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel231nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel231nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 91 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel232
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel232(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
- & -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv12-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv13-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 365 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel232nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel232nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 227 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel233
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel233(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv41-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 172 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel233nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel233nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 109 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel234
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel234(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijD,fijR
- real*8 krsq
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv24-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv34-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv42-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv43-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv44-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 392 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel234nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel234nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 krsq
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 245 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel300
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel300(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 iq
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 47 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel300nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel300nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 iq
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 31 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 5 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel301
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel301(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 140 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel301nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel301nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 92 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel302
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel302(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv12
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv13
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 414 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel302nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel302nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 270 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel303
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel303(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv41
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 140 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel303nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel303nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 92 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel304
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel304(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv24
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv34
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv42
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv43
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv44
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 414 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel304nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel304nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 270 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel310
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel310(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 60 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel310nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel310nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 39 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel311
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel311(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 153 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel311nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel311nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 100 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel312
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel312(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv12
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv13
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 427 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel312nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel312nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 278 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel313
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel313(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv41
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 173 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel313nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel313nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 111 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel314
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel314(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv24
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv34
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv42
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv43
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv44
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 447 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel314nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel314nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 289 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel320
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel320(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 86 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel320nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel320nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 66 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel321
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel321(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 179 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel321nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel321nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 127 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel322
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel322(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv12
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv13
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 453 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel322nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel322nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 305 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel323
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel323(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv41
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 206 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel323nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel323nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 145 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel324
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel324(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv24
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv34
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv42
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv43
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv44
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 480 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel324nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel324nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 323 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel330
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel330(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijC+fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 73 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel330nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel330nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 47 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel331
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel331(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijC+fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 166 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel331nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel331nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 qO,qH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 108 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel332
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel332(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijC+fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv12
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv13
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 440 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel332nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel332nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx12,dy12,dz12,rsq12,rinv12
- real*8 dx13,dy13,dz13,rsq13,rinv13
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 qO,qH,qqOO,qqOH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 286 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel333
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77dkernel333(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv41
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 199 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel333nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77dkernel333nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 jq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx21,dy21,dz21,rsq21,rinv21
- real*8 dx31,dy31,dz31,rsq31,rinv31
- real*8 dx41,dy41,dz41,rsq41,rinv41
- real*8 qH,qM
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 130 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel334
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77dkernel334(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 fijD,fijR
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*8 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*8 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*8 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*8 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv24
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv34
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv42
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv43
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv44
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 473 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel334nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77dkernel334nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 qq,vcoul,vctot
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 ix1,iy1,iz1
- real*8 ix2,iy2,iz2
- real*8 ix3,iy3,iz3
- real*8 ix4,iy4,iz4
- real*8 jx1,jy1,jz1
- real*8 jx2,jy2,jz2
- real*8 jx3,jy3,jz3
- real*8 jx4,jy4,jz4
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 dx22,dy22,dz22,rsq22,rinv22
- real*8 dx23,dy23,dz23,rsq23,rinv23
- real*8 dx24,dy24,dz24,rsq24,rinv24
- real*8 dx32,dy32,dz32,rsq32,rinv32
- real*8 dx33,dy33,dz33,rsq33,rinv33
- real*8 dx34,dy34,dz34,rsq34,rinv34
- real*8 dx42,dy42,dz42,rsq42,rinv42
- real*8 dx43,dy43,dz43,rsq43,rinv43
- real*8 dx44,dy44,dz44,rsq44,rinv44
- real*8 qH,qM,qqMM,qqMH,qqHH
- real*8 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 308 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel400
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel400(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 iq
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 isai,isaj,isaprod,gbscale,vgb
- real*8 dvdasum,dvdatmp,dvdaj,fgb
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- dvdasum = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- fscal = vcoul*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
-
-C Tabulated Generalized-Born interaction
- dvdaj = dvda(jnr)
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vgb = qq*VV
- fijC = qq*FF*gbscale
- dvdatmp = -0.5*(vgb+fijC*r)
- dvdasum = dvdasum + dvdatmp
- dvda(jnr) = dvdaj+dvdatmp*isaj*isaj
- vctot = vctot + vcoul
- fscal = -(fijC-fscal)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 54 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- dvda(ii) = dvda(ii) + dvdasum*isai*isai
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel400nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel400nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 iq
- real*8 qq,vcoul,vctot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 isai,isaj,isaprod,gbscale,vgb
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
-
-C Tabulated Generalized-Born interaction
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vgb = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 34 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 5 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel410
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel410(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 isai,isaj,isaprod,gbscale,vgb
- real*8 dvdasum,dvdatmp,dvdaj,fgb
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
- dvdasum = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- fscal = vcoul*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Tabulated Generalized-Born interaction
- dvdaj = dvda(jnr)
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vgb = qq*VV
- fijC = qq*FF*gbscale
- dvdatmp = -0.5*(vgb+fijC*r)
- dvdasum = dvdasum + dvdatmp
- dvda(jnr) = dvdaj+dvdatmp*isaj*isaj
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
- & -(fijC-fscal)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 67 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
- dvda(ii) = dvda(ii) + dvdasum*isai*isai
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 13 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel410nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel410nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 isai,isaj,isaprod,gbscale,vgb
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Tabulated Generalized-Born interaction
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vgb = qq*VV
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 42 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel420
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel420(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 isai,isaj,isaprod,gbscale,vgb
- real*8 dvdasum,dvdatmp,dvdaj,fgb
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
- dvdasum = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- fscal = vcoul*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Tabulated Generalized-Born interaction
- dvdaj = dvda(jnr)
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vgb = qq*VV
- fijC = qq*FF*gbscale
- dvdatmp = -0.5*(vgb+fijC*r)
- dvdasum = dvdasum + dvdatmp
- dvda(jnr) = dvdaj+dvdatmp*isaj*isaj
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
- & -(fijC-fscal)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 93 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
- dvda(ii) = dvda(ii) + dvdasum*isai*isai
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 13 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel420nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel420nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 rinvsq
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 rinvsix
- real*8 Vvdw6,Vvdwtot
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 isai,isaj,isaprod,gbscale,vgb
- real*8 Vvdwexp,br
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Tabulated Generalized-Born interaction
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vgb = qq*VV
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 69 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77dkernel430
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77dkernel430(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 fscal,tx,ty,tz
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 FF
- real*8 fijC
- real*8 fijD,fijR
- real*8 isai,isaj,isaprod,gbscale,vgb
- real*8 dvdasum,dvdatmp,dvdaj,fgb
- real*8 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
- dvdasum = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- fscal = vcoul*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Tabulated Generalized-Born interaction
- dvdaj = dvda(jnr)
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vgb = qq*VV
- fijC = qq*FF*gbscale
- dvdatmp = -0.5*(vgb+fijC*r)
- dvdasum = dvdasum + dvdatmp
- dvda(jnr) = dvdaj+dvdatmp*isaj*isaj
- vctot = vctot + vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale+fijC-fscal)
- & *rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 85 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
- dvda(ii) = dvda(ii) + dvdasum*isai*isai
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 13 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77dkernel430nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77dkernel430nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*8 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*8 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*8 Vvdw(*),tabscale,VFtab(*)
- real*8 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*8 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*8 shX,shY,shZ
- real*8 iq
- real*8 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*8 Vvdw6,Vvdwtot
- real*8 Vvdw12
- real*8 r,rt,eps,eps2
- integer*4 n0,nnn
- real*8 Y,F,Geps,Heps2,Fp,VV
- real*8 isai,isaj,isaprod,gbscale,vgb
- real*8 ix1,iy1,iz1
- real*8 jx1,jy1,jz1
- real*8 dx11,dy11,dz11,rsq11,rinv11
- real*8 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Tabulated Generalized-Born interaction
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vgb = qq*VV
- vctot = vctot + vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 54 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel010_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 010
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel010,F77DKERNEL010)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel010nf,F77DKERNEL010NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel010_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel010,F77DKERNEL010)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel010nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel010nf,F77DKERNEL010NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL010_F77D_H_
-#define _NBKERNEL010_F77D_H_
-
-/*! \file nb_kernel010_f77_double.h
- * \brief Nonbonded kernel 010 (LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 010 with forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel010_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-/*! \brief Nonbonded kernel 010 without forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel010nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL010_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel020_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 020
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel020,F77DKERNEL020)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel020nf,F77DKERNEL020NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel020_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel020,F77DKERNEL020)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel020nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel020nf,F77DKERNEL020NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL020_F77D_H_
-#define _NBKERNEL020_F77D_H_
-
-/*! \file nb_kernel020_f77_double.h
- * \brief Nonbonded kernel 020 (Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 020 with forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel020_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 020 without forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel020nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL020_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel030_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 030
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel030,F77DKERNEL030)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel030nf,F77DKERNEL030NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel030_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel030,F77DKERNEL030)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel030nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel030nf,F77DKERNEL030NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL030_F77D_H_
-#define _NBKERNEL030_F77D_H_
-
-/*! \file nb_kernel030_f77_double.h
- * \brief Nonbonded kernel 030 (Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 030 with forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel030_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 030 without forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel030nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL030_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel100_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 100
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel100,F77DKERNEL100)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel100nf,F77DKERNEL100NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel100_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel100,F77DKERNEL100)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel100nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel100nf,F77DKERNEL100NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL100_F77D_H_
-#define _NBKERNEL100_F77D_H_
-
-/*! \file nb_kernel100_f77_double.h
- * \brief Nonbonded kernel 100 (Coul)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 100 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel100_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 100 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel100nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL100_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel101_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 101
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel101,F77DKERNEL101)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel101nf,F77DKERNEL101NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel101_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel101,F77DKERNEL101)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel101nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel101nf,F77DKERNEL101NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL101_F77D_H_
-#define _NBKERNEL101_F77D_H_
-
-/*! \file nb_kernel101_f77_double.h
- * \brief Nonbonded kernel 101 (Coul, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 101 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel101_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 101 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel101nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL101_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel102_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 102
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel102,F77DKERNEL102)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel102nf,F77DKERNEL102NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel102_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel102,F77DKERNEL102)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel102nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel102nf,F77DKERNEL102NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL102_F77D_H_
-#define _NBKERNEL102_F77D_H_
-
-/*! \file nb_kernel102_f77_double.h
- * \brief Nonbonded kernel 102 (Coul, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 102 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel102_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 102 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel102nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL102_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel103_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 103
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel103,F77DKERNEL103)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel103nf,F77DKERNEL103NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel103_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel103,F77DKERNEL103)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel103nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel103nf,F77DKERNEL103NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL103_F77D_H_
-#define _NBKERNEL103_F77D_H_
-
-/*! \file nb_kernel103_f77_double.h
- * \brief Nonbonded kernel 103 (Coul, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 103 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel103_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 103 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel103nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL103_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel104_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 104
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel104,F77DKERNEL104)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel104nf,F77DKERNEL104NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel104_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel104,F77DKERNEL104)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel104nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel104nf,F77DKERNEL104NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL104_F77D_H_
-#define _NBKERNEL104_F77D_H_
-
-/*! \file nb_kernel104_f77_double.h
- * \brief Nonbonded kernel 104 (Coul, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 104 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel104_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 104 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel104nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL104_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel110_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 110
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel110,F77DKERNEL110)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel110nf,F77DKERNEL110NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel110_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel110,F77DKERNEL110)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel110nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel110nf,F77DKERNEL110NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL110_F77D_H_
-#define _NBKERNEL110_F77D_H_
-
-/*! \file nb_kernel110_f77_double.h
- * \brief Nonbonded kernel 110 (Coul + LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 110 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel110_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 110 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel110nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL110_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel111_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 111
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel111,F77DKERNEL111)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel111nf,F77DKERNEL111NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel111_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel111,F77DKERNEL111)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel111nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel111nf,F77DKERNEL111NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL111_F77D_H_
-#define _NBKERNEL111_F77D_H_
-
-/*! \file nb_kernel111_f77_double.h
- * \brief Nonbonded kernel 111 (Coul + LJ, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 111 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel111_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 111 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel111nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL111_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel112_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 112
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel112,F77DKERNEL112)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel112nf,F77DKERNEL112NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel112_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel112,F77DKERNEL112)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel112nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel112nf,F77DKERNEL112NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL112_F77D_H_
-#define _NBKERNEL112_F77D_H_
-
-/*! \file nb_kernel112_f77_double.h
- * \brief Nonbonded kernel 112 (Coul + LJ, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 112 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel112_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 112 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel112nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL112_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel113_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 113
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel113,F77DKERNEL113)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel113nf,F77DKERNEL113NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel113_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel113,F77DKERNEL113)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel113nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel113nf,F77DKERNEL113NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL113_F77D_H_
-#define _NBKERNEL113_F77D_H_
-
-/*! \file nb_kernel113_f77_double.h
- * \brief Nonbonded kernel 113 (Coul + LJ, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 113 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel113_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 113 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel113nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL113_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel114_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 114
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel114,F77DKERNEL114)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel114nf,F77DKERNEL114NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel114_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel114,F77DKERNEL114)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel114nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel114nf,F77DKERNEL114NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL114_F77D_H_
-#define _NBKERNEL114_F77D_H_
-
-/*! \file nb_kernel114_f77_double.h
- * \brief Nonbonded kernel 114 (Coul + LJ, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 114 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel114_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 114 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel114nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL114_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel120_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 120
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel120,F77DKERNEL120)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel120nf,F77DKERNEL120NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel120_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel120,F77DKERNEL120)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel120nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel120nf,F77DKERNEL120NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL120_F77D_H_
-#define _NBKERNEL120_F77D_H_
-
-/*! \file nb_kernel120_f77_double.h
- * \brief Nonbonded kernel 120 (Coul + Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 120 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel120_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 120 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel120nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL120_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel121_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 121
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel121,F77DKERNEL121)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel121nf,F77DKERNEL121NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel121_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel121,F77DKERNEL121)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel121nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel121nf,F77DKERNEL121NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL121_F77D_H_
-#define _NBKERNEL121_F77D_H_
-
-/*! \file nb_kernel121_f77_double.h
- * \brief Nonbonded kernel 121 (Coul + Bham, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 121 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel121_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 121 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel121nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL121_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel122_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 122
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel122,F77DKERNEL122)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel122nf,F77DKERNEL122NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel122_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel122,F77DKERNEL122)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel122nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel122nf,F77DKERNEL122NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL122_F77D_H_
-#define _NBKERNEL122_F77D_H_
-
-/*! \file nb_kernel122_f77_double.h
- * \brief Nonbonded kernel 122 (Coul + Bham, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 122 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel122_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 122 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel122nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL122_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel123_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 123
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel123,F77DKERNEL123)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel123nf,F77DKERNEL123NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel123_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel123,F77DKERNEL123)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel123nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel123nf,F77DKERNEL123NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL123_F77D_H_
-#define _NBKERNEL123_F77D_H_
-
-/*! \file nb_kernel123_f77_double.h
- * \brief Nonbonded kernel 123 (Coul + Bham, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 123 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel123_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 123 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel123nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL123_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel124_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 124
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel124,F77DKERNEL124)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel124nf,F77DKERNEL124NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel124_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel124,F77DKERNEL124)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel124nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel124nf,F77DKERNEL124NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL124_F77D_H_
-#define _NBKERNEL124_F77D_H_
-
-/*! \file nb_kernel124_f77_double.h
- * \brief Nonbonded kernel 124 (Coul + Bham, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 124 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel124_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 124 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel124nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL124_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel130_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 130
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel130,F77DKERNEL130)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel130nf,F77DKERNEL130NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel130_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel130,F77DKERNEL130)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel130nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel130nf,F77DKERNEL130NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL130_F77D_H_
-#define _NBKERNEL130_F77D_H_
-
-/*! \file nb_kernel130_f77_double.h
- * \brief Nonbonded kernel 130 (Coul + Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 130 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel130_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 130 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel130nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL130_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel131_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 131
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel131,F77DKERNEL131)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel131nf,F77DKERNEL131NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel131_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel131,F77DKERNEL131)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel131nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel131nf,F77DKERNEL131NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL131_F77D_H_
-#define _NBKERNEL131_F77D_H_
-
-/*! \file nb_kernel131_f77_double.h
- * \brief Nonbonded kernel 131 (Coul + Tab VdW, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 131 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel131_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 131 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel131nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL131_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel132_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 132
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel132,F77DKERNEL132)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel132nf,F77DKERNEL132NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel132_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel132,F77DKERNEL132)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel132nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel132nf,F77DKERNEL132NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL132_F77D_H_
-#define _NBKERNEL132_F77D_H_
-
-/*! \file nb_kernel132_f77_double.h
- * \brief Nonbonded kernel 132 (Coul + Tab VdW, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 132 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel132_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 132 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel132nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL132_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel133_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 133
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel133,F77DKERNEL133)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel133nf,F77DKERNEL133NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel133_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel133,F77DKERNEL133)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel133nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel133nf,F77DKERNEL133NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL133_F77D_H_
-#define _NBKERNEL133_F77D_H_
-
-/*! \file nb_kernel133_f77_double.h
- * \brief Nonbonded kernel 133 (Coul + Tab VdW, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 133 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel133_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 133 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel133nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL133_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel134_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 134
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel134,F77DKERNEL134)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel134nf,F77DKERNEL134NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel134_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel134,F77DKERNEL134)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel134nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel134nf,F77DKERNEL134NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL134_F77D_H_
-#define _NBKERNEL134_F77D_H_
-
-/*! \file nb_kernel134_f77_double.h
- * \brief Nonbonded kernel 134 (Coul + Tab VdW, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 134 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel134_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 134 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel134nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL134_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel200_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 200
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel200,F77DKERNEL200)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel200nf,F77DKERNEL200NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel200_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel200,F77DKERNEL200)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel200nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel200nf,F77DKERNEL200NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL200_F77D_H_
-#define _NBKERNEL200_F77D_H_
-
-/*! \file nb_kernel200_f77_double.h
- * \brief Nonbonded kernel 200 (RF Coul)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 200 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel200_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 200 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel200nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL200_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel201_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 201
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel201,F77DKERNEL201)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel201nf,F77DKERNEL201NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel201_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel201,F77DKERNEL201)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel201nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel201nf,F77DKERNEL201NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL201_F77D_H_
-#define _NBKERNEL201_F77D_H_
-
-/*! \file nb_kernel201_f77_double.h
- * \brief Nonbonded kernel 201 (RF Coul, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 201 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel201_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 201 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel201nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL201_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel202_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 202
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel202,F77DKERNEL202)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel202nf,F77DKERNEL202NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel202_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel202,F77DKERNEL202)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel202nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel202nf,F77DKERNEL202NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL202_F77D_H_
-#define _NBKERNEL202_F77D_H_
-
-/*! \file nb_kernel202_f77_double.h
- * \brief Nonbonded kernel 202 (RF Coul, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 202 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel202_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 202 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel202nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL202_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel203_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 203
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel203,F77DKERNEL203)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel203nf,F77DKERNEL203NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel203_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel203,F77DKERNEL203)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel203nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel203nf,F77DKERNEL203NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL203_F77D_H_
-#define _NBKERNEL203_F77D_H_
-
-/*! \file nb_kernel203_f77_double.h
- * \brief Nonbonded kernel 203 (RF Coul, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 203 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel203_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 203 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel203nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL203_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel204_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 204
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel204,F77DKERNEL204)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel204nf,F77DKERNEL204NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel204_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel204,F77DKERNEL204)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel204nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel204nf,F77DKERNEL204NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL204_F77D_H_
-#define _NBKERNEL204_F77D_H_
-
-/*! \file nb_kernel204_f77_double.h
- * \brief Nonbonded kernel 204 (RF Coul, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 204 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel204_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 204 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel204nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL204_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel210_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 210
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel210,F77DKERNEL210)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel210nf,F77DKERNEL210NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel210_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel210,F77DKERNEL210)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel210nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel210nf,F77DKERNEL210NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL210_F77D_H_
-#define _NBKERNEL210_F77D_H_
-
-/*! \file nb_kernel210_f77_double.h
- * \brief Nonbonded kernel 210 (RF Coul + LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 210 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel210_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 210 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel210nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL210_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel211_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 211
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel211,F77DKERNEL211)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel211nf,F77DKERNEL211NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel211_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel211,F77DKERNEL211)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel211nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel211nf,F77DKERNEL211NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL211_F77D_H_
-#define _NBKERNEL211_F77D_H_
-
-/*! \file nb_kernel211_f77_double.h
- * \brief Nonbonded kernel 211 (RF Coul + LJ, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 211 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel211_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 211 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel211nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL211_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel212_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 212
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel212,F77DKERNEL212)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel212nf,F77DKERNEL212NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel212_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel212,F77DKERNEL212)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel212nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel212nf,F77DKERNEL212NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL212_F77D_H_
-#define _NBKERNEL212_F77D_H_
-
-/*! \file nb_kernel212_f77_double.h
- * \brief Nonbonded kernel 212 (RF Coul + LJ, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 212 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel212_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 212 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel212nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL212_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel213_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 213
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel213,F77DKERNEL213)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel213nf,F77DKERNEL213NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel213_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel213,F77DKERNEL213)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel213nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel213nf,F77DKERNEL213NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL213_F77D_H_
-#define _NBKERNEL213_F77D_H_
-
-/*! \file nb_kernel213_f77_double.h
- * \brief Nonbonded kernel 213 (RF Coul + LJ, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 213 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel213_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 213 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel213nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL213_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel214_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 214
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel214,F77DKERNEL214)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel214nf,F77DKERNEL214NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel214_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel214,F77DKERNEL214)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel214nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel214nf,F77DKERNEL214NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL214_F77D_H_
-#define _NBKERNEL214_F77D_H_
-
-/*! \file nb_kernel214_f77_double.h
- * \brief Nonbonded kernel 214 (RF Coul + LJ, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 214 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel214_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 214 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel214nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL214_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel220_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 220
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel220,F77DKERNEL220)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel220nf,F77DKERNEL220NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel220_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel220,F77DKERNEL220)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel220nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel220nf,F77DKERNEL220NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL220_F77D_H_
-#define _NBKERNEL220_F77D_H_
-
-/*! \file nb_kernel220_f77_double.h
- * \brief Nonbonded kernel 220 (RF Coul + Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 220 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel220_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 220 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel220nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL220_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel221_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 221
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel221,F77DKERNEL221)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel221nf,F77DKERNEL221NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel221_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel221,F77DKERNEL221)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel221nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel221nf,F77DKERNEL221NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL221_F77D_H_
-#define _NBKERNEL221_F77D_H_
-
-/*! \file nb_kernel221_f77_double.h
- * \brief Nonbonded kernel 221 (RF Coul + Bham, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 221 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel221_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 221 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel221nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL221_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel222_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 222
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel222,F77DKERNEL222)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel222nf,F77DKERNEL222NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel222_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel222,F77DKERNEL222)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel222nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel222nf,F77DKERNEL222NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL222_F77D_H_
-#define _NBKERNEL222_F77D_H_
-
-/*! \file nb_kernel222_f77_double.h
- * \brief Nonbonded kernel 222 (RF Coul + Bham, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 222 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel222_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 222 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel222nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL222_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel223_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 223
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel223,F77DKERNEL223)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel223nf,F77DKERNEL223NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel223_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel223,F77DKERNEL223)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel223nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel223nf,F77DKERNEL223NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL223_F77D_H_
-#define _NBKERNEL223_F77D_H_
-
-/*! \file nb_kernel223_f77_double.h
- * \brief Nonbonded kernel 223 (RF Coul + Bham, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 223 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel223_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 223 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel223nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL223_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel224_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 224
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel224,F77DKERNEL224)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel224nf,F77DKERNEL224NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel224_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel224,F77DKERNEL224)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel224nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel224nf,F77DKERNEL224NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL224_F77D_H_
-#define _NBKERNEL224_F77D_H_
-
-/*! \file nb_kernel224_f77_double.h
- * \brief Nonbonded kernel 224 (RF Coul + Bham, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 224 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel224_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 224 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel224nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL224_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel230_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 230
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel230,F77DKERNEL230)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel230nf,F77DKERNEL230NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel230_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel230,F77DKERNEL230)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel230nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel230nf,F77DKERNEL230NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL230_F77D_H_
-#define _NBKERNEL230_F77D_H_
-
-/*! \file nb_kernel230_f77_double.h
- * \brief Nonbonded kernel 230 (RF Coul + Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 230 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel230_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 230 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel230nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL230_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel231_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 231
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel231,F77DKERNEL231)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel231nf,F77DKERNEL231NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel231_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel231,F77DKERNEL231)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel231nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel231nf,F77DKERNEL231NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL231_F77D_H_
-#define _NBKERNEL231_F77D_H_
-
-/*! \file nb_kernel231_f77_double.h
- * \brief Nonbonded kernel 231 (RF Coul + Tab VdW, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 231 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel231_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 231 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel231nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL231_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel232_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 232
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel232,F77DKERNEL232)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel232nf,F77DKERNEL232NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel232_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel232,F77DKERNEL232)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel232nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel232nf,F77DKERNEL232NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL232_F77D_H_
-#define _NBKERNEL232_F77D_H_
-
-/*! \file nb_kernel232_f77_double.h
- * \brief Nonbonded kernel 232 (RF Coul + Tab VdW, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 232 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel232_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 232 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel232nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL232_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel233_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 233
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel233,F77DKERNEL233)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel233nf,F77DKERNEL233NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel233_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel233,F77DKERNEL233)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel233nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel233nf,F77DKERNEL233NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL233_F77D_H_
-#define _NBKERNEL233_F77D_H_
-
-/*! \file nb_kernel233_f77_double.h
- * \brief Nonbonded kernel 233 (RF Coul + Tab VdW, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 233 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel233_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 233 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel233nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL233_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel234_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 234
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel234,F77DKERNEL234)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel234nf,F77DKERNEL234NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel234_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel234,F77DKERNEL234)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel234nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel234nf,F77DKERNEL234NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL234_F77D_H_
-#define _NBKERNEL234_F77D_H_
-
-/*! \file nb_kernel234_f77_double.h
- * \brief Nonbonded kernel 234 (RF Coul + Tab VdW, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 234 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel234_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 234 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel234nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL234_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel300_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 300
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel300,F77DKERNEL300)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel300nf,F77DKERNEL300NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel300_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel300,F77DKERNEL300)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel300nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel300nf,F77DKERNEL300NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL300_F77D_H_
-#define _NBKERNEL300_F77D_H_
-
-/*! \file nb_kernel300_f77_double.h
- * \brief Nonbonded kernel 300 (Tab Coul)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 300 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel300_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 300 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel300nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL300_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel301_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 301
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel301,F77DKERNEL301)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel301nf,F77DKERNEL301NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel301_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel301,F77DKERNEL301)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel301nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel301nf,F77DKERNEL301NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL301_F77D_H_
-#define _NBKERNEL301_F77D_H_
-
-/*! \file nb_kernel301_f77_double.h
- * \brief Nonbonded kernel 301 (Tab Coul, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 301 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel301_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 301 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel301nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL301_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel302_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 302
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel302,F77DKERNEL302)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel302nf,F77DKERNEL302NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel302_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel302,F77DKERNEL302)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel302nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel302nf,F77DKERNEL302NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL302_F77D_H_
-#define _NBKERNEL302_F77D_H_
-
-/*! \file nb_kernel302_f77_double.h
- * \brief Nonbonded kernel 302 (Tab Coul, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 302 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel302_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 302 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel302nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL302_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel303_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 303
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel303,F77DKERNEL303)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel303nf,F77DKERNEL303NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel303_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel303,F77DKERNEL303)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel303nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel303nf,F77DKERNEL303NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL303_F77D_H_
-#define _NBKERNEL303_F77D_H_
-
-/*! \file nb_kernel303_f77_double.h
- * \brief Nonbonded kernel 303 (Tab Coul, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 303 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel303_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 303 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel303nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL303_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel304_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 304
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel304,F77DKERNEL304)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel304nf,F77DKERNEL304NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel304_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel304,F77DKERNEL304)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel304nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel304nf,F77DKERNEL304NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL304_F77D_H_
-#define _NBKERNEL304_F77D_H_
-
-/*! \file nb_kernel304_f77_double.h
- * \brief Nonbonded kernel 304 (Tab Coul, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 304 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel304_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 304 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel304nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL304_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel310_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 310
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel310,F77DKERNEL310)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel310nf,F77DKERNEL310NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel310_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel310,F77DKERNEL310)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel310nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel310nf,F77DKERNEL310NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL310_F77D_H_
-#define _NBKERNEL310_F77D_H_
-
-/*! \file nb_kernel310_f77_double.h
- * \brief Nonbonded kernel 310 (Tab Coul + LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 310 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel310_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 310 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel310nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL310_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel311_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 311
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel311,F77DKERNEL311)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel311nf,F77DKERNEL311NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel311_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel311,F77DKERNEL311)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel311nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel311nf,F77DKERNEL311NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL311_F77D_H_
-#define _NBKERNEL311_F77D_H_
-
-/*! \file nb_kernel311_f77_double.h
- * \brief Nonbonded kernel 311 (Tab Coul + LJ, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 311 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel311_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 311 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel311nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL311_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel312_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 312
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel312,F77DKERNEL312)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel312nf,F77DKERNEL312NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel312_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel312,F77DKERNEL312)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel312nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel312nf,F77DKERNEL312NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL312_F77D_H_
-#define _NBKERNEL312_F77D_H_
-
-/*! \file nb_kernel312_f77_double.h
- * \brief Nonbonded kernel 312 (Tab Coul + LJ, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 312 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel312_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 312 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel312nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL312_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel313_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 313
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel313,F77DKERNEL313)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel313nf,F77DKERNEL313NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel313_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel313,F77DKERNEL313)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel313nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel313nf,F77DKERNEL313NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL313_F77D_H_
-#define _NBKERNEL313_F77D_H_
-
-/*! \file nb_kernel313_f77_double.h
- * \brief Nonbonded kernel 313 (Tab Coul + LJ, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 313 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel313_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 313 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel313nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL313_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel314_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 314
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel314,F77DKERNEL314)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel314nf,F77DKERNEL314NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel314_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel314,F77DKERNEL314)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel314nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel314nf,F77DKERNEL314NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL314_F77D_H_
-#define _NBKERNEL314_F77D_H_
-
-/*! \file nb_kernel314_f77_double.h
- * \brief Nonbonded kernel 314 (Tab Coul + LJ, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 314 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel314_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 314 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel314nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL314_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel320_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 320
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel320,F77DKERNEL320)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel320nf,F77DKERNEL320NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel320_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel320,F77DKERNEL320)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel320nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel320nf,F77DKERNEL320NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL320_F77D_H_
-#define _NBKERNEL320_F77D_H_
-
-/*! \file nb_kernel320_f77_double.h
- * \brief Nonbonded kernel 320 (Tab Coul + Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 320 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel320_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 320 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel320nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL320_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel321_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 321
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel321,F77DKERNEL321)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel321nf,F77DKERNEL321NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel321_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel321,F77DKERNEL321)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel321nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel321nf,F77DKERNEL321NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL321_F77D_H_
-#define _NBKERNEL321_F77D_H_
-
-/*! \file nb_kernel321_f77_double.h
- * \brief Nonbonded kernel 321 (Tab Coul + Bham, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 321 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel321_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 321 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel321nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL321_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel322_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 322
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel322,F77DKERNEL322)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel322nf,F77DKERNEL322NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel322_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel322,F77DKERNEL322)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel322nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel322nf,F77DKERNEL322NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL322_F77D_H_
-#define _NBKERNEL322_F77D_H_
-
-/*! \file nb_kernel322_f77_double.h
- * \brief Nonbonded kernel 322 (Tab Coul + Bham, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 322 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel322_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 322 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel322nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL322_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel323_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 323
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel323,F77DKERNEL323)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel323nf,F77DKERNEL323NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel323_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel323,F77DKERNEL323)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel323nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel323nf,F77DKERNEL323NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL323_F77D_H_
-#define _NBKERNEL323_F77D_H_
-
-/*! \file nb_kernel323_f77_double.h
- * \brief Nonbonded kernel 323 (Tab Coul + Bham, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 323 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel323_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 323 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel323nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL323_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel324_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 324
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel324,F77DKERNEL324)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel324nf,F77DKERNEL324NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel324_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel324,F77DKERNEL324)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel324nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel324nf,F77DKERNEL324NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL324_F77D_H_
-#define _NBKERNEL324_F77D_H_
-
-/*! \file nb_kernel324_f77_double.h
- * \brief Nonbonded kernel 324 (Tab Coul + Bham, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 324 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel324_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 324 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel324nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL324_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel330_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 330
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel330,F77DKERNEL330)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel330nf,F77DKERNEL330NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel330_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel330,F77DKERNEL330)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel330nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel330nf,F77DKERNEL330NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL330_F77D_H_
-#define _NBKERNEL330_F77D_H_
-
-/*! \file nb_kernel330_f77_double.h
- * \brief Nonbonded kernel 330 (Tab Coul + Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 330 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel330_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 330 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel330nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL330_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel331_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 331
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel331,F77DKERNEL331)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel331nf,F77DKERNEL331NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel331_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel331,F77DKERNEL331)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel331nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel331nf,F77DKERNEL331NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL331_F77D_H_
-#define _NBKERNEL331_F77D_H_
-
-/*! \file nb_kernel331_f77_double.h
- * \brief Nonbonded kernel 331 (Tab Coul + Tab VdW, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 331 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel331_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 331 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel331nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL331_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel332_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 332
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel332,F77DKERNEL332)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel332nf,F77DKERNEL332NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel332_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel332,F77DKERNEL332)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel332nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel332nf,F77DKERNEL332NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL332_F77D_H_
-#define _NBKERNEL332_F77D_H_
-
-/*! \file nb_kernel332_f77_double.h
- * \brief Nonbonded kernel 332 (Tab Coul + Tab VdW, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 332 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel332_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 332 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel332nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL332_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel333_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 333
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel333,F77DKERNEL333)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel333nf,F77DKERNEL333NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel333_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel333,F77DKERNEL333)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel333nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel333nf,F77DKERNEL333NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL333_F77D_H_
-#define _NBKERNEL333_F77D_H_
-
-/*! \file nb_kernel333_f77_double.h
- * \brief Nonbonded kernel 333 (Tab Coul + Tab VdW, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 333 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel333_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 333 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel333nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL333_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel334_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 334
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel334,F77DKERNEL334)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel334nf,F77DKERNEL334NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel334_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel334,F77DKERNEL334)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel334nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel334nf,F77DKERNEL334NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL334_F77D_H_
-#define _NBKERNEL334_F77D_H_
-
-/*! \file nb_kernel334_f77_double.h
- * \brief Nonbonded kernel 334 (Tab Coul + Tab VdW, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 334 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel334_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 334 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel334nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL334_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel400_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 400
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel400,F77DKERNEL400)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel400nf,F77DKERNEL400NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel400_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel400,F77DKERNEL400)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel400nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel400nf,F77DKERNEL400NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL400_F77D_H_
-#define _NBKERNEL400_F77D_H_
-
-/*! \file nb_kernel400_f77_double.h
- * \brief Nonbonded kernel 400 (GB Coul)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 400 with forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel400_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 400 without forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel400nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL400_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel410_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 410
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel410,F77DKERNEL410)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel410nf,F77DKERNEL410NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel410_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel410,F77DKERNEL410)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel410nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel410nf,F77DKERNEL410NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL410_F77D_H_
-#define _NBKERNEL410_F77D_H_
-
-/*! \file nb_kernel410_f77_double.h
- * \brief Nonbonded kernel 410 (GB Coul + LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 410 with forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel410_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 410 without forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel410nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL410_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel420_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 420
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel420,F77DKERNEL420)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel420nf,F77DKERNEL420NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel420_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel420,F77DKERNEL420)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel420nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel420nf,F77DKERNEL420NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL420_F77D_H_
-#define _NBKERNEL420_F77D_H_
-
-/*! \file nb_kernel420_f77_double.h
- * \brief Nonbonded kernel 420 (GB Coul + Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 420 with forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel420_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter);
-
-
-/*! \brief Nonbonded kernel 420 without forces.
- *
- * \internal Generated at compile time in either C or Fortran
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel420nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL420_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel430_f77_double.c
- * \brief Wrapper for fortran nonbonded kernel 430
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77dkernel430,F77DKERNEL430)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-void
-F77_FUNC(f77dkernel430nf,F77DKERNEL430NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work);
-
-
-void
-nb_kernel430_f77_double
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, double * shiftvec,
- double * fshift, int * gid,
- double * pos, double* faction,
- double * charge, double* facel,
- double * krf, double* crf,
- double * Vc, int * type,
- int * ntype, double * vdwparam,
- double * Vvdw, double* tabscale,
- double * VFtab, double* invsqrta,
- double * dvda, double* gbtabscale,
- double * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel430,F77DKERNEL430)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel430nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], double shiftvec[],
- double fshift[], int gid[],
- double pos[], double faction[],
- double charge[], double * facel,
- double * krf, double* crf,
- double Vc[], int type[],
- int * ntype, double vdwparam[],
- double Vvdw[], double * tabscale,
- double VFtab[], double invsqrta[],
- double dvda[], double * gbtabscale,
- double GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- double * work)
-{
- F77_FUNC(f77dkernel430nf,F77DKERNEL430NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL430_F77D_H_
-#define _NBKERNEL430_F77D_H_
-
-/*! \file nb_kernel430_f77_double.h
- * \brief Nonbonded kernel 430 (GB Coul + Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 430 with forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel430_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 430 without forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_double.h
- */
-void
-nb_kernel430nf_f77_double
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL430_F77D_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-
-#include "types/nrnb.h"
-#include "nb_kernel_f77_double.h"
-#include "../nb_kernel.h"
-
-
-/* Include standard kernel headers in local directory */
-#include "nb_kernel010_f77_double.h"
-#include "nb_kernel020_f77_double.h"
-#include "nb_kernel030_f77_double.h"
-#include "nb_kernel100_f77_double.h"
-#include "nb_kernel101_f77_double.h"
-#include "nb_kernel102_f77_double.h"
-#include "nb_kernel103_f77_double.h"
-#include "nb_kernel104_f77_double.h"
-#include "nb_kernel110_f77_double.h"
-#include "nb_kernel111_f77_double.h"
-#include "nb_kernel112_f77_double.h"
-#include "nb_kernel113_f77_double.h"
-#include "nb_kernel114_f77_double.h"
-#include "nb_kernel120_f77_double.h"
-#include "nb_kernel121_f77_double.h"
-#include "nb_kernel122_f77_double.h"
-#include "nb_kernel123_f77_double.h"
-#include "nb_kernel124_f77_double.h"
-#include "nb_kernel130_f77_double.h"
-#include "nb_kernel131_f77_double.h"
-#include "nb_kernel132_f77_double.h"
-#include "nb_kernel133_f77_double.h"
-#include "nb_kernel134_f77_double.h"
-#include "nb_kernel200_f77_double.h"
-#include "nb_kernel201_f77_double.h"
-#include "nb_kernel202_f77_double.h"
-#include "nb_kernel203_f77_double.h"
-#include "nb_kernel204_f77_double.h"
-#include "nb_kernel210_f77_double.h"
-#include "nb_kernel211_f77_double.h"
-#include "nb_kernel212_f77_double.h"
-#include "nb_kernel213_f77_double.h"
-#include "nb_kernel214_f77_double.h"
-#include "nb_kernel220_f77_double.h"
-#include "nb_kernel221_f77_double.h"
-#include "nb_kernel222_f77_double.h"
-#include "nb_kernel223_f77_double.h"
-#include "nb_kernel224_f77_double.h"
-#include "nb_kernel230_f77_double.h"
-#include "nb_kernel231_f77_double.h"
-#include "nb_kernel232_f77_double.h"
-#include "nb_kernel233_f77_double.h"
-#include "nb_kernel234_f77_double.h"
-#include "nb_kernel300_f77_double.h"
-#include "nb_kernel301_f77_double.h"
-#include "nb_kernel302_f77_double.h"
-#include "nb_kernel303_f77_double.h"
-#include "nb_kernel304_f77_double.h"
-#include "nb_kernel310_f77_double.h"
-#include "nb_kernel311_f77_double.h"
-#include "nb_kernel312_f77_double.h"
-#include "nb_kernel313_f77_double.h"
-#include "nb_kernel314_f77_double.h"
-#include "nb_kernel320_f77_double.h"
-#include "nb_kernel321_f77_double.h"
-#include "nb_kernel322_f77_double.h"
-#include "nb_kernel323_f77_double.h"
-#include "nb_kernel324_f77_double.h"
-#include "nb_kernel330_f77_double.h"
-#include "nb_kernel331_f77_double.h"
-#include "nb_kernel332_f77_double.h"
-#include "nb_kernel333_f77_double.h"
-#include "nb_kernel334_f77_double.h"
-#include "nb_kernel400_f77_double.h"
-#include "nb_kernel410_f77_double.h"
-#include "nb_kernel420_f77_double.h"
-#include "nb_kernel430_f77_double.h"
-
-
-static nb_kernel_t *
-kernellist[eNR_NBKERNEL_NR] =
-{
- nb_kernel010_f77_double,
- nb_kernel020_f77_double,
- nb_kernel030_f77_double,
- nb_kernel100_f77_double,
- nb_kernel101_f77_double,
- nb_kernel102_f77_double,
- nb_kernel103_f77_double,
- nb_kernel104_f77_double,
- nb_kernel110_f77_double,
- nb_kernel111_f77_double,
- nb_kernel112_f77_double,
- nb_kernel113_f77_double,
- nb_kernel114_f77_double,
- nb_kernel120_f77_double,
- nb_kernel121_f77_double,
- nb_kernel122_f77_double,
- nb_kernel123_f77_double,
- nb_kernel124_f77_double,
- nb_kernel130_f77_double,
- nb_kernel131_f77_double,
- nb_kernel132_f77_double,
- nb_kernel133_f77_double,
- nb_kernel134_f77_double,
- nb_kernel200_f77_double,
- nb_kernel201_f77_double,
- nb_kernel202_f77_double,
- nb_kernel203_f77_double,
- nb_kernel204_f77_double,
- nb_kernel210_f77_double,
- nb_kernel211_f77_double,
- nb_kernel212_f77_double,
- nb_kernel213_f77_double,
- nb_kernel214_f77_double,
- nb_kernel220_f77_double,
- nb_kernel221_f77_double,
- nb_kernel222_f77_double,
- nb_kernel223_f77_double,
- nb_kernel224_f77_double,
- nb_kernel230_f77_double,
- nb_kernel231_f77_double,
- nb_kernel232_f77_double,
- nb_kernel233_f77_double,
- nb_kernel234_f77_double,
- nb_kernel300_f77_double,
- nb_kernel301_f77_double,
- nb_kernel302_f77_double,
- nb_kernel303_f77_double,
- nb_kernel304_f77_double,
- nb_kernel310_f77_double,
- nb_kernel311_f77_double,
- nb_kernel312_f77_double,
- nb_kernel313_f77_double,
- nb_kernel314_f77_double,
- nb_kernel320_f77_double,
- nb_kernel321_f77_double,
- nb_kernel322_f77_double,
- nb_kernel323_f77_double,
- nb_kernel324_f77_double,
- nb_kernel330_f77_double,
- nb_kernel331_f77_double,
- nb_kernel332_f77_double,
- nb_kernel333_f77_double,
- nb_kernel334_f77_double,
- nb_kernel400_f77_double,
- nb_kernel410_f77_double,
- nb_kernel430_f77_double,
- nb_kernel010nf_f77_double,
- nb_kernel020nf_f77_double,
- nb_kernel030nf_f77_double,
- nb_kernel100nf_f77_double,
- nb_kernel101nf_f77_double,
- nb_kernel102nf_f77_double,
- nb_kernel103nf_f77_double,
- nb_kernel104nf_f77_double,
- nb_kernel110nf_f77_double,
- nb_kernel111nf_f77_double,
- nb_kernel112nf_f77_double,
- nb_kernel113nf_f77_double,
- nb_kernel114nf_f77_double,
- nb_kernel120nf_f77_double,
- nb_kernel121nf_f77_double,
- nb_kernel122nf_f77_double,
- nb_kernel123nf_f77_double,
- nb_kernel124nf_f77_double,
- nb_kernel130nf_f77_double,
- nb_kernel131nf_f77_double,
- nb_kernel132nf_f77_double,
- nb_kernel133nf_f77_double,
- nb_kernel134nf_f77_double,
- nb_kernel200nf_f77_double,
- nb_kernel201nf_f77_double,
- nb_kernel202nf_f77_double,
- nb_kernel203nf_f77_double,
- nb_kernel204nf_f77_double,
- nb_kernel210nf_f77_double,
- nb_kernel211nf_f77_double,
- nb_kernel212nf_f77_double,
- nb_kernel213nf_f77_double,
- nb_kernel214nf_f77_double,
- nb_kernel220nf_f77_double,
- nb_kernel221nf_f77_double,
- nb_kernel222nf_f77_double,
- nb_kernel223nf_f77_double,
- nb_kernel224nf_f77_double,
- nb_kernel230nf_f77_double,
- nb_kernel231nf_f77_double,
- nb_kernel232nf_f77_double,
- nb_kernel233nf_f77_double,
- nb_kernel234nf_f77_double,
- nb_kernel300nf_f77_double,
- nb_kernel301nf_f77_double,
- nb_kernel302nf_f77_double,
- nb_kernel303nf_f77_double,
- nb_kernel304nf_f77_double,
- nb_kernel310nf_f77_double,
- nb_kernel311nf_f77_double,
- nb_kernel312nf_f77_double,
- nb_kernel313nf_f77_double,
- nb_kernel314nf_f77_double,
- nb_kernel320nf_f77_double,
- nb_kernel321nf_f77_double,
- nb_kernel322nf_f77_double,
- nb_kernel323nf_f77_double,
- nb_kernel324nf_f77_double,
- nb_kernel330nf_f77_double,
- nb_kernel331nf_f77_double,
- nb_kernel332nf_f77_double,
- nb_kernel333nf_f77_double,
- nb_kernel334nf_f77_double,
- nb_kernel400nf_f77_double,
- nb_kernel410nf_f77_double,
- nb_kernel430nf_f77_double,
-};
-
-
-void
-nb_kernel_setup_f77_double(FILE *log,nb_kernel_t **list)
-{
- int i;
- nb_kernel_t *p;
-
- if(log)
- fprintf(log,"Configuring double precision Fortran kernels...\n");
-
- for(i=0;i<eNR_NBKERNEL_NR;i++)
- {
- p = kernellist[i];
- if(p!=NULL)
- list[i] = p;
- }
-}
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL_F77D_H_
-#define _NBKERNEL_F77D_H_
-
-/** The vanilla nonbonded Gromacs kernels (portable, written in C).
- *
- * \file nb_kernel_f77_double.h
- *
- * \internal
- */
-
-#include <stdio.h>
-
-#include "../nb_kernel.h"
-
-void
-nb_kernel_setup_f77_double(FILE *fplog,nb_kernel_t **list);
-
-#endif /* _NBKERNEL_F77D_H_ */
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
-#endif
-
-#include <stdio.h>
-
-/*! \brief Lock innerloop mutex and read lists indices
- *
- * \internal
- *
- * This routine is only used when both Fortran innerloops
- * and threads are enabled.
- *
- * Since the Fortran77 standard does not include support
- * for POSIX threads, we call this routine instead which
- *
- * - Locks the provided mutex
- * - Reads the counter from memory
- * - Advances the counter in successively smaller chunks
- * - Releases the mutex
- *
- * In other words, it performs exactly the same action as
- * we do natively in the nonbonded kernel outer loop
- * when using C language for the kernels.
- *
- * Fortran does not know anything about a mutex, but since
- * arguments are passed by reference we mask it as a pointer
- * to an integer in the Fortran code.
- *
- * \param mtx Pointer to the mutex to use, masked as int
- * \param count Pointer to the outer loop counter
- * \param nri Total umber of (outer loop) neighborlists
- * \param nthreads Number of working threads
- * \param nn0 Returned value: Low index to use for outerloop
- * \param nn1 Returned value: High index to use for outerloop
- *
- * \warning There is one possible cause of problems. Some
- * fortran compilers make all variables static by
- * default, and that will obviously screw up
- * multithreading in a major way. If your Fortran
- * compiler does this you only have two alternatives:
- * Either find the flag to turn it off, or compile
- * Gromacs without any Fortran nonbonded kernels.
- */
-void
-F77_FUNC(f77kernelsync,F77KERNELSYNC)
- (int * mtx,
- int * count,
- int * nri,
- int * nthreads,
- int * nn0,
- int * nn1)
-{
- int n0,n1;
-
-
-#ifdef HAVE_PTHREADS_H
- pthread_mutex_lock((pthread_mutex_t *)mtx);
-#endif
- n0 = *count;
- /* Take successively smaller chunks */
- n1 = n0+((*nri)-n0)/(2*(*nthreads))+3;
- *count = n1;
-#ifdef HAVE_PTHREADS_H
- pthread_mutex_unlock((pthread_mutex_t *)mtx);
-#endif
- *nn0 = n0;
- *nn1 = n1;
-}
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel010
-C Coulomb interaction: Not calculated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel010(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 33 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel010nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel010nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 19 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 4 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel020
-C Coulomb interaction: Not calculated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel020(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 61 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel020nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel020nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 48 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 4 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel030
-C Coulomb interaction: Not calculated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel030(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 54 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel030nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel030nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 33 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 4 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel100
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel100(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 27 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel100nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel100nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 iq
- real*4 qq,vcoul,vctot
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Inner loop uses 16 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 5 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel101
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel101(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 80 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel101nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel101nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Inner loop uses 47 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel102
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel102(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 234 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel102nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel102nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Inner loop uses 135 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel103
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel103(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 80 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel103nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel103nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
-
-C Inner loop uses 47 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel104
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel104(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 234 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel104nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel104nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
-
-C Inner loop uses 135 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel110
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel110(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (vcoul+12.0*Vvdw12-6.0*Vvdw6)
- & *rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 38 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel110nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel110nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 24 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel111
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel111(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (vcoul+12.0*Vvdw12-6.0*Vvdw6)
- & *rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 91 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel111nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel111nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Inner loop uses 55 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel112
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel112(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (vcoul+12.0*Vvdw12-6.0*Vvdw6)
- & *rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 245 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel112nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel112nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Inner loop uses 143 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel113
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel113(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 113 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel113nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel113nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
-
-C Inner loop uses 66 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel114
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel114(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 267 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel114nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel114nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
-
-C Inner loop uses 154 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel120
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel120(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (vcoul+br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 64 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel120nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel120nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 51 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel121
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel121(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (vcoul+br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 117 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel121nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel121nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Inner loop uses 82 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel122
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel122(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (vcoul+br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 271 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel122nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel122nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Inner loop uses 170 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel123
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel123(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 141 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel123nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel123nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
-
-C Inner loop uses 95 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel124
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel124(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 295 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel124nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel124nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
-
-C Inner loop uses 183 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel130
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel130(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (vcoul)*rinvsq-((fijD+fijR)
- & *tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 59 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel130nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel130nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 36 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel131
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel131(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (vcoul)*rinvsq-((fijD+fijR)
- & *tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 112 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel131nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel131nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Inner loop uses 67 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel132
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel132(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (vcoul)*rinvsq-((fijD+fijR)
- & *tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 266 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel132nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel132nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv12
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv13
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Inner loop uses 155 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel133
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel133(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 134 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel133nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel133nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb interaction
- vcoul = qq*rinv21
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb interaction
- vcoul = qq*rinv31
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb interaction
- vcoul = qq*rinv41
- vctot = vctot+vcoul
-
-C Inner loop uses 80 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel134
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel134(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
- fscal = (vcoul)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 288 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel134nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel134nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv22
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv23
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv24
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv32
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb interaction
- vcoul = qq*rinv33
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv34
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv42
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb interaction
- vcoul = qq*rinv43
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb interaction
- vcoul = qq*rinv44
- vctot = vctot+vcoul
-
-C Inner loop uses 168 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel200
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel200(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 33 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel200nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel200nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 iq
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 19 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 5 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel201
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel201(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 98 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel201nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel201nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 56 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel202
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel202(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv12-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv13-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 288 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel202nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel202nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 162 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel203
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel203(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv41-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 98 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel203nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel203nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 56 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel204
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel204(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv24-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv34-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv42-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv43-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv44-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 288 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel204nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel204nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- real*4 krsq
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 162 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel210
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel210(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+12.0*Vvdw12
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 44 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel210nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel210nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 27 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel211
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel211(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+12.0*Vvdw12
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 109 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel211nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel211nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 64 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel212
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel212(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+12.0*Vvdw12
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv12-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv13-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 299 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel212nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel212nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 170 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel213
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel213(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv41-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 131 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel213nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel213nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 75 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel214
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel214(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv24-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv34-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv42-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv43-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv44-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 321 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel214nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel214nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 181 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel220
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel220(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+br*Vvdwexp
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 70 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel220nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel220nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 54 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel221
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel221(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+br*Vvdwexp
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 135 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel221nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel221nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 91 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel222
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel222(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (qq*(rinv11-2.0*krsq)+br*Vvdwexp
- & -6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv12-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv13-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 325 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel222nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel222nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 197 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel223
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel223(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv41-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 159 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel223nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel223nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 104 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel224
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel224(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv24-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv34-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv42-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv43-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv44-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 349 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel224nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel224nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 krsq
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 210 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel230
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel230(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
- & -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 65 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel230nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel230nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 39 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel231
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel231(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
- & -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 130 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel231nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel231nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 76 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel232
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel232(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = (qq*(rinv11-2.0*krsq))*rinvsq
- & -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv12*rinv12
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv12-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv13*rinv13
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv13-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 320 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel232nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel232nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq11
- vcoul = qq*(rinv11+krsq-crf)
- vctot = vctot+vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq12
- vcoul = qq*(rinv12+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq13
- vcoul = qq*(rinv13+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 182 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel233
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel233(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
- rinvsq = rinv21*rinv21
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv21-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- rinvsq = rinv31*rinv31
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv31-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
- rinvsq = rinv41*rinv41
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv41-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 152 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel233nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel233nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq21
- vcoul = qq*(rinv21+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq31
- vcoul = qq*(rinv31+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq41
- vcoul = qq*(rinv41+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 89 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel234
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel234(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijD,fijR
- real*4 krsq
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv22*rinv22
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv22-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv23*rinv23
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv23-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv24*rinv24
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv24-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv32*rinv32
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv32-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
- rinvsq = rinv33*rinv33
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv33-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv34*rinv34
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv34-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv42*rinv42
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv42-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
- rinvsq = rinv43*rinv43
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv43-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
- rinvsq = rinv44*rinv44
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
- fscal = (qq*(rinv44-2.0*krsq))*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 342 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel234nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel234nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 krsq
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq22
- vcoul = qq*(rinv22+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq23
- vcoul = qq*(rinv23+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq24
- vcoul = qq*(rinv24+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq32
- vcoul = qq*(rinv32+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq33
- vcoul = qq*(rinv33+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq34
- vcoul = qq*(rinv34+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq42
- vcoul = qq*(rinv42+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq43
- vcoul = qq*(rinv43+krsq-crf)
- vctot = vctot+vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Coulomb reaction-field interaction
- krsq = krf*rsq44
- vcoul = qq*(rinv44+krsq-crf)
- vctot = vctot+vcoul
-
-C Inner loop uses 195 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel300
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel300(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 iq
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 42 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel300nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel300nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 iq
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 26 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 5 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel301
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel301(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 125 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel301nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel301nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 77 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel302
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel302(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv12
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv13
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 369 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel302nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel302nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 225 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel303
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel303(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv41
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 125 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel303nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel303nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 77 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel304
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel304(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv24
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv34
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv42
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv43
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv44
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 369 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 28 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel304nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel304nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 225 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 10 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel310
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel310(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 55 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel310nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel310nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 34 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel311
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel311(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 138 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel311nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel311nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 85 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel312
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel312(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv12
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv13
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 382 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel312nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel312nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 233 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel313
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel313(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv41
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 158 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel313nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel313nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 96 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel314
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel314(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv24
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv34
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv42
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv43
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv44
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 402 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel314nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel314nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinvsq = 1.0/rsq11
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 244 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel320
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel320(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 81 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel320nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel320nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 61 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel321
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel321(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 164 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel321nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel321nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 112 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel322
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel322(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
- & -((fijC)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv12
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv13
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 408 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel322nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel322nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
- rinvsq = rinv11*rinv11
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 260 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel323
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel323(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv41
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 186 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel323nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel323nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 3*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 125 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel324
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel324(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv24
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv34
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv42
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv43
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv44
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 430 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel324nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel324nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,cexp1,cexp2
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 3*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
- rinvsq = rinv11*rinv11
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 273 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel330
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel330(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijC+fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 68 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel330nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel330nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 42 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel331
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel331(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijC+fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 151 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel331nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel331nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 qO,qH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = facel*charge(ii)
- qH = facel*charge(ii+1)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qO*jq
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 93 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel332
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel332(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijC+fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv12
-
-C Calculate temporary vectorial force
- tx = fscal*dx12
- ty = fscal*dy12
- tz = fscal*dz12
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv13
-
-C Calculate temporary vectorial force
- tx = fscal*dx13
- ty = fscal*dy13
- tz = fscal*dz13
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Inner loop uses 395 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- fshift(is3) = fshift(is3)+fix1+fix2+fix3
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 29 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel332nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine f77skernel332nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx12,dy12,dz12,rsq12,rinv12
- real*4 dx13,dy13,dz13,rsq13,rinv13
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 qO,qH,qqOO,qqOH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qO = charge(ii)
- qH = charge(ii+1)
- qqOO = facel*qO*qO
- qqOH = facel*qO*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx12 = ix1 - jx2
- dy12 = iy1 - jy2
- dz12 = iz1 - jz2
- rsq12 = dx12*dx12+dy12*dy12+dz12*dz12
- dx13 = ix1 - jx3
- dy13 = iy1 - jy3
- dz13 = iz1 - jz3
- rsq13 = dx13*dx13+dy13*dy13+dz13*dz13
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv12 = 1.0/sqrt(rsq12)
- rinv13 = 1.0/sqrt(rsq13)
- rinv21 = 1.0/sqrt(rsq21)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv31 = 1.0/sqrt(rsq31)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
-
-C Load parameters for j atom
- qq = qqOO
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq12*rinv12
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq13*rinv13
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqOH
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 241 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 11 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel333
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine f77skernel333(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1,fjx1,fjy1,fjz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- fjx1 = faction(j3+0) - tx
- fjy1 = faction(j3+1) - ty
- fjz1 = faction(j3+2) - tz
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv21
-
-C Calculate temporary vectorial force
- tx = fscal*dx21
- ty = fscal*dy21
- tz = fscal*dz21
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv31
-
-C Calculate temporary vectorial force
- tx = fscal*dx31
- ty = fscal*dy31
- tz = fscal*dz31
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx1 = fjx1 - tx
- fjy1 = fjy1 - ty
- fjz1 = fjz1 - tz
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv41
-
-C Calculate temporary vectorial force
- tx = fscal*dx41
- ty = fscal*dy41
- tz = fscal*dz41
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+0) = fjx1 - tx
- faction(j3+1) = fjy1 - ty
- faction(j3+2) = fjz1 - tz
-
-C Inner loop uses 179 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel333nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine f77skernel333nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 jq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx21,dy21,dz21,rsq21,rinv21
- real*4 dx31,dy31,dz31,rsq31,rinv31
- real*4 dx41,dy41,dz41,rsq41,rinv41
- real*4 qH,qM
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = facel*charge(ii+1)
- qM = facel*charge(ii+3)
- nti = 2*ntype*type(ii)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx21 = ix2 - jx1
- dy21 = iy2 - jy1
- dz21 = iz2 - jz1
- rsq21 = dx21*dx21+dy21*dy21+dz21*dz21
- dx31 = ix3 - jx1
- dy31 = iy3 - jy1
- dz31 = iz3 - jz1
- rsq31 = dx31*dx31+dy31*dy31+dz31*dz31
- dx41 = ix4 - jx1
- dy41 = iy4 - jy1
- dz41 = iz4 - jz1
- rsq41 = dx41*dx41+dy41*dy41+dz41*dz41
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv21 = 1.0/sqrt(rsq21)
- rinv31 = 1.0/sqrt(rsq31)
- rinv41 = 1.0/sqrt(rsq41)
-
-C Load parameters for j atom
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- jq = charge(jnr+0)
- qq = qH*jq
-
-C Calculate table index
- r = rsq21*rinv21
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq31*rinv31
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qM*jq
-
-C Calculate table index
- r = rsq41*rinv41
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 110 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel334
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine f77skernel334(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 fijD,fijR
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 ix2,iy2,iz2,fix2,fiy2,fiz2
- real*4 ix3,iy3,iz3,fix3,fiy3,fiz3
- real*4 ix4,iy4,iz4,fix4,fiy4,fiz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2,fjx2,fjy2,fjz2
- real*4 jx3,jy3,jz3,fjx3,fjy3,fjz3
- real*4 jx4,jy4,jz4,fjx4,fjy4,fjz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
- fix2 = 0
- fiy2 = 0
- fiz2 = 0
- fix3 = 0
- fiy3 = 0
- fiz3 = 0
- fix4 = 0
- fiy4 = 0
- fiz4 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv22
-
-C Calculate temporary vectorial force
- tx = fscal*dx22
- ty = fscal*dy22
- tz = fscal*dz22
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx2 = faction(j3+3) - tx
- fjy2 = faction(j3+4) - ty
- fjz2 = faction(j3+5) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv23
-
-C Calculate temporary vectorial force
- tx = fscal*dx23
- ty = fscal*dy23
- tz = fscal*dz23
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx3 = faction(j3+6) - tx
- fjy3 = faction(j3+7) - ty
- fjz3 = faction(j3+8) - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv24
-
-C Calculate temporary vectorial force
- tx = fscal*dx24
- ty = fscal*dy24
- tz = fscal*dz24
-
-C Increment i atom force
- fix2 = fix2 + tx
- fiy2 = fiy2 + ty
- fiz2 = fiz2 + tz
-
-C Decrement j atom force
- fjx4 = faction(j3+9) - tx
- fjy4 = faction(j3+10) - ty
- fjz4 = faction(j3+11) - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv32
-
-C Calculate temporary vectorial force
- tx = fscal*dx32
- ty = fscal*dy32
- tz = fscal*dz32
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx2 = fjx2 - tx
- fjy2 = fjy2 - ty
- fjz2 = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv33
-
-C Calculate temporary vectorial force
- tx = fscal*dx33
- ty = fscal*dy33
- tz = fscal*dz33
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx3 = fjx3 - tx
- fjy3 = fjy3 - ty
- fjz3 = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv34
-
-C Calculate temporary vectorial force
- tx = fscal*dx34
- ty = fscal*dy34
- tz = fscal*dz34
-
-C Increment i atom force
- fix3 = fix3 + tx
- fiy3 = fiy3 + ty
- fiz3 = fiz3 + tz
-
-C Decrement j atom force
- fjx4 = fjx4 - tx
- fjy4 = fjy4 - ty
- fjz4 = fjz4 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv42
-
-C Calculate temporary vectorial force
- tx = fscal*dx42
- ty = fscal*dy42
- tz = fscal*dz42
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+3) = fjx2 - tx
- faction(j3+4) = fjy2 - ty
- faction(j3+5) = fjz2 - tz
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv43
-
-C Calculate temporary vectorial force
- tx = fscal*dx43
- ty = fscal*dy43
- tz = fscal*dz43
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+6) = fjx3 - tx
- faction(j3+7) = fjy3 - ty
- faction(j3+8) = fjz3 - tz
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vcoul = qq*VV
- fijC = qq*FF
- vctot = vctot + vcoul
- fscal = -((fijC)*tabscale)*rinv44
-
-C Calculate temporary vectorial force
- tx = fscal*dx44
- ty = fscal*dy44
- tz = fscal*dz44
-
-C Increment i atom force
- fix4 = fix4 + tx
- fiy4 = fiy4 + ty
- fiz4 = fiz4 + tz
-
-C Decrement j atom force
- faction(j3+9) = fjx4 - tx
- faction(j3+10) = fjy4 - ty
- faction(j3+11) = fjz4 - tz
-
-C Inner loop uses 423 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- faction(ii3+3) = faction(ii3+3) + fix2
- faction(ii3+4) = faction(ii3+4) + fiy2
- faction(ii3+5) = faction(ii3+5) + fiz2
- faction(ii3+6) = faction(ii3+6) + fix3
- faction(ii3+7) = faction(ii3+7) + fiy3
- faction(ii3+8) = faction(ii3+8) + fiz3
- faction(ii3+9) = faction(ii3+9) + fix4
- faction(ii3+10) = faction(ii3+10) + fiy4
- faction(ii3+11) = faction(ii3+11) + fiz4
- fshift(is3) = fshift(is3)+fix1+fix2+fix3+fix4
- fshift(is3+1) = fshift(is3+1)+fiy1+fiy2+fiy3+fiy4
- fshift(is3+2) = fshift(is3+2)+fiz1+fiz2+fiz3+fiz4
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 38 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel334nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine f77skernel334nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 qq,vcoul,vctot
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 ix1,iy1,iz1
- real*4 ix2,iy2,iz2
- real*4 ix3,iy3,iz3
- real*4 ix4,iy4,iz4
- real*4 jx1,jy1,jz1
- real*4 jx2,jy2,jz2
- real*4 jx3,jy3,jz3
- real*4 jx4,jy4,jz4
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 dx22,dy22,dz22,rsq22,rinv22
- real*4 dx23,dy23,dz23,rsq23,rinv23
- real*4 dx24,dy24,dz24,rsq24,rinv24
- real*4 dx32,dy32,dz32,rsq32,rinv32
- real*4 dx33,dy33,dz33,rsq33,rinv33
- real*4 dx34,dy34,dz34,rsq34,rinv34
- real*4 dx42,dy42,dz42,rsq42,rinv42
- real*4 dx43,dy43,dz43,rsq43,rinv43
- real*4 dx44,dy44,dz44,rsq44,rinv44
- real*4 qH,qM,qqMM,qqMH,qqHH
- real*4 c6,c12
-
-
-C Initialize water data
- ii = iinr(1)+1
- qH = charge(ii+1)
- qM = charge(ii+3)
- qqMM = facel*qM*qM
- qqMH = facel*qM*qH
- qqHH = facel*qH*qH
- tj = 2*(ntype+1)*type(ii)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
- ix2 = shX + pos(ii3+3)
- iy2 = shY + pos(ii3+4)
- iz2 = shZ + pos(ii3+5)
- ix3 = shX + pos(ii3+6)
- iy3 = shY + pos(ii3+7)
- iz3 = shZ + pos(ii3+8)
- ix4 = shX + pos(ii3+9)
- iy4 = shY + pos(ii3+10)
- iz4 = shZ + pos(ii3+11)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
- jx2 = pos(j3+3)
- jy2 = pos(j3+4)
- jz2 = pos(j3+5)
- jx3 = pos(j3+6)
- jy3 = pos(j3+7)
- jz3 = pos(j3+8)
- jx4 = pos(j3+9)
- jy4 = pos(j3+10)
- jz4 = pos(j3+11)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
- dx22 = ix2 - jx2
- dy22 = iy2 - jy2
- dz22 = iz2 - jz2
- rsq22 = dx22*dx22+dy22*dy22+dz22*dz22
- dx23 = ix2 - jx3
- dy23 = iy2 - jy3
- dz23 = iz2 - jz3
- rsq23 = dx23*dx23+dy23*dy23+dz23*dz23
- dx24 = ix2 - jx4
- dy24 = iy2 - jy4
- dz24 = iz2 - jz4
- rsq24 = dx24*dx24+dy24*dy24+dz24*dz24
- dx32 = ix3 - jx2
- dy32 = iy3 - jy2
- dz32 = iz3 - jz2
- rsq32 = dx32*dx32+dy32*dy32+dz32*dz32
- dx33 = ix3 - jx3
- dy33 = iy3 - jy3
- dz33 = iz3 - jz3
- rsq33 = dx33*dx33+dy33*dy33+dz33*dz33
- dx34 = ix3 - jx4
- dy34 = iy3 - jy4
- dz34 = iz3 - jz4
- rsq34 = dx34*dx34+dy34*dy34+dz34*dz34
- dx42 = ix4 - jx2
- dy42 = iy4 - jy2
- dz42 = iz4 - jz2
- rsq42 = dx42*dx42+dy42*dy42+dz42*dz42
- dx43 = ix4 - jx3
- dy43 = iy4 - jy3
- dz43 = iz4 - jz3
- rsq43 = dx43*dx43+dy43*dy43+dz43*dz43
- dx44 = ix4 - jx4
- dy44 = iy4 - jy4
- dz44 = iz4 - jz4
- rsq44 = dx44*dx44+dy44*dy44+dz44*dz44
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
- rinv22 = 1.0/sqrt(rsq22)
- rinv23 = 1.0/sqrt(rsq23)
- rinv24 = 1.0/sqrt(rsq24)
- rinv32 = 1.0/sqrt(rsq32)
- rinv33 = 1.0/sqrt(rsq33)
- rinv34 = 1.0/sqrt(rsq34)
- rinv42 = 1.0/sqrt(rsq42)
- rinv43 = 1.0/sqrt(rsq43)
- rinv44 = 1.0/sqrt(rsq44)
-
-C Load parameters for j atom
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated VdW interaction - dispersion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq22*rinv22
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq23*rinv23
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq24*rinv24
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq32*rinv32
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqHH
-
-C Calculate table index
- r = rsq33*rinv33
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq34*rinv34
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq42*rinv42
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMH
-
-C Calculate table index
- r = rsq43*rinv43
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Load parameters for j atom
- qq = qqMM
-
-C Calculate table index
- r = rsq44*rinv44
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 12*n0+1
-
-C Tabulated coulomb interaction
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vcoul = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 258 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 14 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel400
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel400(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 iq
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 isai,isaj,isaprod,gbscale,vgb
- real*4 dvdasum,dvdatmp,dvdaj,fgb
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- dvdasum = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- fscal = vcoul*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
-
-C Tabulated Generalized-Born interaction
- dvdaj = dvda(jnr)
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vgb = qq*VV
- fijC = qq*FF*gbscale
- dvdatmp = -0.5*(vgb+fijC*r)
- dvdasum = dvdasum + dvdatmp
- dvda(jnr) = dvdaj+dvdatmp*isaj*isaj
- vctot = vctot + vcoul
- fscal = -(fijC-fscal)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 49 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- dvda(ii) = dvda(ii) + dvdasum*isai*isai
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 12 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel400nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel400nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 iq
- real*4 qq,vcoul,vctot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 isai,isaj,isaprod,gbscale,vgb
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
-
-C Zero the potential energy for this list
- vctot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
-
-C Tabulated Generalized-Born interaction
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vgb = qq*VV
- vctot = vctot + vcoul
-
-C Inner loop uses 29 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 5 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel410
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel410(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 isai,isaj,isaprod,gbscale,vgb
- real*4 dvdasum,dvdatmp,dvdaj,fgb
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
- dvdasum = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- fscal = vcoul*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Tabulated Generalized-Born interaction
- dvdaj = dvda(jnr)
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vgb = qq*VV
- fijC = qq*FF*gbscale
- dvdatmp = -0.5*(vgb+fijC*r)
- dvdasum = dvdasum + dvdatmp
- dvda(jnr) = dvdaj+dvdatmp*isaj*isaj
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
- fscal = (12.0*Vvdw12-6.0*Vvdw6)*rinvsq
- & -(fijC-fscal)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 62 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
- dvda(ii) = dvda(ii) + dvdasum*isai*isai
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 13 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel410nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel410nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 isai,isaj,isaprod,gbscale,vgb
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
- rinvsq = rinv11*rinv11
-
-C Tabulated Generalized-Born interaction
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vgb = qq*VV
- vctot = vctot + vcoul
-
-C Lennard-Jones interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- Vvdw12 = c12*rinvsix*rinvsix
- Vvdwtot = Vvdwtot+Vvdw12-Vvdw6
-
-C Inner loop uses 37 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel420
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel420(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 isai,isaj,isaprod,gbscale,vgb
- real*4 dvdasum,dvdatmp,dvdaj,fgb
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
- dvdasum = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- fscal = vcoul*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Tabulated Generalized-Born interaction
- dvdaj = dvda(jnr)
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vgb = qq*VV
- fijC = qq*FF*gbscale
- dvdatmp = -0.5*(vgb+fijC*r)
- dvdasum = dvdasum + dvdatmp
- dvda(jnr) = dvdaj+dvdatmp*isaj*isaj
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
- fscal = (br*Vvdwexp-6.0*Vvdw6)*rinvsq
- & -(fijC-fscal)*rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 88 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
- dvda(ii) = dvda(ii) + dvdasum*isai*isai
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 13 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel420nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel420nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 rinvsq
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 rinvsix
- real*4 Vvdw6,Vvdwtot
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 isai,isaj,isaprod,gbscale,vgb
- real*4 Vvdwexp,br
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 3*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+3*type(jnr)+1
- c6 = vdwparam(tj)
- cexp1 = vdwparam(tj+1)
- cexp2 = vdwparam(tj+2)
- rinvsq = rinv11*rinv11
-
-C Tabulated Generalized-Born interaction
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vgb = qq*VV
- vctot = vctot + vcoul
-
-C Buckingham interaction
- rinvsix = rinvsq*rinvsq*rinvsq
- Vvdw6 = c6*rinvsix
- br = cexp2*rsq11*rinv11
- Vvdwexp = cexp1*exp(-br)
- Vvdwtot = Vvdwtot+Vvdwexp-Vvdw6
-
-C Inner loop uses 64 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-C
-C This source code is part of
-C
-C G R O M A C S
-C
-C Copyright (c) 1991-2000, University of Groningen, The Netherlands.
-C Copyright (c) 2001-2009, The GROMACS Development Team
-C
-C Gromacs is a library for molecular simulation and trajectory analysis,
-C written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
-C a full list of developers and information, check out http://www.gromacs.org
-C
-C This program is free software; you can redistribute it and/or modify it under
-C the terms of the GNU Lesser General Public License as published by the Free
-C Software Foundation; either version 2 of the License, or (at your option) any
-C later version.
-C As a special exception, you may use this file as part of a free software
-C library without restriction. Specifically, if other files instantiate
-C templates or use macros or inline functions from this file, or you compile
-C this file and link it with other files to produce an executable, this
-C file does not by itself cause the resulting executable to be covered by
-C the GNU Lesser General Public License.
-C
-C In plain-speak: do not worry about classes/macros/templates either - only
-C changes to the library have to be LGPL, not an application linking with it.
-C
-C To help fund GROMACS development, we humbly ask that you cite
-C the papers people have written on it - you can find them on the website!
-C
-
-C
-C Gromacs nonbonded kernel f77skernel430
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine f77skernel430(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 fscal,tx,ty,tz
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 FF
- real*4 fijC
- real*4 fijD,fijR
- real*4 isai,isaj,isaprod,gbscale,vgb
- real*4 dvdasum,dvdatmp,dvdaj,fgb
- real*4 ix1,iy1,iz1,fix1,fiy1,fiz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
- dvdasum = 0
-
-C Clear i atom forces
- fix1 = 0
- fiy1 = 0
- fiz1 = 0
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- fscal = vcoul*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Tabulated Generalized-Born interaction
- dvdaj = dvda(jnr)
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- vgb = qq*VV
- fijC = qq*FF*gbscale
- dvdatmp = -0.5*(vgb+fijC*r)
- dvdasum = dvdasum + dvdatmp
- dvda(jnr) = dvdaj+dvdatmp*isaj*isaj
- vctot = vctot + vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw6 = c6*VV
- fijD = c6*FF
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- FF = Fp+Geps+2.0*Heps2
- Vvdw12 = c12*VV
- fijR = c12*FF
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
- fscal = -((fijD+fijR)*tabscale+fijC-fscal)
- & *rinv11
-
-C Calculate temporary vectorial force
- tx = fscal*dx11
- ty = fscal*dy11
- tz = fscal*dz11
-
-C Increment i atom force
- fix1 = fix1 + tx
- fiy1 = fiy1 + ty
- fiz1 = fiz1 + tz
-
-C Decrement j atom force
- faction(j3+0) = faction(j3+0) - tx
- faction(j3+1) = faction(j3+1) - ty
- faction(j3+2) = faction(j3+2) - tz
-
-C Inner loop uses 80 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
- faction(ii3+0) = faction(ii3+0) + fix1
- faction(ii3+1) = faction(ii3+1) + fiy1
- faction(ii3+2) = faction(ii3+2) + fiz1
- fshift(is3) = fshift(is3)+fix1
- fshift(is3+1) = fshift(is3+1)+fiy1
- fshift(is3+2) = fshift(is3+2)+fiz1
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
- dvda(ii) = dvda(ii) + dvdasum*isai*isai
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 13 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
-
-
-
-C
-C Gromacs nonbonded kernel f77skernel430nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine f77skernel430nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- real*4 shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- real*4 charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- real*4 Vvdw(*),tabscale,VFtab(*)
- real*4 invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- real*4 work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- real*4 shX,shY,shZ
- real*4 iq
- real*4 qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- real*4 Vvdw6,Vvdwtot
- real*4 Vvdw12
- real*4 r,rt,eps,eps2
- integer*4 n0,nnn
- real*4 Y,F,Geps,Heps2,Fp,VV
- real*4 isai,isaj,isaprod,gbscale,vgb
- real*4 ix1,iy1,iz1
- real*4 jx1,jy1,jz1
- real*4 dx11,dy11,dz11,rsq11,rinv11
- real*4 c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call f77kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = jindex(n+1)
-
-C Get outer coordinate index
- ii = iinr(n)+1
- ii3 = 3*ii-2
-
-C Load i atom data, add shift vector
- ix1 = shX + pos(ii3+0)
- iy1 = shY + pos(ii3+1)
- iz1 = shZ + pos(ii3+2)
-
-C Load parameters for i atom
- iq = facel*charge(ii)
- isai = invsqrta(ii)
- nti = 2*ntype*type(ii)
-
-C Zero the potential energy for this list
- vctot = 0
- Vvdwtot = 0
-
-C Clear i atom forces
-
- do k=nj0,nj1
-
-C Get j neighbor index, and coordinate index
- jnr = jjnr(k)+1
- j3 = 3*jnr-2
-
-C load j atom coordinates
- jx1 = pos(j3+0)
- jy1 = pos(j3+1)
- jz1 = pos(j3+2)
-
-C Calculate distance
- dx11 = ix1 - jx1
- dy11 = iy1 - jy1
- dz11 = iz1 - jz1
- rsq11 = dx11*dx11+dy11*dy11+dz11*dz11
-
-C Calculate 1/r and 1/r2
- rinv11 = 1.0/sqrt(rsq11)
-
-C Load parameters for j atom
- isaj = invsqrta(jnr)
- isaprod = isai*isaj
- qq = iq*charge(jnr)
- vcoul = qq*rinv11
- qq = isaprod*(-qq)
- gbscale = isaprod*gbtabscale
- tj = nti+2*type(jnr)+1
- c6 = vdwparam(tj)
- c12 = vdwparam(tj+1)
-
-C Tabulated Generalized-Born interaction
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*gbscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 4*n0+1
- Y = GBtab(nnn)
- F = GBtab(nnn+1)
- Geps = eps*GBtab(nnn+2)
- Heps2 = eps2*GBtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- vgb = qq*VV
- vctot = vctot + vcoul
-
-C Calculate table index
- r = rsq11*rinv11
-
-C Calculate table index
- rt = r*tabscale
- n0 = rt
- eps = rt-n0
- eps2 = eps*eps
- nnn = 8*n0+1
-
-C Tabulated VdW interaction - dispersion
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw6 = c6*VV
-
-C Tabulated VdW interaction - repulsion
- nnn = nnn+4
- Y = VFtab(nnn)
- F = VFtab(nnn+1)
- Geps = eps*VFtab(nnn+2)
- Heps2 = eps2*VFtab(nnn+3)
- Fp = F+Geps+Heps2
- VV = Y+eps*Fp
- Vvdw12 = c12*VV
- Vvdwtot = Vvdwtot+ Vvdw6 + Vvdw12
-
-C Inner loop uses 49 flops/iteration
- end do
-
-
-C Add i forces to mem and shifted force list
-
-C Add potential energies to the group for this list
- ggid = gid(n)+1
- Vc(ggid) = Vc(ggid) + vctot
- Vvdw(ggid) = Vvdw(ggid) + Vvdwtot
-
-C Increment number of inner iterations
- ninner = ninner + nj1 - nj0
-
-C Outer loop uses 6 flops/iteration
- end do
-
-
-C Increment number of outer iterations
- nouter = nouter + nn1 - nn0
- if(nn1.lt.nri) goto 10
-
-C Write outer/inner iteration count to pointers
- outeriter = nouter
- inneriter = ninner
- return
- end
-
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel010_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 010
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel010,F77SKERNEL010)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel010nf,F77SKERNEL010NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel010_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel010,F77SKERNEL010)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel010nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel010nf,F77SKERNEL010NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL010_F77S_H_
-#define _NBKERNEL010_F77S_H_
-
-/*! \file nb_kernel010_f77_single.h
- * \brief Nonbonded kernel 010 (LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 010 with forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel010_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-/*! \brief Nonbonded kernel 010 without forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel010nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL010_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel020_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 020
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel020,F77SKERNEL020)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel020nf,F77SKERNEL020NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel020_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel020,F77SKERNEL020)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel020nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel020nf,F77SKERNEL020NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL020_F77S_H_
-#define _NBKERNEL020_F77S_H_
-
-/*! \file nb_kernel020_f77_single.h
- * \brief Nonbonded kernel 020 (Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 020 with forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel020_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 020 without forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel020nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL020_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel030_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 030
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel030,F77SKERNEL030)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel030nf,F77SKERNEL030NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel030_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel030,F77SKERNEL030)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel030nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel030nf,F77SKERNEL030NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL030_F77S_H_
-#define _NBKERNEL030_F77S_H_
-
-/*! \file nb_kernel030_f77_single.h
- * \brief Nonbonded kernel 030 (Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 030 with forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel030_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 030 without forces.
- *
- * <b>Coulomb interaction:</b> No <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel030nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL030_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel100_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 100
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel100,F77SKERNEL100)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel100nf,F77SKERNEL100NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel100_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel100,F77SKERNEL100)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel100nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel100nf,F77SKERNEL100NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL100_F77S_H_
-#define _NBKERNEL100_F77S_H_
-
-/*! \file nb_kernel100_f77_single.h
- * \brief Nonbonded kernel 100 (Coul)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 100 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel100_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 100 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel100nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL100_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel101_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 101
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel101,F77SKERNEL101)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel101nf,F77SKERNEL101NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel101_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel101,F77SKERNEL101)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel101nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel101nf,F77SKERNEL101NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL101_F77S_H_
-#define _NBKERNEL101_F77S_H_
-
-/*! \file nb_kernel101_f77_single.h
- * \brief Nonbonded kernel 101 (Coul, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 101 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel101_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 101 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel101nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL101_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel102_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 102
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel102,F77SKERNEL102)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel102nf,F77SKERNEL102NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel102_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel102,F77SKERNEL102)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel102nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel102nf,F77SKERNEL102NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL102_F77S_H_
-#define _NBKERNEL102_F77S_H_
-
-/*! \file nb_kernel102_f77_single.h
- * \brief Nonbonded kernel 102 (Coul, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 102 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel102_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 102 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel102nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL102_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel103_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 103
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel103,F77SKERNEL103)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel103nf,F77SKERNEL103NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel103_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel103,F77SKERNEL103)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel103nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel103nf,F77SKERNEL103NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL103_F77S_H_
-#define _NBKERNEL103_F77S_H_
-
-/*! \file nb_kernel103_f77_single.h
- * \brief Nonbonded kernel 103 (Coul, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 103 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel103_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 103 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel103nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL103_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel104_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 104
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel104,F77SKERNEL104)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel104nf,F77SKERNEL104NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel104_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel104,F77SKERNEL104)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel104nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel104nf,F77SKERNEL104NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL104_F77S_H_
-#define _NBKERNEL104_F77S_H_
-
-/*! \file nb_kernel104_f77_single.h
- * \brief Nonbonded kernel 104 (Coul, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 104 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel104_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 104 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel104nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL104_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel110_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 110
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel110,F77SKERNEL110)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel110nf,F77SKERNEL110NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel110_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel110,F77SKERNEL110)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel110nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel110nf,F77SKERNEL110NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL110_F77S_H_
-#define _NBKERNEL110_F77S_H_
-
-/*! \file nb_kernel110_f77_single.h
- * \brief Nonbonded kernel 110 (Coul + LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 110 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel110_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 110 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel110nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL110_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel111_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 111
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel111,F77SKERNEL111)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel111nf,F77SKERNEL111NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel111_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel111,F77SKERNEL111)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel111nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel111nf,F77SKERNEL111NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL111_F77S_H_
-#define _NBKERNEL111_F77S_H_
-
-/*! \file nb_kernel111_f77_single.h
- * \brief Nonbonded kernel 111 (Coul + LJ, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 111 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel111_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 111 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel111nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL111_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel112_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 112
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel112,F77SKERNEL112)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel112nf,F77SKERNEL112NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel112_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel112,F77SKERNEL112)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel112nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel112nf,F77SKERNEL112NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL112_F77S_H_
-#define _NBKERNEL112_F77S_H_
-
-/*! \file nb_kernel112_f77_single.h
- * \brief Nonbonded kernel 112 (Coul + LJ, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 112 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel112_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 112 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel112nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL112_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel113_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 113
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel113,F77SKERNEL113)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel113nf,F77SKERNEL113NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel113_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel113,F77SKERNEL113)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel113nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel113nf,F77SKERNEL113NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL113_F77S_H_
-#define _NBKERNEL113_F77S_H_
-
-/*! \file nb_kernel113_f77_single.h
- * \brief Nonbonded kernel 113 (Coul + LJ, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 113 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel113_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 113 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel113nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL113_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel114_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 114
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel114,F77SKERNEL114)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel114nf,F77SKERNEL114NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel114_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel114,F77SKERNEL114)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel114nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel114nf,F77SKERNEL114NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL114_F77S_H_
-#define _NBKERNEL114_F77S_H_
-
-/*! \file nb_kernel114_f77_single.h
- * \brief Nonbonded kernel 114 (Coul + LJ, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 114 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel114_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 114 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel114nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL114_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel120_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 120
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel120,F77SKERNEL120)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel120nf,F77SKERNEL120NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel120_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel120,F77SKERNEL120)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel120nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel120nf,F77SKERNEL120NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL120_F77S_H_
-#define _NBKERNEL120_F77S_H_
-
-/*! \file nb_kernel120_f77_single.h
- * \brief Nonbonded kernel 120 (Coul + Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 120 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel120_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 120 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel120nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL120_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel121_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 121
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel121,F77SKERNEL121)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel121nf,F77SKERNEL121NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel121_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel121,F77SKERNEL121)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel121nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel121nf,F77SKERNEL121NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL121_F77S_H_
-#define _NBKERNEL121_F77S_H_
-
-/*! \file nb_kernel121_f77_single.h
- * \brief Nonbonded kernel 121 (Coul + Bham, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 121 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel121_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 121 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel121nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL121_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel122_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 122
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel122,F77SKERNEL122)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel122nf,F77SKERNEL122NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel122_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel122,F77SKERNEL122)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel122nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel122nf,F77SKERNEL122NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL122_F77S_H_
-#define _NBKERNEL122_F77S_H_
-
-/*! \file nb_kernel122_f77_single.h
- * \brief Nonbonded kernel 122 (Coul + Bham, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 122 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel122_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 122 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel122nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL122_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel123_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 123
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel123,F77SKERNEL123)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel123nf,F77SKERNEL123NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel123_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel123,F77SKERNEL123)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel123nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel123nf,F77SKERNEL123NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL123_F77S_H_
-#define _NBKERNEL123_F77S_H_
-
-/*! \file nb_kernel123_f77_single.h
- * \brief Nonbonded kernel 123 (Coul + Bham, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 123 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel123_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 123 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel123nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL123_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel124_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 124
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel124,F77SKERNEL124)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel124nf,F77SKERNEL124NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel124_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel124,F77SKERNEL124)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel124nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel124nf,F77SKERNEL124NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL124_F77S_H_
-#define _NBKERNEL124_F77S_H_
-
-/*! \file nb_kernel124_f77_single.h
- * \brief Nonbonded kernel 124 (Coul + Bham, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 124 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel124_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 124 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel124nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL124_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel130_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 130
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel130,F77SKERNEL130)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel130nf,F77SKERNEL130NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel130_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel130,F77SKERNEL130)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel130nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel130nf,F77SKERNEL130NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL130_F77S_H_
-#define _NBKERNEL130_F77S_H_
-
-/*! \file nb_kernel130_f77_single.h
- * \brief Nonbonded kernel 130 (Coul + Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 130 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel130_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 130 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel130nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL130_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel131_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 131
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel131,F77SKERNEL131)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel131nf,F77SKERNEL131NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel131_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel131,F77SKERNEL131)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel131nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel131nf,F77SKERNEL131NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL131_F77S_H_
-#define _NBKERNEL131_F77S_H_
-
-/*! \file nb_kernel131_f77_single.h
- * \brief Nonbonded kernel 131 (Coul + Tab VdW, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 131 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel131_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 131 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel131nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL131_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel132_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 132
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel132,F77SKERNEL132)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel132nf,F77SKERNEL132NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel132_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel132,F77SKERNEL132)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel132nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel132nf,F77SKERNEL132NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL132_F77S_H_
-#define _NBKERNEL132_F77S_H_
-
-/*! \file nb_kernel132_f77_single.h
- * \brief Nonbonded kernel 132 (Coul + Tab VdW, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 132 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel132_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 132 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel132nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL132_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel133_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 133
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel133,F77SKERNEL133)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel133nf,F77SKERNEL133NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel133_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel133,F77SKERNEL133)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel133nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel133nf,F77SKERNEL133NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL133_F77S_H_
-#define _NBKERNEL133_F77S_H_
-
-/*! \file nb_kernel133_f77_single.h
- * \brief Nonbonded kernel 133 (Coul + Tab VdW, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 133 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel133_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 133 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel133nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL133_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel134_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 134
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel134,F77SKERNEL134)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel134nf,F77SKERNEL134NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel134_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel134,F77SKERNEL134)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel134nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel134nf,F77SKERNEL134NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL134_F77S_H_
-#define _NBKERNEL134_F77S_H_
-
-/*! \file nb_kernel134_f77_single.h
- * \brief Nonbonded kernel 134 (Coul + Tab VdW, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 134 with forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel134_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 134 without forces.
- *
- * <b>Coulomb interaction:</b> Standard 1/r <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel134nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL134_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel200_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 200
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel200,F77SKERNEL200)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel200nf,F77SKERNEL200NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel200_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel200,F77SKERNEL200)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel200nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel200nf,F77SKERNEL200NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL200_F77S_H_
-#define _NBKERNEL200_F77S_H_
-
-/*! \file nb_kernel200_f77_single.h
- * \brief Nonbonded kernel 200 (RF Coul)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 200 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel200_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 200 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel200nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL200_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel201_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 201
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel201,F77SKERNEL201)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel201nf,F77SKERNEL201NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel201_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel201,F77SKERNEL201)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel201nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel201nf,F77SKERNEL201NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL201_F77S_H_
-#define _NBKERNEL201_F77S_H_
-
-/*! \file nb_kernel201_f77_single.h
- * \brief Nonbonded kernel 201 (RF Coul, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 201 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel201_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 201 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel201nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL201_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel202_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 202
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel202,F77SKERNEL202)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel202nf,F77SKERNEL202NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel202_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel202,F77SKERNEL202)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel202nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel202nf,F77SKERNEL202NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL202_F77S_H_
-#define _NBKERNEL202_F77S_H_
-
-/*! \file nb_kernel202_f77_single.h
- * \brief Nonbonded kernel 202 (RF Coul, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 202 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel202_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 202 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel202nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL202_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel203_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 203
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel203,F77SKERNEL203)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel203nf,F77SKERNEL203NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel203_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel203,F77SKERNEL203)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel203nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel203nf,F77SKERNEL203NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL203_F77S_H_
-#define _NBKERNEL203_F77S_H_
-
-/*! \file nb_kernel203_f77_single.h
- * \brief Nonbonded kernel 203 (RF Coul, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 203 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel203_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 203 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel203nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL203_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel204_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 204
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel204,F77SKERNEL204)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel204nf,F77SKERNEL204NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel204_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel204,F77SKERNEL204)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel204nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel204nf,F77SKERNEL204NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL204_F77S_H_
-#define _NBKERNEL204_F77S_H_
-
-/*! \file nb_kernel204_f77_single.h
- * \brief Nonbonded kernel 204 (RF Coul, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 204 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel204_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 204 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel204nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL204_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel210_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 210
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel210,F77SKERNEL210)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel210nf,F77SKERNEL210NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel210_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel210,F77SKERNEL210)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel210nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel210nf,F77SKERNEL210NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL210_F77S_H_
-#define _NBKERNEL210_F77S_H_
-
-/*! \file nb_kernel210_f77_single.h
- * \brief Nonbonded kernel 210 (RF Coul + LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 210 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel210_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 210 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel210nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL210_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel211_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 211
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel211,F77SKERNEL211)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel211nf,F77SKERNEL211NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel211_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel211,F77SKERNEL211)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel211nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel211nf,F77SKERNEL211NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL211_F77S_H_
-#define _NBKERNEL211_F77S_H_
-
-/*! \file nb_kernel211_f77_single.h
- * \brief Nonbonded kernel 211 (RF Coul + LJ, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 211 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel211_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 211 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel211nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL211_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel212_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 212
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel212,F77SKERNEL212)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel212nf,F77SKERNEL212NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel212_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel212,F77SKERNEL212)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel212nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel212nf,F77SKERNEL212NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL212_F77S_H_
-#define _NBKERNEL212_F77S_H_
-
-/*! \file nb_kernel212_f77_single.h
- * \brief Nonbonded kernel 212 (RF Coul + LJ, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 212 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel212_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 212 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel212nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL212_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel213_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 213
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel213,F77SKERNEL213)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel213nf,F77SKERNEL213NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel213_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel213,F77SKERNEL213)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel213nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel213nf,F77SKERNEL213NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL213_F77S_H_
-#define _NBKERNEL213_F77S_H_
-
-/*! \file nb_kernel213_f77_single.h
- * \brief Nonbonded kernel 213 (RF Coul + LJ, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 213 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel213_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 213 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel213nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL213_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel214_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 214
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel214,F77SKERNEL214)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel214nf,F77SKERNEL214NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel214_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel214,F77SKERNEL214)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel214nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel214nf,F77SKERNEL214NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL214_F77S_H_
-#define _NBKERNEL214_F77S_H_
-
-/*! \file nb_kernel214_f77_single.h
- * \brief Nonbonded kernel 214 (RF Coul + LJ, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 214 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel214_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 214 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel214nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL214_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel220_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 220
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel220,F77SKERNEL220)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel220nf,F77SKERNEL220NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel220_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel220,F77SKERNEL220)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel220nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel220nf,F77SKERNEL220NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL220_F77S_H_
-#define _NBKERNEL220_F77S_H_
-
-/*! \file nb_kernel220_f77_single.h
- * \brief Nonbonded kernel 220 (RF Coul + Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 220 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel220_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 220 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel220nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL220_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel221_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 221
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel221,F77SKERNEL221)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel221nf,F77SKERNEL221NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel221_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel221,F77SKERNEL221)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel221nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel221nf,F77SKERNEL221NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL221_F77S_H_
-#define _NBKERNEL221_F77S_H_
-
-/*! \file nb_kernel221_f77_single.h
- * \brief Nonbonded kernel 221 (RF Coul + Bham, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 221 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel221_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 221 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel221nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL221_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel222_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 222
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel222,F77SKERNEL222)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel222nf,F77SKERNEL222NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel222_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel222,F77SKERNEL222)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel222nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel222nf,F77SKERNEL222NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL222_F77S_H_
-#define _NBKERNEL222_F77S_H_
-
-/*! \file nb_kernel222_f77_single.h
- * \brief Nonbonded kernel 222 (RF Coul + Bham, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 222 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel222_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 222 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel222nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL222_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel223_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 223
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel223,F77SKERNEL223)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel223nf,F77SKERNEL223NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel223_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel223,F77SKERNEL223)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel223nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel223nf,F77SKERNEL223NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL223_F77S_H_
-#define _NBKERNEL223_F77S_H_
-
-/*! \file nb_kernel223_f77_single.h
- * \brief Nonbonded kernel 223 (RF Coul + Bham, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 223 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel223_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 223 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel223nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL223_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel224_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 224
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel224,F77SKERNEL224)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel224nf,F77SKERNEL224NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel224_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel224,F77SKERNEL224)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel224nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel224nf,F77SKERNEL224NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL224_F77S_H_
-#define _NBKERNEL224_F77S_H_
-
-/*! \file nb_kernel224_f77_single.h
- * \brief Nonbonded kernel 224 (RF Coul + Bham, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 224 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel224_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 224 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel224nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL224_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel230_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 230
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel230,F77SKERNEL230)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel230nf,F77SKERNEL230NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel230_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel230,F77SKERNEL230)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel230nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel230nf,F77SKERNEL230NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL230_F77S_H_
-#define _NBKERNEL230_F77S_H_
-
-/*! \file nb_kernel230_f77_single.h
- * \brief Nonbonded kernel 230 (RF Coul + Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 230 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel230_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 230 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel230nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL230_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel231_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 231
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel231,F77SKERNEL231)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel231nf,F77SKERNEL231NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel231_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel231,F77SKERNEL231)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel231nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel231nf,F77SKERNEL231NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL231_F77S_H_
-#define _NBKERNEL231_F77S_H_
-
-/*! \file nb_kernel231_f77_single.h
- * \brief Nonbonded kernel 231 (RF Coul + Tab VdW, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 231 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel231_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 231 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel231nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL231_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel232_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 232
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel232,F77SKERNEL232)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel232nf,F77SKERNEL232NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel232_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel232,F77SKERNEL232)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel232nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel232nf,F77SKERNEL232NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL232_F77S_H_
-#define _NBKERNEL232_F77S_H_
-
-/*! \file nb_kernel232_f77_single.h
- * \brief Nonbonded kernel 232 (RF Coul + Tab VdW, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 232 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel232_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 232 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel232nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL232_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel233_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 233
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel233,F77SKERNEL233)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel233nf,F77SKERNEL233NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel233_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel233,F77SKERNEL233)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel233nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel233nf,F77SKERNEL233NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL233_F77S_H_
-#define _NBKERNEL233_F77S_H_
-
-/*! \file nb_kernel233_f77_single.h
- * \brief Nonbonded kernel 233 (RF Coul + Tab VdW, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 233 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel233_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 233 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel233nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL233_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel234_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 234
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel234,F77SKERNEL234)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel234nf,F77SKERNEL234NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel234_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel234,F77SKERNEL234)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel234nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel234nf,F77SKERNEL234NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL234_F77S_H_
-#define _NBKERNEL234_F77S_H_
-
-/*! \file nb_kernel234_f77_single.h
- * \brief Nonbonded kernel 234 (RF Coul + Tab VdW, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 234 with forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel234_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 234 without forces.
- *
- * <b>Coulomb interaction:</b> Reaction-Field <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel234nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL234_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel300_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 300
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel300,F77SKERNEL300)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel300nf,F77SKERNEL300NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel300_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel300,F77SKERNEL300)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel300nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel300nf,F77SKERNEL300NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL300_F77S_H_
-#define _NBKERNEL300_F77S_H_
-
-/*! \file nb_kernel300_f77_single.h
- * \brief Nonbonded kernel 300 (Tab Coul)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 300 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel300_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 300 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel300nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL300_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel301_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 301
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel301,F77SKERNEL301)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel301nf,F77SKERNEL301NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel301_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel301,F77SKERNEL301)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel301nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel301nf,F77SKERNEL301NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL301_F77S_H_
-#define _NBKERNEL301_F77S_H_
-
-/*! \file nb_kernel301_f77_single.h
- * \brief Nonbonded kernel 301 (Tab Coul, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 301 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel301_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 301 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel301nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL301_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel302_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 302
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel302,F77SKERNEL302)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel302nf,F77SKERNEL302NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel302_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel302,F77SKERNEL302)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel302nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel302nf,F77SKERNEL302NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL302_F77S_H_
-#define _NBKERNEL302_F77S_H_
-
-/*! \file nb_kernel302_f77_single.h
- * \brief Nonbonded kernel 302 (Tab Coul, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 302 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel302_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 302 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel302nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL302_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel303_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 303
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel303,F77SKERNEL303)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel303nf,F77SKERNEL303NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel303_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel303,F77SKERNEL303)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel303nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel303nf,F77SKERNEL303NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL303_F77S_H_
-#define _NBKERNEL303_F77S_H_
-
-/*! \file nb_kernel303_f77_single.h
- * \brief Nonbonded kernel 303 (Tab Coul, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 303 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel303_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 303 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel303nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL303_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel304_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 304
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel304,F77SKERNEL304)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel304nf,F77SKERNEL304NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel304_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel304,F77SKERNEL304)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel304nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel304nf,F77SKERNEL304NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL304_F77S_H_
-#define _NBKERNEL304_F77S_H_
-
-/*! \file nb_kernel304_f77_single.h
- * \brief Nonbonded kernel 304 (Tab Coul, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 304 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel304_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 304 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel304nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL304_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel310_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 310
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel310,F77SKERNEL310)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel310nf,F77SKERNEL310NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel310_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel310,F77SKERNEL310)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel310nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel310nf,F77SKERNEL310NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL310_F77S_H_
-#define _NBKERNEL310_F77S_H_
-
-/*! \file nb_kernel310_f77_single.h
- * \brief Nonbonded kernel 310 (Tab Coul + LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 310 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel310_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 310 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel310nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL310_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel311_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 311
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel311,F77SKERNEL311)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel311nf,F77SKERNEL311NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel311_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel311,F77SKERNEL311)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel311nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel311nf,F77SKERNEL311NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL311_F77S_H_
-#define _NBKERNEL311_F77S_H_
-
-/*! \file nb_kernel311_f77_single.h
- * \brief Nonbonded kernel 311 (Tab Coul + LJ, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 311 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel311_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 311 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel311nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL311_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel312_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 312
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel312,F77SKERNEL312)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel312nf,F77SKERNEL312NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel312_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel312,F77SKERNEL312)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel312nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel312nf,F77SKERNEL312NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL312_F77S_H_
-#define _NBKERNEL312_F77S_H_
-
-/*! \file nb_kernel312_f77_single.h
- * \brief Nonbonded kernel 312 (Tab Coul + LJ, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 312 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel312_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 312 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel312nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL312_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel313_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 313
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel313,F77SKERNEL313)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel313nf,F77SKERNEL313NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel313_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel313,F77SKERNEL313)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel313nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel313nf,F77SKERNEL313NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL313_F77S_H_
-#define _NBKERNEL313_F77S_H_
-
-/*! \file nb_kernel313_f77_single.h
- * \brief Nonbonded kernel 313 (Tab Coul + LJ, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 313 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel313_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 313 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel313nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL313_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel314_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 314
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel314,F77SKERNEL314)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel314nf,F77SKERNEL314NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel314_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel314,F77SKERNEL314)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel314nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel314nf,F77SKERNEL314NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL314_F77S_H_
-#define _NBKERNEL314_F77S_H_
-
-/*! \file nb_kernel314_f77_single.h
- * \brief Nonbonded kernel 314 (Tab Coul + LJ, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 314 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel314_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 314 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel314nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL314_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel320_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 320
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel320,F77SKERNEL320)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel320nf,F77SKERNEL320NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel320_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel320,F77SKERNEL320)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel320nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel320nf,F77SKERNEL320NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL320_F77S_H_
-#define _NBKERNEL320_F77S_H_
-
-/*! \file nb_kernel320_f77_single.h
- * \brief Nonbonded kernel 320 (Tab Coul + Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 320 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel320_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 320 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel320nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL320_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel321_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 321
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel321,F77SKERNEL321)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel321nf,F77SKERNEL321NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel321_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel321,F77SKERNEL321)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel321nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel321nf,F77SKERNEL321NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL321_F77S_H_
-#define _NBKERNEL321_F77S_H_
-
-/*! \file nb_kernel321_f77_single.h
- * \brief Nonbonded kernel 321 (Tab Coul + Bham, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 321 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel321_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 321 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel321nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL321_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel322_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 322
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel322,F77SKERNEL322)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel322nf,F77SKERNEL322NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel322_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel322,F77SKERNEL322)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel322nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel322nf,F77SKERNEL322NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL322_F77S_H_
-#define _NBKERNEL322_F77S_H_
-
-/*! \file nb_kernel322_f77_single.h
- * \brief Nonbonded kernel 322 (Tab Coul + Bham, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 322 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel322_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 322 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel322nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL322_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel323_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 323
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel323,F77SKERNEL323)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel323nf,F77SKERNEL323NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel323_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel323,F77SKERNEL323)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel323nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel323nf,F77SKERNEL323NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL323_F77S_H_
-#define _NBKERNEL323_F77S_H_
-
-/*! \file nb_kernel323_f77_single.h
- * \brief Nonbonded kernel 323 (Tab Coul + Bham, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 323 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel323_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 323 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel323nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL323_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel324_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 324
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel324,F77SKERNEL324)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel324nf,F77SKERNEL324NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel324_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel324,F77SKERNEL324)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel324nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel324nf,F77SKERNEL324NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL324_F77S_H_
-#define _NBKERNEL324_F77S_H_
-
-/*! \file nb_kernel324_f77_single.h
- * \brief Nonbonded kernel 324 (Tab Coul + Bham, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 324 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel324_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 324 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel324nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL324_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel330_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 330
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel330,F77SKERNEL330)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel330nf,F77SKERNEL330NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel330_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel330,F77SKERNEL330)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel330nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel330nf,F77SKERNEL330NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL330_F77S_H_
-#define _NBKERNEL330_F77S_H_
-
-/*! \file nb_kernel330_f77_single.h
- * \brief Nonbonded kernel 330 (Tab Coul + Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 330 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel330_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 330 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel330nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL330_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel331_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 331
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel331,F77SKERNEL331)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel331nf,F77SKERNEL331NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel331_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel331,F77SKERNEL331)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel331nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel331nf,F77SKERNEL331NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL331_F77S_H_
-#define _NBKERNEL331_F77S_H_
-
-/*! \file nb_kernel331_f77_single.h
- * \brief Nonbonded kernel 331 (Tab Coul + Tab VdW, SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 331 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel331_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 331 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel331nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL331_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel332_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 332
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel332,F77SKERNEL332)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel332nf,F77SKERNEL332NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel332_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel332,F77SKERNEL332)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel332nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel332nf,F77SKERNEL332NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL332_F77S_H_
-#define _NBKERNEL332_F77S_H_
-
-/*! \file nb_kernel332_f77_single.h
- * \brief Nonbonded kernel 332 (Tab Coul + Tab VdW, SPC-SPC)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 332 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel332_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 332 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> SPC - SPC <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel332nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL332_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel333_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 333
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel333,F77SKERNEL333)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel333nf,F77SKERNEL333NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel333_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel333,F77SKERNEL333)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel333nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel333nf,F77SKERNEL333NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL333_F77S_H_
-#define _NBKERNEL333_F77S_H_
-
-/*! \file nb_kernel333_f77_single.h
- * \brief Nonbonded kernel 333 (Tab Coul + Tab VdW, TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 333 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel333_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 333 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - other atoms <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel333nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL333_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel334_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 334
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel334,F77SKERNEL334)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel334nf,F77SKERNEL334NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel334_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel334,F77SKERNEL334)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel334nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel334nf,F77SKERNEL334NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL334_F77S_H_
-#define _NBKERNEL334_F77S_H_
-
-/*! \file nb_kernel334_f77_single.h
- * \brief Nonbonded kernel 334 (Tab Coul + Tab VdW, TIP4p-TIP4p)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 334 with forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel334_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 334 without forces.
- *
- * <b>Coulomb interaction:</b> Tabulated <br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> TIP4p - TIP4p <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel334nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL334_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel400_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 400
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel400,F77SKERNEL400)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel400nf,F77SKERNEL400NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel400_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel400,F77SKERNEL400)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel400nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel400nf,F77SKERNEL400NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL400_F77S_H_
-#define _NBKERNEL400_F77S_H_
-
-/*! \file nb_kernel400_f77_single.h
- * \brief Nonbonded kernel 400 (GB Coul)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 400 with forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel400_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 400 without forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> No <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel400nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL400_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel410_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 410
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel410,F77SKERNEL410)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel410nf,F77SKERNEL410NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel410_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel410,F77SKERNEL410)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel410nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel410nf,F77SKERNEL410NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL410_F77S_H_
-#define _NBKERNEL410_F77S_H_
-
-/*! \file nb_kernel410_f77_single.h
- * \brief Nonbonded kernel 410 (GB Coul + LJ)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 410 with forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel410_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 410 without forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Lennard-Jones <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel410nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL410_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel420_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 420
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel420,F77SKERNEL420)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel420nf,F77SKERNEL420NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel420_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel420,F77SKERNEL420)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel420nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel420nf,F77SKERNEL420NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL420_F77S_H_
-#define _NBKERNEL420_F77S_H_
-
-/*! \file nb_kernel420_f77_single.h
- * \brief Nonbonded kernel 420 (GB Coul + Bham)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 420 with forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel420_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter);
-
-
-/*! \brief Nonbonded kernel 420 without forces.
- *
- * \internal Generated at compile time in either C or Fortran
- * <b>VdW interaction:</b> Buckingham <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel420nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL420_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-/*! \file nb_kernel430_f77_single.c
- * \brief Wrapper for fortran nonbonded kernel 430
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifndef F77_FUNC
-#define F77_FUNC(name,NAME) name ## _
-#endif
-
-/* Declarations of Fortran routines.
- * We avoid using underscores in F77 identifiers for portability!
- */
-void
-F77_FUNC(f77skernel430,F77SKERNEL430)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-void
-F77_FUNC(f77skernel430nf,F77SKERNEL430NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work);
-
-
-void
-nb_kernel430_f77_single
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, float * shiftvec,
- float * fshift, int * gid,
- float * pos, float * faction,
- float * charge, float * facel,
- float * krf, float * crf,
- float * Vc, int * type,
- int * ntype, float * vdwparam,
- float * Vvdw, float * tabscale,
- float * VFtab, float * invsqrta,
- float * dvda, float * gbtabscale,
- float * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel430,F77SKERNEL430)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
-
-void
-nb_kernel430nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], float shiftvec[],
- float fshift[], int gid[],
- float pos[], float faction[],
- float charge[], float * facel,
- float * krf, float * crf,
- float Vc[], int type[],
- int * ntype, float vdwparam[],
- float Vvdw[], float * tabscale,
- float VFtab[], float invsqrta[],
- float dvda[], float * gbtabscale,
- float GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- float * work)
-{
- F77_FUNC(f77skernel430nf,F77SKERNEL430NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,gid,pos,faction,
- charge,facel,krf,crf,Vc,type,ntype,vdwparam,Vvdw,tabscale,
- VFtab,invsqrta,dvda,gbtabscale,GBtab,nthreads,count,mtx,
- outeriter,inneriter,work);
-}
-
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL430_F77S_H_
-#define _NBKERNEL430_F77S_H_
-
-/*! \file nb_kernel430_f77_single.h
- * \brief Nonbonded kernel 430 (GB Coul + Tab VdW)
- *
- * \internal
- */
-
-#include "types/simple.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if 0
-}
-#endif
-
-
-/*! \brief Nonbonded kernel 430 with forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> Yes <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel430_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-/*! \brief Nonbonded kernel 430 without forces.
- *
- * <b>Coulomb interaction:</b> Generalized Born<br>
- * <b>VdW interaction:</b> Tabulated <br>
- * <b>Water optimization:</b> No <br>
- * <b>Forces calculated:</b> No <br>
- *
- * \note All level1 and level2 nonbonded kernels use the same
- * call sequence. Parameters are documented in nb_kernel_f77_single.h
- */
-void
-nb_kernel430nf_f77_single
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real work[]);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _NBKERNEL430_F77S_H_ */
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-
-#include "types/nrnb.h"
-#include "nb_kernel_f77_single.h"
-#include "../nb_kernel.h"
-
-
-/* Include standard kernel headers in local directory */
-#include "nb_kernel010_f77_single.h"
-#include "nb_kernel020_f77_single.h"
-#include "nb_kernel030_f77_single.h"
-#include "nb_kernel100_f77_single.h"
-#include "nb_kernel101_f77_single.h"
-#include "nb_kernel102_f77_single.h"
-#include "nb_kernel103_f77_single.h"
-#include "nb_kernel104_f77_single.h"
-#include "nb_kernel110_f77_single.h"
-#include "nb_kernel111_f77_single.h"
-#include "nb_kernel112_f77_single.h"
-#include "nb_kernel113_f77_single.h"
-#include "nb_kernel114_f77_single.h"
-#include "nb_kernel120_f77_single.h"
-#include "nb_kernel121_f77_single.h"
-#include "nb_kernel122_f77_single.h"
-#include "nb_kernel123_f77_single.h"
-#include "nb_kernel124_f77_single.h"
-#include "nb_kernel130_f77_single.h"
-#include "nb_kernel131_f77_single.h"
-#include "nb_kernel132_f77_single.h"
-#include "nb_kernel133_f77_single.h"
-#include "nb_kernel134_f77_single.h"
-#include "nb_kernel200_f77_single.h"
-#include "nb_kernel201_f77_single.h"
-#include "nb_kernel202_f77_single.h"
-#include "nb_kernel203_f77_single.h"
-#include "nb_kernel204_f77_single.h"
-#include "nb_kernel210_f77_single.h"
-#include "nb_kernel211_f77_single.h"
-#include "nb_kernel212_f77_single.h"
-#include "nb_kernel213_f77_single.h"
-#include "nb_kernel214_f77_single.h"
-#include "nb_kernel220_f77_single.h"
-#include "nb_kernel221_f77_single.h"
-#include "nb_kernel222_f77_single.h"
-#include "nb_kernel223_f77_single.h"
-#include "nb_kernel224_f77_single.h"
-#include "nb_kernel230_f77_single.h"
-#include "nb_kernel231_f77_single.h"
-#include "nb_kernel232_f77_single.h"
-#include "nb_kernel233_f77_single.h"
-#include "nb_kernel234_f77_single.h"
-#include "nb_kernel300_f77_single.h"
-#include "nb_kernel301_f77_single.h"
-#include "nb_kernel302_f77_single.h"
-#include "nb_kernel303_f77_single.h"
-#include "nb_kernel304_f77_single.h"
-#include "nb_kernel310_f77_single.h"
-#include "nb_kernel311_f77_single.h"
-#include "nb_kernel312_f77_single.h"
-#include "nb_kernel313_f77_single.h"
-#include "nb_kernel314_f77_single.h"
-#include "nb_kernel320_f77_single.h"
-#include "nb_kernel321_f77_single.h"
-#include "nb_kernel322_f77_single.h"
-#include "nb_kernel323_f77_single.h"
-#include "nb_kernel324_f77_single.h"
-#include "nb_kernel330_f77_single.h"
-#include "nb_kernel331_f77_single.h"
-#include "nb_kernel332_f77_single.h"
-#include "nb_kernel333_f77_single.h"
-#include "nb_kernel334_f77_single.h"
-#include "nb_kernel400_f77_single.h"
-#include "nb_kernel410_f77_single.h"
-#include "nb_kernel420_f77_single.h"
-#include "nb_kernel430_f77_single.h"
-
-
-static nb_kernel_t *
-kernellist[eNR_NBKERNEL_NR] =
-{
- nb_kernel010_f77_single,
- nb_kernel020_f77_single,
- nb_kernel030_f77_single,
- nb_kernel100_f77_single,
- nb_kernel101_f77_single,
- nb_kernel102_f77_single,
- nb_kernel103_f77_single,
- nb_kernel104_f77_single,
- nb_kernel110_f77_single,
- nb_kernel111_f77_single,
- nb_kernel112_f77_single,
- nb_kernel113_f77_single,
- nb_kernel114_f77_single,
- nb_kernel120_f77_single,
- nb_kernel121_f77_single,
- nb_kernel122_f77_single,
- nb_kernel123_f77_single,
- nb_kernel124_f77_single,
- nb_kernel130_f77_single,
- nb_kernel131_f77_single,
- nb_kernel132_f77_single,
- nb_kernel133_f77_single,
- nb_kernel134_f77_single,
- nb_kernel200_f77_single,
- nb_kernel201_f77_single,
- nb_kernel202_f77_single,
- nb_kernel203_f77_single,
- nb_kernel204_f77_single,
- nb_kernel210_f77_single,
- nb_kernel211_f77_single,
- nb_kernel212_f77_single,
- nb_kernel213_f77_single,
- nb_kernel214_f77_single,
- nb_kernel220_f77_single,
- nb_kernel221_f77_single,
- nb_kernel222_f77_single,
- nb_kernel223_f77_single,
- nb_kernel224_f77_single,
- nb_kernel230_f77_single,
- nb_kernel231_f77_single,
- nb_kernel232_f77_single,
- nb_kernel233_f77_single,
- nb_kernel234_f77_single,
- nb_kernel300_f77_single,
- nb_kernel301_f77_single,
- nb_kernel302_f77_single,
- nb_kernel303_f77_single,
- nb_kernel304_f77_single,
- nb_kernel310_f77_single,
- nb_kernel311_f77_single,
- nb_kernel312_f77_single,
- nb_kernel313_f77_single,
- nb_kernel314_f77_single,
- nb_kernel320_f77_single,
- nb_kernel321_f77_single,
- nb_kernel322_f77_single,
- nb_kernel323_f77_single,
- nb_kernel324_f77_single,
- nb_kernel330_f77_single,
- nb_kernel331_f77_single,
- nb_kernel332_f77_single,
- nb_kernel333_f77_single,
- nb_kernel334_f77_single,
- nb_kernel400_f77_single,
- nb_kernel410_f77_single,
- nb_kernel430_f77_single,
- nb_kernel010nf_f77_single,
- nb_kernel020nf_f77_single,
- nb_kernel030nf_f77_single,
- nb_kernel100nf_f77_single,
- nb_kernel101nf_f77_single,
- nb_kernel102nf_f77_single,
- nb_kernel103nf_f77_single,
- nb_kernel104nf_f77_single,
- nb_kernel110nf_f77_single,
- nb_kernel111nf_f77_single,
- nb_kernel112nf_f77_single,
- nb_kernel113nf_f77_single,
- nb_kernel114nf_f77_single,
- nb_kernel120nf_f77_single,
- nb_kernel121nf_f77_single,
- nb_kernel122nf_f77_single,
- nb_kernel123nf_f77_single,
- nb_kernel124nf_f77_single,
- nb_kernel130nf_f77_single,
- nb_kernel131nf_f77_single,
- nb_kernel132nf_f77_single,
- nb_kernel133nf_f77_single,
- nb_kernel134nf_f77_single,
- nb_kernel200nf_f77_single,
- nb_kernel201nf_f77_single,
- nb_kernel202nf_f77_single,
- nb_kernel203nf_f77_single,
- nb_kernel204nf_f77_single,
- nb_kernel210nf_f77_single,
- nb_kernel211nf_f77_single,
- nb_kernel212nf_f77_single,
- nb_kernel213nf_f77_single,
- nb_kernel214nf_f77_single,
- nb_kernel220nf_f77_single,
- nb_kernel221nf_f77_single,
- nb_kernel222nf_f77_single,
- nb_kernel223nf_f77_single,
- nb_kernel224nf_f77_single,
- nb_kernel230nf_f77_single,
- nb_kernel231nf_f77_single,
- nb_kernel232nf_f77_single,
- nb_kernel233nf_f77_single,
- nb_kernel234nf_f77_single,
- nb_kernel300nf_f77_single,
- nb_kernel301nf_f77_single,
- nb_kernel302nf_f77_single,
- nb_kernel303nf_f77_single,
- nb_kernel304nf_f77_single,
- nb_kernel310nf_f77_single,
- nb_kernel311nf_f77_single,
- nb_kernel312nf_f77_single,
- nb_kernel313nf_f77_single,
- nb_kernel314nf_f77_single,
- nb_kernel320nf_f77_single,
- nb_kernel321nf_f77_single,
- nb_kernel322nf_f77_single,
- nb_kernel323nf_f77_single,
- nb_kernel324nf_f77_single,
- nb_kernel330nf_f77_single,
- nb_kernel331nf_f77_single,
- nb_kernel332nf_f77_single,
- nb_kernel333nf_f77_single,
- nb_kernel334nf_f77_single,
- nb_kernel400nf_f77_single,
- nb_kernel410nf_f77_single,
- nb_kernel430nf_f77_single,
-};
-
-
-void
-nb_kernel_setup_f77_single(FILE *log,nb_kernel_t **list)
-{
- int i;
- nb_kernel_t *p;
-
- if(log)
- fprintf(log,"Configuring single precision Fortran kernels...\n");
-
- for(i=0;i<eNR_NBKERNEL_NR;i++)
- {
- p = kernellist[i];
- if(p!=NULL)
- list[i] = p;
- }
-}
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-#ifndef _NBKERNEL_F77S_H_
-#define _NBKERNEL_F77S_H_
-
-/** The vanilla nonbonded Gromacs kernels (portable, written in C).
- *
- * \file nb_kernel_f77_single.h
- *
- * \internal
- */
-
-#include <stdio.h>
-
-#include "../nb_kernel.h"
-
-void
-nb_kernel_setup_f77_single(FILE *fplog,nb_kernel_t **list);
-
-#endif /* _NBKERNEL_F77S_H_ */
-
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To help fund GROMACS development, we humbly ask that you cite
- * the papers people have written on it - you can find them on the website!
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
-#endif
-
-#include <stdio.h>
-
-/*! \brief Lock innerloop mutex and read lists indices
- *
- * \internal
- *
- * This routine is only used when both Fortran innerloops
- * and threads are enabled.
- *
- * Since the Fortran77 standard does not include support
- * for POSIX threads, we call this routine instead which
- *
- * - Locks the provided mutex
- * - Reads the counter from memory
- * - Advances the counter in successively smaller chunks
- * - Releases the mutex
- *
- * In other words, it performs exactly the same action as
- * we do natively in the nonbonded kernel outer loop
- * when using C language for the kernels.
- *
- * Fortran does not know anything about a mutex, but since
- * arguments are passed by reference we mask it as a pointer
- * to an integer in the Fortran code.
- *
- * \param mtx Pointer to the mutex to use, masked as int
- * \param count Pointer to the outer loop counter
- * \param nri Total umber of (outer loop) neighborlists
- * \param nthreads Number of working threads
- * \param nn0 Returned value: Low index to use for outerloop
- * \param nn1 Returned value: High index to use for outerloop
- *
- * \warning There is one possible cause of problems. Some
- * fortran compilers make all variables static by
- * default, and that will obviously screw up
- * multithreading in a major way. If your Fortran
- * compiler does this you only have two alternatives:
- * Either find the flag to turn it off, or compile
- * Gromacs without any Fortran nonbonded kernels.
- */
-void
-F77_FUNC(f77kernelsync,F77KERNELSYNC)
- (int * mtx,
- int * count,
- int * nri,
- int * nthreads,
- int * nn0,
- int * nn1)
-{
- int n0,n1;
-
-
-#ifdef HAVE_PTHREADS_H
- pthread_mutex_lock((pthread_mutex_t *)mtx);
-#endif
- n0 = *count;
- /* Take successively smaller chunks */
- n1 = n0+((*nri)-n0)/(2*(*nthreads))+3;
- *count = n1;
-#ifdef HAVE_PTHREADS_H
- pthread_mutex_unlock((pthread_mutex_t *)mtx);
-#endif
- *nn0 = n0;
- *nn1 = n1;
-}