171 lines
6.0 KiB
C++
171 lines
6.0 KiB
C++
/* -*- c++ -*- ----------------------------------------------------------
|
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
|
https://www.lammps.org/, Sandia National Laboratories
|
|
Steve Plimpton, sjplimp@sandia.gov
|
|
|
|
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.
|
|
------------------------------------------------------------------------- */
|
|
|
|
/* ----------------------------------------------------------------------
|
|
Contributing author: Axel Kohlmeyer (Temple U)
|
|
------------------------------------------------------------------------- */
|
|
|
|
#ifndef LMP_MOLFILE_INTERFACE_H
|
|
#define LMP_MOLFILE_INTERFACE_H
|
|
|
|
namespace LAMMPS_NS {
|
|
|
|
// This class provides an abstract interface
|
|
// to the VMD plugin library.
|
|
|
|
class MolfileInterface {
|
|
public:
|
|
// plugin modes.
|
|
enum {
|
|
M_NONE = 0,
|
|
M_READ = 1 << 0,
|
|
M_WRITE = 1 << 1,
|
|
M_RSTRUCT = 1 << 2,
|
|
M_WSTRUCT = 1 << 3,
|
|
M_RBONDS = 1 << 4,
|
|
M_WBONDS = 1 << 5,
|
|
M_RANGLES = 1 << 6,
|
|
M_WANGLES = 1 << 7,
|
|
M_RVOL = 1 << 8,
|
|
M_WVOL = 1 << 9,
|
|
M_RVELS = 1 << 10,
|
|
M_WVELS = 1 << 11,
|
|
M_LAST = 1 << 12
|
|
};
|
|
|
|
// plugin finder return values.
|
|
enum {
|
|
E_NONE = 0, //< nothing happened
|
|
E_DIR, //< path is not a directory or not readable
|
|
E_FILE, //< file not a DSO or not readable
|
|
E_SYMBOL, //< DSO is not a VMD plugin
|
|
E_TYPE, //< plugin is not of the correct type
|
|
E_ABI, //< plugin ABI does not match
|
|
E_MODE, //< plugin does not support desired mode
|
|
E_VERSION, //< plugin is not newer as the current one
|
|
E_MATCH, //< plugin matches
|
|
E_LAST //< last entry
|
|
};
|
|
|
|
// atom structure properties. deliberately not complete.
|
|
enum {
|
|
P_NONE = 0, //< no structure information available
|
|
P_NAME = 1 << 0, //< atom name, char[16]
|
|
P_TYPE = 1 << 1, //< atom type, char[16]
|
|
P_RESN = 1 << 2, //< residue name, char[ 8]
|
|
P_RESI = 1 << 3, //< residue index, int
|
|
P_SEGN = 1 << 4, //< segment name, char[ 8]
|
|
P_CHAI = 1 << 5, //< chain id, char[ 2]
|
|
P_OCCP = 1 << 6, //< occupancy, float
|
|
P_BFAC = 1 << 7, //< B factor, float
|
|
P_MASS = 1 << 8, //< atom mass, float
|
|
P_CHRG = 1 << 9, //< atom charge, float
|
|
P_RADS = 1 << 10, //< atom radius, float
|
|
P_ATMN = 1 << 11, //< atomic number, int
|
|
P_LAST = 1 << 12 //< last entry
|
|
};
|
|
|
|
MolfileInterface(const char *type, const int mode);
|
|
~MolfileInterface();
|
|
|
|
// disallowed default methods
|
|
private:
|
|
MolfileInterface(){};
|
|
MolfileInterface(const MolfileInterface &){};
|
|
MolfileInterface &operator=(const MolfileInterface &) { return *this; };
|
|
|
|
public:
|
|
// search in the given directory path for a molfile plugin that
|
|
// is of the right type and supports the desired mode.
|
|
// if a plugin is already registered and a newer version is
|
|
// found, this new version will override the old one.
|
|
int find_plugin(const char *path);
|
|
// try to register the plugin at given file name
|
|
int load_plugin(const char *name);
|
|
// deregister the current plugin/DSO and clean up.
|
|
void forget_plugin();
|
|
// return formatted string describing plugin
|
|
char *get_plugin_name() const { return _name; };
|
|
// return canonical plugin name (= file type)
|
|
char *get_plugin_type() const { return _type; };
|
|
|
|
// file operations
|
|
|
|
// open file through plugin
|
|
int open(const char *name, int *natoms);
|
|
// read/write structure info
|
|
int structure();
|
|
// read/write timestep
|
|
int timestep(float *coords, float *vels, float *cell, double *simtime);
|
|
// close file managed by plugin
|
|
int close();
|
|
|
|
// inquire on interface status
|
|
|
|
// true if file stream is active.
|
|
bool is_open() const { return (_ptr != nullptr); };
|
|
// true if file format requires or provides atom properties
|
|
bool has_props() const { return (_mode & (M_RSTRUCT | M_WSTRUCT)) != 0; };
|
|
// true if file format can read or write velocities
|
|
bool has_vels() const { return (_mode & (M_RVELS | M_WVELS)) != 0; };
|
|
|
|
// return number of atoms in current file. -1 if closed/invalid;
|
|
bool get_natoms() const { return _natoms; };
|
|
// return property bitmask
|
|
bool get_props() const { return _props; };
|
|
|
|
// atom property operations
|
|
|
|
// set/get atom floating point property
|
|
int property(int propid, int idx, float *prop);
|
|
// set/get per type floating point property
|
|
int property(int propid, int *types, float *prop);
|
|
// set/get per atom floating point property
|
|
int property(int propid, float *prop);
|
|
// set/get atom floating point property
|
|
int property(int propid, int idx, double *prop);
|
|
// set/get per type floating point property
|
|
int property(int propid, int *types, double *prop);
|
|
// set/get per atom floating point property
|
|
int property(int propid, double *prop);
|
|
// set/get atom integer property
|
|
int property(int propid, int idx, int *prop);
|
|
// set/get per type integer property
|
|
int property(int propid, int *types, int *prop);
|
|
// set/get per atom integer property
|
|
int property(int propid, int *prop);
|
|
// set/get atom string property
|
|
int property(int propid, int idx, char *prop);
|
|
// set/get per type string property
|
|
int property(int propid, int *types, char **prop);
|
|
// set/get per atom string property
|
|
int property(int propid, char **prop);
|
|
|
|
// internal data
|
|
protected:
|
|
void *_plugin; // pointer to plugin struct
|
|
void *_dso; // handle to DSO
|
|
void *_ptr; // pointer to plugin data handle
|
|
void *_info; // pointer to atomic info data
|
|
char *_type; // canonical plugin name
|
|
char *_name; // plugin formatted name
|
|
int _natoms; // number of atoms
|
|
int _mode; // plugin mode of operation
|
|
int _caps; // plugin capabilities
|
|
int _props; // accumulated/available properties
|
|
};
|
|
|
|
} // namespace LAMMPS_NS
|
|
|
|
#endif
|