forked from lijiext/lammps
git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@207 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
parent
828e342394
commit
5c22269d4e
|
@ -789,13 +789,13 @@ void Input::log()
|
|||
if (logfile) fclose(logfile);
|
||||
if (strcmp(arg[0],"none") == 0) logfile = NULL;
|
||||
else {
|
||||
char fname[128];
|
||||
if (universe->nworlds == 1) strcpy(fname,arg[0]);
|
||||
else sprintf(fname,"%s.%d",arg[0],universe->iworld);
|
||||
logfile = fopen(fname,"w");
|
||||
// char fname[128];
|
||||
// if (universe->nworlds == 1) strcpy(fname,arg[0]);
|
||||
// else sprintf(fname,"%s.%d",arg[0],universe->iworld);
|
||||
logfile = fopen(arg[0],"w");
|
||||
if (logfile == NULL) {
|
||||
char str[128];
|
||||
sprintf(str,"Cannot open logfile %s",fname);
|
||||
sprintf(str,"Cannot open logfile %s",arg[0]);
|
||||
error->one(str);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
#define VARDELTA 4
|
||||
|
||||
enum{INDEX,LOOP,EQUAL,WORLD,UNIVERSE};
|
||||
enum{INDEX,LOOP,EQUAL,WORLD,UNIVERSE,ULOOP};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
|
@ -136,19 +136,29 @@ void Variable::set(int narg, char **arg)
|
|||
data[nvar] = new char*[num[nvar]];
|
||||
copy(num[nvar],&arg[2],data[nvar]);
|
||||
|
||||
// UNIVERSE
|
||||
// num = listed args, index = partition this proc is in, data = copied args
|
||||
// UNIVERSE and ULOOP
|
||||
// for UNIVERSE: num = listed args, data = copied args
|
||||
// for ULOOP: num = N, data = list of NULLS since never used
|
||||
// index = partition this proc is in
|
||||
// universe proc 0 creates lock file
|
||||
// error check that all other universe variables are same length
|
||||
// error check that all other universe/uloop variables are same length
|
||||
|
||||
} else if (strcmp(arg[1],"universe") == 0 || strcmp(arg[1],"uloop") == 0) {
|
||||
if (strcmp(arg[1],"universe") == 0) {
|
||||
style[nvar] = UNIVERSE;
|
||||
num[nvar] = narg - 2;
|
||||
data[nvar] = new char*[num[nvar]];
|
||||
copy(num[nvar],&arg[2],data[nvar]);
|
||||
} else {
|
||||
style[nvar] = ULOOP;
|
||||
num[nvar] = atoi(arg[2]);
|
||||
data[nvar] = new char*[num[nvar]];
|
||||
for (int i = 0; i < num[nvar]; i++) data[nvar][i] = NULL;
|
||||
}
|
||||
|
||||
} else if (strcmp(arg[1],"universe") == 0) {
|
||||
style[nvar] = UNIVERSE;
|
||||
num[nvar] = narg - 2;
|
||||
if (num[nvar] < universe->nworlds)
|
||||
error->all("Universe variable count < # of partitions");
|
||||
error->all("Universe/uloop variable count < # of partitions");
|
||||
index[nvar] = universe->iworld;
|
||||
data[nvar] = new char*[num[nvar]];
|
||||
copy(num[nvar],&arg[2],data[nvar]);
|
||||
|
||||
if (universe->me == 0) {
|
||||
FILE *fp = fopen("tmp.lammps.variable","w");
|
||||
|
@ -157,8 +167,9 @@ void Variable::set(int narg, char **arg)
|
|||
}
|
||||
|
||||
for (int jvar = 0; jvar < nvar; jvar++)
|
||||
if (num[jvar] && style[jvar] == UNIVERSE && num[nvar] != num[jvar])
|
||||
error->all("All universe variables must have same # of values");
|
||||
if (num[jvar] && (style[jvar] == UNIVERSE || style[jvar] == ULOOP) &&
|
||||
num[nvar] != num[jvar])
|
||||
error->all("All universe/uloop variables must have same # of values");
|
||||
|
||||
if (me == 0) {
|
||||
if (universe->uscreen)
|
||||
|
@ -252,7 +263,7 @@ int Variable::next(int narg, char **arg)
|
|||
}
|
||||
}
|
||||
|
||||
} else if (istyle == UNIVERSE) {
|
||||
} else if (istyle == UNIVERSE || istyle == ULOOP) {
|
||||
|
||||
// wait until lock file can be created and owned by proc 0 of this world
|
||||
// read next available index and Bcast it within my world
|
||||
|
@ -307,9 +318,10 @@ char *Variable::retrieve(char *name)
|
|||
if (index[ivar] >= num[ivar]) return NULL;
|
||||
|
||||
char *str;
|
||||
if (style[ivar] == INDEX) {
|
||||
if (style[ivar] == INDEX || style[ivar] == WORLD ||
|
||||
style[ivar] == UNIVERSE) {
|
||||
str = data[ivar][index[ivar]];
|
||||
} else if (style[ivar] == LOOP) {
|
||||
} else if (style[ivar] == LOOP || style[ivar] == ULOOP) {
|
||||
char *value = new char[16];
|
||||
sprintf(value,"%d",index[ivar]+1);
|
||||
int n = strlen(value) + 1;
|
||||
|
@ -326,10 +338,6 @@ char *Variable::retrieve(char *name)
|
|||
strcpy(data[ivar][1],value);
|
||||
delete [] value;
|
||||
str = data[ivar][1];
|
||||
} else if (style[ivar] == WORLD) {
|
||||
str = data[ivar][index[ivar]];
|
||||
} else if (style[ivar] == UNIVERSE) {
|
||||
str = data[ivar][index[ivar]];
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue