forked from lijiext/lammps
activate virial contribution in `fix lb/rigid/pc/sphere` by default and protect virial computation with evflag
This commit is contained in:
parent
66130f5557
commit
5f1842829e
|
@ -51,6 +51,7 @@ FixLbRigidPCSphere::FixLbRigidPCSphere(LAMMPS *lmp, int narg, char **arg) :
|
||||||
rigid_flag = 1;
|
rigid_flag = 1;
|
||||||
create_attribute = 1;
|
create_attribute = 1;
|
||||||
virial_flag = 1;
|
virial_flag = 1;
|
||||||
|
thermo_virial = 1;
|
||||||
|
|
||||||
// perform initial allocation of atom-based arrays
|
// perform initial allocation of atom-based arrays
|
||||||
// register with Atom class
|
// register with Atom class
|
||||||
|
@ -153,7 +154,7 @@ FixLbRigidPCSphere::FixLbRigidPCSphere(LAMMPS *lmp, int narg, char **arg) :
|
||||||
for (ibody = 0; ibody < nbody; ibody++) {
|
for (ibody = 0; ibody < nbody; ibody++) {
|
||||||
igroups[ibody] = group->find(arg[5+ibody]);
|
igroups[ibody] = group->find(arg[5+ibody]);
|
||||||
if (igroups[ibody] == -1)
|
if (igroups[ibody] == -1)
|
||||||
error->all(FLERR,"Could not find fix lb/rigid/pc/sphere group ID");
|
error->all(FLERR,"Could not find fix lb/rigid/pc/sphere group ID");
|
||||||
}
|
}
|
||||||
|
|
||||||
int *mask = atom->mask;
|
int *mask = atom->mask;
|
||||||
|
@ -163,11 +164,11 @@ FixLbRigidPCSphere::FixLbRigidPCSphere(LAMMPS *lmp, int narg, char **arg) :
|
||||||
for (i = 0; i < nlocal; i++) {
|
for (i = 0; i < nlocal; i++) {
|
||||||
body[i] = -1;
|
body[i] = -1;
|
||||||
if (mask[i] & groupbit)
|
if (mask[i] & groupbit)
|
||||||
for (ibody = 0; ibody < nbody; ibody++)
|
for (ibody = 0; ibody < nbody; ibody++)
|
||||||
if (mask[i] & group->bitmask[igroups[ibody]]) {
|
if (mask[i] & group->bitmask[igroups[ibody]]) {
|
||||||
if (body[i] >= 0) flag = 1;
|
if (body[i] >= 0) flag = 1;
|
||||||
body[i] = ibody;
|
body[i] = ibody;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int flagall;
|
int flagall;
|
||||||
|
@ -250,10 +251,10 @@ FixLbRigidPCSphere::FixLbRigidPCSphere(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (int m = mlo; m <= mhi; m++) {
|
for (int m = mlo; m <= mhi; m++) {
|
||||||
fflag[m-1][0] = xflag;
|
fflag[m-1][0] = xflag;
|
||||||
fflag[m-1][1] = yflag;
|
fflag[m-1][1] = yflag;
|
||||||
fflag[m-1][2] = zflag;
|
fflag[m-1][2] = zflag;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (count == 0) error->all(FLERR,"Illegal fix lb/rigid/pc/sphere command");
|
if (count == 0) error->all(FLERR,"Illegal fix lb/rigid/pc/sphere command");
|
||||||
|
|
||||||
|
@ -277,10 +278,10 @@ FixLbRigidPCSphere::FixLbRigidPCSphere(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (int m = mlo; m <= mhi; m++) {
|
for (int m = mlo; m <= mhi; m++) {
|
||||||
tflag[m-1][0] = xflag;
|
tflag[m-1][0] = xflag;
|
||||||
tflag[m-1][1] = yflag;
|
tflag[m-1][1] = yflag;
|
||||||
tflag[m-1][2] = zflag;
|
tflag[m-1][2] = zflag;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
if (count == 0) error->all(FLERR,"Illegal fix lb/rigid/pc/sphere command");
|
if (count == 0) error->all(FLERR,"Illegal fix lb/rigid/pc/sphere command");
|
||||||
|
|
||||||
|
@ -291,7 +292,7 @@ FixLbRigidPCSphere::FixLbRigidPCSphere(LAMMPS *lmp, int narg, char **arg) :
|
||||||
inner_nodes = 1;
|
inner_nodes = 1;
|
||||||
igroupinner = group->find(arg[iarg+1]);
|
igroupinner = group->find(arg[iarg+1]);
|
||||||
if(igroupinner == -1)
|
if(igroupinner == -1)
|
||||||
error->all(FLERR,"Could not find fix lb/rigid/pc/sphere innerNodes group ID");
|
error->all(FLERR,"Could not find fix lb/rigid/pc/sphere innerNodes group ID");
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else error->all(FLERR,"Illegal fix lb/rigid/pc/sphere command");
|
} else error->all(FLERR,"Illegal fix lb/rigid/pc/sphere command");
|
||||||
}
|
}
|
||||||
|
@ -332,7 +333,7 @@ FixLbRigidPCSphere::FixLbRigidPCSphere(LAMMPS *lmp, int narg, char **arg) :
|
||||||
for(ibody=0; ibody<nbody; ibody++) ncount[ibody] = 0;
|
for(ibody=0; ibody<nbody; ibody++) ncount[ibody] = 0;
|
||||||
for(i=0; i<nlocal; i++){
|
for(i=0; i<nlocal; i++){
|
||||||
if(!(mask[i] & group->bitmask[igroupinner])){
|
if(!(mask[i] & group->bitmask[igroupinner])){
|
||||||
if(body[i] >= 0) ncount[body[i]]++;
|
if(body[i] >= 0) ncount[body[i]]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,17 +380,17 @@ FixLbRigidPCSphere::FixLbRigidPCSphere(LAMMPS *lmp, int narg, char **arg) :
|
||||||
if(inner_nodes == 1){
|
if(inner_nodes == 1){
|
||||||
for(int j=0; j<nlocal; j++){
|
for(int j=0; j<nlocal; j++){
|
||||||
if((mask[j] & groupbit) && !(mask[j] & group->bitmask[igroupinner]) && !(mask[j] & groupbit_lb_fluid))
|
if((mask[j] & groupbit) && !(mask[j] & group->bitmask[igroupinner]) && !(mask[j] & groupbit_lb_fluid))
|
||||||
error->one(FLERR,"use the innerNodes keyword in the lb/rigid/pc/sphere fix for atoms which do not interact with the lb/fluid");
|
error->one(FLERR,"use the innerNodes keyword in the lb/rigid/pc/sphere fix for atoms which do not interact with the lb/fluid");
|
||||||
|
|
||||||
// If inner nodes are present, which should not interact with the fluid, make
|
// If inner nodes are present, which should not interact with the fluid, make
|
||||||
// sure these are not used by the lb/fluid fix to apply a force to the fluid.
|
// sure these are not used by the lb/fluid fix to apply a force to the fluid.
|
||||||
if((mask[j] & groupbit) && (mask[j] & groupbit_lb_fluid) && (mask[j] & group->bitmask[igroupinner]))
|
if((mask[j] & groupbit) && (mask[j] & groupbit_lb_fluid) && (mask[j] & group->bitmask[igroupinner]))
|
||||||
error->one(FLERR,"the inner nodes specified in lb/rigid/pc/sphere should not be included in the lb/fluid fix");
|
error->one(FLERR,"the inner nodes specified in lb/rigid/pc/sphere should not be included in the lb/fluid fix");
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
for(int j=0; j<nlocal; j++){
|
for(int j=0; j<nlocal; j++){
|
||||||
if((mask[j] & groupbit) && !(mask[j] & groupbit_lb_fluid))
|
if((mask[j] & groupbit) && !(mask[j] & groupbit_lb_fluid))
|
||||||
error->one(FLERR,"use the innerNodes keyword in the lb/rigid/pc/sphere fix for atoms which do not interact with the lb/fluid");
|
error->one(FLERR,"use the innerNodes keyword in the lb/rigid/pc/sphere fix for atoms which do not interact with the lb/fluid");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -519,9 +520,9 @@ void FixLbRigidPCSphere::init()
|
||||||
else massone = mass[type[i]];
|
else massone = mass[type[i]];
|
||||||
|
|
||||||
if ((xbox && !periodicity[0]) || (ybox && !periodicity[1]) ||
|
if ((xbox && !periodicity[0]) || (ybox && !periodicity[1]) ||
|
||||||
(zbox && !periodicity[2]))
|
(zbox && !periodicity[2]))
|
||||||
error->one(FLERR,"Fix lb/rigid/pc/sphere atom has non-zero image flag "
|
error->one(FLERR,"Fix lb/rigid/pc/sphere atom has non-zero image flag "
|
||||||
"in a non-periodic dimension");
|
"in a non-periodic dimension");
|
||||||
|
|
||||||
xunwrap = x[i][0] + xbox*xprd;
|
xunwrap = x[i][0] + xbox*xprd;
|
||||||
yunwrap = x[i][1] + ybox*yprd;
|
yunwrap = x[i][1] + ybox*yprd;
|
||||||
|
@ -533,7 +534,7 @@ void FixLbRigidPCSphere::init()
|
||||||
sum[ibody][3] += massone;
|
sum[ibody][3] += massone;
|
||||||
if(inner_nodes == 1){
|
if(inner_nodes == 1){
|
||||||
if(!(mask[i] & group->bitmask[igroupinner])){
|
if(!(mask[i] & group->bitmask[igroupinner])){
|
||||||
sum[ibody][4] += massone;
|
sum[ibody][4] += massone;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
sum[ibody][4] += massone;
|
sum[ibody][4] += massone;
|
||||||
|
@ -563,22 +564,22 @@ void FixLbRigidPCSphere::init()
|
||||||
if(body[i] < 0) continue;
|
if(body[i] < 0) continue;
|
||||||
if(inner_nodes == 1){
|
if(inner_nodes == 1){
|
||||||
if(!(mask[i] & group->bitmask[igroupinner])){
|
if(!(mask[i] & group->bitmask[igroupinner])){
|
||||||
ibody = body[i];
|
ibody = body[i];
|
||||||
|
|
||||||
xbox = (image[i] & IMGMASK) - IMGMAX;
|
xbox = (image[i] & IMGMASK) - IMGMAX;
|
||||||
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
|
ybox = (image[i] >> IMGBITS & IMGMASK) - IMGMAX;
|
||||||
zbox = (image[i] >> IMG2BITS) - IMGMAX;
|
zbox = (image[i] >> IMG2BITS) - IMGMAX;
|
||||||
|
|
||||||
xunwrap = x[i][0] + xbox*xprd;
|
xunwrap = x[i][0] + xbox*xprd;
|
||||||
yunwrap = x[i][1] + ybox*yprd;
|
yunwrap = x[i][1] + ybox*yprd;
|
||||||
zunwrap = x[i][2] + zbox*zprd;
|
zunwrap = x[i][2] + zbox*zprd;
|
||||||
|
|
||||||
dx = xunwrap - xcm[ibody][0];
|
dx = xunwrap - xcm[ibody][0];
|
||||||
dy = yunwrap - xcm[ibody][1];
|
dy = yunwrap - xcm[ibody][1];
|
||||||
dz = zunwrap - xcm[ibody][2];
|
dz = zunwrap - xcm[ibody][2];
|
||||||
|
|
||||||
sum[ibody][0] += dx*dx + dy*dy + dz*dz;
|
sum[ibody][0] += dx*dx + dy*dy + dz*dz;
|
||||||
sum[ibody][1] += Gamma[type[i]];
|
sum[ibody][1] += Gamma[type[i]];
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
ibody = body[i];
|
ibody = body[i];
|
||||||
|
@ -613,16 +614,16 @@ void FixLbRigidPCSphere::init()
|
||||||
if(body[i] < 0) continue;
|
if(body[i] < 0) continue;
|
||||||
if(inner_nodes == 1){
|
if(inner_nodes == 1){
|
||||||
if(!(mask[i] & group->bitmask[igroupinner])){
|
if(!(mask[i] & group->bitmask[igroupinner])){
|
||||||
ibody = body[i];
|
ibody = body[i];
|
||||||
|
|
||||||
if(Gamma_MD[ibody]*dt_lb/dm_lb - Gamma[type[i]] > eps)
|
if(Gamma_MD[ibody]*dt_lb/dm_lb - Gamma[type[i]] > eps)
|
||||||
error->one(FLERR,"All atoms in a rigid body must have the same gamma value");
|
error->one(FLERR,"All atoms in a rigid body must have the same gamma value");
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
ibody = body[i];
|
ibody = body[i];
|
||||||
|
|
||||||
if(Gamma_MD[ibody]*dt_lb/dm_lb - Gamma[type[i]] > eps)
|
if(Gamma_MD[ibody]*dt_lb/dm_lb - Gamma[type[i]] > eps)
|
||||||
error->one(FLERR,"All atoms in a rigid body must have the same gamma value");
|
error->one(FLERR,"All atoms in a rigid body must have the same gamma value");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -744,14 +745,15 @@ void FixLbRigidPCSphere::setup(int vflag)
|
||||||
// Set the velocities
|
// Set the velocities
|
||||||
set_v();
|
set_v();
|
||||||
|
|
||||||
if (vflag_global)
|
if (evflag) {
|
||||||
for (n = 0; n < 6; n++) virial[n] *= 2.0;
|
if (vflag_global)
|
||||||
if (vflag_atom) {
|
for (n = 0; n < 6; n++) virial[n] *= 2.0;
|
||||||
for (i = 0; i < nlocal; i++)
|
if (vflag_atom) {
|
||||||
for (n = 0; n < 6; n++)
|
for (i = 0; i < nlocal; i++)
|
||||||
vatom[i][n] *= 2.0;
|
for (n = 0; n < 6; n++)
|
||||||
|
vatom[i][n] *= 2.0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
@ -792,9 +794,9 @@ void FixLbRigidPCSphere::initial_integrate(int vflag)
|
||||||
|
|
||||||
if(inner_nodes == 1){
|
if(inner_nodes == 1){
|
||||||
if(!(mask[i] & group->bitmask[igroupinner])){
|
if(!(mask[i] & group->bitmask[igroupinner])){
|
||||||
sum[ibody][0] += up[i][0]*massone;
|
sum[ibody][0] += up[i][0]*massone;
|
||||||
sum[ibody][1] += up[i][1]*massone;
|
sum[ibody][1] += up[i][1]*massone;
|
||||||
sum[ibody][2] += up[i][2]*massone;
|
sum[ibody][2] += up[i][2]*massone;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
sum[ibody][0] += up[i][0]*massone;
|
sum[ibody][0] += up[i][0]*massone;
|
||||||
|
@ -829,23 +831,23 @@ void FixLbRigidPCSphere::initial_integrate(int vflag)
|
||||||
|
|
||||||
if(inner_nodes == 1){
|
if(inner_nodes == 1){
|
||||||
if(!(mask[i] & group->bitmask[igroupinner])){
|
if(!(mask[i] & group->bitmask[igroupinner])){
|
||||||
sum[ibody][0] += Gamma_MD[ibody]*(dy * ((up[i][2]-vcm[ibody][2])) -
|
sum[ibody][0] += Gamma_MD[ibody]*(dy * ((up[i][2]-vcm[ibody][2])) -
|
||||||
dz * ((up[i][1]-vcm[ibody][1])));
|
dz * ((up[i][1]-vcm[ibody][1])));
|
||||||
sum[ibody][1] += Gamma_MD[ibody]*(dz * ((up[i][0]-vcm[ibody][0])) -
|
sum[ibody][1] += Gamma_MD[ibody]*(dz * ((up[i][0]-vcm[ibody][0])) -
|
||||||
dx * ((up[i][2]-vcm[ibody][2])));
|
dx * ((up[i][2]-vcm[ibody][2])));
|
||||||
sum[ibody][2] += Gamma_MD[ibody]*(dx * ((up[i][1]-vcm[ibody][1])) -
|
sum[ibody][2] += Gamma_MD[ibody]*(dx * ((up[i][1]-vcm[ibody][1])) -
|
||||||
dy * ((up[i][0]-vcm[ibody][0])));
|
dy * ((up[i][0]-vcm[ibody][0])));
|
||||||
sum[ibody][3] += -Gamma_MD[ibody]*(v[i][0]-up[i][0]);
|
sum[ibody][3] += -Gamma_MD[ibody]*(v[i][0]-up[i][0]);
|
||||||
sum[ibody][4] += -Gamma_MD[ibody]*(v[i][1]-up[i][1]);
|
sum[ibody][4] += -Gamma_MD[ibody]*(v[i][1]-up[i][1]);
|
||||||
sum[ibody][5] += -Gamma_MD[ibody]*(v[i][2]-up[i][2]);
|
sum[ibody][5] += -Gamma_MD[ibody]*(v[i][2]-up[i][2]);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
sum[ibody][0] += Gamma_MD[ibody]*(dy * ((up[i][2]-vcm[ibody][2])) -
|
sum[ibody][0] += Gamma_MD[ibody]*(dy * ((up[i][2]-vcm[ibody][2])) -
|
||||||
dz * ((up[i][1]-vcm[ibody][1])));
|
dz * ((up[i][1]-vcm[ibody][1])));
|
||||||
sum[ibody][1] += Gamma_MD[ibody]*(dz * ((up[i][0]-vcm[ibody][0])) -
|
sum[ibody][1] += Gamma_MD[ibody]*(dz * ((up[i][0]-vcm[ibody][0])) -
|
||||||
dx * ((up[i][2]-vcm[ibody][2])));
|
dx * ((up[i][2]-vcm[ibody][2])));
|
||||||
sum[ibody][2] += Gamma_MD[ibody]*(dx * ((up[i][1]-vcm[ibody][1])) -
|
sum[ibody][2] += Gamma_MD[ibody]*(dx * ((up[i][1]-vcm[ibody][1])) -
|
||||||
dy * ((up[i][0]-vcm[ibody][0])));
|
dy * ((up[i][0]-vcm[ibody][0])));
|
||||||
sum[ibody][3] += -Gamma_MD[ibody]*(v[i][0]-up[i][0]);
|
sum[ibody][3] += -Gamma_MD[ibody]*(v[i][0]-up[i][0]);
|
||||||
sum[ibody][4] += -Gamma_MD[ibody]*(v[i][1]-up[i][1]);
|
sum[ibody][4] += -Gamma_MD[ibody]*(v[i][1]-up[i][1]);
|
||||||
sum[ibody][5] += -Gamma_MD[ibody]*(v[i][2]-up[i][2]);
|
sum[ibody][5] += -Gamma_MD[ibody]*(v[i][2]-up[i][2]);
|
||||||
|
@ -900,15 +902,15 @@ void FixLbRigidPCSphere::initial_integrate(int vflag)
|
||||||
|
|
||||||
if(fflag[ibody][0]==1){
|
if(fflag[ibody][0]==1){
|
||||||
vcm[ibody][0] = expminusdttimesgamma*(vcm[ibody][0] - ucm[ibody][0] - fcm[ibody][0]*force_factor)
|
vcm[ibody][0] = expminusdttimesgamma*(vcm[ibody][0] - ucm[ibody][0] - fcm[ibody][0]*force_factor)
|
||||||
+ ucm[ibody][0] + fcm[ibody][0]*force_factor;
|
+ ucm[ibody][0] + fcm[ibody][0]*force_factor;
|
||||||
}
|
}
|
||||||
if(fflag[ibody][1]==1){
|
if(fflag[ibody][1]==1){
|
||||||
vcm[ibody][1] = expminusdttimesgamma*(vcm[ibody][1] - ucm[ibody][1] - fcm[ibody][1]*force_factor) +
|
vcm[ibody][1] = expminusdttimesgamma*(vcm[ibody][1] - ucm[ibody][1] - fcm[ibody][1]*force_factor) +
|
||||||
ucm[ibody][1] + fcm[ibody][1]*force_factor;
|
ucm[ibody][1] + fcm[ibody][1]*force_factor;
|
||||||
}
|
}
|
||||||
if(fflag[ibody][2]==1){
|
if(fflag[ibody][2]==1){
|
||||||
vcm[ibody][2] = expminusdttimesgamma*(vcm[ibody][2] - ucm[ibody][2] - fcm[ibody][2]*force_factor) +
|
vcm[ibody][2] = expminusdttimesgamma*(vcm[ibody][2] - ucm[ibody][2] - fcm[ibody][2]*force_factor) +
|
||||||
ucm[ibody][2] + fcm[ibody][2]*force_factor;
|
ucm[ibody][2] + fcm[ibody][2]*force_factor;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Approximate angmom
|
// Approximate angmom
|
||||||
|
@ -918,21 +920,21 @@ void FixLbRigidPCSphere::initial_integrate(int vflag)
|
||||||
|
|
||||||
if(tflag[ibody][0]==1){
|
if(tflag[ibody][0]==1){
|
||||||
omega[ibody][0] = expminusdttimesgamma*(omega[ibody][0] - (3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
omega[ibody][0] = expminusdttimesgamma*(omega[ibody][0] - (3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
||||||
(force->ftm2v*torque[ibody][0] + torque_fluid[ibody][0])) +
|
(force->ftm2v*torque[ibody][0] + torque_fluid[ibody][0])) +
|
||||||
(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
||||||
(force->ftm2v*torque[ibody][0] + torque_fluid[ibody][0]);
|
(force->ftm2v*torque[ibody][0] + torque_fluid[ibody][0]);
|
||||||
}
|
}
|
||||||
if(tflag[ibody][1]==1){
|
if(tflag[ibody][1]==1){
|
||||||
omega[ibody][1] = expminusdttimesgamma*(omega[ibody][1] - (3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
omega[ibody][1] = expminusdttimesgamma*(omega[ibody][1] - (3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
||||||
(force->ftm2v*torque[ibody][1] + torque_fluid[ibody][1])) +
|
(force->ftm2v*torque[ibody][1] + torque_fluid[ibody][1])) +
|
||||||
(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
||||||
(force->ftm2v*torque[ibody][1] + torque_fluid[ibody][1]);
|
(force->ftm2v*torque[ibody][1] + torque_fluid[ibody][1]);
|
||||||
}
|
}
|
||||||
if(tflag[ibody][2]==1){
|
if(tflag[ibody][2]==1){
|
||||||
omega[ibody][2] = expminusdttimesgamma*(omega[ibody][2] - (3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
omega[ibody][2] = expminusdttimesgamma*(omega[ibody][2] - (3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
||||||
(force->ftm2v*torque[ibody][2] + torque_fluid[ibody][2])) +
|
(force->ftm2v*torque[ibody][2] + torque_fluid[ibody][2])) +
|
||||||
(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*
|
||||||
(force->ftm2v*torque[ibody][2] + torque_fluid[ibody][2]);
|
(force->ftm2v*torque[ibody][2] + torque_fluid[ibody][2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1012,11 +1014,11 @@ void FixLbRigidPCSphere::final_integrate()
|
||||||
DMDcoeff = (dtv - (1.0-expminusdttimesgamma)/torque_factor);
|
DMDcoeff = (dtv - (1.0-expminusdttimesgamma)/torque_factor);
|
||||||
|
|
||||||
omega[ibody][0] += tflag[ibody][0]*(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*DMDcoeff*
|
omega[ibody][0] += tflag[ibody][0]*(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*DMDcoeff*
|
||||||
force->ftm2v*(torque[ibody][0] - torque_old[ibody][0])/dtv;
|
force->ftm2v*(torque[ibody][0] - torque_old[ibody][0])/dtv;
|
||||||
omega[ibody][1] += tflag[ibody][1]*(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*DMDcoeff*
|
omega[ibody][1] += tflag[ibody][1]*(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*DMDcoeff*
|
||||||
force->ftm2v*(torque[ibody][1] - torque_old[ibody][1])/dtv;
|
force->ftm2v*(torque[ibody][1] - torque_old[ibody][1])/dtv;
|
||||||
omega[ibody][2] += tflag[ibody][2]*(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*DMDcoeff*
|
omega[ibody][2] += tflag[ibody][2]*(3.0/(2.0*nrigid_shell[ibody]*sphereradius[ibody]*sphereradius[ibody]*Gamma_MD[ibody]))*DMDcoeff*
|
||||||
force->ftm2v*(torque[ibody][2] - torque_old[ibody][2])/dtv;
|
force->ftm2v*(torque[ibody][2] - torque_old[ibody][2])/dtv;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Next, calculate the correction to the velocity and angular momentum due to the fluid forces:
|
//Next, calculate the correction to the velocity and angular momentum due to the fluid forces:
|
||||||
|
@ -1042,26 +1044,26 @@ void FixLbRigidPCSphere::final_integrate()
|
||||||
|
|
||||||
if(inner_nodes == 1){
|
if(inner_nodes == 1){
|
||||||
if(!(mask[i] & group->bitmask[igroupinner])){
|
if(!(mask[i] & group->bitmask[igroupinner])){
|
||||||
sum[ibody][0] += up[i][0]*massone;
|
sum[ibody][0] += up[i][0]*massone;
|
||||||
sum[ibody][1] += up[i][1]*massone;
|
sum[ibody][1] += up[i][1]*massone;
|
||||||
sum[ibody][2] += up[i][2]*massone;
|
sum[ibody][2] += up[i][2]*massone;
|
||||||
sum[ibody][3] += Gamma_MD[ibody]*(dy * ((up[i][2]-vcm[ibody][2])) -
|
sum[ibody][3] += Gamma_MD[ibody]*(dy * ((up[i][2]-vcm[ibody][2])) -
|
||||||
dz * ((up[i][1]-vcm[ibody][1])));
|
dz * ((up[i][1]-vcm[ibody][1])));
|
||||||
sum[ibody][4] += Gamma_MD[ibody]*(dz * ((up[i][0]-vcm[ibody][0])) -
|
sum[ibody][4] += Gamma_MD[ibody]*(dz * ((up[i][0]-vcm[ibody][0])) -
|
||||||
dx * ((up[i][2]-vcm[ibody][2])));
|
dx * ((up[i][2]-vcm[ibody][2])));
|
||||||
sum[ibody][5] += Gamma_MD[ibody]*(dx * ((up[i][1]-vcm[ibody][1])) -
|
sum[ibody][5] += Gamma_MD[ibody]*(dx * ((up[i][1]-vcm[ibody][1])) -
|
||||||
dy * ((up[i][0]-vcm[ibody][0])));
|
dy * ((up[i][0]-vcm[ibody][0])));
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
sum[ibody][0] += up[i][0]*massone;
|
sum[ibody][0] += up[i][0]*massone;
|
||||||
sum[ibody][1] += up[i][1]*massone;
|
sum[ibody][1] += up[i][1]*massone;
|
||||||
sum[ibody][2] += up[i][2]*massone;
|
sum[ibody][2] += up[i][2]*massone;
|
||||||
sum[ibody][3] += Gamma_MD[ibody]*(dy * ((up[i][2]-vcm[ibody][2])) -
|
sum[ibody][3] += Gamma_MD[ibody]*(dy * ((up[i][2]-vcm[ibody][2])) -
|
||||||
dz * ((up[i][1]-vcm[ibody][1])));
|
dz * ((up[i][1]-vcm[ibody][1])));
|
||||||
sum[ibody][4] += Gamma_MD[ibody]*(dz * ((up[i][0]-vcm[ibody][0])) -
|
sum[ibody][4] += Gamma_MD[ibody]*(dz * ((up[i][0]-vcm[ibody][0])) -
|
||||||
dx * ((up[i][2]-vcm[ibody][2])));
|
dx * ((up[i][2]-vcm[ibody][2])));
|
||||||
sum[ibody][5] += Gamma_MD[ibody]*(dx * ((up[i][1]-vcm[ibody][1])) -
|
sum[ibody][5] += Gamma_MD[ibody]*(dx * ((up[i][1]-vcm[ibody][1])) -
|
||||||
dy * ((up[i][0]-vcm[ibody][0])));
|
dy * ((up[i][0]-vcm[ibody][0])));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1521,8 +1523,8 @@ double FixLbRigidPCSphere::compute_scalar()
|
||||||
|
|
||||||
for (int i = 0; i < nbody; i++) {
|
for (int i = 0; i < nbody; i++) {
|
||||||
t += masstotal[i] * (fflag[i][0]*vcm[i][0]*vcm[i][0] +
|
t += masstotal[i] * (fflag[i][0]*vcm[i][0]*vcm[i][0] +
|
||||||
fflag[i][1]*vcm[i][1]*vcm[i][1] + \
|
fflag[i][1]*vcm[i][1]*vcm[i][1] + \
|
||||||
fflag[i][2]*vcm[i][2]*vcm[i][2]);
|
fflag[i][2]*vcm[i][2]*vcm[i][2]);
|
||||||
|
|
||||||
// wbody = angular velocity in body frame
|
// wbody = angular velocity in body frame
|
||||||
|
|
||||||
|
@ -1602,88 +1604,88 @@ double FixLbRigidPCSphere::compute_array(int i, int j)
|
||||||
up[i][0]=0.0; up[i][1]=0.0; up[i][2]=0.0;
|
up[i][0]=0.0; up[i][1]=0.0; up[i][2]=0.0;
|
||||||
|
|
||||||
if(trilinear_stencil==0){
|
if(trilinear_stencil==0){
|
||||||
isten=0;
|
isten=0;
|
||||||
for(ii=-1; ii<3; ii++){
|
for(ii=-1; ii<3; ii++){
|
||||||
rsq=(-dx1+ii)*(-dx1+ii);
|
rsq=(-dx1+ii)*(-dx1+ii);
|
||||||
|
|
||||||
if(rsq>=4)
|
if(rsq>=4)
|
||||||
weightx=0.0;
|
weightx=0.0;
|
||||||
else{
|
else{
|
||||||
r=sqrt(rsq);
|
r=sqrt(rsq);
|
||||||
if(rsq>1){
|
if(rsq>1){
|
||||||
weightx=(5.0-2.0*r-sqrt(-7.0+12.0*r-4.0*rsq))/8.;
|
weightx=(5.0-2.0*r-sqrt(-7.0+12.0*r-4.0*rsq))/8.;
|
||||||
} else{
|
} else{
|
||||||
weightx=(3.0-2.0*r+sqrt(1.0+4.0*r-4.0*rsq))/8.;
|
weightx=(3.0-2.0*r+sqrt(1.0+4.0*r-4.0*rsq))/8.;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(jj=-1; jj<3; jj++){
|
for(jj=-1; jj<3; jj++){
|
||||||
rsq=(-dy1+jj)*(-dy1+jj);
|
rsq=(-dy1+jj)*(-dy1+jj);
|
||||||
if(rsq>=4)
|
if(rsq>=4)
|
||||||
weighty=0.0;
|
weighty=0.0;
|
||||||
else{
|
else{
|
||||||
r=sqrt(rsq);
|
r=sqrt(rsq);
|
||||||
if(rsq>1){
|
if(rsq>1){
|
||||||
weighty=(5.0-2.0*r-sqrt(-7.0+12.0*r-4.0*rsq))/8.;
|
weighty=(5.0-2.0*r-sqrt(-7.0+12.0*r-4.0*rsq))/8.;
|
||||||
} else{
|
} else{
|
||||||
weighty=(3.0-2.0*r+sqrt(1.0+4.0*r-4.0*rsq))/8.;
|
weighty=(3.0-2.0*r+sqrt(1.0+4.0*r-4.0*rsq))/8.;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(kk=-1; kk<3; kk++){
|
for(kk=-1; kk<3; kk++){
|
||||||
rsq=(-dz1+kk)*(-dz1+kk);
|
rsq=(-dz1+kk)*(-dz1+kk);
|
||||||
if(rsq>=4)
|
if(rsq>=4)
|
||||||
weightz=0.0;
|
weightz=0.0;
|
||||||
else{
|
else{
|
||||||
r=sqrt(rsq);
|
r=sqrt(rsq);
|
||||||
if(rsq>1){
|
if(rsq>1){
|
||||||
weightz=(5.0-2.0*r-sqrt(-7.0+12.0*r-4.0*rsq))/8.;
|
weightz=(5.0-2.0*r-sqrt(-7.0+12.0*r-4.0*rsq))/8.;
|
||||||
} else{
|
} else{
|
||||||
weightz=(3.0-2.0*r+sqrt(1.0+4.0*r-4.0*rsq))/8.;
|
weightz=(3.0-2.0*r+sqrt(1.0+4.0*r-4.0*rsq))/8.;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ixp = ix+ii;
|
ixp = ix+ii;
|
||||||
iyp = iy+jj;
|
iyp = iy+jj;
|
||||||
izp = iz+kk;
|
izp = iz+kk;
|
||||||
|
|
||||||
|
|
||||||
if(ixp==-1) ixp=subNbx+2;
|
if(ixp==-1) ixp=subNbx+2;
|
||||||
if(iyp==-1) iyp=subNby+2;
|
if(iyp==-1) iyp=subNby+2;
|
||||||
if(izp==-1) izp=subNbz+2;
|
if(izp==-1) izp=subNbz+2;
|
||||||
|
|
||||||
FfP[isten] = weightx*weighty*weightz;
|
FfP[isten] = weightx*weighty*weightz;
|
||||||
// interpolated velocity based on delta function.
|
// interpolated velocity based on delta function.
|
||||||
for(k=0; k<3; k++){
|
for(k=0; k<3; k++){
|
||||||
up[i][k] += u_lb[ixp][iyp][izp][k]*FfP[isten];
|
up[i][k] += u_lb[ixp][iyp][izp][k]*FfP[isten];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
FfP[0] = (1.-dx1)*(1.-dy1)*(1.-dz1);
|
FfP[0] = (1.-dx1)*(1.-dy1)*(1.-dz1);
|
||||||
FfP[1] = (1.-dx1)*(1.-dy1)*dz1;
|
FfP[1] = (1.-dx1)*(1.-dy1)*dz1;
|
||||||
FfP[2] = (1.-dx1)*dy1*(1.-dz1);
|
FfP[2] = (1.-dx1)*dy1*(1.-dz1);
|
||||||
FfP[3] = (1.-dx1)*dy1*dz1;
|
FfP[3] = (1.-dx1)*dy1*dz1;
|
||||||
FfP[4] = dx1*(1.-dy1)*(1.-dz1);
|
FfP[4] = dx1*(1.-dy1)*(1.-dz1);
|
||||||
FfP[5] = dx1*(1.-dy1)*dz1;
|
FfP[5] = dx1*(1.-dy1)*dz1;
|
||||||
FfP[6] = dx1*dy1*(1.-dz1);
|
FfP[6] = dx1*dy1*(1.-dz1);
|
||||||
FfP[7] = dx1*dy1*dz1;
|
FfP[7] = dx1*dy1*dz1;
|
||||||
|
|
||||||
ixp = (ix+1);
|
ixp = (ix+1);
|
||||||
iyp = (iy+1);
|
iyp = (iy+1);
|
||||||
izp = (iz+1);
|
izp = (iz+1);
|
||||||
|
|
||||||
for (k=0; k<3; k++) { // tri-linearly interpolated velocity at node
|
for (k=0; k<3; k++) { // tri-linearly interpolated velocity at node
|
||||||
up[i][k] = u_lb[ix][iy][iz][k]*FfP[0]
|
up[i][k] = u_lb[ix][iy][iz][k]*FfP[0]
|
||||||
+ u_lb[ix][iy][izp][k]*FfP[1]
|
+ u_lb[ix][iy][izp][k]*FfP[1]
|
||||||
+ u_lb[ix][iyp][iz][k]*FfP[2]
|
+ u_lb[ix][iyp][iz][k]*FfP[2]
|
||||||
+ u_lb[ix][iyp][izp][k]*FfP[3]
|
+ u_lb[ix][iyp][izp][k]*FfP[3]
|
||||||
+ u_lb[ixp][iy][iz][k]*FfP[4]
|
+ u_lb[ixp][iy][iz][k]*FfP[4]
|
||||||
+ u_lb[ixp][iy][izp][k]*FfP[5]
|
+ u_lb[ixp][iy][izp][k]*FfP[5]
|
||||||
+ u_lb[ixp][iyp][iz][k]*FfP[6]
|
+ u_lb[ixp][iyp][iz][k]*FfP[6]
|
||||||
+ u_lb[ixp][iyp][izp][k]*FfP[7];
|
+ u_lb[ixp][iyp][izp][k]*FfP[7];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(k=0; k<3; k++)
|
for(k=0; k<3; k++)
|
||||||
up[i][k] = up[i][k]*dx_lb/dt_lb;
|
up[i][k] = up[i][k]*dx_lb/dt_lb;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue