Merge remote-tracking branch 'lammps-ro/master' into lammps-icms

This commit is contained in:
Axel Kohlmeyer
2015-01-29 07:23:11 -05:00
26 changed files with 164 additions and 59 deletions

View File

@ -696,7 +696,7 @@ void Variable::compute_atom(int ivar, int igroup,
if (style[ivar] == ATOM) {
evaluate(data[ivar][0],&tree);
collapse_tree(tree);
} else vstore = reader[ivar]->fix->vstore;
} else vstore = reader[ivar]->fixstore->vstore;
int groupbit = group->bitmask[igroup];
int *mask = atom->mask;
@ -754,6 +754,18 @@ int Variable::find(char *name)
return -1;
}
/* ----------------------------------------------------------------------
initialize one atom's storage values in all VarReaders via fix STORE
called when atom is created
------------------------------------------------------------------------- */
void Variable::set_arrays(int i)
{
for (int i = 0; i < nvar; i++)
if (reader[i] && style[i] == ATOMFILE)
reader[i]->fixstore->vstore[i] = 0.0;
}
/* ----------------------------------------------------------------------
return 1 if variable is EQUAL style, 0 if not
------------------------------------------------------------------------- */
@ -1303,9 +1315,11 @@ double Variable::evaluate(char *str, Tree **tree)
} else if (nbracket == 2 && fix->array_flag) {
if (index1 > fix->size_array_rows)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
if (index1 > fix->size_array_rows) {
if (fix->size_array_rows_variable == 0)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
}
if (index2 > fix->size_array_cols)
error->all(FLERR,
"Variable formula fix array is accessed out-of-range");
@ -1471,7 +1485,7 @@ double Variable::evaluate(char *str, Tree **tree)
"equal-style variable formula");
Tree *newtree = new Tree();
newtree->type = ATOMARRAY;
newtree->array = reader[ivar]->fix->vstore;
newtree->array = reader[ivar]->fixstore->vstore;
newtree->nstride = 1;
newtree->selfalloc = 0;
newtree->first = newtree->second = NULL;
@ -1495,7 +1509,7 @@ double Variable::evaluate(char *str, Tree **tree)
} else if (nbracket && style[ivar] == ATOMFILE) {
peratom2global(1,NULL,reader[ivar]->fix->vstore,1,index,
peratom2global(1,NULL,reader[ivar]->fixstore->vstore,1,index,
tree,treestack,ntreestack,argstack,nargstack);
} else error->all(FLERR,"Mismatched variable in variable formula");
@ -3653,7 +3667,7 @@ int Variable::special_function(char *word, char *contents, Tree **tree,
double *result;
memory->create(result,atom->nlocal,"variable:result");
memcpy(result,reader[ivar]->fix->vstore,atom->nlocal*sizeof(double));
memcpy(result,reader[ivar]->fixstore->vstore,atom->nlocal*sizeof(double));
int done = reader[ivar]->read_peratom();
if (done) remove(ivar);
@ -4287,7 +4301,7 @@ VarReader::VarReader(LAMMPS *lmp, char *name, char *file, int flag) :
// allocate a new fix STORE, so they persist
// id = variable-ID + VARIABLE_STORE, fix group = all
fix = NULL;
fixstore = NULL;
id_fix = NULL;
buffer = NULL;
@ -4308,7 +4322,7 @@ VarReader::VarReader(LAMMPS *lmp, char *name, char *file, int flag) :
newarg[3] = (char *) "0";
newarg[4] = (char *) "1";
modify->add_fix(5,newarg);
fix = (FixStore *) modify->fix[modify->nfix-1];
fixstore = (FixStore *) modify->fix[modify->nfix-1];
delete [] newarg;
buffer = new char[CHUNK*MAXLINE];
@ -4323,7 +4337,7 @@ VarReader::~VarReader()
// check modify in case all fixes have already been deleted
if (fix) {
if (fixstore) {
if (modify) modify->delete_fix(id_fix);
delete [] id_fix;
delete [] buffer;
@ -4379,7 +4393,7 @@ int VarReader::read_peratom()
// set all per-atom values to 0.0
// values that appear in file will overwrite this
double *vstore = fix->vstore;
double *vstore = fixstore->vstore;
int nlocal = atom->nlocal;
for (i = 0; i < nlocal; i++) vstore[i] = 0.0;