Commit 1f6a1f4a authored by pscrozi's avatar pscrozi
Browse files

git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@13298 f3b2605a-c512-4ea7-a41b-209d697bcdaa
parent 4d2f6875
Loading
Loading
Loading
Loading
+32 −3
Original line number Diff line number Diff line
@@ -1288,6 +1288,7 @@ void FixGCMC::attempt_atomic_deletion_full()
      atom->q[i] = 0.0;
    }
  }
  if (force->kspace) force->kspace->qsum_qsq();
  double energy_after = energy_full();

  if (random_equal->uniform() < 
@@ -1305,6 +1306,7 @@ void FixGCMC::attempt_atomic_deletion_full()
      atom->mask[i] = tmpmask;
      if (atom->q_flag) atom->q[i] = q_tmp;
    }
    if (force->kspace) force->kspace->qsum_qsq();
    energy_stored = energy_before;
  }
  update_gas_atoms_list();
@@ -1360,7 +1362,7 @@ void FixGCMC::attempt_atomic_insertion_full()
  }
  atom->nghost = 0;
  comm->borders();
    
  if (force->kspace) force->kspace->qsum_qsq();
  double energy_after = energy_full();
  
  if (random_equal->uniform() <
@@ -1371,6 +1373,7 @@ void FixGCMC::attempt_atomic_insertion_full()
  } else {
    atom->natoms--;
    if (proc_flag) atom->nlocal--;
    if (force->kspace) force->kspace->qsum_qsq();
    energy_stored = energy_before;
  }
  update_gas_atoms_list();
@@ -1575,10 +1578,10 @@ void FixGCMC::attempt_molecule_deletion_full()
        m++;
        atom->q[i] = 0.0;
      }
      
      toggle_intramolecular(i);
    }
  }
  
  if (force->kspace) force->kspace->qsum_qsq();
  double energy_after = energy_full();  

  if (random_equal->uniform() < 
@@ -1600,12 +1603,14 @@ void FixGCMC::attempt_molecule_deletion_full()
    for (int i = 0; i < atom->nlocal; i++) {
      if (atom->molecule[i] == deletion_molecule) {
        atom->mask[i] = tmpmask[i];
        toggle_intramolecular(i);
        if (atom->q_flag) {
          atom->q[i] = q_tmp[m];
          m++;
        }
      }    
    }
    if (force->kspace) force->kspace->qsum_qsq();
  }
  update_gas_atoms_list();
}
@@ -1720,6 +1725,7 @@ void FixGCMC::attempt_molecule_insertion_full()
  if (atom->map_style) atom->map_init();
  atom->nghost = 0;
  comm->borders();
  if (force->kspace) force->kspace->qsum_qsq();
  double energy_after = energy_full();

  if (random_equal->uniform() < zz*volume*natoms_per_molecule*
@@ -1744,6 +1750,7 @@ void FixGCMC::attempt_molecule_insertion_full()
        atom->nlocal--;
      } else i++;
    }
    if (force->kspace) force->kspace->qsum_qsq();
  }
  update_gas_atoms_list();
}
@@ -1823,6 +1830,28 @@ tagint FixGCMC::pick_random_gas_molecule()
  return gas_molecule_id_all;
}

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

void FixGCMC::toggle_intramolecular(int i)
{
  if (atom->avec->bonds_allow)
    for (int m = 0; m < atom->num_bond[i]; m++) 
      atom->bond_type[i][m] = -atom->bond_type[i][m];
    
  if (atom->avec->angles_allow)
    for (int m = 0; m < atom->num_angle[i]; m++)
      atom->angle_type[i][m] = -atom->angle_type[i][m];

  if (atom->avec->dihedrals_allow)
    for (int m = 0; m < atom->num_dihedral[i]; m++)
      atom->dihedral_type[i][m] = -atom->dihedral_type[i][m];
      
  if (atom->avec->impropers_allow)
    for (int m = 0; m < atom->num_improper[i]; m++)
      atom->improper_type[i][m] = -atom->improper_type[i][m];
}
  
/* ----------------------------------------------------------------------
   update the list of gas atoms
------------------------------------------------------------------------- */
+2 −1
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ class FixGCMC : public Fix {
  double energy_full();
  int pick_random_gas_atom();
  tagint pick_random_gas_molecule();
  void toggle_intramolecular(int);
  double molecule_energy(tagint);
  void update_gas_atoms_list();
  double compute_vector(int);
@@ -245,7 +246,7 @@ E: Illegal fix gcmc gas mass <= 0
The computed mass of the designated gas molecule or atom type was less 
than or equal to zero.

E: Cannot do GCMC on atoms in atom_modify first group
E: Cannot do gcmc on atoms in atom_modify first group

This is a restriction due to the way atoms are organized in a list to
enable the atom_modify first command.