Adding initial versions of pair_hybrid_kokkos and pair_hybrid_overlay_kokkos
This commit is contained in:
@ -154,6 +154,10 @@ action pair_eam_fs_kokkos.cpp pair_eam_fs.cpp
|
||||
action pair_eam_fs_kokkos.h pair_eam_fs.h
|
||||
action pair_exp6_rx_kokkos.cpp pair_exp6_rx.cpp
|
||||
action pair_exp6_rx_kokkos.h pair_exp6_rx.h
|
||||
action pair_hybrid_kokkos.cpp
|
||||
action pair_hybrid_kokkos.h
|
||||
action pair_hybrid_overlay_kokkos.cpp
|
||||
action pair_hybrid_overlay_kokkos.h
|
||||
action pair_kokkos.h
|
||||
action pair_lj_charmm_coul_charmm_implicit_kokkos.cpp pair_lj_charmm_coul_charmm_implicit.cpp
|
||||
action pair_lj_charmm_coul_charmm_implicit_kokkos.h pair_lj_charmm_coul_charmm_implicit.h
|
||||
|
||||
147
src/KOKKOS/pair_hybrid_kokkos.cpp
Normal file
147
src/KOKKOS/pair_hybrid_kokkos.cpp
Normal file
@ -0,0 +1,147 @@
|
||||
/* ----------------------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
http://lammps.sandia.gov, Sandia National Laboratories
|
||||
Steve Plimpton, sjplimp@sandia.gov
|
||||
|
||||
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
certain rights in this software. This software is distributed under
|
||||
the GNU General Public License.
|
||||
|
||||
See the README file in the top-level LAMMPS directory.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "pair_hybrid_kokkos.h"
|
||||
#include "atom_kokkos.h"
|
||||
#include "force.h"
|
||||
#include "pair.h"
|
||||
#include "neighbor.h"
|
||||
#include "neigh_request.h"
|
||||
#include "update.h"
|
||||
#include "comm.h"
|
||||
#include "memory.h"
|
||||
#include "error.h"
|
||||
#include "respa.h"
|
||||
#include "atom_masks.h"
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
PairHybridKokkos::PairHybridKokkos(LAMMPS *lmp) : PairHybrid(lmp)
|
||||
{
|
||||
atomKK = (AtomKokkos *) atom;
|
||||
datamask_read = EMPTY_MASK;
|
||||
datamask_modify = EMPTY_MASK;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
PairHybridKokkos::~PairHybridKokkos()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
call each sub-style's compute() or compute_outer() function
|
||||
accumulate sub-style global/peratom energy/virial in hybrid
|
||||
for global vflag = 1:
|
||||
each sub-style computes own virial[6]
|
||||
sum sub-style virial[6] to hybrid's virial[6]
|
||||
for global vflag = 2:
|
||||
call sub-style with adjusted vflag to prevent it calling
|
||||
virial_fdotr_compute()
|
||||
hybrid calls virial_fdotr_compute() on final accumulated f
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void PairHybridKokkos::compute(int eflag, int vflag)
|
||||
{
|
||||
int i,j,m,n;
|
||||
|
||||
// if no_virial_fdotr_compute is set and global component of
|
||||
// incoming vflag = 2, then
|
||||
// reset vflag as if global component were 1
|
||||
// necessary since one or more sub-styles cannot compute virial as F dot r
|
||||
|
||||
int neighflag = lmp->kokkos->neighflag;
|
||||
if (neighflag == FULL) no_virial_fdotr_compute = 1;
|
||||
|
||||
if (no_virial_fdotr_compute && vflag % 4 == 2) vflag = 1 + vflag/4 * 4;
|
||||
|
||||
if (eflag || vflag) ev_setup(eflag,vflag);
|
||||
else evflag = vflag_fdotr = eflag_global = vflag_global =
|
||||
eflag_atom = vflag_atom = 0;
|
||||
|
||||
// check if global component of incoming vflag = 2
|
||||
// if so, reset vflag passed to substyle as if it were 0
|
||||
// necessary so substyle will not invoke virial_fdotr_compute()
|
||||
|
||||
int vflag_substyle;
|
||||
if (vflag % 4 == 2) vflag_substyle = vflag/4 * 4;
|
||||
else vflag_substyle = vflag;
|
||||
|
||||
double *saved_special = save_special();
|
||||
|
||||
// check if we are running with r-RESPA using the hybrid keyword
|
||||
|
||||
Respa *respa = NULL;
|
||||
respaflag = 0;
|
||||
if (strstr(update->integrate_style,"respa")) {
|
||||
respa = (Respa *) update->integrate;
|
||||
if (respa->nhybrid_styles > 0) respaflag = 1;
|
||||
}
|
||||
|
||||
for (m = 0; m < nstyles; m++) {
|
||||
|
||||
set_special(m);
|
||||
|
||||
if (!respaflag || (respaflag && respa->hybrid_compute[m])) {
|
||||
|
||||
// invoke compute() unless compute flag is turned off or
|
||||
// outerflag is set and sub-style has a compute_outer() method
|
||||
|
||||
if (styles[m]->compute_flag == 0) continue;
|
||||
atomKK->sync(styles[m]->execution_space,styles[m]->datamask_read);
|
||||
if (outerflag && styles[m]->respa_enable)
|
||||
styles[m]->compute_outer(eflag,vflag_substyle);
|
||||
else styles[m]->compute(eflag,vflag_substyle);
|
||||
atomKK->modified(styles[m]->execution_space,styles[m]->datamask_modify);
|
||||
}
|
||||
|
||||
restore_special(saved_special);
|
||||
|
||||
// jump to next sub-style if r-RESPA does not want global accumulated data
|
||||
|
||||
if (respaflag && !respa->tally_global) continue;
|
||||
|
||||
if (eflag_global) {
|
||||
eng_vdwl += styles[m]->eng_vdwl;
|
||||
eng_coul += styles[m]->eng_coul;
|
||||
}
|
||||
if (vflag_global) {
|
||||
for (n = 0; n < 6; n++) virial[n] += styles[m]->virial[n];
|
||||
}
|
||||
if (eflag_atom) {
|
||||
n = atom->nlocal;
|
||||
if (force->newton_pair) n += atom->nghost;
|
||||
double *eatom_substyle = styles[m]->eatom;
|
||||
for (i = 0; i < n; i++) eatom[i] += eatom_substyle[i];
|
||||
}
|
||||
if (vflag_atom) {
|
||||
n = atom->nlocal;
|
||||
if (force->newton_pair) n += atom->nghost;
|
||||
double **vatom_substyle = styles[m]->vatom;
|
||||
for (i = 0; i < n; i++)
|
||||
for (j = 0; j < 6; j++)
|
||||
vatom[i][j] += vatom_substyle[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
delete [] saved_special;
|
||||
|
||||
if (vflag_fdotr) virial_fdotr_compute();
|
||||
}
|
||||
109
src/KOKKOS/pair_hybrid_kokkos.h
Normal file
109
src/KOKKOS/pair_hybrid_kokkos.h
Normal file
@ -0,0 +1,109 @@
|
||||
/* -*- c++ -*- ----------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
http://lammps.sandia.gov, Sandia National Laboratories
|
||||
Steve Plimpton, sjplimp@sandia.gov
|
||||
|
||||
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
certain rights in this software. This software is distributed under
|
||||
the GNU General Public License.
|
||||
|
||||
See the README file in the top-level LAMMPS directory.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
#ifdef PAIR_CLASS
|
||||
|
||||
PairStyle(hybrid/kk,PairHybridKokkos)
|
||||
|
||||
#else
|
||||
|
||||
#ifndef LMP_PAIR_HYBRID_KOKKOS_H
|
||||
#define LMP_PAIR_HYBRID_KOKKOS_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include "pair_hybrid.h"
|
||||
|
||||
namespace LAMMPS_NS {
|
||||
|
||||
class PairHybridKokkos : public PairHybrid {
|
||||
friend class FixGPU;
|
||||
friend class FixIntel;
|
||||
friend class FixOMP;
|
||||
friend class Force;
|
||||
friend class Respa;
|
||||
friend class Info;
|
||||
public:
|
||||
PairHybridKokkos(class LAMMPS *);
|
||||
virtual ~PairHybridKokkos();
|
||||
void compute(int, int);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* ERROR/WARNING messages:
|
||||
|
||||
E: Illegal ... command
|
||||
|
||||
Self-explanatory. Check the input script syntax and compare to the
|
||||
documentation for the command. You can use -echo screen as a
|
||||
command-line option when running LAMMPS to see the offending line.
|
||||
|
||||
E: Pair style hybrid cannot have hybrid as an argument
|
||||
|
||||
Self-explanatory.
|
||||
|
||||
E: Pair style hybrid cannot have none as an argument
|
||||
|
||||
Self-explanatory.
|
||||
|
||||
E: Incorrect args for pair coefficients
|
||||
|
||||
Self-explanatory. Check the input script or data file.
|
||||
|
||||
E: Pair coeff for hybrid has invalid style
|
||||
|
||||
Style in pair coeff must have been listed in pair_style command.
|
||||
|
||||
E: Pair hybrid sub-style is not used
|
||||
|
||||
No pair_coeff command used a sub-style specified in the pair_style
|
||||
command.
|
||||
|
||||
E: Pair_modify special setting for pair hybrid incompatible with global special_bonds setting
|
||||
|
||||
Cannot override a setting of 0.0 or 1.0 or change a setting between
|
||||
0.0 and 1.0.
|
||||
|
||||
E: All pair coeffs are not set
|
||||
|
||||
All pair coefficients must be set in the data file or by the
|
||||
pair_coeff command before running a simulation.
|
||||
|
||||
E: Invoked pair single on pair style none
|
||||
|
||||
A command (e.g. a dump) attempted to invoke the single() function on a
|
||||
pair style none, which is illegal. You are probably attempting to
|
||||
compute per-atom quantities with an undefined pair style.
|
||||
|
||||
E: Pair hybrid sub-style does not support single call
|
||||
|
||||
You are attempting to invoke a single() call on a pair style
|
||||
that doesn't support it.
|
||||
|
||||
E: Pair hybrid single calls do not support per sub-style special bond values
|
||||
|
||||
Self-explanatory.
|
||||
|
||||
E: Unknown pair_modify hybrid sub-style
|
||||
|
||||
The choice of sub-style is unknown.
|
||||
|
||||
E: Coulomb cutoffs of pair hybrid sub-styles do not match
|
||||
|
||||
If using a Kspace solver, all Coulomb cutoffs of long pair styles must
|
||||
be the same.
|
||||
|
||||
*/
|
||||
28
src/KOKKOS/pair_hybrid_overlay_kokkos.cpp
Normal file
28
src/KOKKOS/pair_hybrid_overlay_kokkos.cpp
Normal file
@ -0,0 +1,28 @@
|
||||
/* ----------------------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
http://lammps.sandia.gov, Sandia National Laboratories
|
||||
Steve Plimpton, sjplimp@sandia.gov
|
||||
|
||||
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
certain rights in this software. This software is distributed under
|
||||
the GNU General Public License.
|
||||
|
||||
See the README file in the top-level LAMMPS directory.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include "pair_hybrid_overlay_kokkos.h"
|
||||
#include "atom.h"
|
||||
#include "force.h"
|
||||
#include "neighbor.h"
|
||||
#include "neigh_request.h"
|
||||
#include "error.h"
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
PairHybridOverlayKokkos::PairHybridOverlayKokkos(LAMMPS *lmp) : PairHybridOverlay(lmp) {}
|
||||
48
src/KOKKOS/pair_hybrid_overlay_kokkos.h
Normal file
48
src/KOKKOS/pair_hybrid_overlay_kokkos.h
Normal file
@ -0,0 +1,48 @@
|
||||
/* -*- c++ -*- ----------------------------------------------------------
|
||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||
http://lammps.sandia.gov, Sandia National Laboratories
|
||||
Steve Plimpton, sjplimp@sandia.gov
|
||||
|
||||
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||
certain rights in this software. This software is distributed under
|
||||
the GNU General Public License.
|
||||
|
||||
See the README file in the top-level LAMMPS directory.
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
#ifdef PAIR_CLASS
|
||||
|
||||
PairStyle(hybrid/overlay/kk,PairHybridOverlayKokkos)
|
||||
|
||||
#else
|
||||
|
||||
#ifndef LMP_PAIR_HYBRID_OVERLAY_KOKKOS_H
|
||||
#define LMP_PAIR_HYBRID_OVERLAY_KOKKOS_H
|
||||
|
||||
#include "pair_hybrid_overlay.h"
|
||||
|
||||
namespace LAMMPS_NS {
|
||||
|
||||
class PairHybridOverlayKokkos : public PairHybridOverlay {
|
||||
public:
|
||||
PairHybridOverlayKokkos(class LAMMPS *);
|
||||
virtual ~PairHybridOverlayKokkos() {}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* ERROR/WARNING messages:
|
||||
|
||||
E: Incorrect args for pair coefficients
|
||||
|
||||
Self-explanatory. Check the input script or data file.
|
||||
|
||||
E: Pair coeff for hybrid has invalid style
|
||||
|
||||
Style in pair coeff must have been listed in pair_style command.
|
||||
|
||||
*/
|
||||
@ -35,7 +35,7 @@ class PairHybrid : public Pair {
|
||||
public:
|
||||
PairHybrid(class LAMMPS *);
|
||||
virtual ~PairHybrid();
|
||||
void compute(int, int);
|
||||
virtual void compute(int, int);
|
||||
void settings(int, char **);
|
||||
virtual void coeff(int, char **);
|
||||
void init_style();
|
||||
@ -88,10 +88,6 @@ class PairHybrid : public Pair {
|
||||
|
||||
/* ERROR/WARNING messages:
|
||||
|
||||
E: Cannot yet use pair hybrid with Kokkos
|
||||
|
||||
This feature is not yet supported.
|
||||
|
||||
E: Illegal ... command
|
||||
|
||||
Self-explanatory. Check the input script syntax and compare to the
|
||||
|
||||
@ -27,7 +27,7 @@ namespace LAMMPS_NS {
|
||||
class PairHybridOverlay : public PairHybrid {
|
||||
public:
|
||||
PairHybridOverlay(class LAMMPS *);
|
||||
~PairHybridOverlay() {}
|
||||
virtual ~PairHybridOverlay() {}
|
||||
void coeff(int, char **);
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user