git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@10009 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
@ -109,6 +109,9 @@ PPPM::PPPM(LAMMPS *lmp, int narg, char **arg) : KSpace(lmp, narg, arg)
|
|||||||
nmax = 0;
|
nmax = 0;
|
||||||
part2grid = NULL;
|
part2grid = NULL;
|
||||||
|
|
||||||
|
peratom_allocate_flag = 0;
|
||||||
|
group_allocate_flag = 0;
|
||||||
|
|
||||||
// define acons coefficients for estimation of kspace errors
|
// define acons coefficients for estimation of kspace errors
|
||||||
// see JCP 109, pg 7698 for derivation of coefficients
|
// see JCP 109, pg 7698 for derivation of coefficients
|
||||||
// higher order coefficients may be computed if needed
|
// higher order coefficients may be computed if needed
|
||||||
@ -152,8 +155,8 @@ PPPM::~PPPM()
|
|||||||
{
|
{
|
||||||
delete [] factors;
|
delete [] factors;
|
||||||
deallocate();
|
deallocate();
|
||||||
deallocate_peratom();
|
if (peratom_allocate_flag) deallocate_peratom();
|
||||||
deallocate_groups();
|
if (group_allocate_flag) deallocate_groups();
|
||||||
memory->destroy(part2grid);
|
memory->destroy(part2grid);
|
||||||
memory->destroy(acons);
|
memory->destroy(acons);
|
||||||
}
|
}
|
||||||
@ -275,10 +278,8 @@ void PPPM::init()
|
|||||||
// free all arrays previously allocated
|
// free all arrays previously allocated
|
||||||
|
|
||||||
deallocate();
|
deallocate();
|
||||||
deallocate_peratom();
|
if (peratom_allocate_flag) deallocate_peratom();
|
||||||
peratom_allocate_flag = 0;
|
if (group_allocate_flag) deallocate_groups();
|
||||||
deallocate_groups();
|
|
||||||
group_allocate_flag = 0;
|
|
||||||
|
|
||||||
// setup FFT grid resolution and g_ewald
|
// setup FFT grid resolution and g_ewald
|
||||||
// normally one iteration thru while loop is all that is required
|
// normally one iteration thru while loop is all that is required
|
||||||
@ -368,7 +369,7 @@ void PPPM::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// allocate K-space dependent memory
|
// allocate K-space dependent memory
|
||||||
// don't invoke allocate_peratom(), compute() will allocate when needed
|
// don't invoke allocate peratom() or group(), will be allocated when needed
|
||||||
|
|
||||||
allocate();
|
allocate();
|
||||||
cg->ghost_notify();
|
cg->ghost_notify();
|
||||||
@ -563,10 +564,8 @@ void PPPM::setup_grid()
|
|||||||
// free all arrays previously allocated
|
// free all arrays previously allocated
|
||||||
|
|
||||||
deallocate();
|
deallocate();
|
||||||
deallocate_peratom();
|
if (peratom_allocate_flag) deallocate_peratom();
|
||||||
peratom_allocate_flag = 0;
|
if (group_allocate_flag) deallocate_groups();
|
||||||
deallocate_groups();
|
|
||||||
group_allocate_flag = 0;
|
|
||||||
|
|
||||||
// reset portion of global grid that each proc owns
|
// reset portion of global grid that each proc owns
|
||||||
|
|
||||||
@ -574,7 +573,7 @@ void PPPM::setup_grid()
|
|||||||
|
|
||||||
// reallocate K-space dependent memory
|
// reallocate K-space dependent memory
|
||||||
// check if grid communication is now overlapping if not allowed
|
// check if grid communication is now overlapping if not allowed
|
||||||
// don't invoke allocate_peratom(), compute() will allocate when needed
|
// don't invoke allocate peratom() or group(), will be allocated when needed
|
||||||
|
|
||||||
allocate();
|
allocate();
|
||||||
|
|
||||||
@ -615,7 +614,6 @@ void PPPM::compute(int eflag, int vflag)
|
|||||||
allocate_peratom();
|
allocate_peratom();
|
||||||
cg_peratom->ghost_notify();
|
cg_peratom->ghost_notify();
|
||||||
cg_peratom->setup();
|
cg_peratom->setup();
|
||||||
peratom_allocate_flag = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// convert atoms from box to lamda coords
|
// convert atoms from box to lamda coords
|
||||||
@ -825,49 +823,6 @@ void PPPM::allocate()
|
|||||||
procneigh[1][1],procneigh[2][0],procneigh[2][1]);
|
procneigh[1][1],procneigh[2][0],procneigh[2][1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
allocate per-atom memory that depends on # of K-vectors and order
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PPPM::allocate_peratom()
|
|
||||||
{
|
|
||||||
if (differentiation_flag != 1)
|
|
||||||
memory->create3d_offset(u_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
|
||||||
nxlo_out,nxhi_out,"pppm:u_brick");
|
|
||||||
|
|
||||||
memory->create3d_offset(v0_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
|
||||||
nxlo_out,nxhi_out,"pppm:v0_brick");
|
|
||||||
memory->create3d_offset(v1_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
|
||||||
nxlo_out,nxhi_out,"pppm:v1_brick");
|
|
||||||
memory->create3d_offset(v2_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
|
||||||
nxlo_out,nxhi_out,"pppm:v2_brick");
|
|
||||||
memory->create3d_offset(v3_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
|
||||||
nxlo_out,nxhi_out,"pppm:v3_brick");
|
|
||||||
memory->create3d_offset(v4_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
|
||||||
nxlo_out,nxhi_out,"pppm:v4_brick");
|
|
||||||
memory->create3d_offset(v5_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
|
||||||
nxlo_out,nxhi_out,"pppm:v5_brick");
|
|
||||||
|
|
||||||
// create ghost grid object for rho and electric field communication
|
|
||||||
|
|
||||||
int (*procneigh)[2] = comm->procneigh;
|
|
||||||
|
|
||||||
if (differentiation_flag == 1)
|
|
||||||
cg_peratom =
|
|
||||||
new CommGrid(lmp,world,6,1,
|
|
||||||
nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in,
|
|
||||||
nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out,
|
|
||||||
procneigh[0][0],procneigh[0][1],procneigh[1][0],
|
|
||||||
procneigh[1][1],procneigh[2][0],procneigh[2][1]);
|
|
||||||
else
|
|
||||||
cg_peratom =
|
|
||||||
new CommGrid(lmp,world,7,1,
|
|
||||||
nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in,
|
|
||||||
nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out,
|
|
||||||
procneigh[0][0],procneigh[0][1],procneigh[1][0],
|
|
||||||
procneigh[1][1],procneigh[2][0],procneigh[2][1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
deallocate memory that depends on # of K-vectors and order
|
deallocate memory that depends on # of K-vectors and order
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
@ -918,12 +873,60 @@ void PPPM::deallocate()
|
|||||||
delete cg;
|
delete cg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
allocate per-atom memory that depends on # of K-vectors and order
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PPPM::allocate_peratom()
|
||||||
|
{
|
||||||
|
peratom_allocate_flag = 1;
|
||||||
|
|
||||||
|
if (differentiation_flag != 1)
|
||||||
|
memory->create3d_offset(u_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
|
nxlo_out,nxhi_out,"pppm:u_brick");
|
||||||
|
|
||||||
|
memory->create3d_offset(v0_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
|
nxlo_out,nxhi_out,"pppm:v0_brick");
|
||||||
|
|
||||||
|
memory->create3d_offset(v1_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
|
nxlo_out,nxhi_out,"pppm:v1_brick");
|
||||||
|
memory->create3d_offset(v2_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
|
nxlo_out,nxhi_out,"pppm:v2_brick");
|
||||||
|
memory->create3d_offset(v3_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
|
nxlo_out,nxhi_out,"pppm:v3_brick");
|
||||||
|
memory->create3d_offset(v4_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
|
nxlo_out,nxhi_out,"pppm:v4_brick");
|
||||||
|
memory->create3d_offset(v5_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
|
nxlo_out,nxhi_out,"pppm:v5_brick");
|
||||||
|
|
||||||
|
// create ghost grid object for rho and electric field communication
|
||||||
|
|
||||||
|
int (*procneigh)[2] = comm->procneigh;
|
||||||
|
|
||||||
|
if (differentiation_flag == 1)
|
||||||
|
cg_peratom =
|
||||||
|
new CommGrid(lmp,world,6,1,
|
||||||
|
nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in,
|
||||||
|
nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out,
|
||||||
|
procneigh[0][0],procneigh[0][1],procneigh[1][0],
|
||||||
|
procneigh[1][1],procneigh[2][0],procneigh[2][1]);
|
||||||
|
else
|
||||||
|
cg_peratom =
|
||||||
|
new CommGrid(lmp,world,7,1,
|
||||||
|
nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in,
|
||||||
|
nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out,
|
||||||
|
procneigh[0][0],procneigh[0][1],procneigh[1][0],
|
||||||
|
procneigh[1][1],procneigh[2][0],procneigh[2][1]);
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
deallocate per-atom memory that depends on # of K-vectors and order
|
deallocate per-atom memory that depends on # of K-vectors and order
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void PPPM::deallocate_peratom()
|
void PPPM::deallocate_peratom()
|
||||||
{
|
{
|
||||||
|
peratom_allocate_flag = 0;
|
||||||
|
|
||||||
memory->destroy3d_offset(v0_brick,nzlo_out,nylo_out,nxlo_out);
|
memory->destroy3d_offset(v0_brick,nzlo_out,nylo_out,nxlo_out);
|
||||||
memory->destroy3d_offset(v1_brick,nzlo_out,nylo_out,nxlo_out);
|
memory->destroy3d_offset(v1_brick,nzlo_out,nylo_out,nxlo_out);
|
||||||
memory->destroy3d_offset(v2_brick,nzlo_out,nylo_out,nxlo_out);
|
memory->destroy3d_offset(v2_brick,nzlo_out,nylo_out,nxlo_out);
|
||||||
@ -3049,10 +3052,7 @@ void PPPM::compute_group_group(int groupbit_A, int groupbit_B, int BA_flag)
|
|||||||
error->all(FLERR,"Cannot (yet) use 'kspace_modify "
|
error->all(FLERR,"Cannot (yet) use 'kspace_modify "
|
||||||
"diff ad' with compute group/group");
|
"diff ad' with compute group/group");
|
||||||
|
|
||||||
if (!group_allocate_flag) {
|
if (!group_allocate_flag) allocate_groups();
|
||||||
allocate_groups();
|
|
||||||
group_allocate_flag = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// convert atoms from box to lamda coords
|
// convert atoms from box to lamda coords
|
||||||
|
|
||||||
@ -3137,6 +3137,8 @@ void PPPM::compute_group_group(int groupbit_A, int groupbit_B, int BA_flag)
|
|||||||
|
|
||||||
void PPPM::allocate_groups()
|
void PPPM::allocate_groups()
|
||||||
{
|
{
|
||||||
|
group_allocate_flag = 1;
|
||||||
|
|
||||||
memory->create3d_offset(density_A_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
memory->create3d_offset(density_A_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
nxlo_out,nxhi_out,"pppm:density_A_brick");
|
nxlo_out,nxhi_out,"pppm:density_A_brick");
|
||||||
memory->create3d_offset(density_B_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
memory->create3d_offset(density_B_brick,nzlo_out,nzhi_out,nylo_out,nyhi_out,
|
||||||
@ -3151,6 +3153,8 @@ void PPPM::allocate_groups()
|
|||||||
|
|
||||||
void PPPM::deallocate_groups()
|
void PPPM::deallocate_groups()
|
||||||
{
|
{
|
||||||
|
group_allocate_flag = 0;
|
||||||
|
|
||||||
memory->destroy3d_offset(density_A_brick,nzlo_out,nylo_out,nxlo_out);
|
memory->destroy3d_offset(density_A_brick,nzlo_out,nylo_out,nxlo_out);
|
||||||
memory->destroy3d_offset(density_B_brick,nzlo_out,nylo_out,nxlo_out);
|
memory->destroy3d_offset(density_B_brick,nzlo_out,nylo_out,nxlo_out);
|
||||||
memory->destroy(density_A_fft);
|
memory->destroy(density_A_fft);
|
||||||
|
|||||||
Reference in New Issue
Block a user