From 6751f3508af0f7da61bf836ce77f1a0e86409ddc Mon Sep 17 00:00:00 2001
From: sjplimp
Date: Mon, 28 Jul 2014 18:46:35 +0000
Subject: [PATCH 01/31] git-svn-id:
svn://svn.icms.temple.edu/lammps-ro/trunk@12198
f3b2605a-c512-4ea7-a41b-209d697bcdaa
---
doc/variable.html | 5 +++--
doc/variable.txt | 5 +++--
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/doc/variable.html b/doc/variable.html
index 51daea0bf2..5222302cbe 100644
--- a/doc/variable.html
+++ b/doc/variable.html
@@ -50,7 +50,7 @@
constants = PI
thermo keywords = vol, ke, press, etc from thermo_style
math operators = (), -x, x+y, x-y, x*y, x/y, x^y, x%y,
- x==y, x!=y, xy, x>=y, x&&y, x||y, !x
+ x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x
math functions = sqrt(x), exp(x), ln(x), log(x), abs(x),
sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x),
random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x)
@@ -368,7 +368,8 @@ references to other variables.
| Number | 0.2, 100, 1.0e20, -15.4, etc |
| Constant | PI |
| Thermo keywords | vol, pe, ebond, etc |
-| Math operators | (), -x, x+y, x-y, x*y, x/y, x^y, x%y, x==y, x!=y, xy, x>=y, x&&y, x||y, !x |
+| Math operators | (), -x, x+y, x-y, x*y, x/y, x^y, x%y, |
+| Math operators | (), -x, x+y, x-y, x*y, x/y, x^y, x%y, x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x |
| Math functions | sqrt(x), exp(x), ln(x), log(x), abs(x), sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x), ramp(x,y), stagger(x,y), logfreq(x,y,z), stride(x,y,z), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z) |
| Group functions | count(ID), mass(ID), charge(ID), xcm(ID,dim), vcm(ID,dim), fcm(ID,dim), bound(ID,dir), gyration(ID), ke(ID), angmom(ID,dim), torque(ID,dim), inertia(ID,dimdim), omega(ID,dim) |
| Region functions | count(ID,IDR), mass(ID,IDR), charge(ID,IDR), xcm(ID,dim,IDR), vcm(ID,dim,IDR), fcm(ID,dim,IDR), bound(ID,dir,IDR), gyration(ID,IDR), ke(ID,IDR), angmom(ID,dim,IDR), torque(ID,dim,IDR), inertia(ID,dimdim,IDR), omega(ID,dim,IDR) |
diff --git a/doc/variable.txt b/doc/variable.txt
index e9362de392..d7323b3efe 100644
--- a/doc/variable.txt
+++ b/doc/variable.txt
@@ -45,7 +45,7 @@ style = {delete} or {index} or {loop} or {world} or {universe} or {uloop} or {st
constants = PI
thermo keywords = vol, ke, press, etc from "thermo_style"_thermo_style.html
math operators = (), -x, x+y, x-y, x*y, x/y, x^y, x%y,
- x==y, x!=y, xy, x>=y, x&&y, x||y, !x
+ x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x
math functions = sqrt(x), exp(x), ln(x), log(x), abs(x),
sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x),
random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x)
@@ -361,7 +361,8 @@ references to other variables.
Number: 0.2, 100, 1.0e20, -15.4, etc
Constant: PI
Thermo keywords: vol, pe, ebond, etc
-Math operators: (), -x, x+y, x-y, x*y, x/y, x^y, x%y, x==y, x!=y, xy, x>=y, x&&y, x||y, !x
+Math operators: (), -x, x+y, x-y, x*y, x/y, x^y, x%y,
+Math operators: (), -x, x+y, x-y, x*y, x/y, x^y, x%y, x == y, x != y, x < y, x <= y, x > y, x >= y, x && y, x || y, !x
Math functions: sqrt(x), exp(x), ln(x), log(x), abs(x), sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x), ramp(x,y), stagger(x,y), logfreq(x,y,z), stride(x,y,z), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z)
Group functions: count(ID), mass(ID), charge(ID), xcm(ID,dim), \
vcm(ID,dim), fcm(ID,dim), bound(ID,dir), \
From 16dc820a58b4907b4fe00ac9bb9576f6320f7faa Mon Sep 17 00:00:00 2001
From: sjplimp
Date: Mon, 28 Jul 2014 18:46:39 +0000
Subject: [PATCH 02/31] git-svn-id:
svn://svn.icms.temple.edu/lammps-ro/trunk@12199
f3b2605a-c512-4ea7-a41b-209d697bcdaa
---
doc/create_atoms.html | 46 ++++++++++++++++++++++++++++++++++++++++-
doc/create_atoms.txt | 48 +++++++++++++++++++++++++++++++++++++++++--
2 files changed, 91 insertions(+), 3 deletions(-)
diff --git a/doc/create_atoms.html b/doc/create_atoms.html
index 6f06935377..eff378a418 100644
--- a/doc/create_atoms.html
+++ b/doc/create_atoms.html
@@ -31,7 +31,7 @@
zero or more keyword/value pairs may be appended
-keyword = mol or basis or remap or units
+keyword = mol or basis or remap or var or set or units
mol value = template-ID seed
template-ID = ID of molecule template specified in a separate molecule command
@@ -40,6 +40,10 @@
M = which basis atom
itype = atom type (1-N) to assign to this basis atom
remap value = yes or no
+ var value = name = variable name to evaluate for test of atom creation
+ set values = dim vname
+ dim = x or y or z
+ name = name of variable to set with x,y,z atom position
units value = lattice or box
lattice = the geometry is defined in lattice units
box = the geometry is defined in simulation box units
@@ -51,6 +55,7 @@
create_atoms 1 box
create_atoms 3 region regsphere basis 2 3
create_atoms 3 single 0 0 5
+create_atoms 1 box var v set x xpos set y ypos
Description:
@@ -189,6 +194,45 @@ box, it will mapped back into the box, assuming the relevant
dimensions are periodic. If it is set to no, no remapping is done
and no particle is created if its position is outside the box.
+The var and set keywords can be used to provide a criterion for
+accepting or rejecting the addition of an individual atom, based on
+its coordinates. The vname specified for the var keyword is the
+name of an equal-style variable which should evaluate
+to a zero or non-zero value based on one or two or three variables
+which will store the x, y, or z coordinates of an atom (one variable
+per coordinate). These other variables must be equal-style
+variables defined in the input script, but their
+formula can by anything. The set keyword is used to identify the
+names of these other variables, one variable for the x-coordinate of a
+created atom, one for y, and one for z.
+
+When an atom is created, its x, y, or z coordinates override the
+formula for any set variable that is defined. The var variable is
+then evaluated. If the returned value is 0.0, the atom is not
+created. If it is non-zero, the atom is created.
+
+As an example, these commands can be used in a 2d simulation, to
+create a sinusoidal surface. Note that the surface is "rough" due to
+individual lattice points being "above" or "below" the mathematical
+expression for the sinusoidal curve. If a finer lattice were used,
+the sinusoid would appear to be "smoother". Also note the use of the
+"xlat" and "ylat" thermo_style keywords which
+converts lattice spacings to distance. Click on the image for a
+larger version.
+
+variable x equal 100
+variable y equal 25
+lattice hex 0.8442
+region box block 0 $x 0 $y -0.5 0.5
+create_box 1 box
+
+variable xx equal 0.0
+variable yy equal 0.0
+variable v equal "(0.2*v_y*ylat * cos(v_xx/xlat * 2.0*PI*4.0/v_x) + 0.5*v_y*ylat - v_yy) > 0.0"
+create_atoms 1 box var v set x xx set y yy
+
+
+
The units keyword determines the meaning of the distance units used
to specify the coordinates of the one particle created by the single
style. A box value selects standard distance units as defined by
diff --git a/doc/create_atoms.txt b/doc/create_atoms.txt
index 4552d43e9a..f395b87b32 100644
--- a/doc/create_atoms.txt
+++ b/doc/create_atoms.txt
@@ -24,7 +24,7 @@ style = {box} or {region} or {single} or {random} :l
seed = random # seed (positive integer)
region-ID = create atoms within this region, use NULL for entire simulation box :pre
zero or more keyword/value pairs may be appended :l
-keyword = {mol} or {basis} or {remap} or {units} :l
+keyword = {mol} or {basis} or {remap} or {var} or {set} or {units} :l
{mol} value = template-ID seed
template-ID = ID of molecule template specified in a separate "molecule"_molecule.html command
seed = random # seed (positive integer)
@@ -32,6 +32,10 @@ keyword = {mol} or {basis} or {remap} or {units} :l
M = which basis atom
itype = atom type (1-N) to assign to this basis atom
{remap} value = {yes} or {no}
+ {var} value = name = variable name to evaluate for test of atom creation
+ {set} values = dim vname
+ dim = {x} or {y} or {z}
+ name = name of variable to set with x,y,z atom position
{units} value = {lattice} or {box}
{lattice} = the geometry is defined in lattice units
{box} = the geometry is defined in simulation box units :pre
@@ -41,7 +45,8 @@ keyword = {mol} or {basis} or {remap} or {units} :l
create_atoms 1 box
create_atoms 3 region regsphere basis 2 3
-create_atoms 3 single 0 0 5 :pre
+create_atoms 3 single 0 0 5
+create_atoms 1 box var v set x xpos set y ypos :pre
[Description:]
@@ -180,6 +185,45 @@ box, it will mapped back into the box, assuming the relevant
dimensions are periodic. If it is set to {no}, no remapping is done
and no particle is created if its position is outside the box.
+The {var} and {set} keywords can be used to provide a criterion for
+accepting or rejecting the addition of an individual atom, based on
+its coordinates. The {vname} specified for the {var} keyword is the
+name of an "equal-style variable"_variable.html which should evaluate
+to a zero or non-zero value based on one or two or three variables
+which will store the x, y, or z coordinates of an atom (one variable
+per coordinate). These other variables must be "equal-style
+variables"_variable.html defined in the input script, but their
+formula can by anything. The {set} keyword is used to identify the
+names of these other variables, one variable for the x-coordinate of a
+created atom, one for y, and one for z.
+
+When an atom is created, its x, y, or z coordinates override the
+formula for any {set} variable that is defined. The {var} variable is
+then evaluated. If the returned value is 0.0, the atom is not
+created. If it is non-zero, the atom is created.
+
+As an example, these commands can be used in a 2d simulation, to
+create a sinusoidal surface. Note that the surface is "rough" due to
+individual lattice points being "above" or "below" the mathematical
+expression for the sinusoidal curve. If a finer lattice were used,
+the sinusoid would appear to be "smoother". Also note the use of the
+"xlat" and "ylat" "thermo_style"_thermo_style.html keywords which
+converts lattice spacings to distance. Click on the image for a
+larger version.
+
+variable x equal 100
+variable y equal 25
+lattice hex 0.8442
+region box block 0 $x 0 $y -0.5 0.5
+create_box 1 box :pre
+
+variable xx equal 0.0
+variable yy equal 0.0
+variable v equal "(0.2*v_y*ylat * cos(v_xx/xlat * 2.0*PI*4.0/v_x) + 0.5*v_y*ylat - v_yy) > 0.0"
+create_atoms 1 box var v set x xx set y yy :pre
+
+:c,image(JPG/sinusoid_small.jpg,JPG/sinusoid.jpg)
+
The {units} keyword determines the meaning of the distance units used
to specify the coordinates of the one particle created by the {single}
style. A {box} value selects standard distance units as defined by
From cf005551eafb033bfdc37abb18e0d66c46e7411f Mon Sep 17 00:00:00 2001
From: sjplimp
Date: Mon, 28 Jul 2014 18:46:50 +0000
Subject: [PATCH 03/31] git-svn-id:
svn://svn.icms.temple.edu/lammps-ro/trunk@12200
f3b2605a-c512-4ea7-a41b-209d697bcdaa
---
src/create_atoms.cpp | 145 +++++++++++++++++++++++++++++++++++++++----
src/create_atoms.h | 5 ++
2 files changed, 138 insertions(+), 12 deletions(-)
diff --git a/src/create_atoms.cpp b/src/create_atoms.cpp
index be5c479360..9777f23334 100644
--- a/src/create_atoms.cpp
+++ b/src/create_atoms.cpp
@@ -27,6 +27,8 @@
#include "domain.h"
#include "lattice.h"
#include "region.h"
+#include "input.h"
+#include "variable.h"
#include "random_park.h"
#include "random_mars.h"
#include "math_extra.h"
@@ -41,6 +43,7 @@ using namespace MathConst;
enum{BOX,REGION,SINGLE,RANDOM};
enum{ATOM,MOLECULE};
+enum{LAYOUT_UNIFORM,LAYOUT_NONUNIFORM,LAYOUT_TILED}; // several files
/* ---------------------------------------------------------------------- */
@@ -103,6 +106,8 @@ void CreateAtoms::command(int narg, char **arg)
remapflag = 0;
mode = ATOM;
int molseed;
+ varflag = 0;
+ vstr = xstr = ystr = zstr = NULL;
nbasis = domain->lattice->nbasis;
basistype = new int[nbasis];
@@ -141,6 +146,33 @@ void CreateAtoms::command(int narg, char **arg)
else if (strcmp(arg[iarg+1],"lattice") == 0) scaleflag = 1;
else error->all(FLERR,"Illegal create_atoms command");
iarg += 2;
+ } else if (strcmp(arg[iarg],"var") == 0) {
+ if (iarg+2 > narg) error->all(FLERR,"Illegal create_atoms command");
+ delete [] vstr;
+ int n = strlen(arg[iarg+1]) + 1;
+ vstr = new char[n];
+ strcpy(vstr,arg[iarg+1]);
+ varflag = 1;
+ iarg += 2;
+ } else if (strcmp(arg[iarg],"set") == 0) {
+ if (iarg+3 > narg) error->all(FLERR,"Illegal create_atoms command");
+ if (strcmp(arg[iarg+1],"x") == 0) {
+ delete [] xstr;
+ int n = strlen(arg[iarg+2]) + 1;
+ xstr = new char[n];
+ strcpy(xstr,arg[iarg+2]);
+ } else if (strcmp(arg[iarg+1],"y") == 0) {
+ delete [] ystr;
+ int n = strlen(arg[iarg+2]) + 1;
+ ystr = new char[n];
+ strcpy(ystr,arg[iarg+2]);
+ } else if (strcmp(arg[iarg+1],"z") == 0) {
+ delete [] zstr;
+ int n = strlen(arg[iarg+2]) + 1;
+ zstr = new char[n];
+ strcpy(zstr,arg[iarg+2]);
+ } else error->all(FLERR,"Illegal create_atoms command");
+ iarg += 3;
} else error->all(FLERR,"Illegal create_atoms command");
}
@@ -178,6 +210,47 @@ void CreateAtoms::command(int narg, char **arg)
ranmol = new RanMars(lmp,molseed+comm->me);
}
+ // error check and further setup for variable test
+ // save local copy of each equal variable string so can restore at end
+
+ if (!vstr && (xstr || ystr || zstr))
+ error->all(FLERR,"Incomplete use of variables in create_atoms command");
+ if (vstr && (!xstr && !ystr && !zstr))
+ error->all(FLERR,"Incomplete use of variables in create_atoms command");
+
+ if (varflag) {
+ vvar = input->variable->find(vstr);
+ if (vvar < 0)
+ error->all(FLERR,"Variable name for create_atoms does not exist");
+ if (!input->variable->equalstyle(vvar))
+ error->all(FLERR,"Variable for create_atoms is invalid style");
+
+ if (xstr) {
+ xvar = input->variable->find(xstr);
+ if (xvar < 0)
+ error->all(FLERR,"Variable name for create_atoms does not exist");
+ if (!input->variable->equalstyle(xvar))
+ error->all(FLERR,"Variable for create_atoms is invalid style");
+ input->variable->equal_save(xvar,xstr_copy);
+ }
+ if (ystr) {
+ yvar = input->variable->find(ystr);
+ if (yvar < 0)
+ error->all(FLERR,"Variable name for create_atoms does not exist");
+ if (!input->variable->equalstyle(yvar))
+ error->all(FLERR,"Variable for create_atoms is invalid style");
+ input->variable->equal_save(yvar,ystr_copy);
+ }
+ if (zstr) {
+ zvar = input->variable->find(zstr);
+ if (zvar < 0)
+ error->all(FLERR,"Variable name for create_atoms does not exist");
+ if (!input->variable->equalstyle(zvar))
+ error->all(FLERR,"Variable for create_atoms is invalid style");
+ input->variable->equal_save(zvar,zstr_copy);
+ }
+ }
+
// demand non-none lattice be defined for BOX and REGION
// else setup scaling for SINGLE and RANDOM
// could use domain->lattice->lattice2box() to do conversion of
@@ -226,17 +299,32 @@ void CreateAtoms::command(int narg, char **arg)
}
if (style == BOX || style == REGION) {
- if (domain->xperiodic) {
- if (comm->myloc[0] == 0) sublo[0] -= epsilon[0];
- if (comm->myloc[0] == comm->procgrid[0]-1) subhi[0] -= 2.0*epsilon[0];
- }
- if (domain->yperiodic) {
- if (comm->myloc[1] == 0) sublo[1] -= epsilon[1];
- if (comm->myloc[1] == comm->procgrid[1]-1) subhi[1] -= 2.0*epsilon[1];
- }
- if (domain->zperiodic) {
- if (comm->myloc[2] == 0) sublo[2] -= epsilon[2];
- if (comm->myloc[2] == comm->procgrid[2]-1) subhi[2] -= 2.0*epsilon[2];
+ if (comm->layout != LAYOUT_TILED) {
+ if (domain->xperiodic) {
+ if (comm->myloc[0] == 0) sublo[0] -= epsilon[0];
+ if (comm->myloc[0] == comm->procgrid[0]-1) subhi[0] -= 2.0*epsilon[0];
+ }
+ if (domain->yperiodic) {
+ if (comm->myloc[1] == 0) sublo[1] -= epsilon[1];
+ if (comm->myloc[1] == comm->procgrid[1]-1) subhi[1] -= 2.0*epsilon[1];
+ }
+ if (domain->zperiodic) {
+ if (comm->myloc[2] == 0) sublo[2] -= epsilon[2];
+ if (comm->myloc[2] == comm->procgrid[2]-1) subhi[2] -= 2.0*epsilon[2];
+ }
+ } else {
+ if (domain->xperiodic) {
+ if (comm->mysplit[0][0] == 0.0) sublo[0] -= epsilon[0];
+ if (comm->mysplit[0][1] == 1.0) subhi[0] -= 2.0*epsilon[0];
+ }
+ if (domain->yperiodic) {
+ if (comm->mysplit[1][0] == 0.0) sublo[1] -= epsilon[1];
+ if (comm->mysplit[1][1] == 1.0) subhi[1] -= 2.0*epsilon[1];
+ }
+ if (domain->zperiodic) {
+ if (comm->mysplit[2][0] == 0.0) sublo[2] -= epsilon[2];
+ if (comm->mysplit[2][1] == 1.0) subhi[2] -= 2.0*epsilon[2];
+ }
}
}
@@ -259,6 +347,14 @@ void CreateAtoms::command(int narg, char **arg)
fix->set_arrays(i);
}
+ // restore each equal variable string previously saved
+
+ if (varflag) {
+ if (xstr) input->variable->equal_restore(xvar,xstr_copy);
+ if (ystr) input->variable->equal_restore(yvar,ystr_copy);
+ if (zstr) input->variable->equal_restore(zvar,zstr_copy);
+ }
+
// set new total # of atoms and error check
bigint nblocal = atom->nlocal;
@@ -409,6 +505,10 @@ void CreateAtoms::command(int narg, char **arg)
delete ranmol;
if (domain->lattice) delete [] basistype;
+ delete [] vstr;
+ delete [] xstr;
+ delete [] ystr;
+ delete [] zstr;
// print status
@@ -509,7 +609,7 @@ void CreateAtoms::add_random()
}
// generate random positions for each new atom/molecule within bounding box
- // iterate until atom is within region and triclinic simulation box
+ // iterate until atom is within region, variable, and triclinic simulation box
// if final atom position is in my subbox, create it
if (xlo > xhi || ylo > yhi || zlo > zhi)
@@ -527,6 +627,7 @@ void CreateAtoms::add_random()
if (nregion >= 0 &&
domain->regions[nregion]->match(xone[0],xone[1],xone[2]) == 0)
valid = 0;
+ if (varflag && vartest(xone) == 0) valid = 0;
if (triclinic) {
domain->x2lamda(xone,lamda);
coord = lamda;
@@ -642,6 +743,10 @@ void CreateAtoms::add_lattice()
if (style == REGION)
if (!domain->regions[nregion]->match(x[0],x[1],x[2])) continue;
+ // if variable test specified, eval variable
+
+ if (varflag && vartest(x) == 0) continue;
+
// test if atom/molecule position is in my subbox
if (triclinic) {
@@ -696,3 +801,19 @@ void CreateAtoms::add_molecule(double *center)
atom->add_molecule_atom(onemol,m,n,0);
}
}
+
+/* ----------------------------------------------------------------------
+ test a generated atom position against variable evaluation
+ first plug in x,y,z values as requested
+------------------------------------------------------------------------- */
+
+int CreateAtoms::vartest(double *x)
+{
+ if (xstr) input->variable->equal_override(xvar,x[0]);
+ if (ystr) input->variable->equal_override(yvar,x[1]);
+ if (zstr) input->variable->equal_override(zvar,x[2]);
+
+ double value = input->variable->compute_equal(vvar);
+ if (value == 0.0) return 0;
+ return 1;
+}
diff --git a/src/create_atoms.h b/src/create_atoms.h
index f20eff66f1..1d9593cdf7 100644
--- a/src/create_atoms.h
+++ b/src/create_atoms.h
@@ -35,6 +35,10 @@ class CreateAtoms : protected Pointers {
double xone[3];
int remapflag;
+ int varflag,vvar,xvar,yvar,zvar;
+ char *vstr,*xstr,*ystr,*zstr;
+ char *xstr_copy,*ystr_copy,*zstr_copy;
+
class Molecule *onemol;
class RanMars *ranmol;
@@ -45,6 +49,7 @@ class CreateAtoms : protected Pointers {
void add_random();
void add_lattice();
void add_molecule(double *);
+ int vartest(double *); // evaluate a variable with new atom position
};
}
From 33d9ff4bf4453f22f4817311a942b8f6daa86ef7 Mon Sep 17 00:00:00 2001
From: sjplimp
Date: Mon, 28 Jul 2014 18:46:56 +0000
Subject: [PATCH 04/31] git-svn-id:
svn://svn.icms.temple.edu/lammps-ro/trunk@12201
f3b2605a-c512-4ea7-a41b-209d697bcdaa
---
src/variable.cpp | 69 +++++++++++++++++++++++++++++++++++-------------
src/variable.h | 6 ++++-
2 files changed, 55 insertions(+), 20 deletions(-)
diff --git a/src/variable.cpp b/src/variable.cpp
index fe11239e9f..b468ca6a74 100644
--- a/src/variable.cpp
+++ b/src/variable.cpp
@@ -44,6 +44,7 @@ using namespace MathConst;
#define MAXLEVEL 4
#define MAXLINE 256
#define CHUNK 1024
+#define VALUELENGTH 64
#define MYROUND(a) (( a-floor(a) ) >= .5) ? ceil(a) : floor(a)
@@ -306,7 +307,7 @@ void Variable::set(int narg, char **arg)
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
- data[nvar][1] = NULL;
+ data[nvar][1] = new char[VALUELENGTH];
// SCALARFILE for strings or numbers
// which = 1st value
@@ -360,7 +361,7 @@ void Variable::set(int narg, char **arg)
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(2,&arg[2],data[nvar]);
- data[nvar][2] = NULL;
+ data[nvar][2] = new char[VALUELENGTH];
// EQUAL
// replace pre-existing var if also style EQUAL (allows it to be reset)
@@ -376,7 +377,6 @@ void Variable::set(int narg, char **arg)
delete [] data[ivar][0];
if (data[ivar][1]) delete [] data[ivar][1];
copy(1,&arg[2],data[ivar]);
- data[ivar][1] = NULL;
replaceflag = 1;
} else {
if (nvar == maxvar) grow();
@@ -386,7 +386,7 @@ void Variable::set(int narg, char **arg)
pad[nvar] = 0;
data[nvar] = new char*[num[nvar]];
copy(1,&arg[2],data[nvar]);
- data[nvar][1] = NULL;
+ data[nvar][1] = new char[VALUELENGTH];
}
// ATOM
@@ -625,32 +625,24 @@ char *Variable::retrieve(char *name)
strcpy(data[ivar][0],result);
str = data[ivar][0];
} else if (style[ivar] == EQUAL) {
- char result[64];
double answer = evaluate(data[ivar][0],NULL);
- sprintf(result,"%.15g",answer);
- int n = strlen(result) + 1;
- if (data[ivar][1]) delete [] data[ivar][1];
- data[ivar][1] = new char[n];
- strcpy(data[ivar][1],result);
+ sprintf(data[ivar][1],"%.15g",answer);
str = data[ivar][1];
} else if (style[ivar] == FORMAT) {
- char result[64];
int jvar = find(data[ivar][0]);
if (jvar == -1) return NULL;
if (!equalstyle(jvar)) return NULL;
double answer = evaluate(data[jvar][0],NULL);
- sprintf(result,data[ivar][1],answer);
- int n = strlen(result) + 1;
- if (data[ivar][2]) delete [] data[ivar][2];
- data[ivar][2] = new char[n];
- strcpy(data[ivar][2],result);
+ sprintf(data[ivar][2],data[ivar][1],answer);
str = data[ivar][2];
} else if (style[ivar] == GETENV) {
const char *result = getenv(data[ivar][0]);
- if (data[ivar][1]) delete [] data[ivar][1];
- if (result == NULL) result = (const char *)"";
+ if (result == NULL) result = (const char *) "";
int n = strlen(result) + 1;
- data[ivar][1] = new char[n];
+ if (n > VALUELENGTH) {
+ delete [] data[ivar][1];
+ data[ivar][1] = new char[n];
+ }
strcpy(data[ivar][1],result);
str = data[ivar][1];
} else if (style[ivar] == ATOM || style[ivar] == ATOMFILE) return NULL;
@@ -782,6 +774,45 @@ int Variable::atomstyle(int ivar)
return 0;
}
+/* ----------------------------------------------------------------------
+ save copy of EQUAL style ivar formula in copy
+ allocate copy here, later equal_restore() call will free it
+ insure data[ivar][0] is of VALUELENGTH since will be overridden
+------------------------------------------------------------------------- */
+
+void Variable::equal_save(int ivar, char *©)
+{
+ int n = strlen(data[ivar][0]) + 1;
+ copy = new char[n];
+ strcpy(copy,data[ivar][0]);
+ delete [] data[ivar][0];
+ data[ivar][0] = new char[VALUELENGTH];
+}
+
+/* ----------------------------------------------------------------------
+ restore formula string of EQUAL style ivar from copy
+ then free copy, allocated in equal_save()
+------------------------------------------------------------------------- */
+
+void Variable::equal_restore(int ivar, char *copy)
+{
+ delete [] data[ivar][0];
+ int n = strlen(copy) + 1;
+ data[ivar][0] = new char[n];
+ strcpy(data[ivar][0],copy);
+ delete [] copy;
+}
+
+/* ----------------------------------------------------------------------
+ override EQUAL style ivar formula with value converted to string
+ data[ivar][0] was set to length 64 in equal_save()
+------------------------------------------------------------------------- */
+
+void Variable::equal_override(int ivar, double value)
+{
+ sprintf(data[ivar][0],"%.15g",value);
+}
+
/* ----------------------------------------------------------------------
remove Nth variable from list and compact list
delete reader explicitly if it exists
diff --git a/src/variable.h b/src/variable.h
index cf4e76e33e..4870b5e5d9 100644
--- a/src/variable.h
+++ b/src/variable.h
@@ -36,10 +36,15 @@ class Variable : protected Pointers {
int int_between_brackets(char *&, int);
double evaluate_boolean(char *);
+ void equal_save(int, char *&);
+ void equal_restore(int, char *);
+ void equal_override(int, double);
+
unsigned int data_mask(int ivar);
unsigned int data_mask(char *str);
private:
+ int me;
int nvar; // # of defined variables
int maxvar; // max # of variables following lists can hold
char **names; // name of each variable
@@ -57,7 +62,6 @@ class Variable : protected Pointers {
int precedence[17]; // precedence level of math operators
// set length to include up to OR in enum
- int me;
struct Tree { // parse tree for atom-style variables
double value; // single scalar
From d03dccfa0783b439a77570c6a66cb561333a5bfa Mon Sep 17 00:00:00 2001
From: sjplimp
Date: Mon, 28 Jul 2014 18:47:18 +0000
Subject: [PATCH 05/31] git-svn-id:
svn://svn.icms.temple.edu/lammps-ro/trunk@12202
f3b2605a-c512-4ea7-a41b-209d697bcdaa
---
doc/JPG/sinusoid.jpg | Bin 0 -> 128596 bytes
doc/JPG/sinusoid_small.jpg | Bin 0 -> 29397 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 doc/JPG/sinusoid.jpg
create mode 100644 doc/JPG/sinusoid_small.jpg
diff --git a/doc/JPG/sinusoid.jpg b/doc/JPG/sinusoid.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..00969281a1ba2bc91ae2c038eb9279b4cc8dd79a
GIT binary patch
literal 128596
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%0D<$E6d$D55!FUuIv(hUTnsqzCUV1U
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