git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@3568 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
@ -249,7 +249,7 @@ void ComputePropertyAtom::compute_peratom()
|
|||||||
buf = vector;
|
buf = vector;
|
||||||
(this->*pack_choice[0])(0);
|
(this->*pack_choice[0])(0);
|
||||||
} else {
|
} else {
|
||||||
buf = array[0];
|
if (array) buf = array[0];
|
||||||
for (int n = 0; n < nvalues; n++)
|
for (int n = 0; n < nvalues; n++)
|
||||||
(this->*pack_choice[n])(n);
|
(this->*pack_choice[n])(n);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,15 +14,13 @@
|
|||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "compute_property_local.h"
|
#include "compute_property_local.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
|
#include "atom_vec.h"
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
#include "domain.h"
|
#include "domain.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
|
||||||
|
|
||||||
#include "comm.h"
|
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
// customize by adding keyword
|
// customize by adding keyword
|
||||||
@ -110,7 +108,7 @@ ComputePropertyLocal::ComputePropertyLocal(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
error->all("Compute property/local cannot use these inputs together");
|
error->all("Compute property/local cannot use these inputs together");
|
||||||
kindflag = DIHEDRAL;
|
kindflag = DIHEDRAL;
|
||||||
} else if (strcmp(arg[iarg],"datom4") == 0) {
|
} else if (strcmp(arg[iarg],"datom4") == 0) {
|
||||||
pack_choice[i] = &ComputePropertyLocal::pack_datom3;
|
pack_choice[i] = &ComputePropertyLocal::pack_datom4;
|
||||||
if (kindflag != NONE && kindflag != DIHEDRAL)
|
if (kindflag != NONE && kindflag != DIHEDRAL)
|
||||||
error->all("Compute property/local cannot use these inputs together");
|
error->all("Compute property/local cannot use these inputs together");
|
||||||
kindflag = DIHEDRAL;
|
kindflag = DIHEDRAL;
|
||||||
@ -136,7 +134,7 @@ ComputePropertyLocal::ComputePropertyLocal(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
error->all("Compute property/local cannot use these inputs together");
|
error->all("Compute property/local cannot use these inputs together");
|
||||||
kindflag = IMPROPER;
|
kindflag = IMPROPER;
|
||||||
} else if (strcmp(arg[iarg],"iatom4") == 0) {
|
} else if (strcmp(arg[iarg],"iatom4") == 0) {
|
||||||
pack_choice[i] = &ComputePropertyLocal::pack_iatom3;
|
pack_choice[i] = &ComputePropertyLocal::pack_iatom4;
|
||||||
if (kindflag != NONE && kindflag != IMPROPER)
|
if (kindflag != NONE && kindflag != IMPROPER)
|
||||||
error->all("Compute property/local cannot use these inputs together");
|
error->all("Compute property/local cannot use these inputs together");
|
||||||
kindflag = IMPROPER;
|
kindflag = IMPROPER;
|
||||||
@ -149,6 +147,17 @@ ComputePropertyLocal::ComputePropertyLocal(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
} else error->all("Invalid keyword in compute property/local command");
|
} else error->all("Invalid keyword in compute property/local command");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// error check
|
||||||
|
|
||||||
|
if (kindflag == BOND && atom->avec->bonds_allow == 0)
|
||||||
|
error->all("Compute property/local for property that isn't allocated");
|
||||||
|
if (kindflag == ANGLE && atom->avec->angles_allow == 0)
|
||||||
|
error->all("Compute property/local for property that isn't allocated");
|
||||||
|
if (kindflag == DIHEDRAL && atom->avec->dihedrals_allow == 0)
|
||||||
|
error->all("Compute property/local for property that isn't allocated");
|
||||||
|
if (kindflag == IMPROPER && atom->avec->impropers_allow == 0)
|
||||||
|
error->all("Compute property/local for property that isn't allocated");
|
||||||
|
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
vector = NULL;
|
vector = NULL;
|
||||||
array = NULL;
|
array = NULL;
|
||||||
@ -207,7 +216,7 @@ void ComputePropertyLocal::compute_local()
|
|||||||
buf = vector;
|
buf = vector;
|
||||||
(this->*pack_choice[0])(0);
|
(this->*pack_choice[0])(0);
|
||||||
} else {
|
} else {
|
||||||
buf = array[0];
|
if (array) buf = array[0];
|
||||||
for (int n = 0; n < nvalues; n++)
|
for (int n = 0; n < nvalues; n++)
|
||||||
(this->*pack_choice[n])(n);
|
(this->*pack_choice[n])(n);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,6 +52,7 @@ Dump::Dump(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
|
|||||||
format = NULL;
|
format = NULL;
|
||||||
format_user = NULL;
|
format_user = NULL;
|
||||||
|
|
||||||
|
clearstep = 0;
|
||||||
sort_flag = 0;
|
sort_flag = 0;
|
||||||
append_flag = 0;
|
append_flag = 0;
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,7 @@ class Dump : protected Pointers {
|
|||||||
int sort_flag; // 1 if write in sorted order, 0 if not
|
int sort_flag; // 1 if write in sorted order, 0 if not
|
||||||
int append_flag; // 1 if open file in append mode, 0 if not
|
int append_flag; // 1 if open file in append mode, 0 if not
|
||||||
int singlefile_opened; // 1 = one big file, already opened, else 0
|
int singlefile_opened; // 1 = one big file, already opened, else 0
|
||||||
|
int clearstep; // 1 if dump invokes computes, 0 if not
|
||||||
|
|
||||||
char *format_default; // default format string
|
char *format_default; // default format string
|
||||||
char *format_user; // format string set by user
|
char *format_user; // format string set by user
|
||||||
|
|||||||
@ -51,6 +51,8 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
{
|
{
|
||||||
if (narg == 5) error->all("No dump custom arguments specified");
|
if (narg == 5) error->all("No dump custom arguments specified");
|
||||||
|
|
||||||
|
clearstep = 1;
|
||||||
|
|
||||||
nevery = atoi(arg[3]);
|
nevery = atoi(arg[3]);
|
||||||
|
|
||||||
size_one = nfield = narg-5;
|
size_one = nfield = narg-5;
|
||||||
@ -81,7 +83,7 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
variable = NULL;
|
variable = NULL;
|
||||||
vbuf = NULL;
|
vbuf = NULL;
|
||||||
|
|
||||||
// process keywords
|
// process attributes
|
||||||
|
|
||||||
parse_fields(narg,arg);
|
parse_fields(narg,arg);
|
||||||
|
|
||||||
@ -974,7 +976,7 @@ void DumpCustom::parse_fields(int narg, char **arg)
|
|||||||
char *ptr = strchr(suffix,'[');
|
char *ptr = strchr(suffix,'[');
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
if (suffix[strlen(suffix)-1] != ']')
|
if (suffix[strlen(suffix)-1] != ']')
|
||||||
error->all("Invalid keyword in dump custom command");
|
error->all("Invalid attribute in dump custom command");
|
||||||
argindex[i] = atoi(ptr+1);
|
argindex[i] = atoi(ptr+1);
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
} else argindex[i] = 0;
|
} else argindex[i] = 0;
|
||||||
@ -1008,7 +1010,7 @@ void DumpCustom::parse_fields(int narg, char **arg)
|
|||||||
char *ptr = strchr(suffix,'[');
|
char *ptr = strchr(suffix,'[');
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
if (suffix[strlen(suffix)-1] != ']')
|
if (suffix[strlen(suffix)-1] != ']')
|
||||||
error->all("Invalid keyword in dump custom command");
|
error->all("Invalid attribute in dump custom command");
|
||||||
argindex[i] = atoi(ptr+1);
|
argindex[i] = atoi(ptr+1);
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
} else argindex[i] = 0;
|
} else argindex[i] = 0;
|
||||||
@ -1048,7 +1050,7 @@ void DumpCustom::parse_fields(int narg, char **arg)
|
|||||||
field2index[i] = add_variable(suffix);
|
field2index[i] = add_variable(suffix);
|
||||||
delete [] suffix;
|
delete [] suffix;
|
||||||
|
|
||||||
} else error->all("Invalid keyword in dump custom command");
|
} else error->all("Invalid attribute in dump custom command");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1173,7 +1175,7 @@ int DumpCustom::modify_param(int narg, char **arg)
|
|||||||
memory->srealloc(thresh_value,(nthresh+1)*sizeof(double),
|
memory->srealloc(thresh_value,(nthresh+1)*sizeof(double),
|
||||||
"dump:thresh_value");
|
"dump:thresh_value");
|
||||||
|
|
||||||
// set keyword type of threshhold
|
// set attribute type of threshhold
|
||||||
// customize by adding to if statement
|
// customize by adding to if statement
|
||||||
|
|
||||||
if (strcmp(arg[1],"id") == 0) thresh_array[nthresh] = ID;
|
if (strcmp(arg[1],"id") == 0) thresh_array[nthresh] = ID;
|
||||||
@ -1258,25 +1260,25 @@ int DumpCustom::modify_param(int narg, char **arg)
|
|||||||
char *ptr = strchr(suffix,'[');
|
char *ptr = strchr(suffix,'[');
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
if (suffix[strlen(suffix)-1] != ']')
|
if (suffix[strlen(suffix)-1] != ']')
|
||||||
error->all("Invalid keyword in dump custom command");
|
error->all("Invalid attribute in dump modify command");
|
||||||
argindex[nfield+nthresh] = atoi(ptr+1);
|
argindex[nfield+nthresh] = atoi(ptr+1);
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
} else argindex[nfield+nthresh] = 0;
|
} else argindex[nfield+nthresh] = 0;
|
||||||
|
|
||||||
n = modify->find_compute(suffix);
|
n = modify->find_compute(suffix);
|
||||||
if (n < 0) error->all("Could not find dump custom compute ID");
|
if (n < 0) error->all("Could not find dump modify compute ID");
|
||||||
|
|
||||||
if (modify->compute[n]->peratom_flag == 0)
|
if (modify->compute[n]->peratom_flag == 0)
|
||||||
error->all("Dump custom compute ID does not compute per-atom info");
|
error->all("Dump modify compute ID does not compute per-atom info");
|
||||||
if (argindex[nfield+nthresh] == 0 &&
|
if (argindex[nfield+nthresh] == 0 &&
|
||||||
modify->compute[n]->size_peratom_cols > 0)
|
modify->compute[n]->size_peratom_cols > 0)
|
||||||
error->all("Dump custom compute ID does not compute per-atom vector");
|
error->all("Dump modify compute ID does not compute per-atom vector");
|
||||||
if (argindex[nfield+nthresh] > 0 &&
|
if (argindex[nfield+nthresh] > 0 &&
|
||||||
modify->compute[n]->size_peratom_cols == 0)
|
modify->compute[n]->size_peratom_cols == 0)
|
||||||
error->all("Dump custom compute ID does not compute per-atom array");
|
error->all("Dump modify compute ID does not compute per-atom array");
|
||||||
if (argindex[nfield+nthresh] > 0 &&
|
if (argindex[nfield+nthresh] > 0 &&
|
||||||
argindex[nfield+nthresh] > modify->compute[n]->size_peratom_cols)
|
argindex[nfield+nthresh] > modify->compute[n]->size_peratom_cols)
|
||||||
error->all("Dump custom compute ID vector is not large enough");
|
error->all("Dump modify compute ID vector is not large enough");
|
||||||
|
|
||||||
field2index[nfield+nthresh] = add_compute(suffix);
|
field2index[nfield+nthresh] = add_compute(suffix);
|
||||||
delete [] suffix;
|
delete [] suffix;
|
||||||
@ -1300,25 +1302,25 @@ int DumpCustom::modify_param(int narg, char **arg)
|
|||||||
char *ptr = strchr(suffix,'[');
|
char *ptr = strchr(suffix,'[');
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
if (suffix[strlen(suffix)-1] != ']')
|
if (suffix[strlen(suffix)-1] != ']')
|
||||||
error->all("Invalid keyword in dump custom command");
|
error->all("Invalid attribute in dump modify command");
|
||||||
argindex[nfield+nthresh] = atoi(ptr+1);
|
argindex[nfield+nthresh] = atoi(ptr+1);
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
} else argindex[nfield+nthresh] = 0;
|
} else argindex[nfield+nthresh] = 0;
|
||||||
|
|
||||||
n = modify->find_fix(suffix);
|
n = modify->find_fix(suffix);
|
||||||
if (n < 0) error->all("Could not find dump custom fix ID");
|
if (n < 0) error->all("Could not find dump modify fix ID");
|
||||||
|
|
||||||
if (modify->fix[n]->peratom_flag == 0)
|
if (modify->fix[n]->peratom_flag == 0)
|
||||||
error->all("Dump custom fix ID does not compute per-atom info");
|
error->all("Dump modify fix ID does not compute per-atom info");
|
||||||
if (argindex[nfield+nthresh] == 0 &&
|
if (argindex[nfield+nthresh] == 0 &&
|
||||||
modify->fix[n]->size_peratom_cols > 0)
|
modify->fix[n]->size_peratom_cols > 0)
|
||||||
error->all("Dump custom fix ID does not compute per-atom vector");
|
error->all("Dump modify fix ID does not compute per-atom vector");
|
||||||
if (argindex[nfield+nthresh] > 0 &&
|
if (argindex[nfield+nthresh] > 0 &&
|
||||||
modify->fix[n]->size_peratom_cols == 0)
|
modify->fix[n]->size_peratom_cols == 0)
|
||||||
error->all("Dump custom fix ID does not compute per-atom array");
|
error->all("Dump modify fix ID does not compute per-atom array");
|
||||||
if (argindex[nfield+nthresh] > 0 &&
|
if (argindex[nfield+nthresh] > 0 &&
|
||||||
argindex[nfield+nthresh] > modify->fix[n]->size_peratom_cols)
|
argindex[nfield+nthresh] > modify->fix[n]->size_peratom_cols)
|
||||||
error->all("Dump custom fix ID vector is not large enough");
|
error->all("Dump modify fix ID vector is not large enough");
|
||||||
|
|
||||||
field2index[nfield+nthresh] = add_fix(suffix);
|
field2index[nfield+nthresh] = add_fix(suffix);
|
||||||
delete [] suffix;
|
delete [] suffix;
|
||||||
@ -1341,9 +1343,9 @@ int DumpCustom::modify_param(int narg, char **arg)
|
|||||||
argindex[nfield+nthresh] = 0;
|
argindex[nfield+nthresh] = 0;
|
||||||
|
|
||||||
n = input->variable->find(suffix);
|
n = input->variable->find(suffix);
|
||||||
if (n < 0) error->all("Could not find dump custom variable name");
|
if (n < 0) error->all("Could not find dump modify variable name");
|
||||||
if (input->variable->atomstyle(n) == 0)
|
if (input->variable->atomstyle(n) == 0)
|
||||||
error->all("Dump custom variable is not atom-style variable");
|
error->all("Dump modify variable is not atom-style variable");
|
||||||
|
|
||||||
field2index[nfield+nthresh] = add_variable(suffix);
|
field2index[nfield+nthresh] = add_variable(suffix);
|
||||||
delete [] suffix;
|
delete [] suffix;
|
||||||
@ -1457,9 +1459,9 @@ void DumpCustom::pack_variable(int n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
one method for every keyword dump custom can output
|
one method for every attribute dump custom can output
|
||||||
the atom property is packed into buf starting at n with stride size_one
|
the atom property is packed into buf starting at n with stride size_one
|
||||||
customize a new keyword by adding a method
|
customize a new attribute by adding a method
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -24,12 +24,8 @@
|
|||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
|
||||||
|
|
||||||
#include "comm.h"
|
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
enum{INDEX,COMPUTE,FIX};
|
|
||||||
enum{INT,DOUBLE};
|
enum{INT,DOUBLE};
|
||||||
|
|
||||||
#define INVOKED_LOCAL 16
|
#define INVOKED_LOCAL 16
|
||||||
@ -41,6 +37,8 @@ DumpLocal::DumpLocal(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
{
|
{
|
||||||
if (narg == 5) error->all("No dump local arguments specified");
|
if (narg == 5) error->all("No dump local arguments specified");
|
||||||
|
|
||||||
|
clearstep = 1;
|
||||||
|
|
||||||
nevery = atoi(arg[3]);
|
nevery = atoi(arg[3]);
|
||||||
|
|
||||||
size_one = nfield = narg-5;
|
size_one = nfield = narg-5;
|
||||||
@ -60,7 +58,7 @@ DumpLocal::DumpLocal(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
id_fix = NULL;
|
id_fix = NULL;
|
||||||
fix = NULL;
|
fix = NULL;
|
||||||
|
|
||||||
// process keywords
|
// process attributes
|
||||||
|
|
||||||
parse_fields(narg,arg);
|
parse_fields(narg,arg);
|
||||||
|
|
||||||
@ -88,7 +86,12 @@ DumpLocal::DumpLocal(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
strcat(columns," ");
|
strcat(columns," ");
|
||||||
}
|
}
|
||||||
|
|
||||||
label = "BONDS";
|
// setup default label string
|
||||||
|
|
||||||
|
char *str = "ENTRIES";
|
||||||
|
n = strlen(str) + 1;
|
||||||
|
label = new char[n];
|
||||||
|
strcpy(label,str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -112,6 +115,7 @@ DumpLocal::~DumpLocal()
|
|||||||
delete [] vformat;
|
delete [] vformat;
|
||||||
|
|
||||||
delete [] columns;
|
delete [] columns;
|
||||||
|
delete [] label;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -145,17 +149,17 @@ void DumpLocal::init()
|
|||||||
int icompute;
|
int icompute;
|
||||||
for (int i = 0; i < ncompute; i++) {
|
for (int i = 0; i < ncompute; i++) {
|
||||||
icompute = modify->find_compute(id_compute[i]);
|
icompute = modify->find_compute(id_compute[i]);
|
||||||
if (icompute < 0) error->all("Could not find dump custom compute ID");
|
if (icompute < 0) error->all("Could not find dump local compute ID");
|
||||||
compute[i] = modify->compute[icompute];
|
compute[i] = modify->compute[icompute];
|
||||||
}
|
}
|
||||||
|
|
||||||
int ifix;
|
int ifix;
|
||||||
for (int i = 0; i < nfix; i++) {
|
for (int i = 0; i < nfix; i++) {
|
||||||
ifix = modify->find_fix(id_fix[i]);
|
ifix = modify->find_fix(id_fix[i]);
|
||||||
if (ifix < 0) error->all("Could not find dump custom fix ID");
|
if (ifix < 0) error->all("Could not find dump local fix ID");
|
||||||
fix[i] = modify->fix[ifix];
|
fix[i] = modify->fix[ifix];
|
||||||
if (nevery % modify->fix[ifix]->peratom_freq)
|
if (nevery % modify->fix[ifix]->local_freq)
|
||||||
error->all("Dump custom and fix not computed at compatible times");
|
error->all("Dump local and fix not computed at compatible times");
|
||||||
}
|
}
|
||||||
|
|
||||||
// open single file, one time only
|
// open single file, one time only
|
||||||
@ -165,6 +169,21 @@ void DumpLocal::init()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int DumpLocal::modify_param(int narg, char **arg)
|
||||||
|
{
|
||||||
|
if (strcmp(arg[0],"label") == 0) {
|
||||||
|
if (narg < 2) error->all("Illegal dump_modify command");
|
||||||
|
delete [] label;
|
||||||
|
int n = strlen(arg[1]) + 1;
|
||||||
|
label = new char[n];
|
||||||
|
strcpy(label,arg[1]);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpLocal::write_header(int ndump)
|
void DumpLocal::write_header(int ndump)
|
||||||
{
|
{
|
||||||
if (me == 0) {
|
if (me == 0) {
|
||||||
@ -172,7 +191,7 @@ void DumpLocal::write_header(int ndump)
|
|||||||
fprintf(fp,"%d\n",update->ntimestep);
|
fprintf(fp,"%d\n",update->ntimestep);
|
||||||
fprintf(fp,"ITEM: NUMBER OF %s\n",label);
|
fprintf(fp,"ITEM: NUMBER OF %s\n",label);
|
||||||
fprintf(fp,"%d\n",ndump);
|
fprintf(fp,"%d\n",ndump);
|
||||||
fprintf(fp,"ITEM: %s\n",label);
|
fprintf(fp,"ITEM: %s %s\n",label,columns);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,11 +209,29 @@ int DumpLocal::count()
|
|||||||
if (!(compute[i]->invoked_flag & INVOKED_LOCAL)) {
|
if (!(compute[i]->invoked_flag & INVOKED_LOCAL)) {
|
||||||
compute[i]->compute_local();
|
compute[i]->compute_local();
|
||||||
compute[i]->invoked_flag |= INVOKED_LOCAL;
|
compute[i]->invoked_flag |= INVOKED_LOCAL;
|
||||||
nmine = compute[i]->size_local_rows;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nmine = # of local values I contribute
|
||||||
|
// must be consistent for all input fields
|
||||||
|
|
||||||
|
nmine = -1;
|
||||||
|
|
||||||
|
int icompute;
|
||||||
|
for (int i = 0; i < ncompute; i++) {
|
||||||
|
if (nmine < 0) nmine = compute[i]->size_local_rows;
|
||||||
|
else if (nmine != compute[i]->size_local_rows)
|
||||||
|
error->one("Dump local count is not consistent across input fields");
|
||||||
|
}
|
||||||
|
|
||||||
|
int ifix;
|
||||||
|
for (int i = 0; i < nfix; i++) {
|
||||||
|
if (nmine < 0) nmine = fix[i]->size_local_rows;
|
||||||
|
else if (nmine != fix[i]->size_local_rows)
|
||||||
|
error->one("Dump local count is not consistent across input fields");
|
||||||
|
}
|
||||||
|
|
||||||
return nmine;
|
return nmine;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +264,8 @@ void DumpLocal::write_data(int n, double *buf)
|
|||||||
|
|
||||||
void DumpLocal::parse_fields(int narg, char **arg)
|
void DumpLocal::parse_fields(int narg, char **arg)
|
||||||
{
|
{
|
||||||
|
int computefixflag = 0;
|
||||||
|
|
||||||
// customize by adding to if statement
|
// customize by adding to if statement
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
@ -241,6 +280,7 @@ void DumpLocal::parse_fields(int narg, char **arg)
|
|||||||
// if no trailing [], then arg is set to 0, else arg is int between []
|
// if no trailing [], then arg is set to 0, else arg is int between []
|
||||||
|
|
||||||
} else if (strncmp(arg[iarg],"c_",2) == 0) {
|
} else if (strncmp(arg[iarg],"c_",2) == 0) {
|
||||||
|
computefixflag = 1;
|
||||||
pack_choice[i] = &DumpLocal::pack_compute;
|
pack_choice[i] = &DumpLocal::pack_compute;
|
||||||
vtype[i] = DOUBLE;
|
vtype[i] = DOUBLE;
|
||||||
|
|
||||||
@ -251,7 +291,7 @@ void DumpLocal::parse_fields(int narg, char **arg)
|
|||||||
char *ptr = strchr(suffix,'[');
|
char *ptr = strchr(suffix,'[');
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
if (suffix[strlen(suffix)-1] != ']')
|
if (suffix[strlen(suffix)-1] != ']')
|
||||||
error->all("Invalid keyword in dump local command");
|
error->all("Invalid attribute in dump local command");
|
||||||
argindex[i] = atoi(ptr+1);
|
argindex[i] = atoi(ptr+1);
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
} else argindex[i] = 0;
|
} else argindex[i] = 0;
|
||||||
@ -275,6 +315,7 @@ void DumpLocal::parse_fields(int narg, char **arg)
|
|||||||
// if no trailing [], then arg is set to 0, else arg is between []
|
// if no trailing [], then arg is set to 0, else arg is between []
|
||||||
|
|
||||||
} else if (strncmp(arg[iarg],"f_",2) == 0) {
|
} else if (strncmp(arg[iarg],"f_",2) == 0) {
|
||||||
|
computefixflag = 1;
|
||||||
pack_choice[i] = &DumpLocal::pack_fix;
|
pack_choice[i] = &DumpLocal::pack_fix;
|
||||||
vtype[i] = DOUBLE;
|
vtype[i] = DOUBLE;
|
||||||
|
|
||||||
@ -285,7 +326,7 @@ void DumpLocal::parse_fields(int narg, char **arg)
|
|||||||
char *ptr = strchr(suffix,'[');
|
char *ptr = strchr(suffix,'[');
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
if (suffix[strlen(suffix)-1] != ']')
|
if (suffix[strlen(suffix)-1] != ']')
|
||||||
error->all("Invalid keyword in dump local command");
|
error->all("Invalid attribute in dump local command");
|
||||||
argindex[i] = atoi(ptr+1);
|
argindex[i] = atoi(ptr+1);
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
} else argindex[i] = 0;
|
} else argindex[i] = 0;
|
||||||
@ -305,8 +346,11 @@ void DumpLocal::parse_fields(int narg, char **arg)
|
|||||||
field2index[i] = add_fix(suffix);
|
field2index[i] = add_fix(suffix);
|
||||||
delete [] suffix;
|
delete [] suffix;
|
||||||
|
|
||||||
} else error->all("Invalid keyword in dump local command");
|
} else error->all("Invalid attribute in dump local command");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (computefixflag == 0)
|
||||||
|
error->all("Dump local attributes contain no compute or fix");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -407,9 +451,9 @@ void DumpLocal::pack_fix(int n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
one method for every keyword dump local can output
|
one method for every attribute dump local can output
|
||||||
the local value is packed into buf starting at n with stride size_one
|
the local value is packed into buf starting at n with stride size_one
|
||||||
customize a new keyword by adding a method
|
customize a new attribute by adding a method
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -48,8 +48,7 @@ class DumpLocal : public Dump {
|
|||||||
char **id_fix; // their IDs
|
char **id_fix; // their IDs
|
||||||
class Fix **fix; // list of ptrs to the Fix objects
|
class Fix **fix; // list of ptrs to the Fix objects
|
||||||
|
|
||||||
// private methods
|
int modify_param(int, char **);
|
||||||
|
|
||||||
void write_header(int);
|
void write_header(int);
|
||||||
int count();
|
int count();
|
||||||
int pack();
|
int pack();
|
||||||
|
|||||||
@ -137,10 +137,7 @@ void Output::setup(int flag)
|
|||||||
|
|
||||||
if (ndump && update->restrict_output == 0) {
|
if (ndump && update->restrict_output == 0) {
|
||||||
for (int idump = 0; idump < ndump; idump++) {
|
for (int idump = 0; idump < ndump; idump++) {
|
||||||
if (strcmp(dump[idump]->style,"custom") == 0 ||
|
if (dump[idump]->clearstep) modify->clearstep_compute();
|
||||||
strcmp(dump[idump]->style,"cfg") == 0 ||
|
|
||||||
strcmp(dump[idump]->style,"local") == 0)
|
|
||||||
modify->clearstep_compute();
|
|
||||||
if ((ntimestep % dump_every[idump] == 0 &&
|
if ((ntimestep % dump_every[idump] == 0 &&
|
||||||
last_dump[idump] != ntimestep) || last_dump[idump] < 0) {
|
last_dump[idump] != ntimestep) || last_dump[idump] < 0) {
|
||||||
dump[idump]->write();
|
dump[idump]->write();
|
||||||
@ -148,10 +145,7 @@ void Output::setup(int flag)
|
|||||||
}
|
}
|
||||||
next_dump[idump] =
|
next_dump[idump] =
|
||||||
(ntimestep/dump_every[idump])*dump_every[idump] + dump_every[idump];
|
(ntimestep/dump_every[idump])*dump_every[idump] + dump_every[idump];
|
||||||
if (strcmp(dump[idump]->style,"custom") == 0 ||
|
if (dump[idump]->clearstep) modify->addstep_compute(next_dump[idump]);
|
||||||
strcmp(dump[idump]->style,"cfg") == 0 ||
|
|
||||||
strcmp(dump[idump]->style,"local") == 0)
|
|
||||||
modify->addstep_compute(next_dump[idump]);
|
|
||||||
if (idump) next_dump_any = MYMIN(next_dump_any,next_dump[idump]);
|
if (idump) next_dump_any = MYMIN(next_dump_any,next_dump[idump]);
|
||||||
else next_dump_any = next_dump[0];
|
else next_dump_any = next_dump[0];
|
||||||
}
|
}
|
||||||
@ -208,17 +202,11 @@ void Output::write(int ntimestep)
|
|||||||
if (next_dump_any == ntimestep) {
|
if (next_dump_any == ntimestep) {
|
||||||
for (int idump = 0; idump < ndump; idump++) {
|
for (int idump = 0; idump < ndump; idump++) {
|
||||||
if (next_dump[idump] == ntimestep && last_dump[idump] != ntimestep) {
|
if (next_dump[idump] == ntimestep && last_dump[idump] != ntimestep) {
|
||||||
if (strcmp(dump[idump]->style,"custom") == 0 ||
|
if (dump[idump]->clearstep) modify->clearstep_compute();
|
||||||
strcmp(dump[idump]->style,"cfg") == 0 ||
|
|
||||||
strcmp(dump[idump]->style,"local") == 0)
|
|
||||||
modify->clearstep_compute();
|
|
||||||
dump[idump]->write();
|
dump[idump]->write();
|
||||||
last_dump[idump] = ntimestep;
|
last_dump[idump] = ntimestep;
|
||||||
next_dump[idump] += dump_every[idump];
|
next_dump[idump] += dump_every[idump];
|
||||||
if (strcmp(dump[idump]->style,"custom") == 0 ||
|
if (dump[idump]->clearstep) modify->addstep_compute(next_dump[idump]);
|
||||||
strcmp(dump[idump]->style,"cfg") == 0 ||
|
|
||||||
strcmp(dump[idump]->style,"local") == 0)
|
|
||||||
modify->addstep_compute(next_dump[idump]);
|
|
||||||
}
|
}
|
||||||
if (idump) next_dump_any = MYMIN(next_dump_any,next_dump[idump]);
|
if (idump) next_dump_any = MYMIN(next_dump_any,next_dump[idump]);
|
||||||
else next_dump_any = next_dump[0];
|
else next_dump_any = next_dump[0];
|
||||||
|
|||||||
Reference in New Issue
Block a user