These Power6 kernels are no longer used in the code.
Based on benchmarks, we will decide whether a Fortran
version is necessary before the final 4.6 release.
Change-Id: Iab5341ce9cc99e2498b648d3a598c11503d87711
+++ /dev/null
-/*
- * This source code is part of
- *
- * G R O M A C S
- *
- * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
- * Copyright (c) 2001-2009, The GROMACS Development Team
- *
- * Gromacs is a library for molecular simulation and trajectory analysis,
- * written by Erik Lindahl, David van der Spoel, Berk Hess, and others - for
- * a full list of developers and information, check out http://www.gromacs.org
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Lesser General Public License as published by the Free
- * Software Foundation; either version 2 of the License, or (at your option) any
- * later version.
- * As a special exception, you may use this file as part of a free software
- * library without restriction. Specifically, if other files instantiate
- * templates or use macros or inline functions from this file, or you compile
- * this file and link it with other files to produce an executable, this
- * file does not by itself cause the resulting executable to be covered by
- * the GNU Lesser General Public License.
- *
- * In plain-speak: do not worry about classes/macros/templates either - only
- * changes to the library have to be LGPL, not an application linking with it.
- *
- * To 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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 010
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel010,PWR6KERNEL010)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel010nf,PWR6KERNEL010NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel010_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel010,PWR6KERNEL010)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel010nf,PWR6KERNEL010NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL010_POWER6_H_
-
-/*! \file nb_kernel010_power6.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_power6.h
- */
-void
-nb_kernel010_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, 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_power6.h
- */
-void
-nb_kernel010nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 020
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel020,PWR6KERNEL020)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel020nf,PWR6KERNEL020NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel020_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel020,PWR6KERNEL020)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel020nf,PWR6KERNEL020NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL020_POWER6_H_
-
-/*! \file nb_kernel020_power6.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_power6.h
- */
-void
-nb_kernel020_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel020nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 030
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel030,PWR6KERNEL030)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel030nf,PWR6KERNEL030NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel030_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel030,PWR6KERNEL030)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel030nf,PWR6KERNEL030NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL030_POWER6_H_
-
-/*! \file nb_kernel030_power6.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_power6.h
- */
-void
-nb_kernel030_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel030nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 100
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel100,PWR6KERNEL100)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel100nf,PWR6KERNEL100NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel100_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel100,PWR6KERNEL100)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel100nf,PWR6KERNEL100NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL100_POWER6_H_
-
-/*! \file nb_kernel100_power6.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_power6.h
- */
-void
-nb_kernel100_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel100nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 101
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel101,PWR6KERNEL101)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel101nf,PWR6KERNEL101NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel101_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel101,PWR6KERNEL101)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel101nf,PWR6KERNEL101NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL101_POWER6_H_
-
-/*! \file nb_kernel101_power6.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_power6.h
- */
-void
-nb_kernel101_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel101nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 102
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel102,PWR6KERNEL102)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel102nf,PWR6KERNEL102NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel102_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel102,PWR6KERNEL102)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel102nf,PWR6KERNEL102NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL102_POWER6_H_
-
-/*! \file nb_kernel102_power6.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_power6.h
- */
-void
-nb_kernel102_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel102nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 103
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel103,PWR6KERNEL103)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel103nf,PWR6KERNEL103NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel103_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel103,PWR6KERNEL103)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel103nf,PWR6KERNEL103NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL103_POWER6_H_
-
-/*! \file nb_kernel103_power6.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_power6.h
- */
-void
-nb_kernel103_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel103nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 104
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel104,PWR6KERNEL104)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel104nf,PWR6KERNEL104NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel104_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel104,PWR6KERNEL104)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel104nf,PWR6KERNEL104NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL104_POWER6_H_
-
-/*! \file nb_kernel104_power6.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_power6.h
- */
-void
-nb_kernel104_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel104nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 110
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel110,PWR6KERNEL110)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel110nf,PWR6KERNEL110NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel110_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel110,PWR6KERNEL110)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel110nf,PWR6KERNEL110NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL110_POWER6_H_
-
-/*! \file nb_kernel110_power6.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_power6.h
- */
-void
-nb_kernel110_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel110nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 111
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel111,PWR6KERNEL111)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel111nf,PWR6KERNEL111NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel111_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel111,PWR6KERNEL111)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel111nf,PWR6KERNEL111NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL111_POWER6_H_
-
-/*! \file nb_kernel111_power6.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_power6.h
- */
-void
-nb_kernel111_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel111nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 112
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel112,PWR6KERNEL112)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel112nf,PWR6KERNEL112NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel112_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel112,PWR6KERNEL112)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel112nf,PWR6KERNEL112NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL112_POWER6_H_
-
-/*! \file nb_kernel112_power6.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_power6.h
- */
-void
-nb_kernel112_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel112nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 113
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel113,PWR6KERNEL113)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel113nf,PWR6KERNEL113NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel113_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel113,PWR6KERNEL113)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel113nf,PWR6KERNEL113NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL113_POWER6_H_
-
-/*! \file nb_kernel113_power6.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_power6.h
- */
-void
-nb_kernel113_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel113nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 114
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel114,PWR6KERNEL114)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel114nf,PWR6KERNEL114NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel114_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel114,PWR6KERNEL114)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel114nf,PWR6KERNEL114NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL114_POWER6_H_
-
-/*! \file nb_kernel114_power6.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_power6.h
- */
-void
-nb_kernel114_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel114nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 120
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel120,PWR6KERNEL120)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel120nf,PWR6KERNEL120NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel120_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel120,PWR6KERNEL120)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel120nf,PWR6KERNEL120NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL120_POWER6_H_
-
-/*! \file nb_kernel120_power6.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_power6.h
- */
-void
-nb_kernel120_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel120nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 121
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel121,PWR6KERNEL121)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel121nf,PWR6KERNEL121NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel121_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel121,PWR6KERNEL121)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel121nf,PWR6KERNEL121NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL121_POWER6_H_
-
-/*! \file nb_kernel121_power6.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_power6.h
- */
-void
-nb_kernel121_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel121nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 122
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel122,PWR6KERNEL122)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel122nf,PWR6KERNEL122NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel122_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel122,PWR6KERNEL122)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel122nf,PWR6KERNEL122NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL122_POWER6_H_
-
-/*! \file nb_kernel122_power6.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_power6.h
- */
-void
-nb_kernel122_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel122nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 123
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel123,PWR6KERNEL123)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel123nf,PWR6KERNEL123NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel123_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel123,PWR6KERNEL123)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel123nf,PWR6KERNEL123NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL123_POWER6_H_
-
-/*! \file nb_kernel123_power6.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_power6.h
- */
-void
-nb_kernel123_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel123nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 124
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel124,PWR6KERNEL124)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel124nf,PWR6KERNEL124NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel124_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel124,PWR6KERNEL124)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel124nf,PWR6KERNEL124NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL124_POWER6_H_
-
-/*! \file nb_kernel124_power6.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_power6.h
- */
-void
-nb_kernel124_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel124nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 130
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel130,PWR6KERNEL130)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel130nf,PWR6KERNEL130NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel130_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel130,PWR6KERNEL130)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel130nf,PWR6KERNEL130NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL130_POWER6_H_
-
-/*! \file nb_kernel130_power6.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_power6.h
- */
-void
-nb_kernel130_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel130nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 131
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel131,PWR6KERNEL131)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel131nf,PWR6KERNEL131NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel131_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel131,PWR6KERNEL131)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel131nf,PWR6KERNEL131NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL131_POWER6_H_
-
-/*! \file nb_kernel131_power6.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_power6.h
- */
-void
-nb_kernel131_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel131nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 132
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel132,PWR6KERNEL132)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel132nf,PWR6KERNEL132NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel132_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel132,PWR6KERNEL132)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel132nf,PWR6KERNEL132NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL132_POWER6_H_
-
-/*! \file nb_kernel132_power6.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_power6.h
- */
-void
-nb_kernel132_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel132nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 133
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel133,PWR6KERNEL133)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel133nf,PWR6KERNEL133NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel133_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel133,PWR6KERNEL133)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel133nf,PWR6KERNEL133NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL133_POWER6_H_
-
-/*! \file nb_kernel133_power6.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_power6.h
- */
-void
-nb_kernel133_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel133nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 134
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel134,PWR6KERNEL134)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel134nf,PWR6KERNEL134NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel134_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel134,PWR6KERNEL134)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel134nf,PWR6KERNEL134NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL134_POWER6_H_
-
-/*! \file nb_kernel134_power6.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_power6.h
- */
-void
-nb_kernel134_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel134nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 200
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel200,PWR6KERNEL200)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel200nf,PWR6KERNEL200NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel200_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel200,PWR6KERNEL200)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel200nf,PWR6KERNEL200NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL200_POWER6_H_
-
-/*! \file nb_kernel200_power6.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_power6.h
- */
-void
-nb_kernel200_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel200nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 201
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel201,PWR6KERNEL201)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel201nf,PWR6KERNEL201NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel201_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel201,PWR6KERNEL201)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel201nf,PWR6KERNEL201NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL201_POWER6_H_
-
-/*! \file nb_kernel201_power6.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_power6.h
- */
-void
-nb_kernel201_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel201nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 202
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel202,PWR6KERNEL202)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel202nf,PWR6KERNEL202NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel202_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel202,PWR6KERNEL202)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel202nf,PWR6KERNEL202NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL202_POWER6_H_
-
-/*! \file nb_kernel202_power6.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_power6.h
- */
-void
-nb_kernel202_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel202nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 203
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel203,PWR6KERNEL203)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel203nf,PWR6KERNEL203NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel203_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel203,PWR6KERNEL203)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel203nf,PWR6KERNEL203NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL203_POWER6_H_
-
-/*! \file nb_kernel203_power6.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_power6.h
- */
-void
-nb_kernel203_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel203nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 204
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel204,PWR6KERNEL204)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel204nf,PWR6KERNEL204NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel204_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel204,PWR6KERNEL204)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel204nf,PWR6KERNEL204NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL204_POWER6_H_
-
-/*! \file nb_kernel204_power6.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_power6.h
- */
-void
-nb_kernel204_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel204nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 210
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel210,PWR6KERNEL210)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel210nf,PWR6KERNEL210NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel210_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel210,PWR6KERNEL210)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel210nf,PWR6KERNEL210NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL210_POWER6_H_
-
-/*! \file nb_kernel210_power6.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_power6.h
- */
-void
-nb_kernel210_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel210nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 211
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel211,PWR6KERNEL211)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel211nf,PWR6KERNEL211NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel211_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel211,PWR6KERNEL211)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel211nf,PWR6KERNEL211NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL211_POWER6_H_
-
-/*! \file nb_kernel211_power6.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_power6.h
- */
-void
-nb_kernel211_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel211nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 212
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel212,PWR6KERNEL212)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel212nf,PWR6KERNEL212NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel212_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel212,PWR6KERNEL212)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel212nf,PWR6KERNEL212NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL212_POWER6_H_
-
-/*! \file nb_kernel212_power6.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_power6.h
- */
-void
-nb_kernel212_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel212nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 213
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel213,PWR6KERNEL213)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel213nf,PWR6KERNEL213NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel213_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel213,PWR6KERNEL213)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel213nf,PWR6KERNEL213NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL213_POWER6_H_
-
-/*! \file nb_kernel213_power6.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_power6.h
- */
-void
-nb_kernel213_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel213nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 214
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel214,PWR6KERNEL214)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel214nf,PWR6KERNEL214NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel214_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel214,PWR6KERNEL214)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel214nf,PWR6KERNEL214NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL214_POWER6_H_
-
-/*! \file nb_kernel214_power6.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_power6.h
- */
-void
-nb_kernel214_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel214nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 220
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel220,PWR6KERNEL220)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel220nf,PWR6KERNEL220NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel220_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel220,PWR6KERNEL220)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel220nf,PWR6KERNEL220NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL220_POWER6_H_
-
-/*! \file nb_kernel220_power6.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_power6.h
- */
-void
-nb_kernel220_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel220nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 221
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel221,PWR6KERNEL221)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel221nf,PWR6KERNEL221NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel221_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel221,PWR6KERNEL221)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel221nf,PWR6KERNEL221NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL221_POWER6_H_
-
-/*! \file nb_kernel221_power6.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_power6.h
- */
-void
-nb_kernel221_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel221nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 222
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel222,PWR6KERNEL222)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel222nf,PWR6KERNEL222NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel222_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel222,PWR6KERNEL222)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel222nf,PWR6KERNEL222NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL222_POWER6_H_
-
-/*! \file nb_kernel222_power6.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_power6.h
- */
-void
-nb_kernel222_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel222nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 223
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel223,PWR6KERNEL223)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel223nf,PWR6KERNEL223NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel223_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel223,PWR6KERNEL223)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel223nf,PWR6KERNEL223NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL223_POWER6_H_
-
-/*! \file nb_kernel223_power6.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_power6.h
- */
-void
-nb_kernel223_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel223nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 224
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel224,PWR6KERNEL224)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel224nf,PWR6KERNEL224NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel224_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel224,PWR6KERNEL224)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel224nf,PWR6KERNEL224NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL224_POWER6_H_
-
-/*! \file nb_kernel224_power6.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_power6.h
- */
-void
-nb_kernel224_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel224nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 230
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel230,PWR6KERNEL230)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel230nf,PWR6KERNEL230NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel230_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel230,PWR6KERNEL230)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel230nf,PWR6KERNEL230NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL230_POWER6_H_
-
-/*! \file nb_kernel230_power6.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_power6.h
- */
-void
-nb_kernel230_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel230nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 231
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel231,PWR6KERNEL231)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel231nf,PWR6KERNEL231NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel231_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel231,PWR6KERNEL231)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel231nf,PWR6KERNEL231NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL231_POWER6_H_
-
-/*! \file nb_kernel231_power6.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_power6.h
- */
-void
-nb_kernel231_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel231nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 232
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel232,PWR6KERNEL232)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel232nf,PWR6KERNEL232NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel232_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel232,PWR6KERNEL232)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel232nf,PWR6KERNEL232NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL232_POWER6_H_
-
-/*! \file nb_kernel232_power6.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_power6.h
- */
-void
-nb_kernel232_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel232nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 233
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel233,PWR6KERNEL233)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel233nf,PWR6KERNEL233NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel233_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel233,PWR6KERNEL233)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel233nf,PWR6KERNEL233NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL233_POWER6_H_
-
-/*! \file nb_kernel233_power6.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_power6.h
- */
-void
-nb_kernel233_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel233nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 234
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel234,PWR6KERNEL234)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel234nf,PWR6KERNEL234NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel234_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel234,PWR6KERNEL234)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel234nf,PWR6KERNEL234NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL234_POWER6_H_
-
-/*! \file nb_kernel234_power6.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_power6.h
- */
-void
-nb_kernel234_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel234nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 300
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel300,PWR6KERNEL300)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel300nf,PWR6KERNEL300NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel300_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel300,PWR6KERNEL300)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel300nf,PWR6KERNEL300NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL300_POWER6_H_
-
-/*! \file nb_kernel300_power6.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_power6.h
- */
-void
-nb_kernel300_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel300nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 301
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel301,PWR6KERNEL301)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel301nf,PWR6KERNEL301NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel301_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel301,PWR6KERNEL301)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel301nf,PWR6KERNEL301NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL301_POWER6_H_
-
-/*! \file nb_kernel301_power6.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_power6.h
- */
-void
-nb_kernel301_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel301nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 302
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel302,PWR6KERNEL302)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel302nf,PWR6KERNEL302NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel302_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel302,PWR6KERNEL302)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel302nf,PWR6KERNEL302NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL302_POWER6_H_
-
-/*! \file nb_kernel302_power6.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_power6.h
- */
-void
-nb_kernel302_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel302nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 303
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel303,PWR6KERNEL303)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel303nf,PWR6KERNEL303NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel303_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel303,PWR6KERNEL303)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel303nf,PWR6KERNEL303NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL303_POWER6_H_
-
-/*! \file nb_kernel303_power6.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_power6.h
- */
-void
-nb_kernel303_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel303nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 304
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel304,PWR6KERNEL304)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel304nf,PWR6KERNEL304NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel304_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel304,PWR6KERNEL304)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel304nf,PWR6KERNEL304NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL304_POWER6_H_
-
-/*! \file nb_kernel304_power6.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_power6.h
- */
-void
-nb_kernel304_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel304nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 310
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel310,PWR6KERNEL310)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel310nf,PWR6KERNEL310NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel310_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel310,PWR6KERNEL310)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel310nf,PWR6KERNEL310NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL310_POWER6_H_
-
-/*! \file nb_kernel310_power6.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_power6.h
- */
-void
-nb_kernel310_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel310nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 311
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel311,PWR6KERNEL311)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel311nf,PWR6KERNEL311NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel311_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel311,PWR6KERNEL311)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel311nf,PWR6KERNEL311NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL311_POWER6_H_
-
-/*! \file nb_kernel311_power6.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_power6.h
- */
-void
-nb_kernel311_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel311nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 312
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel312,PWR6KERNEL312)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel312nf,PWR6KERNEL312NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel312_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel312,PWR6KERNEL312)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel312nf,PWR6KERNEL312NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL312_POWER6_H_
-
-/*! \file nb_kernel312_power6.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_power6.h
- */
-void
-nb_kernel312_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel312nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 313
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel313,PWR6KERNEL313)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel313nf,PWR6KERNEL313NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel313_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel313,PWR6KERNEL313)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel313nf,PWR6KERNEL313NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL313_POWER6_H_
-
-/*! \file nb_kernel313_power6.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_power6.h
- */
-void
-nb_kernel313_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel313nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 314
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel314,PWR6KERNEL314)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel314nf,PWR6KERNEL314NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel314_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel314,PWR6KERNEL314)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel314nf,PWR6KERNEL314NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL314_POWER6_H_
-
-/*! \file nb_kernel314_power6.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_power6.h
- */
-void
-nb_kernel314_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel314nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 320
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel320,PWR6KERNEL320)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel320nf,PWR6KERNEL320NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel320_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel320,PWR6KERNEL320)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel320nf,PWR6KERNEL320NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL320_POWER6_H_
-
-/*! \file nb_kernel320_power6.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_power6.h
- */
-void
-nb_kernel320_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel320nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 321
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel321,PWR6KERNEL321)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel321nf,PWR6KERNEL321NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel321_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel321,PWR6KERNEL321)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel321nf,PWR6KERNEL321NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL321_POWER6_H_
-
-/*! \file nb_kernel321_power6.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_power6.h
- */
-void
-nb_kernel321_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel321nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 322
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel322,PWR6KERNEL322)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel322nf,PWR6KERNEL322NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel322_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel322,PWR6KERNEL322)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel322nf,PWR6KERNEL322NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL322_POWER6_H_
-
-/*! \file nb_kernel322_power6.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_power6.h
- */
-void
-nb_kernel322_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel322nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 323
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel323,PWR6KERNEL323)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel323nf,PWR6KERNEL323NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel323_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel323,PWR6KERNEL323)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel323nf,PWR6KERNEL323NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL323_POWER6_H_
-
-/*! \file nb_kernel323_power6.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_power6.h
- */
-void
-nb_kernel323_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel323nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 324
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel324,PWR6KERNEL324)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel324nf,PWR6KERNEL324NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel324_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel324,PWR6KERNEL324)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel324nf,PWR6KERNEL324NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL324_POWER6_H_
-
-/*! \file nb_kernel324_power6.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_power6.h
- */
-void
-nb_kernel324_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel324nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 330
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel330,PWR6KERNEL330)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel330nf,PWR6KERNEL330NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel330_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel330,PWR6KERNEL330)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel330nf,PWR6KERNEL330NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL330_POWER6_H_
-
-/*! \file nb_kernel330_power6.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_power6.h
- */
-void
-nb_kernel330_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel330nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 331
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel331,PWR6KERNEL331)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel331nf,PWR6KERNEL331NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel331_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel331,PWR6KERNEL331)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel331nf,PWR6KERNEL331NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL331_POWER6_H_
-
-/*! \file nb_kernel331_power6.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_power6.h
- */
-void
-nb_kernel331_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel331nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 332
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel332,PWR6KERNEL332)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel332nf,PWR6KERNEL332NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel332_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel332,PWR6KERNEL332)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel332nf,PWR6KERNEL332NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL332_POWER6_H_
-
-/*! \file nb_kernel332_power6.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_power6.h
- */
-void
-nb_kernel332_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel332nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 333
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel333,PWR6KERNEL333)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel333nf,PWR6KERNEL333NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel333_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel333,PWR6KERNEL333)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel333nf,PWR6KERNEL333NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL333_POWER6_H_
-
-/*! \file nb_kernel333_power6.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_power6.h
- */
-void
-nb_kernel333_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel333nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 334
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel334,PWR6KERNEL334)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel334nf,PWR6KERNEL334NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel334_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel334,PWR6KERNEL334)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel334nf,PWR6KERNEL334NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL334_POWER6_H_
-
-/*! \file nb_kernel334_power6.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_power6.h
- */
-void
-nb_kernel334_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel334nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 400
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel400,PWR6KERNEL400)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel400nf,PWR6KERNEL400NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel400_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel400,PWR6KERNEL400)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel400nf,PWR6KERNEL400NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL400_POWER6_H_
-
-/*! \file nb_kernel400_power6.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_power6.h
- */
-void
-nb_kernel400_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel400nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 410
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel410,PWR6KERNEL410)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel410nf,PWR6KERNEL410NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel410_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel410,PWR6KERNEL410)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel410nf,PWR6KERNEL410NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL410_POWER6_H_
-
-/*! \file nb_kernel410_power6.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_power6.h
- */
-void
-nb_kernel410_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel410nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 420
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel420,PWR6KERNEL420)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel420nf,PWR6KERNEL420NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel420_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel420,PWR6KERNEL420)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel420nf,PWR6KERNEL420NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL420_POWER6_H_
-
-/*! \file nb_kernel420_power6.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_power6.h
- */
-void
-nb_kernel420_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- 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_power6.h
- */
-void
-nb_kernel420nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- 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_POWER6_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_power6.c
- * \brief Wrapper for fortran nonbonded kernel 430
- *
- * \internal
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <types/simple.h>
-
-#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(pwr6kernel430,PWR6KERNEL430)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-void
-F77_FUNC(pwr6kernel430nf,PWR6KERNEL430NF)
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work);
-
-
-void
-nb_kernel430_power6
- (int * nri, int * iinr,
- int * jindex, int * jjnr,
- int * shift, real * shiftvec,
- real * fshift, int * gid,
- real * pos, real * faction,
- real * charge, real * facel,
- real * krf, real * crf,
- real * Vc, int * type,
- int * ntype, real * vdwparam,
- real * Vvdw, real * tabscale,
- real * VFtab, real * invsqrta,
- real * dvda, real * gbtabscale,
- real * GBtab, int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel430,PWR6KERNEL430)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], real * tabscale,
- real VFtab[], real invsqrta[],
- real dvda[], real * gbtabscale,
- real GBtab[], int * nthreads,
- int * count, void * mtx,
- int * outeriter, int * inneriter,
- real * work)
-{
- F77_FUNC(pwr6kernel430nf,PWR6KERNEL430NF)
- (nri,iinr,jindex,jjnr,shift,shiftvec,fshift,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_POWER6_H_
-#define _NBKERNEL430_POWER6_H_
-
-/*! \file nb_kernel430_power6.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_power6.h
- */
-void
-nb_kernel430_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_power6.h
- */
-void
-nb_kernel430nf_power6
- (int * nri, int iinr[],
- int jindex[], int jjnr[],
- int shift[], real shiftvec[],
- real fshift[], int gid[],
- real pos[], real faction[],
- real charge[], real * facel,
- real * krf, real * crf,
- real Vc[], int type[],
- int * ntype, real vdwparam[],
- real Vvdw[], 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_POWER6_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_power6.h"
-#include "../nb_kernel.h"
-
-
-/* Include standard kernel headers in local directory */
-#include "nb_kernel010_power6.h"
-#include "nb_kernel020_power6.h"
-#include "nb_kernel030_power6.h"
-#include "nb_kernel100_power6.h"
-#include "nb_kernel101_power6.h"
-#include "nb_kernel102_power6.h"
-#include "nb_kernel103_power6.h"
-#include "nb_kernel104_power6.h"
-#include "nb_kernel110_power6.h"
-#include "nb_kernel111_power6.h"
-#include "nb_kernel112_power6.h"
-#include "nb_kernel113_power6.h"
-#include "nb_kernel114_power6.h"
-#include "nb_kernel120_power6.h"
-#include "nb_kernel121_power6.h"
-#include "nb_kernel122_power6.h"
-#include "nb_kernel123_power6.h"
-#include "nb_kernel124_power6.h"
-#include "nb_kernel130_power6.h"
-#include "nb_kernel131_power6.h"
-#include "nb_kernel132_power6.h"
-#include "nb_kernel133_power6.h"
-#include "nb_kernel134_power6.h"
-#include "nb_kernel200_power6.h"
-#include "nb_kernel201_power6.h"
-#include "nb_kernel202_power6.h"
-#include "nb_kernel203_power6.h"
-#include "nb_kernel204_power6.h"
-#include "nb_kernel210_power6.h"
-#include "nb_kernel211_power6.h"
-#include "nb_kernel212_power6.h"
-#include "nb_kernel213_power6.h"
-#include "nb_kernel214_power6.h"
-#include "nb_kernel220_power6.h"
-#include "nb_kernel221_power6.h"
-#include "nb_kernel222_power6.h"
-#include "nb_kernel223_power6.h"
-#include "nb_kernel224_power6.h"
-#include "nb_kernel230_power6.h"
-#include "nb_kernel231_power6.h"
-#include "nb_kernel232_power6.h"
-#include "nb_kernel233_power6.h"
-#include "nb_kernel234_power6.h"
-#include "nb_kernel300_power6.h"
-#include "nb_kernel301_power6.h"
-#include "nb_kernel302_power6.h"
-#include "nb_kernel303_power6.h"
-#include "nb_kernel304_power6.h"
-#include "nb_kernel310_power6.h"
-#include "nb_kernel311_power6.h"
-#include "nb_kernel312_power6.h"
-#include "nb_kernel313_power6.h"
-#include "nb_kernel314_power6.h"
-#include "nb_kernel320_power6.h"
-#include "nb_kernel321_power6.h"
-#include "nb_kernel322_power6.h"
-#include "nb_kernel323_power6.h"
-#include "nb_kernel324_power6.h"
-#include "nb_kernel330_power6.h"
-#include "nb_kernel331_power6.h"
-#include "nb_kernel332_power6.h"
-#include "nb_kernel333_power6.h"
-#include "nb_kernel334_power6.h"
-#include "nb_kernel400_power6.h"
-#include "nb_kernel410_power6.h"
-#include "nb_kernel420_power6.h"
-#include "nb_kernel430_power6.h"
-
-
-static nb_kernel_t *
-kernellist[eNR_NBKERNEL_NR] =
-{
- nb_kernel010_power6,
- nb_kernel020_power6,
- nb_kernel030_power6,
- nb_kernel100_power6,
- nb_kernel101_power6,
- nb_kernel102_power6,
- nb_kernel103_power6,
- nb_kernel104_power6,
- nb_kernel110_power6,
- nb_kernel111_power6,
- nb_kernel112_power6,
- nb_kernel113_power6,
- nb_kernel114_power6,
- nb_kernel120_power6,
- nb_kernel121_power6,
- nb_kernel122_power6,
- nb_kernel123_power6,
- nb_kernel124_power6,
- nb_kernel130_power6,
- nb_kernel131_power6,
- nb_kernel132_power6,
- nb_kernel133_power6,
- nb_kernel134_power6,
- nb_kernel200_power6,
- nb_kernel201_power6,
- nb_kernel202_power6,
- nb_kernel203_power6,
- nb_kernel204_power6,
- nb_kernel210_power6,
- nb_kernel211_power6,
- nb_kernel212_power6,
- nb_kernel213_power6,
- nb_kernel214_power6,
- nb_kernel220_power6,
- nb_kernel221_power6,
- nb_kernel222_power6,
- nb_kernel223_power6,
- nb_kernel224_power6,
- nb_kernel230_power6,
- nb_kernel231_power6,
- nb_kernel232_power6,
- nb_kernel233_power6,
- nb_kernel234_power6,
- nb_kernel300_power6,
- nb_kernel301_power6,
- nb_kernel302_power6,
- nb_kernel303_power6,
- nb_kernel304_power6,
- nb_kernel310_power6,
- nb_kernel311_power6,
- nb_kernel312_power6,
- nb_kernel313_power6,
- nb_kernel314_power6,
- nb_kernel320_power6,
- nb_kernel321_power6,
- nb_kernel322_power6,
- nb_kernel323_power6,
- nb_kernel324_power6,
- nb_kernel330_power6,
- nb_kernel331_power6,
- nb_kernel332_power6,
- nb_kernel333_power6,
- nb_kernel334_power6,
- nb_kernel400_power6,
- nb_kernel410_power6,
- nb_kernel430_power6,
- nb_kernel010nf_power6,
- nb_kernel020nf_power6,
- nb_kernel030nf_power6,
- nb_kernel100nf_power6,
- nb_kernel101nf_power6,
- nb_kernel102nf_power6,
- nb_kernel103nf_power6,
- nb_kernel104nf_power6,
- nb_kernel110nf_power6,
- nb_kernel111nf_power6,
- nb_kernel112nf_power6,
- nb_kernel113nf_power6,
- nb_kernel114nf_power6,
- nb_kernel120nf_power6,
- nb_kernel121nf_power6,
- nb_kernel122nf_power6,
- nb_kernel123nf_power6,
- nb_kernel124nf_power6,
- nb_kernel130nf_power6,
- nb_kernel131nf_power6,
- nb_kernel132nf_power6,
- nb_kernel133nf_power6,
- nb_kernel134nf_power6,
- nb_kernel200nf_power6,
- nb_kernel201nf_power6,
- nb_kernel202nf_power6,
- nb_kernel203nf_power6,
- nb_kernel204nf_power6,
- nb_kernel210nf_power6,
- nb_kernel211nf_power6,
- nb_kernel212nf_power6,
- nb_kernel213nf_power6,
- nb_kernel214nf_power6,
- nb_kernel220nf_power6,
- nb_kernel221nf_power6,
- nb_kernel222nf_power6,
- nb_kernel223nf_power6,
- nb_kernel224nf_power6,
- nb_kernel230nf_power6,
- nb_kernel231nf_power6,
- nb_kernel232nf_power6,
- nb_kernel233nf_power6,
- nb_kernel234nf_power6,
- nb_kernel300nf_power6,
- nb_kernel301nf_power6,
- nb_kernel302nf_power6,
- nb_kernel303nf_power6,
- nb_kernel304nf_power6,
- nb_kernel310nf_power6,
- nb_kernel311nf_power6,
- nb_kernel312nf_power6,
- nb_kernel313nf_power6,
- nb_kernel314nf_power6,
- nb_kernel320nf_power6,
- nb_kernel321nf_power6,
- nb_kernel322nf_power6,
- nb_kernel323nf_power6,
- nb_kernel324nf_power6,
- nb_kernel330nf_power6,
- nb_kernel331nf_power6,
- nb_kernel332nf_power6,
- nb_kernel333nf_power6,
- nb_kernel334nf_power6,
- nb_kernel400nf_power6,
- nb_kernel410nf_power6,
- nb_kernel430nf_power6,
-};
-
-
-void
-nb_kernel_setup_power6(FILE *log,nb_kernel_t **list)
-{
- int i;
- nb_kernel_t *p;
-
- if(log)
- {
-#ifdef GMX_DOUBLE
- fprintf(log,"Configuring double precision IBM Power6-specific Fortran kernels...\n");
-#else
- fprintf(log,"Configuring single precision IBM Power6-specific Fortran kernels...\n");
-#endif
- }
-
- 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_POWER6_H_
-#define _NBKERNEL_POWER6_H_
-
-/** Gromacs kernels optimized for IBM Power5+/Power6/PPC440/PPC450
- *
- * \file nb_kernel_power6.h
- *
- * \internal
- */
-
-#include <stdio.h>
-
-#include "../nb_kernel.h"
-
-void
-nb_kernel_setup_power6(FILE *fplog,nb_kernel_t **list);
-
-#endif /* _NBKERNEL_POWER6_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(pwr6kernelsync,PWR6KERNELSYNC)
- (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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel010
-C Coulomb interaction: Not calculated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel010(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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 pwr6kernel010nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel010nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel020
-C Coulomb interaction: Not calculated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel020(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
- 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 pwr6kernel020nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel020nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
- 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel030
-C Coulomb interaction: Not calculated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel030(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
- 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 pwr6kernel030nf
-C Coulomb interaction: Not calculated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel030nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
- 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel100
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel100(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 28 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 pwr6kernel100nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel100nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal iq
- gmxreal qq,vcoul,vctot
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C Load parameters for j atom
- qq = iq*charge(jnr)
-
-C Coulomb interaction
- vcoul = qq*rinv11
- vctot = vctot+vcoul
-
-C Inner loop uses 17 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel101
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel101(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 83 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 pwr6kernel101nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel101nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 50 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel102
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel102(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 243 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 pwr6kernel102nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel102nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 144 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel103
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel103(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 83 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 pwr6kernel103nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel103nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 50 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel104
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel104(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 243 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 pwr6kernel104nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel104nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 144 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel110
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel110(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 39 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 pwr6kernel110nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel110nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 25 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel111
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel111(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 94 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 pwr6kernel111nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel111nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 58 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel112
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel112(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 254 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 pwr6kernel112nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel112nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 152 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel113
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel113(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 116 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 pwr6kernel113nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel113nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel114
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel114(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 276 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 pwr6kernel114nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel114nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 163 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel120
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel120(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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 pwr6kernel120nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel120nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 52 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel121
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel121(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 120 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 pwr6kernel121nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel121nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel122
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel122(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 280 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 pwr6kernel122nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel122nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 179 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel123
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel123(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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
- 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 pwr6kernel123nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel123nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 99 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel124
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel124(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 305 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 pwr6kernel124nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel124nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 193 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel130
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel130(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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 pwr6kernel130nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel130nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel131
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel131(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 115 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 pwr6kernel131nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel131nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel132
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel132(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 275 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 pwr6kernel132nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel132nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 164 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel133
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel133(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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
- 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 pwr6kernel133nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel133nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 84 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel134
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel134(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 298 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 pwr6kernel134nf
-C Coulomb interaction: Normal Coulomb
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel134nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 178 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel200
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel200(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 34 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 pwr6kernel200nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel200nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal iq
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 20 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel201
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel201(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 101 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 pwr6kernel201nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel201nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
-
-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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel202
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel202(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 297 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 pwr6kernel202nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel202nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 171 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel203
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel203(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 101 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 pwr6kernel203nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel203nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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
-
-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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel204
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel204(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 297 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 pwr6kernel204nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel204nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- gmxreal krsq
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 171 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel210
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel210(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 45 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 pwr6kernel210nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel210nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 28 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel211
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel211(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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 pwr6kernel211nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel211nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel212
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel212(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 308 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 pwr6kernel212nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel212nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 179 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel213
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel213(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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 pwr6kernel213nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel213nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 78 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel214
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel214(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 330 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 pwr6kernel214nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel214nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 190 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel220
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel220(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 71 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 pwr6kernel220nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel220nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel221
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel221(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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 pwr6kernel221nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel221nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 94 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel222
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel222(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 334 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 pwr6kernel222nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel222nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 206 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel223
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel223(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 163 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 pwr6kernel223nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel223nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel224
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel224(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 359 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 pwr6kernel224nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel224nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal krsq
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 220 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel230
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel230(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
- 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 pwr6kernel230nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel230nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 40 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel231
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel231(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 133 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 pwr6kernel231nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel231nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel232
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel232(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 329 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 pwr6kernel232nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel232nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 191 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel233
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel233(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 156 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 pwr6kernel233nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel233nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel234
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel234(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijD,fijR
- gmxreal krsq
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 352 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 pwr6kernel234nf
-C Coulomb interaction: Reaction field
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel234nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal krsq
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 205 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel300
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel300(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal iq
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
-
-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 pwr6kernel300nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel300nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal iq
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
-
-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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel301
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel301(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
- 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 pwr6kernel301nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel301nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
-
-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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel302
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel302(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 378 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 pwr6kernel302nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel302nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 234 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel303
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel303(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 128 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 pwr6kernel303nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel303nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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
-
-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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel304
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel304(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 378 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 pwr6kernel304nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Not calculated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel304nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 234 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel310
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel310(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 56 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 pwr6kernel310nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel310nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 35 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel311
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel311(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
- 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 pwr6kernel311nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel311nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 88 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel312
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel312(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 391 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 pwr6kernel312nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel312nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel313
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel313(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 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 pwr6kernel313nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel313nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 99 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel314
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel314(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 411 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 pwr6kernel314nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Lennard-Jones
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel314nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 253 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel320
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel320(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 82 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 pwr6kernel320nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel320nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
- 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel321
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel321(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 167 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 pwr6kernel321nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel321nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel322
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel322(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 417 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 pwr6kernel322nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel322nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 269 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel323
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel323(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 190 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 pwr6kernel323nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel323nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 129 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel324
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel324(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 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
- 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 pwr6kernel324nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Buckingham
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel324nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 283 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel330
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel330(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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 pwr6kernel330nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel330nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 43 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel331
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel331(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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
- 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 pwr6kernel331nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: SPC/TIP3P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel331nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal qO,qH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-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 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 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel332
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel332(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 404 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 pwr6kernel332nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of SPC/TIP3P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel332nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx12,dy12,dz12,rsq12,rinv12
- gmxreal dx13,dy13,dz13,rsq13,rinv13
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal qO,qH,qqOO,qqOH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv12 = frsqrtes(rsq12)
-#else
- rinv12 = frsqrte(dble(rsq12))
-#endif
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#ifdef GMX_DOUBLE
- rinv12 = (0.5*rinv12*(3.0-((rsq12*rinv12)
- & *rinv12)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv13 = frsqrtes(rsq13)
-#else
- rinv13 = frsqrte(dble(rsq13))
-#endif
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#ifdef GMX_DOUBLE
- rinv13 = (0.5*rinv13*(3.0-((rsq13*rinv13)
- & *rinv13)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-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 250 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel333
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: yes
-C
- subroutine pwr6kernel333(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1,fjx1,fjy1,fjz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 183 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 pwr6kernel333nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: TIP4P - other atoms
-C Calculate forces: no
-C
- subroutine pwr6kernel333nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal jq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx21,dy21,dz21,rsq21,rinv21
- gmxreal dx31,dy31,dz31,rsq31,rinv31
- gmxreal dx41,dy41,dz41,rsq41,rinv41
- gmxreal qH,qM
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv21 = frsqrtes(rsq21)
-#else
- rinv21 = frsqrte(dble(rsq21))
-#endif
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#ifdef GMX_DOUBLE
- rinv21 = (0.5*rinv21*(3.0-((rsq21*rinv21)
- & *rinv21)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv31 = frsqrtes(rsq31)
-#else
- rinv31 = frsqrte(dble(rsq31))
-#endif
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#ifdef GMX_DOUBLE
- rinv31 = (0.5*rinv31*(3.0-((rsq31*rinv31)
- & *rinv31)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv41 = frsqrtes(rsq41)
-#else
- rinv41 = frsqrte(dble(rsq41))
-#endif
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#ifdef GMX_DOUBLE
- rinv41 = (0.5*rinv41*(3.0-((rsq41*rinv41)
- & *rinv41)))
-#endif
-
-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 114 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel334
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: yes
-C
- subroutine pwr6kernel334(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal fijD,fijR
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal ix2,iy2,iz2,fix2,fiy2,fiz2
- gmxreal ix3,iy3,iz3,fix3,fiy3,fiz3
- gmxreal ix4,iy4,iz4,fix4,fiy4,fiz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2,fjx2,fjy2,fjz2
- gmxreal jx3,jy3,jz3,fjx3,fjy3,fjz3
- gmxreal jx4,jy4,jz4,fjx4,fjy4,fjz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 433 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 pwr6kernel334nf
-C Coulomb interaction: Tabulated
-C VdW interaction: Tabulated
-C water optimization: pairs of TIP4P interactions
-C Calculate forces: no
-C
- subroutine pwr6kernel334nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal qq,vcoul,vctot
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal ix1,iy1,iz1
- gmxreal ix2,iy2,iz2
- gmxreal ix3,iy3,iz3
- gmxreal ix4,iy4,iz4
- gmxreal jx1,jy1,jz1
- gmxreal jx2,jy2,jz2
- gmxreal jx3,jy3,jz3
- gmxreal jx4,jy4,jz4
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal dx22,dy22,dz22,rsq22,rinv22
- gmxreal dx23,dy23,dz23,rsq23,rinv23
- gmxreal dx24,dy24,dz24,rsq24,rinv24
- gmxreal dx32,dy32,dz32,rsq32,rinv32
- gmxreal dx33,dy33,dz33,rsq33,rinv33
- gmxreal dx34,dy34,dz34,rsq34,rinv34
- gmxreal dx42,dy42,dz42,rsq42,rinv42
- gmxreal dx43,dy43,dz43,rsq43,rinv43
- gmxreal dx44,dy44,dz44,rsq44,rinv44
- gmxreal qH,qM,qqMM,qqMH,qqHH
- gmxreal 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 pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv22 = frsqrtes(rsq22)
-#else
- rinv22 = frsqrte(dble(rsq22))
-#endif
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#ifdef GMX_DOUBLE
- rinv22 = (0.5*rinv22*(3.0-((rsq22*rinv22)
- & *rinv22)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv23 = frsqrtes(rsq23)
-#else
- rinv23 = frsqrte(dble(rsq23))
-#endif
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#ifdef GMX_DOUBLE
- rinv23 = (0.5*rinv23*(3.0-((rsq23*rinv23)
- & *rinv23)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv24 = frsqrtes(rsq24)
-#else
- rinv24 = frsqrte(dble(rsq24))
-#endif
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#ifdef GMX_DOUBLE
- rinv24 = (0.5*rinv24*(3.0-((rsq24*rinv24)
- & *rinv24)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv32 = frsqrtes(rsq32)
-#else
- rinv32 = frsqrte(dble(rsq32))
-#endif
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#ifdef GMX_DOUBLE
- rinv32 = (0.5*rinv32*(3.0-((rsq32*rinv32)
- & *rinv32)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv33 = frsqrtes(rsq33)
-#else
- rinv33 = frsqrte(dble(rsq33))
-#endif
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#ifdef GMX_DOUBLE
- rinv33 = (0.5*rinv33*(3.0-((rsq33*rinv33)
- & *rinv33)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv34 = frsqrtes(rsq34)
-#else
- rinv34 = frsqrte(dble(rsq34))
-#endif
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#ifdef GMX_DOUBLE
- rinv34 = (0.5*rinv34*(3.0-((rsq34*rinv34)
- & *rinv34)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv42 = frsqrtes(rsq42)
-#else
- rinv42 = frsqrte(dble(rsq42))
-#endif
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#ifdef GMX_DOUBLE
- rinv42 = (0.5*rinv42*(3.0-((rsq42*rinv42)
- & *rinv42)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv43 = frsqrtes(rsq43)
-#else
- rinv43 = frsqrte(dble(rsq43))
-#endif
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#ifdef GMX_DOUBLE
- rinv43 = (0.5*rinv43*(3.0-((rsq43*rinv43)
- & *rinv43)))
-#endif
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv44 = frsqrtes(rsq44)
-#else
- rinv44 = frsqrte(dble(rsq44))
-#endif
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#ifdef GMX_DOUBLE
- rinv44 = (0.5*rinv44*(3.0-((rsq44*rinv44)
- & *rinv44)))
-#endif
-
-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 268 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel400
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel400(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal iq
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal isai,isaj,isaprod,gbscale,vgb
- gmxreal dvdasum,dvdatmp,dvdaj,fgb
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 50 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 pwr6kernel400nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Not calculated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel400nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal iq
- gmxreal qq,vcoul,vctot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal isai,isaj,isaprod,gbscale,vgb
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 30 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel410
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel410(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal isai,isaj,isaprod,gbscale,vgb
- gmxreal dvdasum,dvdatmp,dvdaj,fgb
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 63 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 pwr6kernel410nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Lennard-Jones
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel410nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal isai,isaj,isaprod,gbscale,vgb
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
- 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel420
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel420(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal isai,isaj,isaprod,gbscale,vgb
- gmxreal dvdasum,dvdatmp,dvdaj,fgb
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 89 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 pwr6kernel420nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Buckingham
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel420nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal rinvsq
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal rinvsix
- gmxreal Vvdw6,Vvdwtot
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal isai,isaj,isaprod,gbscale,vgb
- gmxreal Vvdwexp,br
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,cexp1,cexp2
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 65 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
-
-#ifdef HAVE_CONFIG_H
-# include<config.h>
-#endif
-
-#ifdef GMX_DOUBLE
-# define gmxreal real*8
-#else
-# define gmxreal real*4
-#endif
-
-
-
-C
-C Gromacs nonbonded kernel pwr6kernel430
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: yes
-C
- subroutine pwr6kernel430(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal fscal,tx,ty,tz
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal FF
- gmxreal fijC
- gmxreal fijD,fijR
- gmxreal isai,isaj,isaprod,gbscale,vgb
- gmxreal dvdasum,dvdatmp,dvdaj,fgb
- gmxreal ix1,iy1,iz1,fix1,fiy1,fiz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 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
- 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 pwr6kernel430nf
-C Coulomb interaction: Generalized-Born
-C VdW interaction: Tabulated
-C water optimization: No
-C Calculate forces: no
-C
- subroutine pwr6kernel430nf(
- & nri,
- & iinr,
- & jindex,
- & jjnr,
- & shift,
- & shiftvec,
- & fshift,
- & gid,
- & pos,
- & faction,
- & charge,
- & facel,
- & krf,
- & crf,
- & Vc,
- & type,
- & ntype,
- & vdwparam,
- & Vvdw,
- & tabscale,
- & VFtab,
- & invsqrta,
- & dvda,
- & gbtabscale,
- & GBtab,
- & nthreads,
- & count,
- & mtx,
- & outeriter,
- & inneriter,
- & work)
- implicit none
- integer*4 nri,iinr(*),jindex(*),jjnr(*),shift(*)
- gmxreal shiftvec(*),fshift(*),pos(*),faction(*)
- integer*4 gid(*),type(*),ntype
- gmxreal charge(*),facel,krf,crf,Vc(*),vdwparam(*)
- gmxreal Vvdw(*),tabscale,VFtab(*)
- gmxreal invsqrta(*),dvda(*),gbtabscale,GBtab(*)
- integer*4 nthreads,count,mtx,outeriter,inneriter
- gmxreal work(*)
-
- integer*4 n,ii,is3,ii3,k,nj0,nj1,jnr,j3,ggid
- integer*4 nn0,nn1,nouter,ninner
- gmxreal shX,shY,shZ
- gmxreal iq
- gmxreal qq,vcoul,vctot
- integer*4 nti
- integer*4 tj
- gmxreal Vvdw6,Vvdwtot
- gmxreal Vvdw12
- gmxreal r,rt,eps,eps2
- integer*4 n0,nnn
- gmxreal Y,F,Geps,Heps2,Fp,VV
- gmxreal isai,isaj,isaprod,gbscale,vgb
- gmxreal ix1,iy1,iz1
- gmxreal jx1,jy1,jz1
- gmxreal dx11,dy11,dz11,rsq11,rinv11
- gmxreal c6,c12
-
-
-C Reset outer and inner iteration counters
- nouter = 0
- ninner = 0
-
-C Loop over thread workunits
- 10 call pwr6kernelsync(mtx,count,nri,nthreads,nn0,nn1)
- if(nn1.gt.nri) nn1=nri
-
-C Start outer loop over neighborlists
-
- do n=nn0+1,nn1
-
-C Load shift vector for this list
- is3 = 3*shift(n)+1
- shX = shiftvec(is3)
- shY = shiftvec(is3+1)
- shZ = shiftvec(is3+2)
-
-C Load limits for loop over neighbors
- nj0 = jindex(n)+1
- nj1 = 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
-
-C PowerPC intrinsics 1/sqrt lookup table
-#ifndef GMX_BLUEGENE
- rinv11 = frsqrtes(rsq11)
-#else
- rinv11 = frsqrte(dble(rsq11))
-#endif
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#ifdef GMX_DOUBLE
- rinv11 = (0.5*rinv11*(3.0-((rsq11*rinv11)
- & *rinv11)))
-#endif
-
-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 50 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
-
-
-