make checks for exceeding length of variable-length vectors more consistent
This commit is contained in:
@ -454,6 +454,8 @@ void FixAveCorrelateLong::end_of_step()
|
|||||||
scalar = val.val.f->compute_vector(val.argindex-1);
|
scalar = val.val.f->compute_vector(val.argindex-1);
|
||||||
|
|
||||||
// evaluate equal-style or vector-style variable
|
// evaluate equal-style or vector-style variable
|
||||||
|
// if index exceeds vector length, use a zero value
|
||||||
|
// this can be useful if vector length is not known a priori
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
if (val.argindex == 0)
|
if (val.argindex == 0)
|
||||||
@ -462,7 +464,7 @@ void FixAveCorrelateLong::end_of_step()
|
|||||||
double *varvec;
|
double *varvec;
|
||||||
int nvec = input->variable->compute_vector(val.val.v,&varvec);
|
int nvec = input->variable->compute_vector(val.val.v,&varvec);
|
||||||
int index = val.argindex;
|
int index = val.argindex;
|
||||||
if (nvec < index) scalar = 0.0;
|
if (index > nvec) scalar = 0.0;
|
||||||
else scalar = varvec[index-1];
|
else scalar = varvec[index-1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -414,6 +414,8 @@ void FixAveCorrelate::end_of_step()
|
|||||||
scalar = val.val.f->compute_vector(val.argindex-1);
|
scalar = val.val.f->compute_vector(val.argindex-1);
|
||||||
|
|
||||||
// evaluate equal-style or vector-style variable
|
// evaluate equal-style or vector-style variable
|
||||||
|
// if index exceeds vector length, use a zero value
|
||||||
|
// this can be useful if vector length is not known a priori
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
if (val.argindex == 0)
|
if (val.argindex == 0)
|
||||||
@ -422,7 +424,7 @@ void FixAveCorrelate::end_of_step()
|
|||||||
double *varvec;
|
double *varvec;
|
||||||
int nvec = input->variable->compute_vector(val.val.v,&varvec);
|
int nvec = input->variable->compute_vector(val.val.v,&varvec);
|
||||||
int index = val.argindex;
|
int index = val.argindex;
|
||||||
if (nvec < index) scalar = 0.0;
|
if (index > nvec) scalar = 0.0;
|
||||||
else scalar = varvec[index-1];
|
else scalar = varvec[index-1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -600,6 +600,8 @@ void FixAveHisto::end_of_step()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// evaluate equal-style or vector-style or atom-style variable
|
// evaluate equal-style or vector-style or atom-style variable
|
||||||
|
// if index exceeds vector length, use a zero value
|
||||||
|
// this can be useful if vector length is not known a priori
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
if (kind == GLOBAL && mode == SCALAR) {
|
if (kind == GLOBAL && mode == SCALAR) {
|
||||||
@ -607,7 +609,7 @@ void FixAveHisto::end_of_step()
|
|||||||
else {
|
else {
|
||||||
double *varvec;
|
double *varvec;
|
||||||
int nvec = input->variable->compute_vector(val.val.v,&varvec);
|
int nvec = input->variable->compute_vector(val.val.v,&varvec);
|
||||||
if (nvec < j) bin_one(0.0);
|
if (j > nvec) bin_one(0.0);
|
||||||
else bin_one(varvec[j-1]);
|
else bin_one(varvec[j-1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -562,7 +562,8 @@ void FixAveTime::invoke_scalar(bigint ntimestep)
|
|||||||
scalar = val.val.f->compute_vector(val.argindex-1);
|
scalar = val.val.f->compute_vector(val.argindex-1);
|
||||||
|
|
||||||
// evaluate equal-style or vector-style variable
|
// evaluate equal-style or vector-style variable
|
||||||
// ensure no out-of-range access to vector-style variable
|
// if index exceeds vector length, use a zero value
|
||||||
|
// this can be useful if vector length is not known a priori
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
if (val.argindex == 0)
|
if (val.argindex == 0)
|
||||||
@ -570,7 +571,7 @@ void FixAveTime::invoke_scalar(bigint ntimestep)
|
|||||||
else {
|
else {
|
||||||
double *varvec;
|
double *varvec;
|
||||||
int nvec = input->variable->compute_vector(val.val.v,&varvec);
|
int nvec = input->variable->compute_vector(val.val.v,&varvec);
|
||||||
if (nvec < val.argindex) scalar = 0.0;
|
if (val.argindex > nvec) scalar = 0.0;
|
||||||
else scalar = varvec[val.argindex-1];
|
else scalar = varvec[val.argindex-1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1515,6 +1515,8 @@ void Thermo::compute_fix()
|
|||||||
int m = field2index[ifield];
|
int m = field2index[ifield];
|
||||||
Fix *fix = fixes[m];
|
Fix *fix = fixes[m];
|
||||||
|
|
||||||
|
// check for out-of-range access if vector/array is variable length
|
||||||
|
|
||||||
if (argindex1[ifield] == 0) {
|
if (argindex1[ifield] == 0) {
|
||||||
dvalue = fix->compute_scalar();
|
dvalue = fix->compute_scalar();
|
||||||
if (normflag && fix->extscalar) dvalue /= natoms;
|
if (normflag && fix->extscalar) dvalue /= natoms;
|
||||||
@ -1544,13 +1546,17 @@ void Thermo::compute_variable()
|
|||||||
{
|
{
|
||||||
int iarg = argindex1[ifield];
|
int iarg = argindex1[ifield];
|
||||||
|
|
||||||
|
// evaluate equal-style or vector-style variable
|
||||||
|
// if index exceeds vector length, use a zero value
|
||||||
|
// this can be useful if vector length is not known a priori
|
||||||
|
|
||||||
if (iarg == 0)
|
if (iarg == 0)
|
||||||
dvalue = input->variable->compute_equal(variables[field2index[ifield]]);
|
dvalue = input->variable->compute_equal(variables[field2index[ifield]]);
|
||||||
else {
|
else {
|
||||||
double *varvec;
|
double *varvec;
|
||||||
int nvec = input->variable->compute_vector(variables[field2index[ifield]], &varvec);
|
int nvec = input->variable->compute_vector(variables[field2index[ifield]], &varvec);
|
||||||
if (iarg > nvec) error->all(FLERR, "Thermo vector-style variable is accessed out-of-range");
|
if (iarg > nvec) dvalue = 0.0;
|
||||||
dvalue = varvec[iarg - 1];
|
else dvalue = varvec[iarg - 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user