Commit cc0d2944 authored by Stan Moore's avatar Stan Moore
Browse files

Fix segfault

parent 3a8b2aef
Loading
Loading
Loading
Loading
+14 −16
Original line number Diff line number Diff line
@@ -642,20 +642,20 @@ void GridCommKokkos<DeviceType>::setup_tiled(int &nbuf1, int &nbuf2)
------------------------------------------------------------------------- */

template<class DeviceType>
void GridCommKokkos<DeviceType>::forward_comm_kspace(KSpace *kspace, int nper, int nbyte, int which,
void GridCommKokkos<DeviceType>::forward_comm_kspace(KSpace *kspace, int nper, int which,
				   FFT_DAT::tdual_FFT_SCALAR_1d &k_buf1, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf2, MPI_Datatype datatype)
{
  if (layout == REGULAR)
    forward_comm_kspace_regular(kspace,nper,nbyte,which,k_buf1,k_buf2,datatype);
    forward_comm_kspace_regular(kspace,nper,which,k_buf1,k_buf2,datatype);
  else
    forward_comm_kspace_tiled(kspace,nper,nbyte,which,k_buf1,k_buf2,datatype);
    forward_comm_kspace_tiled(kspace,nper,which,k_buf1,k_buf2,datatype);
}

/* ---------------------------------------------------------------------- */

template<class DeviceType>
void GridCommKokkos<DeviceType>::
forward_comm_kspace_regular(KSpace *kspace, int nper, int nbyte, int which,
forward_comm_kspace_regular(KSpace *kspace, int nper, int which,
			    FFT_DAT::tdual_FFT_SCALAR_1d &k_buf1, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf2, MPI_Datatype datatype)
{
  int m;
@@ -707,7 +707,7 @@ forward_comm_kspace_regular(KSpace *kspace, int nper, int nbyte, int which,

template<class DeviceType>
void GridCommKokkos<DeviceType>::
forward_comm_kspace_tiled(KSpace *kspace, int nper, int nbyte, int which,
forward_comm_kspace_tiled(KSpace *kspace, int nper, int which,
			  FFT_DAT::tdual_FFT_SCALAR_1d &k_buf1, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf2, MPI_Datatype datatype)
{
  int i,m,offset;
@@ -726,7 +726,7 @@ forward_comm_kspace_tiled(KSpace *kspace, int nper, int nbyte, int which,
  // post all receives
  
  for (m = 0; m < nrecv; m++) {
    offset = nper * recv[m].offset * nbyte;
    offset = nper * recv[m].offset;
    MPI_Irecv(&buf2[offset],nper*recv[m].nunpack,datatype,
	      recv[m].proc,0,gridcomm,&requests[m]);
  }
@@ -762,7 +762,7 @@ forward_comm_kspace_tiled(KSpace *kspace, int nper, int nbyte, int which,
      k_buf2.sync<DeviceType>();
    }

    offset = nper * recv[m].offset * nbyte;
    offset = nper * recv[m].offset;
    kspaceKKBase->unpack_forward_grid_kokkos(which,k_buf2,offset,
				recv[m].nunpack,k_recv_unpacklist,m);
    DeviceType().fence();
@@ -775,20 +775,20 @@ forward_comm_kspace_tiled(KSpace *kspace, int nper, int nbyte, int which,
------------------------------------------------------------------------- */

template<class DeviceType>
void GridCommKokkos<DeviceType>::reverse_comm_kspace(KSpace *kspace, int nper, int nbyte, int which,
void GridCommKokkos<DeviceType>::reverse_comm_kspace(KSpace *kspace, int nper, int which,
				    FFT_DAT::tdual_FFT_SCALAR_1d &k_buf1, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf2, MPI_Datatype datatype)
{
  if (layout == REGULAR)
    reverse_comm_kspace_regular(kspace,nper,nbyte,which,k_buf1,k_buf2,datatype);
    reverse_comm_kspace_regular(kspace,nper,which,k_buf1,k_buf2,datatype);
  else
    reverse_comm_kspace_tiled(kspace,nper,nbyte,which,k_buf1,k_buf2,datatype);
    reverse_comm_kspace_tiled(kspace,nper,which,k_buf1,k_buf2,datatype);
}

/* ---------------------------------------------------------------------- */

template<class DeviceType>
void GridCommKokkos<DeviceType>::
reverse_comm_kspace_regular(KSpace *kspace, int nper, int nbyte, int which,
reverse_comm_kspace_regular(KSpace *kspace, int nper, int which,
			    FFT_DAT::tdual_FFT_SCALAR_1d &k_buf1, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf2, MPI_Datatype datatype)
{
  int m;
@@ -841,7 +841,7 @@ reverse_comm_kspace_regular(KSpace *kspace, int nper, int nbyte, int which,

template<class DeviceType>
void GridCommKokkos<DeviceType>::
reverse_comm_kspace_tiled(KSpace *kspace, int nper, int nbyte, int which,
reverse_comm_kspace_tiled(KSpace *kspace, int nper, int which,
			  FFT_DAT::tdual_FFT_SCALAR_1d &k_buf1, FFT_DAT::tdual_FFT_SCALAR_1d &k_buf2, MPI_Datatype datatype)
{
  int i,m,offset;
@@ -854,8 +854,6 @@ reverse_comm_kspace_tiled(KSpace *kspace, int nper, int nbyte, int which,
    buf1 = k_buf1.view<DeviceType>().data();
    buf2 = k_buf2.view<DeviceType>().data();
  } else {
    k_buf1.modify<DeviceType>();
    k_buf1.sync<LMPHostType>();
    buf1 = k_buf1.h_view.data();
    buf2 = k_buf2.h_view.data();
  }
@@ -863,7 +861,7 @@ reverse_comm_kspace_tiled(KSpace *kspace, int nper, int nbyte, int which,
  // post all receives
  
  for (m = 0; m < nsend; m++) {
    offset = nper * send[m].offset * nbyte;
    offset = nper * send[m].offset;
    MPI_Irecv(&buf2[offset],nper*send[m].npack,datatype,
	      send[m].proc,0,gridcomm,&requests[m]);
  }
@@ -899,7 +897,7 @@ reverse_comm_kspace_tiled(KSpace *kspace, int nper, int nbyte, int which,
      k_buf2.sync<DeviceType>();
    }

    offset = nper * send[m].offset * nbyte;
    offset = nper * send[m].offset;
    kspaceKKBase->unpack_reverse_grid_kokkos(which,k_buf2,offset,
				send[m].npack,k_send_packlist,m);
    DeviceType().fence();
+6 −6
Original line number Diff line number Diff line
@@ -34,9 +34,9 @@ class GridCommKokkos : public GridComm {
	   int, int, int, int, int, int,
	   int, int, int, int, int, int);
  ~GridCommKokkos();
  void forward_comm_kspace(class KSpace *, int, int, int,
  void forward_comm_kspace(class KSpace *, int, int,
			   FFT_DAT::tdual_FFT_SCALAR_1d &, FFT_DAT::tdual_FFT_SCALAR_1d &, MPI_Datatype);
  void reverse_comm_kspace(class KSpace *, int, int, int,
  void reverse_comm_kspace(class KSpace *, int, int,
			   FFT_DAT::tdual_FFT_SCALAR_1d &, FFT_DAT::tdual_FFT_SCALAR_1d &, MPI_Datatype);

 private:
@@ -57,13 +57,13 @@ class GridCommKokkos : public GridComm {
  void setup_regular(int &, int &);
  void setup_tiled(int &, int &);

  void forward_comm_kspace_regular(class KSpace *, int, int, int,
  void forward_comm_kspace_regular(class KSpace *, int, int,
                                   FFT_DAT::tdual_FFT_SCALAR_1d &, FFT_DAT::tdual_FFT_SCALAR_1d &, MPI_Datatype);
  void forward_comm_kspace_tiled(class KSpace *, int, int, int,
  void forward_comm_kspace_tiled(class KSpace *, int, int,
                                 FFT_DAT::tdual_FFT_SCALAR_1d &, FFT_DAT::tdual_FFT_SCALAR_1d &, MPI_Datatype);
  void reverse_comm_kspace_regular(class KSpace *, int, int, int,
  void reverse_comm_kspace_regular(class KSpace *, int, int,
                                   FFT_DAT::tdual_FFT_SCALAR_1d &, FFT_DAT::tdual_FFT_SCALAR_1d &, MPI_Datatype);
  void reverse_comm_kspace_tiled(class KSpace *, int, int, int,
  void reverse_comm_kspace_tiled(class KSpace *, int, int,
                                 FFT_DAT::tdual_FFT_SCALAR_1d &, FFT_DAT::tdual_FFT_SCALAR_1d &, MPI_Datatype);

  void grow_swap();
+5 −7
Original line number Diff line number Diff line
@@ -653,7 +653,7 @@ void PPPMKokkos<DeviceType>::compute(int eflag, int vflag)
  //   to fully sum contribution in their 3d bricks
  // remap from 3d decomposition to FFT decomposition

  gc->reverse_comm_kspace(this,1,sizeof(FFT_SCALAR),REVERSE_RHO,
  gc->reverse_comm_kspace(this,1,REVERSE_RHO,
                          k_gc_buf1,k_gc_buf2,MPI_FFT_SCALAR);
  brick2fft();

@@ -667,13 +667,13 @@ void PPPMKokkos<DeviceType>::compute(int eflag, int vflag)
  // all procs communicate E-field values
  // to fill ghost cells surrounding their 3d bricks

  gc->forward_comm_kspace(this,3,sizeof(FFT_SCALAR),FORWARD_IK,
  gc->forward_comm_kspace(this,3,FORWARD_IK,
			  k_gc_buf1,k_gc_buf2,MPI_FFT_SCALAR);

  // extra per-atom energy/virial communication

  if (evflag_atom)
      gc->forward_comm_kspace(this,7,sizeof(FFT_SCALAR),FORWARD_IK_PERATOM,
      gc->forward_comm_kspace(this,7,FORWARD_IK_PERATOM,
                              k_gc_buf1,k_gc_buf2,MPI_FFT_SCALAR);

  // calculate the force on my particles
@@ -842,8 +842,7 @@ void PPPMKokkos<DeviceType>::allocate()

  gc->setup(ngc_buf1,ngc_buf2);

  if (differentiation_flag) npergrid = 1;
   else npergrid = 3;
  npergrid = 3;

  k_gc_buf1 = FFT_DAT::tdual_FFT_SCALAR_1d("pppm:gc_buf1",npergrid*ngc_buf1);
  k_gc_buf2 = FFT_DAT::tdual_FFT_SCALAR_1d("pppm:gc_buf2",npergrid*ngc_buf2);
@@ -897,8 +896,7 @@ void PPPMKokkos<DeviceType>::allocate_peratom()
  // use same GC ghost grid object for peratom grid communication
   // but need to reallocate a larger gc_buf1 and gc_buf2

  if (differentiation_flag) npergrid = 6;
   else npergrid = 7;
  npergrid = 7;

  k_gc_buf1 = FFT_DAT::tdual_FFT_SCALAR_1d("pppm:gc_buf1",npergrid*ngc_buf1);
  k_gc_buf2 = FFT_DAT::tdual_FFT_SCALAR_1d("pppm:gc_buf2",npergrid*ngc_buf2);