STORMM Source Documentation
Loading...
Searching...
No Matches
coordinate_series.h
1// -*-c++-*-
2#ifndef STORMM_COORDINATE_SERIES_H
3#define STORMM_COORDINATE_SERIES_H
4
5#include "copyright.h"
6#include "Accelerator/gpu_details.h"
7#include "Accelerator/hybrid.h"
8#include "Accelerator/hybrid_util.h"
9#include "Constants/behavior.h"
10#include "Constants/fixed_precision.h"
11#include "Constants/hpc_bounds.h"
12#include "DataTypes/common_types.h"
13#include "FileManagement/file_enumerators.h"
14#include "FileManagement/file_listing.h"
15#include "FileManagement/file_util.h"
16#include "Math/rounding.h"
17#include "amber_ascii.h"
18#include "coordinateframe.h"
19#include "phasespace.h"
20#include "trajectory_enumerators.h"
21
22namespace stormm {
23namespace trajectory {
24
25using card::deepCopy;
26using card::deepRecast;
27using card::default_hpc_format;
28using card::GpuDetails;
29using card::Hybrid;
30using card::HybridTargetLevel;
31using constants::CartesianDimension;
32using data_types::isFloatingPointScalarType;
33using data_types::isSignedIntegralScalarType;
34using diskutil::detectCoordinateFileKind;
35using diskutil::DataFormat;
36using diskutil::DrivePathType;
37using diskutil::getDrivePathType;
38using diskutil::getTrajectoryFormat;
39using numerics::default_trajpos_scale_bits;
40using stmath::roundUp;
41
44struct ValidCoordinateTypes {
45
46 ValidCoordinateTypes(size_t double_id_in, size_t float_id_in, size_t short_id_in,
47 size_t int_id_in, size_t llint_id_in);
48
52 ValidCoordinateTypes(const ValidCoordinateTypes &original) = default;
53 ValidCoordinateTypes(ValidCoordinateTypes &&original) = default;
54 ValidCoordinateTypes& operator=(const ValidCoordinateTypes &original) = default;
55 ValidCoordinateTypes& operator=(ValidCoordinateTypes &&original) = default;
57
58 size_t double_id;
59 size_t float_id;
60 size_t short_id;
61 size_t int_id;
62 size_t llint_id;
63};
64
66template <typename T> struct CoordinateSeriesWriter {
67
69 CoordinateSeriesWriter(int natom_in, int nframe_in, UnitCellType unit_cell_in, int gpos_bits_in,
70 double gpos_scale_in, double inv_gpos_scale_in, T* xcrd_in, T* ycrd_in,
71 T* zcrd_in, double* umat_in, double* invu_in, double* boxdim_in);
72
77 CoordinateSeriesWriter& operator=(const CoordinateSeriesWriter &other) = default;
79
80 const int natom;
81 const int nframe;
82 const UnitCellType unit_cell;
83 const int gpos_bits;
84 const double gpos_scale;
85 const double inv_gpos_scale;
86 T* xcrd;
87 T* ycrd;
88 T* zcrd;
89 double* umat;
91 double* invu;
92 double* boxdim;
93};
94
96template <typename T> struct CoordinateSeriesReader {
97
102 CoordinateSeriesReader(int natom_in, int nframe_in, UnitCellType unit_cell_in, int gpos_bits_in,
103 double gpos_scale_in, double inv_gpos_scale_in, const T* xcrd_in,
104 const T* ycrd_in, const T* zcrd_in, const double* umat_in,
105 const double* invu_in, const double* boxdim_in);
108
113 CoordinateSeriesReader& operator=(const CoordinateSeriesReader &other) = default;
115
116 const int natom;
117 const int nframe;
118 const UnitCellType unit_cell;
119 const int gpos_bits;
120 const double gpos_scale;
121 const double inv_gpos_scale;
122 const T* xcrd;
123 const T* ycrd;
124 const T* zcrd;
125 const double* umat;
127 const double* invu;
128 const double* boxdim;
129};
130
137template <typename T> class CoordinateSeries {
138public:
139
168 explicit CoordinateSeries(int natom_in = 0, int nframe_in = 0,
169 UnitCellType unit_cell_in = UnitCellType::NONE,
170 int globalpos_scale_bits_in = 0,
171 HybridFormat format_in = default_hpc_format);
172
173 explicit CoordinateSeries(const std::string &file_name, int atom_count_in = 0,
174 CoordinateFileKind file_kind = CoordinateFileKind::UNKNOWN,
175 const std::vector<int> &frame_numbers = {},
176 int replica_count = 1, UnitCellType unit_cell_in = UnitCellType::NONE,
177 int globalpos_scale_bits_in = 0,
178 HybridFormat format_in = default_hpc_format);
179
180 explicit CoordinateSeries(PhaseSpace *ps, int nframe_in, int globalpos_scale_bits_in = 0,
181 HybridFormat format_in = default_hpc_format);
182
183 explicit CoordinateSeries(const PhaseSpace &ps, int nframe_in, int globalpos_scale_bits_in = 0,
184 HybridFormat format_in = default_hpc_format);
185
186 explicit CoordinateSeries(CoordinateFrame *cf, int nframe_in, int globalpos_scale_bits_in = 0,
187 HybridFormat format_in = default_hpc_format);
188
189 explicit CoordinateSeries(const CoordinateFrame &cf, int nframe_in,
190 int globalpos_scale_bits_in = 0,
191 HybridFormat format_in = default_hpc_format);
193
201 CoordinateSeries(const CoordinateSeries &original) = default;
202 CoordinateSeries(CoordinateSeries &&original) = default;
203 CoordinateSeries& operator=(const CoordinateSeries &other) = default;
204 CoordinateSeries& operator=(CoordinateSeries &&other) = default;
206
213 explicit CoordinateSeries(const CoordinateSeries &original, HybridFormat format_in);
214
223 template <typename Toriginal>
224 CoordinateSeries(const CoordinateSeries<Toriginal> &original, int globalpos_scale_bits_in = 0,
225 HybridFormat format_in = default_hpc_format);
227
229 HybridFormat getFormat() const;
230
232 int getAtomCount() const;
233
235 int getFrameCount() const;
236
238 int getFrameCapacity() const;
239
241 UnitCellType getUnitCellType() const;
242
246
261 template <typename Treport> std::vector<Treport>
262 getInterlacedCoordinates(int frame_index, int globalpos_bits_out = -1,
263 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
264
265 template <typename Treport> std::vector<Treport>
266 getInterlacedCoordinates(int frame_index, int low_index, int high_index,
267 int globalpos_bits_out = -1,
268 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
270
276 std::vector<double> getBoxSpaceTransform(int frame_index,
277 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
278
284 std::vector<double> getInverseTransform(int frame_index,
285 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
286
296 std::vector<double> getBoxDimensions(int frame_index,
297 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
298
299 const Hybrid<double>& getBoxDimensions() const;
301
313 void extractFrame(CoordinateFrame *cf, size_t frame_index, const GpuDetails &gpu) const;
314
315 void extractFrame(PhaseSpace *ps, size_t frame_index, TrajectoryKind kind,
316 CoordinateCycle time_point, const GpuDetails &gpu) const;
317
318 void extractFrame(PhaseSpace *ps, size_t frame_index, TrajectoryKind kind,
319 const GpuDetails &gpu) const;
320
321 void extractFrame(PhaseSpace *ps, size_t frame_index, const GpuDetails &gpu) const;
322
323 void extractFrame(CoordinateFrame *cf, size_t frame_index, HybridTargetLevel tier) const;
324
325 void extractFrame(PhaseSpace *ps, size_t frame_index, TrajectoryKind kind,
326 CoordinateCycle time_point, HybridTargetLevel tier) const;
327
328 void extractFrame(PhaseSpace *ps, size_t frame_index, TrajectoryKind kind,
329 HybridTargetLevel tier) const;
330
331 void extractFrame(PhaseSpace *ps, size_t frame_index, HybridTargetLevel tier) const;
333
340 CoordinateFrame exportFrame(size_t frame_index,
341 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
342
349 PhaseSpace exportPhaseSpace(size_t frame_index,
350 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
351
362 void exportToFile(const std::string &file_name,
363 CoordinateFileKind output_kind = CoordinateFileKind::AMBER_CRD,
364 PrintSituation expectation = PrintSituation::UNKNOWN, int low_index = 0,
365 int high_index = 0, HybridTargetLevel tier = HybridTargetLevel::HOST) const;
366
370 const Hybrid<T>& getCoordinateReference(CartesianDimension dim) const;
371
375 const Hybrid<T>* getCoordinatePointer(CartesianDimension dim) const;
376
379
382
385
388
391
400 const Hybrid<T>* getFramesHandle(CartesianDimension dim) const;
401 Hybrid<T>* getFramesHandle(CartesianDimension dim);
403
410
417
424
428
438 const CoordinateSeriesReader<T> data(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
439 CoordinateSeriesWriter<T> data(HybridTargetLevel tier = HybridTargetLevel::HOST);
441
448 templateFreeData(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
449
450 CoordinateSeriesWriter<void> templateFreeData(HybridTargetLevel tier = HybridTargetLevel::HOST);
452
453#ifdef STORMM_USE_HPC
461 const CoordinateSeriesReader<T> deviceViewToHostData() const;
462 CoordinateSeriesWriter<T> deviceViewToHostData();
464
472 const CoordinateSeriesReader<void> deviceViewToTemplateFreeHostData() const;
473 CoordinateSeriesWriter<void> deviceViewToTemplateFreeHostData();
475
477 void upload();
478
480 void download();
481#endif
482
507 void importFrame(const CoordinateFrameReader &cfr, int atom_start, int atom_end,
508 int frame_index = -1);
509 void importFrame(const CoordinateFrameReader &cfr, int frame_index = -1);
510 void importFrame(const CoordinateFrameWriter &cfw, int atom_start, int atom_end,
511 int frame_index = -1);
512 void importFrame(const CoordinateFrameWriter &cfw, int frame_index = -1);
513 void importFrame(const CoordinateFrame &cf, int atom_start, int atom_end, int frame_index = -1);
514 void importFrame(const CoordinateFrame &cf, int frame_index = -1);
515 void importFrame(const CoordinateFrame *cf, int atom_start, int atom_end, int frame_index = -1);
516 void importFrame(const CoordinateFrame *cf, int frame_index = -1);
517 void importFrame(const PhaseSpace &ps, int atom_start, int atom_end, int frame_index = -1,
518 TrajectoryKind kind = TrajectoryKind::POSITIONS,
519 CoordinateCycle orientation = CoordinateCycle::WHITE);
520 void importFrame(const PhaseSpace &ps, int frame_index = -1,
521 TrajectoryKind kind = TrajectoryKind::POSITIONS,
522 CoordinateCycle orientation = CoordinateCycle::WHITE);
523 void importFrame(const PhaseSpace *ps, int atom_start, int atom_end, int frame_index = -1,
524 TrajectoryKind kind = TrajectoryKind::POSITIONS,
525 CoordinateCycle orientation = CoordinateCycle::WHITE);
526 void importFrame(const PhaseSpace *ps, int frame_index = -1,
527 TrajectoryKind kind = TrajectoryKind::POSITIONS,
528 CoordinateCycle orientation = CoordinateCycle::WHITE);
530
546 void importFromFile(const std::string &file_name,
547 CoordinateFileKind file_kind = CoordinateFileKind::UNKNOWN,
548 const std::vector<int> &frame_numbers = {}, int replica_count = 1,
549 int frame_index_start = -1);
550
555 void reserve(const int new_frame_capacity);
556
560
587 void resize(int new_frame_count);
588 void resize(int new_frame_count, const CoordinateFrameReader &cfr, int atom_start = 0,
589 int atom_end = 0);
590 void resize(int new_frame_count, const CoordinateFrameWriter &cfw, int atom_start = 0,
591 int atom_end = 0);
592 void resize(int new_frame_count, const CoordinateFrame &cf, int atom_start = 0,
593 int atom_end = 0);
594 void resize(int new_frame_count, CoordinateFrame *cf, int atom_start = 0, int atom_end = 0);
595 void resize(int new_frame_count, const PhaseSpace &ps, int atom_start = 0, int atom_end = 0);
596 void resize(int new_frame_count, PhaseSpace *ps, int atom_start = 0, int atom_end = 0);
598
618 void pushBack(const CoordinateFrameReader &cfr, int atom_start = 0, int atom_end = 0);
619 void pushBack(const CoordinateFrameWriter &cfw, int atom_start = 0, int atom_end = 0);
620 void pushBack(const CoordinateFrame &cf, int atom_start = 0, int atom_end = 0);
621 void pushBack(CoordinateFrame *cf, int atom_start = 0, int atom_end = 0);
622 void pushBack(const PhaseSpace &ps, int atom_start = 0, int atom_end = 0);
623 void pushBack(PhaseSpace *ps, int atom_start = 0, int atom_end = 0);
625
626private:
627 HybridFormat format;
628 int atom_count;
632 int frame_count;
633 int frame_capacity;
634 int globalpos_scale_bits;
637 UnitCellType unit_cell;
638 double globalpos_scale;
641 double inverse_globalpos_scale;
644 Hybrid<T> x_coordinates;
646 Hybrid<T> y_coordinates;
647 Hybrid<T> z_coordinates;
648 Hybrid<double> box_space_transforms;
649 Hybrid<double> inverse_transforms;
650 Hybrid<double> box_dimensions;
652
662 void allocate(int new_frame_capacity);
663};
664
681template <typename T> CoordinateSeriesWriter<T> restoreType(CoordinateSeriesWriter<void> *rasa);
682
683template <typename T>
685
686template <typename T>
687const CoordinateSeriesReader<T> restoreType(const CoordinateSeriesReader<void> *rasa);
688
689template <typename T>
690const CoordinateSeriesReader<T> restoreType(const CoordinateSeriesReader<void> &rasa);
692
699template <typename Torig, typename Tnew>
700CoordinateSeries<Tnew> changeCoordinateSeriesType(const CoordinateSeries<Torig> &cs,
701 int globalpos_scale_bits_in);
702
703} // namespace trajectory
704} // namespace stormm
705
706#include "coordinate_series.tpp"
707
708#endif
Pertinent aspects of one particular GPU. Condensing the data for each GPU in this manner helps to ens...
Definition gpu_details.h:27
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
CoordinateSeries(int natom_in=0, int nframe_in=0, UnitCellType unit_cell_in=UnitCellType::NONE, int globalpos_scale_bits_in=0, HybridFormat format_in=default_hpc_format)
There are several options for constructing this collection of coordinate frames.
Store the coordinates and box information for a frame, only. This abridged struct can serve when the ...
Definition coordinateframe.h:111
Store the coordinates and box information for a series of frames, in one of several levels of precisi...
Definition coordinate_series.h:137
CoordinateSeries(const CoordinateSeries< Toriginal > &original, int globalpos_scale_bits_in=0, HybridFormat format_in=default_hpc_format)
Special copy constructor to take a CoordinateSeries of one data type into another....
const Hybrid< T > & getCoordinateReference(CartesianDimension dim) const
Get a const reference to the one of the Cartesian coordinate arrays.
const Hybrid< double > & getBoxTransforms() const
Get a const reference to the box space transformation matrices.
CoordinateSeries(int natom_in=0, int nframe_in=0, UnitCellType unit_cell_in=UnitCellType::NONE, int globalpos_scale_bits_in=0, HybridFormat format_in=default_hpc_format)
There are several options for constructing this collection of coordinate frames.
int getFrameCount() const
Get the number of frames in the series.
const CoordinateSeriesReader< T > data(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the abstract for this object, containing C-style pointers for the most rapid access to any of its...
std::vector< double > getBoxSpaceTransform(int frame_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the transformation matrix to take coordinates into box (fractional) space. The result should be i...
int getFrameCapacity() const
Get the maximum number of frames that the object can hold.
std::vector< double > getInverseTransform(int frame_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the transformation matrix to take coordinates from fractional space back into real space....
void importFrame(const CoordinateFrameReader &cfr, int atom_start, int atom_end, int frame_index=-1)
Import coordinates from a CoordinateFrame or PhaseSpace object. The original object must have the sam...
void reserve(const int new_frame_capacity)
Reserve capacity in this series. The new frames will be uninitialized.
UnitCellType getUnitCellType() const
Get the unit cell type of the coordinate system.
const Hybrid< double > * getInverseTransformPointer() const
Get a const pointer to the box space transformation matrices.
const Hybrid< T > * getCoordinatePointer(CartesianDimension dim) const
Get a const pointer to one of the Cartesian coordinate arrays.
const Hybrid< double > * getBoxTransformPointer() const
Get a const pointer to the box space transformation matrices.
void extractFrame(CoordinateFrame *cf, size_t frame_index, const GpuDetails &gpu) const
Extract coordinates to a pre-existing object.
CoordinateFrame exportFrame(size_t frame_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Prepare a CoordinateFrame object based on one frame of the series, accomplishing any necessary data c...
CoordinateSeries(const CoordinateSeries &original)=default
Use the default copy and move constructors, copy and move assignment operators. This object has no co...
void pushBack(const CoordinateFrameReader &cfr, int atom_start=0, int atom_end=0)
Push a coordinate set to the back of the list. This invokes the import member function after realloca...
std::vector< double > getBoxDimensions(int frame_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the box dimensions in their pure form for a particular frame.
void exportToFile(const std::string &file_name, CoordinateFileKind output_kind=CoordinateFileKind::AMBER_CRD, PrintSituation expectation=PrintSituation::UNKNOWN, int low_index=0, int high_index=0, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Export the contents of this coordinate series to a trajectory file.
const CoordinateSeries< T > * getSelfPointer() const
Get a const pointer to the object iself, so that it may be passed to functions by const reference and...
HybridFormat getFormat() const
Get the memory format.
const Hybrid< double > & getInverseTransforms() const
Get a const reference to the box space transformation matrices.
const Hybrid< double > * getBoxDimensionPointer() const
Get a const pointer to the list of box dimensions for all frames.
const CoordinateSeriesReader< void > templateFreeData(HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the object's abstract, with all templated type pointers cast to void pointers....
const Hybrid< T > * getFramesHandle(CartesianDimension dim) const
Get a pointer to one of the coordinate arrays.
void importFromFile(const std::string &file_name, CoordinateFileKind file_kind=CoordinateFileKind::UNKNOWN, const std::vector< int > &frame_numbers={}, int replica_count=1, int frame_index_start=-1)
Import coordinates from a file. This function accepts directives to read a subset of the coordinates ...
int getAtomCount() const
Get the number of atoms in each frame of the series.
int getFixedPrecisionBits() const
Get the fixed precision bits after the decimal (if applicable, warn if the data type is non-integer).
CoordinateSeries(const CoordinateSeries &original, HybridFormat format_in)
A special copy constructor can create an object with an altered memory format.
const Hybrid< double > * getBoxTransformsHandle() const
Get a pointer to the box space transform. Overloading follows from getCoordinateHandle(),...
void shrinkToFit()
Shrink the object's various arrays to accommodate only the current frame and atom counts....
const Hybrid< double > * getInverseTransformsHandle() const
Get a pointer to the inverse transform that takes coordinates back into real space....
std::vector< Treport > getInterlacedCoordinates(int frame_index, int globalpos_bits_out=-1, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the interlaced coordinates of one frame.
PhaseSpace exportPhaseSpace(size_t frame_index, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Prepare a PhaseSpace object based on one frame of the series, accomplishing any data conversions need...
void resize(int new_frame_count)
Resize the series, allocating new capacity if needed, initializing new frames with the provided coord...
const Hybrid< double > * getBoxDimensionsHandle() const
Get a pointer to the transform that takes coordinates back into real space. Overloading follows from ...
An object to complement a topology and hold positions, velocities, and forces of all particles in a s...
Definition phasespace.h:141
CoordinateSeriesReader(int natom_in, int nframe_in, UnitCellType unit_cell_in, int gpos_bits_in, double gpos_scale_in, double inv_gpos_scale_in, const T *xcrd_in, const T *ycrd_in, const T *zcrd_in, const double *umat_in, const double *invu_in, const double *boxdim_in)
The basic constructor feeds all arguments straight to the inline initialization list....
CoordinateSeriesWriter(int natom_in, int nframe_in, UnitCellType unit_cell_in, int gpos_bits_in, double gpos_scale_in, double inv_gpos_scale_in, T *xcrd_in, T *ycrd_in, T *zcrd_in, double *umat_in, double *invu_in, double *boxdim_in)
The constructor feeds all arguments straight to the inline initialization list.
Collect C-style pointers for the elements of a read-only CoordinateFrame object.
Definition coordinateframe.h:65
Collect C-style pointers for the elements of a writable CoordinateFrame object.
Definition coordinateframe.h:30
Collect C-style pointers and critical constants for a read-only CoordinateSeries object.
Definition coordinate_series.h:96
CoordinateSeriesReader(int natom_in, int nframe_in, UnitCellType unit_cell_in, int gpos_bits_in, double gpos_scale_in, double inv_gpos_scale_in, const T *xcrd_in, const T *ycrd_in, const T *zcrd_in, const double *umat_in, const double *invu_in, const double *boxdim_in)
The basic constructor feeds all arguments straight to the inline initialization list....
const UnitCellType unit_cell
The type of unit cell (i.e. ORTHORHOMBIC, could also be NONE)
Definition coordinate_series.h:118
const int nframe
The number of frames in the series.
Definition coordinate_series.h:117
const T * zcrd
Cartesian Z coordinates of all atoms.
Definition coordinate_series.h:124
const double * umat
Definition coordinate_series.h:125
CoordinateSeriesReader(const CoordinateSeriesReader &original)=default
Copy and move constructors. The move assignment operator is implicitly deleted.
const int gpos_bits
Global position coordinate bits after the decimal.
Definition coordinate_series.h:119
const T * xcrd
Cartesian X coordinates of all atoms.
Definition coordinate_series.h:122
const double * invu
Inverse transformation matrix out of box space.
Definition coordinate_series.h:127
const double * boxdim
Box dimensions (these will be consistent with umat and invu)
Definition coordinate_series.h:128
const T * ycrd
Cartesian Y coordinates of all atoms.
Definition coordinate_series.h:123
const int natom
The number of atoms in the system.
Definition coordinate_series.h:116
const double gpos_scale
Global position coordinate scaling factor.
Definition coordinate_series.h:120
const double inv_gpos_scale
Inverse global coordinate scaling factor.
Definition coordinate_series.h:121
Collect C-style pointers and critical constants for a writeable CoordinateSeries object.
Definition coordinate_series.h:66
const double inv_gpos_scale
Inverse global coordinate scaling factor.
Definition coordinate_series.h:85
const UnitCellType unit_cell
The type of unit cell (i.e. ORTHORHOMBIC, could also be NONE)
Definition coordinate_series.h:82
double * umat
Definition coordinate_series.h:89
double * invu
Inverse transformation matrix out of box space.
Definition coordinate_series.h:91
const int natom
The number of atoms in the system.
Definition coordinate_series.h:80
T * zcrd
Cartesian Z coordinates of all atoms.
Definition coordinate_series.h:88
double * boxdim
Box dimensions (these will be consistent with umat and invu)
Definition coordinate_series.h:92
const double gpos_scale
Global position coordinate scaling factor.
Definition coordinate_series.h:84
CoordinateSeriesWriter(const CoordinateSeriesWriter &original)=default
Copy and move constructors. The move assignment operator is implicitly deleted.
const int nframe
The number of frames in the series.
Definition coordinate_series.h:81
T * ycrd
Cartesian Y coordinates of all atoms.
Definition coordinate_series.h:87
T * xcrd
Cartesian X coordinates of all atoms.
Definition coordinate_series.h:86
CoordinateSeriesWriter(int natom_in, int nframe_in, UnitCellType unit_cell_in, int gpos_bits_in, double gpos_scale_in, double inv_gpos_scale_in, T *xcrd_in, T *ycrd_in, T *zcrd_in, double *umat_in, double *invu_in, double *boxdim_in)
The constructor feeds all arguments straight to the inline initialization list.
const int gpos_bits
Global position coordinate bits after the decimal.
Definition coordinate_series.h:83
size_t llint_id
Long long (64-bit integer) data type identifier.
Definition coordinate_series.h:62
size_t short_id
Short (16-bit integer) data type identifier.
Definition coordinate_series.h:60
size_t float_id
Single-precision real data type identifier.
Definition coordinate_series.h:59
size_t double_id
Double-precision real data type identifier.
Definition coordinate_series.h:58
ValidCoordinateTypes(const ValidCoordinateTypes &original)=default
The copy and move constructors as well as assignment operators can all take their default forms for t...
size_t int_id
Typical / long (32-bit integer) data type identifier.
Definition coordinate_series.h:61