diff --git a/src/fix_rigid.cpp b/src/fix_rigid.cpp index 76e7f98fde..0d72754d85 100644 --- a/src/fix_rigid.cpp +++ b/src/fix_rigid.cpp @@ -991,13 +991,20 @@ int FixRigid::dof(int igroup) int *nall = new int[nbody]; MPI_Allreduce(ncount,nall,nbody,MPI_INT,MPI_SUM,world); - // remove 3N - 6 dof for each rigid body if more than 2 atoms in igroup - // remove 3N - 5 dof for each diatomic rigid body in igroup + // remove d*N - d(d+1)/2 dof for each rigid body if more than 2 atoms in igroup + // http://en.wikipedia.org/wiki/Degrees_of_freedom_(engineering) + // remove an additional dof for each diatomic rigid body in igroup if d=3 int n = 0; - for (int ibody = 0; ibody < nbody; ibody++) { - if (nall[ibody] > 2) n += 3*nall[ibody] - 6; - else if (nall[ibody] == 2) n++; + if (domain->dimension == 3) { + for (int ibody = 0; ibody < nbody; ibody++) { + if (nall[ibody] > 2) n += 3*nall[ibody] - 6; + else if (nall[ibody] == 2) n++; + } + } else if (domain->dimension == 2) { + for (int ibody = 0; ibody < nbody; ibody++) { + if (nall[ibody] > 1) n += 2*nall[ibody] - 3; + } } delete [] ncount;