forked from lijiext/lammps
git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@9716 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
parent
c2be9deab9
commit
836502a357
|
@ -407,9 +407,7 @@ void FixGCMC::attempt_atomic_translation()
|
|||
|
||||
if (ngas == 0) return;
|
||||
|
||||
int i;
|
||||
if (regionflag) i = pick_random_gas_atom_in_region();
|
||||
else i = pick_random_gas_atom();
|
||||
int i = pick_random_gas_atom();
|
||||
|
||||
int success = 0;
|
||||
if (i >= 0) {
|
||||
|
@ -459,9 +457,7 @@ void FixGCMC::attempt_atomic_deletion()
|
|||
|
||||
if (ngas == 0) return;
|
||||
|
||||
int i;
|
||||
if (regionflag) i = pick_random_gas_atom_in_region();
|
||||
else i = pick_random_gas_atom();
|
||||
int i = pick_random_gas_atom();
|
||||
|
||||
int success = 0;
|
||||
if (i >= 0) {
|
||||
|
@ -565,9 +561,7 @@ void FixGCMC::attempt_molecule_translation()
|
|||
|
||||
if (ngas == 0) return;
|
||||
|
||||
int translation_molecule;
|
||||
if (regionflag) translation_molecule = pick_random_gas_molecule_in_region();
|
||||
else translation_molecule = pick_random_gas_molecule();
|
||||
int translation_molecule = pick_random_gas_molecule();
|
||||
if (translation_molecule == -1) return;
|
||||
|
||||
double energy_before_sum = molecule_energy(translation_molecule);
|
||||
|
@ -625,9 +619,7 @@ void FixGCMC::attempt_molecule_rotation()
|
|||
|
||||
if (ngas == 0) return;
|
||||
|
||||
int rotation_molecule;
|
||||
if (regionflag) rotation_molecule = pick_random_gas_molecule_in_region();
|
||||
else rotation_molecule = pick_random_gas_molecule();
|
||||
int rotation_molecule = pick_random_gas_molecule();
|
||||
if (rotation_molecule == -1) return;
|
||||
|
||||
double energy_before_sum = molecule_energy(rotation_molecule);
|
||||
|
@ -705,9 +697,7 @@ void FixGCMC::attempt_molecule_deletion()
|
|||
|
||||
if (ngas == 0) return;
|
||||
|
||||
int deletion_molecule;
|
||||
if (regionflag) deletion_molecule = pick_random_gas_molecule_in_region();
|
||||
else deletion_molecule = pick_random_gas_molecule();
|
||||
int deletion_molecule = pick_random_gas_molecule();
|
||||
if (deletion_molecule == -1) return;
|
||||
|
||||
double deletion_energy_sum = molecule_energy(deletion_molecule);
|
||||
|
@ -919,34 +909,6 @@ int FixGCMC::pick_random_gas_atom()
|
|||
/* ----------------------------------------------------------------------
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
int FixGCMC::pick_random_gas_atom_in_region()
|
||||
{
|
||||
int i = -1;
|
||||
int i_own_candidate = 0;
|
||||
int i_own_candidate_all = 0;
|
||||
int region_attempt = 0;
|
||||
double **x = atom->x;
|
||||
while (!i_own_candidate_all) {
|
||||
int iwhichglobal = static_cast<int> (ngas*random_equal->uniform());
|
||||
if ((iwhichglobal >= ngas_before) &&
|
||||
(iwhichglobal < ngas_before + ngas_local)) {
|
||||
i_own_candidate = 1;
|
||||
int iwhichlocal = iwhichglobal - ngas_before;
|
||||
i = local_gas_list[iwhichlocal];
|
||||
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]) == 0)
|
||||
i_own_candidate = 0;
|
||||
}
|
||||
MPI_Allreduce(&i_own_candidate,&i_own_candidate_all,1,MPI_INT,MPI_MAX,world);
|
||||
region_attempt++;
|
||||
if (region_attempt >= max_region_attempts) return -1;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
int FixGCMC::pick_random_gas_molecule()
|
||||
{
|
||||
int iwhichglobal = static_cast<int> (ngas*random_equal->uniform());
|
||||
|
@ -964,34 +926,6 @@ int FixGCMC::pick_random_gas_molecule()
|
|||
return gas_molecule_id_all;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
int FixGCMC::pick_random_gas_molecule_in_region()
|
||||
{
|
||||
int region_attempt = 0;
|
||||
int gas_molecule_id = 0;
|
||||
int gas_molecule_id_all = 0;
|
||||
double **x = atom->x;
|
||||
while (!gas_molecule_id_all) {
|
||||
int iwhichglobal = static_cast<int> (ngas*random_equal->uniform());
|
||||
if ((iwhichglobal >= ngas_before) &&
|
||||
(iwhichglobal < ngas_before + ngas_local)) {
|
||||
int iwhichlocal = iwhichglobal - ngas_before;
|
||||
int i = local_gas_list[iwhichlocal];
|
||||
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]) != 0) {
|
||||
gas_molecule_id = atom->molecule[i];
|
||||
}
|
||||
}
|
||||
gas_molecule_id_all = 0;
|
||||
MPI_Allreduce(&gas_molecule_id,&gas_molecule_id_all,1,MPI_INT,MPI_MAX,world);
|
||||
region_attempt++;
|
||||
if (region_attempt >= max_region_attempts) return -1;
|
||||
}
|
||||
|
||||
return gas_molecule_id_all;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
compute the energy of the given gas molecule in its current position
|
||||
sum across all procs that own atoms of the given molecule
|
||||
|
@ -1247,10 +1181,22 @@ void FixGCMC::update_gas_atoms_list()
|
|||
}
|
||||
|
||||
ngas_local = 0;
|
||||
for (int i = 0; i < atom->nlocal; i++) {
|
||||
if (atom->mask[i] & groupbit) {
|
||||
local_gas_list[ngas_local] = i;
|
||||
ngas_local++;
|
||||
if (regionflag) {
|
||||
for (int i = 0; i < atom->nlocal; i++) {
|
||||
if (atom->mask[i] & groupbit) {
|
||||
double **x = atom->x;
|
||||
if (domain->regions[iregion]->match(x[i][0],x[i][1],x[i][2]) == 1) {
|
||||
local_gas_list[ngas_local] = i;
|
||||
ngas_local++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < atom->nlocal; i++) {
|
||||
if (atom->mask[i] & groupbit) {
|
||||
local_gas_list[ngas_local] = i;
|
||||
ngas_local++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,9 +41,7 @@ class FixGCMC : public Fix {
|
|||
void attempt_molecule_insertion();
|
||||
double energy(int, int, int, double *);
|
||||
int pick_random_gas_atom();
|
||||
int pick_random_gas_atom_in_region();
|
||||
int pick_random_gas_molecule();
|
||||
int pick_random_gas_molecule_in_region();
|
||||
double molecule_energy(int);
|
||||
void get_rotation_matrix(double, double *);
|
||||
void get_model_molecule();
|
||||
|
|
Loading…
Reference in New Issue