# Conflicts: # src/DIPOLE/pair_lj_cut_dipole_long.h # src/OPENMP/fix_nvt_sllod_omp.h # src/PHONON/fix_phonon.h # src/SPIN/pair_spin_dipole_cut.h # src/SPIN/pair_spin_dipole_long.h # src/STUBS/mpi.h # src/UEF/fix_nh_uef.h # src/fix_nvt_sllod.h # tools/coding_standard/homepage.py
193 lines
6.7 KiB
C++
193 lines
6.7 KiB
C++
/* -*- c++ -*- ----------------------------------------------------------
|
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
|
https://www.lammps.org/, Sandia National Laboratories
|
|
LAMMPS development team: developers@lammps.org
|
|
|
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
|
certain rights in this software. This software is distributed under
|
|
the GNU General Public License.
|
|
|
|
See the README file in the top-level LAMMPS directory.
|
|
------------------------------------------------------------------------- */
|
|
|
|
#ifndef LMP_DUMP_H
|
|
#define LMP_DUMP_H
|
|
|
|
#include "pointers.h" // IWYU pragma: export
|
|
|
|
#include <map>
|
|
|
|
namespace LAMMPS_NS {
|
|
|
|
class Dump : protected Pointers {
|
|
friend class Output;
|
|
|
|
public:
|
|
char *id; // user-defined name of Dump
|
|
char *style; // style of Dump
|
|
char *filename; // user-specified file
|
|
int igroup, groupbit; // group that Dump is performed on
|
|
|
|
int first_flag; // 0 if no initial dump, 1 if yes initial dump
|
|
int clearstep; // 1 if dump can invoke computes, 0 if not
|
|
|
|
int comm_forward; // size of forward communication (0 if none)
|
|
int comm_reverse; // size of reverse communication (0 if none)
|
|
|
|
#if defined(LMP_QSORT)
|
|
// static variable across all Dump objects
|
|
static Dump *dumpptr; // holds a ptr to Dump currently being used
|
|
#endif
|
|
|
|
Dump(class LAMMPS *, int, char **);
|
|
~Dump() override;
|
|
void init();
|
|
virtual void write();
|
|
|
|
virtual int pack_forward_comm(int, int *, double *, int, int *)
|
|
{
|
|
return 0;
|
|
}
|
|
virtual void unpack_forward_comm(int, int, double *) {}
|
|
virtual int pack_reverse_comm(int, int, double *)
|
|
{
|
|
return 0;
|
|
}
|
|
virtual void unpack_reverse_comm(int, int *, double *) {}
|
|
|
|
void modify_params(int, char **);
|
|
virtual double memory_usage();
|
|
|
|
protected:
|
|
int me, nprocs; // proc info
|
|
|
|
int compressed; // 1 if dump file is written compressed, 0 no
|
|
int binary; // 1 if dump file is written binary, 0 no
|
|
int multifile; // 0 = one big file, 1 = one file per timestep
|
|
int multiproc; // 0 = proc 0 writes for all,
|
|
// else # of procs writing files
|
|
int nclusterprocs; // # of procs in my cluster that write to one file
|
|
int filewriter; // 1 if this proc writes a file, else 0
|
|
int fileproc; // ID of proc in my cluster who writes to file
|
|
char *multiname; // filename with % converted to cluster ID
|
|
MPI_Comm clustercomm; // MPI communicator within my cluster of procs
|
|
|
|
int flush_flag; // 0 if no flush, 1 if flush every dump
|
|
int sort_flag; // 1 if sorted output
|
|
int balance_flag; // 1 if load balanced output
|
|
int append_flag; // 1 if open file in append mode, 0 if not
|
|
int buffer_allow; // 1 if style allows for buffer_flag, 0 if not
|
|
int buffer_flag; // 1 if buffer output as one big string, 0 if not
|
|
int padflag; // timestep padding in filename
|
|
int pbcflag; // 1 if remap dumped atoms via PBC, 0 if not
|
|
int singlefile_opened; // 1 = one big file, already opened, else 0
|
|
int sortcol; // 0 to sort on ID, 1-N on columns
|
|
int sortcolm1; // sortcol - 1
|
|
int sortorder; // ASCEND or DESCEND
|
|
int time_flag; // 1 if output simulation time
|
|
int unit_flag; // 1 if dump should contain unit information
|
|
int unit_count; // # of times the unit information was written
|
|
int delay_flag; // 1 if delay output until delaystep
|
|
int write_header_flag; // 1 if write header, 0 if not
|
|
|
|
bigint delaystep;
|
|
|
|
int refreshflag; // 1 if dump_modify refresh specified
|
|
char *refresh; // compute ID to invoke refresh() on
|
|
int irefresh; // index of compute
|
|
|
|
int skipflag; // 1 if skip condition defined
|
|
char *skipvar; // name of variable to check for skip condition
|
|
int skipindex; // index of skip variable
|
|
|
|
char boundstr[9]; // encoding of boundary flags
|
|
|
|
char *format; // format string for the file write
|
|
char *format_default; // default format string
|
|
|
|
char *format_line_user; // user-specified format strings
|
|
char *format_float_user;
|
|
char *format_int_user;
|
|
char *format_bigint_user;
|
|
char **format_column_user;
|
|
enum { INT, DOUBLE, STRING, BIGINT };
|
|
std::map<std::string, int> key2col;
|
|
std::vector<std::string> keyword_user;
|
|
|
|
FILE *fp; // file to write dump to
|
|
int size_one; // # of quantities for one atom
|
|
int nme; // # of atoms in this dump from me
|
|
int nsme; // # of chars in string output from me
|
|
|
|
double boxxlo, boxxhi; // local copies of domain values
|
|
double boxylo, boxyhi; // lo/hi are bounding box for triclinic
|
|
double boxzlo, boxzhi;
|
|
double boxxy, boxxz, boxyz;
|
|
|
|
int maxfiles; // max number of files created, -1 == infinite
|
|
int numfiles; // number of files in names list
|
|
int fileidx; // index of file in names list
|
|
char **nameslist; // list of history file names
|
|
|
|
bigint ntotal; // total # of per-atom lines in snapshot
|
|
int reorderflag; // 1 if OK to reorder instead of sort
|
|
bigint ntotal_reorder; // # of atoms that must be in snapshot
|
|
int nme_reorder; // # of atoms I must own in snapshot
|
|
tagint idlo; // lowest ID I own when reordering
|
|
|
|
int maxbuf; // size of buf
|
|
double *buf; // memory for atom quantities
|
|
int maxsbuf; // size of sbuf
|
|
char *sbuf; // memory for atom quantities in string format
|
|
|
|
int maxids; // size of ids
|
|
int maxsort; // size of bufsort, idsort, index
|
|
int maxproc; // size of proclist
|
|
tagint *ids; // list of atom IDs, if sorting on IDs
|
|
double *bufsort;
|
|
tagint *idsort;
|
|
int *index, *proclist;
|
|
|
|
double **xpbc, **vpbc;
|
|
imageint *imagepbc;
|
|
int maxpbc;
|
|
|
|
class Irregular *irregular;
|
|
|
|
virtual void init_style() = 0;
|
|
virtual void openfile();
|
|
virtual int modify_param(int, char **)
|
|
{
|
|
return 0;
|
|
}
|
|
virtual void write_header(bigint) = 0;
|
|
virtual int count();
|
|
virtual void pack(tagint *) = 0;
|
|
virtual int convert_string(int, double *)
|
|
{
|
|
return 0;
|
|
}
|
|
virtual void write_data(int, double *) = 0;
|
|
virtual void write_footer() {}
|
|
|
|
void pbc_allocate();
|
|
double compute_time();
|
|
|
|
void sort();
|
|
#if defined(LMP_QSORT)
|
|
static int idcompare(const void *, const void *);
|
|
static int bufcompare(const void *, const void *);
|
|
static int bufcompare_reverse(const void *, const void *);
|
|
#else
|
|
static int idcompare(const int, const int, void *);
|
|
static int bufcompare(const int, const int, void *);
|
|
static int bufcompare_reverse(const int, const int, void *);
|
|
#endif
|
|
void balance();
|
|
};
|
|
|
|
} // namespace LAMMPS_NS
|
|
|
|
#endif
|