diff --git a/src/RHEO/compute_rheo_grad.cpp b/src/RHEO/compute_rheo_grad.cpp index 369bf11e0d..7fdff41403 100644 --- a/src/RHEO/compute_rheo_grad.cpp +++ b/src/RHEO/compute_rheo_grad.cpp @@ -111,6 +111,8 @@ void ComputeRHEOGrad::init() compute_kernel = fix_rheo->compute_kernel; compute_interface = fix_rheo->compute_interface; + remap_v_flag = domain->deform_vremap; + neighbor->add_request(this, NeighConst::REQ_DEFAULT); } @@ -301,13 +303,23 @@ void ComputeRHEOGrad::forward_fields() /* ---------------------------------------------------------------------- */ int ComputeRHEOGrad::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) + int pbc_flag, int *pbc) { int i,j,k,m; + int *mask = atom->mask; double *rho = atom->rho; double *temperature = atom->temperature; double **v = atom->v; int dim = domain->dimension; + double *h_rate = domain->h_rate; + int deform_groupbit = domain->deform_groupbit; + double dv[3]; + + if (remap_v_flag) { + dv[0] = pbc[0] * h_rate[0] + pbc[5] * h_rate[5] + pbc[4] * h_rate[4]; + dv[1] = pbc[1] * h_rate[1] + pbc[3] * h_rate[3]; + dv[2] = pbc[2] * h_rate[2]; + } m = 0; @@ -333,9 +345,17 @@ int ComputeRHEOGrad::pack_forward_comm(int n, int *list, double *buf, } else if (comm_stage == COMMFIELD) { - if (velocity_flag) - for (k = 0; k < dim; k++) - buf[m++] = v[j][k]; + if (velocity_flag) { + if (remap_v_flag & pbc_flag & (mask[j] & deform_groupbit)) { + for (k = 0; k < dim; k++) + buf[m++] = v[j][k] + dv[k]; + } else { + for (k = 0; k < dim; k++) + buf[m++] = v[j][k]; + } + } + + if (rho_flag) buf[m++] = rho[j]; diff --git a/src/RHEO/compute_rheo_grad.h b/src/RHEO/compute_rheo_grad.h index af4fecdcfb..db5e84d32a 100644 --- a/src/RHEO/compute_rheo_grad.h +++ b/src/RHEO/compute_rheo_grad.h @@ -49,7 +49,7 @@ class ComputeRHEOGrad : public Compute { double cut, cutsq, rho0; int velocity_flag, temperature_flag, rho_flag, eta_flag; - int interface_flag; + int interface_flag, remap_v_flag; class ComputeRHEOKernel *compute_kernel; class ComputeRHEOInterface *compute_interface; diff --git a/src/RHEO/fix_rheo.cpp b/src/RHEO/fix_rheo.cpp index 339d7f5ac8..e26ce8744b 100644 --- a/src/RHEO/fix_rheo.cpp +++ b/src/RHEO/fix_rheo.cpp @@ -381,13 +381,13 @@ void FixRHEO::pre_force(int /*vflag*/) if (rhosum_flag) compute_rhosum->compute_peratom(); - compute_grad->forward_fields(); // also forwards v and rho for chi compute_kernel->compute_peratom(); if (interface_flag) { // Note on first setup, have no forces for pressure to reference compute_interface->compute_peratom(); } + // No need to forward v, rho, or T for compute_grad since already done compute_grad->compute_peratom(); compute_grad->forward_gradients();