STORMM Source Documentation
Loading...
Searching...
No Matches
phasespace.h
1// -*-c++-*-
2#ifndef STORMM_PHASE_SPACE_H
3#define STORMM_PHASE_SPACE_H
4
5#include <typeinfo>
6#include <typeindex>
7#include <sys/types.h>
8#include "copyright.h"
9#include "Accelerator/hybrid.h"
10#include "Accelerator/hybrid_util.h"
11#include "Constants/behavior.h"
12#include "Math/matrix_ops.h"
13#include "Topology/atomgraph.h"
14#include "trajectory_enumerators.h"
15#include "write_frame.h"
16
17namespace stormm {
18namespace trajectory {
19
20using card::default_hpc_format;
21using card::GpuDetails;
22using card::Hybrid;
23using card::HybridFormat;
24using card::HybridTargetLevel;
25using constants::CartesianDimension;
26using stmath::computeBoxTransform;
27using topology::AtomGraph;
28using topology::UnitCellType;
29
32
34 PhaseSpaceWriter(const int natom_in, const UnitCellType unit_cell_in, double* xcrd_in,
35 double* ycrd_in, double* zcrd_in, double* umat_in, double* invu_in,
36 double* boxdim_in, double* umat_alt_in, double* invu_alt_in,
37 double* boxdim_alt_in, double* xvel_in, double* yvel_in, double* zvel_in,
38 double* xfrc_in, double* yfrc_in, double* zfrc_in, double* xalt_in,
39 double* yalt_in, double* zalt_in, double* vxalt_in, double* vyalt_in,
40 double* vzalt_in, double* fxalt_in, double* fyalt_in, double* fzalt_in);
41
44 PhaseSpaceWriter(const PhaseSpaceWriter &original) = default;
45 PhaseSpaceWriter(PhaseSpaceWriter &&original) = default;
47
48 const int natom;
49 const UnitCellType unit_cell;
50 double* xcrd;
51 double* ycrd;
52 double* zcrd;
53 double* umat;
55 double* invu;
56 double* boxdim;
58 double* umat_alt;
60 double* invu_alt;
61 double* boxdim_alt;
63 double* xvel;
64 double* yvel;
65 double* zvel;
66 double* xfrc;
67 double* yfrc;
68 double* zfrc;
69 double* xalt;
70 double* yalt;
71 double* zalt;
72 double* vxalt;
73 double* vyalt;
74 double* vzalt;
75 double* fxalt;
76 double* fyalt;
77 double* fzalt;
78};
79
82
86 PhaseSpaceReader(const int natom_in, const UnitCellType unit_cell_in, const double* xcrd_in,
87 const double* ycrd_in, const double* zcrd_in, const double* umat_in,
88 const double* invu_in, const double* boxdim_in, const double* umat_alt_in,
89 const double* invu_alt_in, const double* boxdim_alt_in, const double* xvel_in,
90 const double* yvel_in, const double* zvel_in, const double* xfrc_in,
91 const double* yfrc_in, const double* zfrc_in, const double* xalt_in,
92 const double* yalt_in, const double* zalt_in, const double* vxalt_in,
93 const double* vyalt_in, const double* vzalt_in, const double* fxalt_in,
94 const double* fyalt_in, const double* fzalt_in);
95
96 PhaseSpaceReader(const PhaseSpaceWriter &psw);
98
101 PhaseSpaceReader(const PhaseSpaceReader &original) = default;
102 PhaseSpaceReader(PhaseSpaceReader &&original) = default;
104
105 const int natom;
106 const UnitCellType unit_cell;
107 const double* xcrd;
108 const double* ycrd;
109 const double* zcrd;
110 const double* umat;
112 const double* invu;
113 const double* boxdim;
115 const double* umat_alt;
117 const double* invu_alt;
118 const double* boxdim_alt;
120 const double* xvel;
121 const double* yvel;
122 const double* zvel;
123 const double* xfrc;
124 const double* yfrc;
125 const double* zfrc;
126 const double* xalt;
127 const double* yalt;
128 const double* zalt;
129 const double* vxalt;
130 const double* vyalt;
131 const double* vzalt;
132 const double* fxalt;
133 const double* fyalt;
134 const double* fzalt;
135};
136
142public:
143
160 PhaseSpace(int atom_count_in = 0, UnitCellType unit_cell_in = UnitCellType::NONE,
161 HybridFormat format_in = default_hpc_format);
162
163 PhaseSpace(const std::string &file_name_in,
164 CoordinateFileKind file_kind = CoordinateFileKind::UNKNOWN, int frame_number = 0,
165 HybridFormat format_in = default_hpc_format);
166
167 PhaseSpace(const std::string &file_name_in, const AtomGraph &ag,
168 CoordinateFileKind file_kind = CoordinateFileKind::UNKNOWN,
169 int frame_number = 0, HybridFormat format_in = default_hpc_format);
170
171 PhaseSpace(const std::vector<PhaseSpace*> &input_crd, const std::vector<AtomGraph*> &input_top,
172 const std::vector<int> &counts);
173
174 PhaseSpace(const PhaseSpace *ps_a, const AtomGraph *ag_a, const PhaseSpace *ps_b,
175 const AtomGraph *ag_b);
176
177 PhaseSpace(const PhaseSpace &ps_a, const AtomGraph &ag_a, const PhaseSpace &ps_b,
178 const AtomGraph &ag_b);
179
180 PhaseSpace(const PhaseSpace &original, const std::vector<int> &atom_list,
181 HybridFormat format_in = default_hpc_format);
182
183 PhaseSpace(const PhaseSpace &original, const std::vector<uint> &mask,
184 HybridFormat format_in = default_hpc_format);
186
202 PhaseSpace(const PhaseSpace &original);
203 PhaseSpace(const PhaseSpace &original, HybridFormat format_in);
205
210 PhaseSpace& operator=(const PhaseSpace &other);
211
215 PhaseSpace(PhaseSpace &&original);
216
221
228 void buildFromFile(const std::string &file_name_in,
229 const CoordinateFileKind file_kind = CoordinateFileKind::UNKNOWN,
230 int frame_number = 0);
231
248 template <typename T>
249 void fill(const T* xcrd, const T* ycrd, const T* zcrd,
250 TrajectoryKind kind = TrajectoryKind::POSITIONS,
251 CoordinateCycle cycle_in = CoordinateCycle::WHITE, int scale_bits = 0,
252 const double* box_dims = nullptr);
253
254 template <typename T>
255 void fill(const std::vector<T> &xcrd, const std::vector<T> &ycrd, const std::vector<T> &zcrd,
256 TrajectoryKind kind = TrajectoryKind::POSITIONS,
257 CoordinateCycle cycle_in = CoordinateCycle::WHITE, int scale_bits = 0,
258 const std::vector<double> &box_dims = {});
260
263 HybridFormat getFormat() const;
264
266 std::string getFileName() const;
267
269 int getAtomCount() const;
270
272 UnitCellType getUnitCellType() const;
273
275 CoordinateCycle getCyclePosition() const;
276
292 const double* getCoordinatePointer(CartesianDimension dim, TrajectoryKind kind,
293 CoordinateCycle orientation,
294 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
295
296 double* getCoordinatePointer(CartesianDimension dim, TrajectoryKind kind,
297 CoordinateCycle orientation,
298 HybridTargetLevel tier = HybridTargetLevel::HOST);
299
300 const double* getCoordinatePointer(CartesianDimension dim,
301 TrajectoryKind kind = TrajectoryKind::POSITIONS,
302 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
303
304 double* getCoordinatePointer(CartesianDimension dim,
305 TrajectoryKind kind = TrajectoryKind::POSITIONS,
306 HybridTargetLevel tier = HybridTargetLevel::HOST);
307
308 const double* getCoordinatePointer(CartesianDimension dim, CoordinateCycle orientation,
309 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
310
311 double* getCoordinatePointer(CartesianDimension dim, CoordinateCycle orientation,
312 HybridTargetLevel tier = HybridTargetLevel::HOST);
314
328 std::vector<double>
329 getInterlacedCoordinates(TrajectoryKind kind = TrajectoryKind::POSITIONS,
330 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
331
332 std::vector<double>
333 getInterlacedCoordinates(CoordinateCycle orientation,
334 TrajectoryKind kind = TrajectoryKind::POSITIONS,
335 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
336
337 std::vector<double>
338 getInterlacedCoordinates(int low_index, int high_index,
339 TrajectoryKind kind = TrajectoryKind::POSITIONS,
340 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
341
342 std::vector<double>
343 getInterlacedCoordinates(int low_index, int high_index, CoordinateCycle orientation,
344 TrajectoryKind kind = TrajectoryKind::POSITIONS,
345 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
347
360 const double*
361 getBoxSpaceTransformPointer(CoordinateCycle orientation,
362 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
363 double* getBoxSpaceTransformPointer(CoordinateCycle orientation,
364 HybridTargetLevel tier = HybridTargetLevel::HOST);
365 const double*
366 getBoxSpaceTransformPointer(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
367 double* getBoxSpaceTransformPointer(HybridTargetLevel tier = HybridTargetLevel::HOST);
369
383 const double* getInverseTransformPointer(CoordinateCycle orientation,
384 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
385 double* getInverseTransformPointer(CoordinateCycle orientation,
386 HybridTargetLevel tier = HybridTargetLevel::HOST);
387 const double* getInverseTransformPointer(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
388 double* getInverseTransformPointer(HybridTargetLevel tier = HybridTargetLevel::HOST);
390
403 const double* getBoxSizePointer(CoordinateCycle orientation,
404 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
405 double* getBoxSizePointer(CoordinateCycle orientation,
406 HybridTargetLevel tier = HybridTargetLevel::HOST);
407 const double* getBoxSizePointer(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
408 double* getBoxSizePointer(HybridTargetLevel tier = HybridTargetLevel::HOST);
410
422 std::vector<double> getBoxSpaceTransform(CoordinateCycle orientation,
423 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
424 std::vector<double> getBoxSpaceTransform(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
426
434 std::vector<double> getInverseTransform(CoordinateCycle orientation,
435 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
436 std::vector<double> getInverseTransform(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
438
454 const Hybrid<double>* getCoordinateHandle(CartesianDimension dim, TrajectoryKind kind,
455 CoordinateCycle orientation) const;
456
457 const Hybrid<double>* getCoordinateHandle(CartesianDimension dim,
458 TrajectoryKind kind = TrajectoryKind::POSITIONS) const;
459
460 Hybrid<double>* getCoordinateHandle(CartesianDimension dim, TrajectoryKind kind,
461 CoordinateCycle orientation);
462
463 Hybrid<double>* getCoordinateHandle(CartesianDimension dim,
464 TrajectoryKind kind = TrajectoryKind::POSITIONS);
466
470 const Hybrid<double>* getBoxTransformHandle(CoordinateCycle orientation) const;
471 const Hybrid<double>* getBoxTransformHandle() const;
472 Hybrid<double>* getBoxTransformHandle(CoordinateCycle orientation);
473 Hybrid<double>* getBoxTransformHandle();
475
479 const Hybrid<double>* getInverseTransformHandle(CoordinateCycle orientation) const;
480 const Hybrid<double>* getInverseTransformHandle() const;
481 Hybrid<double>* getInverseTransformHandle(CoordinateCycle orientation);
482 Hybrid<double>* getInverseTransformHandle();
484
488 const Hybrid<double>* getBoxDimensionsHandle(CoordinateCycle orientation) const;
489 const Hybrid<double>* getBoxDimensionsHandle() const;
490 Hybrid<double>* getBoxDimensionsHandle(CoordinateCycle orientation);
491 Hybrid<double>* getBoxDimensionsHandle();
493
501 const Hybrid<double>* getStorageHandle() const;
504
513 void initializeForces(CoordinateCycle orientation);
514 void initializeForces();
516
527 void updateCyclePosition();
528 void updateCyclePosition(CoordinateCycle time_point);
530
540 void exportToFile(const std::string &file_name, double current_time = 0.0,
541 TrajectoryKind traj_kind = TrajectoryKind::POSITIONS,
542 CoordinateFileKind output_kind = CoordinateFileKind::AMBER_INPCRD,
543 PrintSituation expectation = PrintSituation::UNKNOWN) const;
544
547 const PhaseSpace* getSelfPointer() const;
548
564 const PhaseSpaceReader data(HybridTargetLevel tier = HybridTargetLevel::HOST) const;
565 const PhaseSpaceReader data(CoordinateCycle orientation,
566 HybridTargetLevel tier = HybridTargetLevel::HOST) const;
567 PhaseSpaceWriter data(HybridTargetLevel tier = HybridTargetLevel::HOST);
568 PhaseSpaceWriter data(CoordinateCycle orientation,
569 HybridTargetLevel tier = HybridTargetLevel::HOST);
571
572#ifdef STORMM_USE_HPC
584 const PhaseSpaceReader deviceViewToHostData(CoordinateCycle orientation) const;
585 const PhaseSpaceReader deviceViewToHostData() const;
586 PhaseSpaceWriter deviceViewToHostData(CoordinateCycle orientation);
587 PhaseSpaceWriter deviceViewToHostData();
589
591 void upload();
592
601 void uploadPositions(CoordinateCycle orientation);
602 void uploadPositions();
604
606 void uploadTransformations();
607
616 void uploadVelocities(CoordinateCycle orientation);
617 void uploadVelocities();
619
628 void uploadForces(CoordinateCycle orientation);
629 void uploadForces();
631
633 void download();
634
643 void downloadPositions(CoordinateCycle orientation);
644 void downloadPositions();
646
648 void downloadTransformations();
649
658 void downloadVelocities(CoordinateCycle orientation);
659 void downloadVelocities();
661
670 void downloadForces(CoordinateCycle orientation);
671 void downloadForces();
673#endif
674
675private:
676 HybridFormat format;
677 std::string file_name;
680 int atom_count;
681 UnitCellType unit_cell;
682 CoordinateCycle cycle_position;
692 Hybrid<double> x_coordinates;
693 Hybrid<double> y_coordinates;
694 Hybrid<double> z_coordinates;
695
696 // The actual nature of the following arrays, as well as the [x,y,z]_coordinates themselves, can
697 // change based on the CoordinateCycle position.
698 Hybrid<double> x_alt_coordinates;
699 Hybrid<double> y_alt_coordinates;
700 Hybrid<double> z_alt_coordinates;
701
702 // Transformation matrices are given directly after the coordinates in the overall order of data
703 Hybrid<double> box_space_transform;
704 Hybrid<double> inverse_transform;
705 Hybrid<double> box_dimensions;
707
708 // Alternate transformation matrices are stored next, for consistency. This provides a complete
709 // record of the previous unit cell dimensions in the event that the trajectory needs to
710 // backtrack against a rejected Monte-Carlo move, or a complete space to build the next state of
711 // the system.
712 Hybrid<double> alt_box_space_transform;
713 Hybrid<double> alt_inverse_transform;
714 Hybrid<double> alt_box_dimensions;
717
718 // Like coordinates, velocities and forces appear in WHITE -> BLACK blocks
719 Hybrid<double> x_velocities;
720 Hybrid<double> y_velocities;
721 Hybrid<double> z_velocities;
722 Hybrid<double> x_alt_velocities;
723 Hybrid<double> y_alt_velocities;
724 Hybrid<double> z_alt_velocities;
725 Hybrid<double> x_forces;
726 Hybrid<double> y_forces;
727 Hybrid<double> z_forces;
728 Hybrid<double> x_alt_forces;
729 Hybrid<double> y_alt_forces;
730 Hybrid<double> z_alt_forces;
731
734 Hybrid<double> storage;
735
737 void allocate();
738};
739
741static const size_t phasespace_type_index = std::type_index(typeid(PhaseSpace)).hash_code();
742
752UnitCellType determineUnitCellTypeByShape(const double* inverse_transform);
753UnitCellType determineUnitCellTypeByShape(const std::vector<double> &inverse_transform);
754UnitCellType determineUnitCellTypeByShape(const Hybrid<double> &inverse_transform);
756
765std::vector<double> interlaceXYZ(const double* xptr, const double* yptr, const double* zptr,
766 int low_index, int high_index);
767
768} // namespace trajectory
769} // namespace stormm
770
771#include "phasespace.tpp"
772
773// As with common types and STORMM vector types, define the type indices for general use in the
774// STORMM namespace.
775namespace stormm {
776using trajectory::phasespace_type_index;
777} // namespace stormm
778
779#endif
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202
PhaseSpace(int atom_count_in=0, UnitCellType unit_cell_in=UnitCellType::NONE, HybridFormat format_in=default_hpc_format)
Construction of a phase space object, like a topology, is typically done from a file.
Definition phasespace.cpp:89
A struct to hold information relating to an Amber topology. This struct's member functions are limite...
Definition atomgraph.h:50
An object to complement a topology and hold positions, velocities, and forces of all particles in a s...
Definition phasespace.h:141
const double * getCoordinatePointer(CartesianDimension dim, TrajectoryKind kind, CoordinateCycle orientation, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a pointer to the particle X, Y, or Z coordinates, velocities, or forces, on either the host or de...
Definition phasespace.cpp:641
const double * getBoxSizePointer(CoordinateCycle orientation, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a pointer to the box dimensions that can track its evolution in the PhaseSpace object's Hybrid da...
Definition phasespace.cpp:1053
const Hybrid< double > * getStorageHandle() const
Get a pointer to the ARRAY-kind Hybrid object that holds the actual data. Needed by CoordinateFrame o...
Definition phasespace.cpp:1448
std::vector< double > getInverseTransform(CoordinateCycle orientation, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the transformation matrix to take coordinates from fractional space back into real space....
Definition phasespace.cpp:1121
void exportToFile(const std::string &file_name, double current_time=0.0, TrajectoryKind traj_kind=TrajectoryKind::POSITIONS, CoordinateFileKind output_kind=CoordinateFileKind::AMBER_INPCRD, PrintSituation expectation=PrintSituation::UNKNOWN) const
Put the phase space data into a trajectory or checkpoint file.
Definition phasespace.cpp:1507
HybridFormat getFormat() const
Get the Hybrid format taken by the object, indicating on which resources its memory is present.
Definition phasespace.cpp:616
std::vector< double > getInterlacedCoordinates(TrajectoryKind kind=TrajectoryKind::POSITIONS, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the coordinates returned in an X/Y/Z interlaced manner.
Definition phasespace.cpp:857
const Hybrid< double > * getCoordinateHandle(CartesianDimension dim, TrajectoryKind kind, CoordinateCycle orientation) const
Get a pointer to one of the coordinate arrays, a pointer to a POINTER-kind Hybrid object.
Definition phasespace.cpp:1153
PhaseSpace & operator=(const PhaseSpace &other)
Copy assignment operator likewise handles assignment of internal POINTER-kind Hybrid objects.
Definition phasespace.cpp:376
UnitCellType getUnitCellType() const
Get the unit cell type of the coordinate system.
Definition phasespace.cpp:631
const double * getBoxSpaceTransformPointer(CoordinateCycle orientation, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a pointer to the box space transformation matrix that can track its evolution in the PhaseSpace o...
Definition phasespace.cpp:981
const double * getInverseTransformPointer(CoordinateCycle orientation, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get a pointer to the inverse (back to real space) transformation matrix that can track its evolution ...
Definition phasespace.cpp:1017
void buildFromFile(const std::string &file_name_in, const CoordinateFileKind file_kind=CoordinateFileKind::UNKNOWN, int frame_number=0)
Fill the object from information in some coordinate, restart, or trajectory file.
Definition phasespace.cpp:500
CoordinateCycle getCyclePosition() const
Get the time cycle stage indicating the arrays holding current coordinates.
Definition phasespace.cpp:636
std::string getFileName() const
Get the name of the file associated with this object.
Definition phasespace.cpp:621
const PhaseSpaceReader 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...
Definition phasespace.cpp:1584
void updateCyclePosition()
Update the cycle position.
Definition phasespace.cpp:1490
PhaseSpace(int atom_count_in=0, UnitCellType unit_cell_in=UnitCellType::NONE, HybridFormat format_in=default_hpc_format)
Construction of a phase space object, like a topology, is typically done from a file.
Definition phasespace.cpp:89
void fill(const T *xcrd, const T *ycrd, const T *zcrd, TrajectoryKind kind=TrajectoryKind::POSITIONS, CoordinateCycle cycle_in=CoordinateCycle::WHITE, int scale_bits=0, const double *box_dims=nullptr)
Fill the object from information in three arrays.
const PhaseSpace * getSelfPointer() const
Get a pointer to the object itself (useful when the object has been passed as a const reference and a...
Definition phasespace.cpp:1579
int getAtomCount() const
Get the number of atoms (particles, including virtual sites) in the object.
Definition phasespace.cpp:626
std::vector< double > getBoxSpaceTransform(CoordinateCycle orientation, HybridTargetLevel tier=HybridTargetLevel::HOST) const
Get the transformation matrix to take coordinates into box (fractional) space. The result should be i...
Definition phasespace.cpp:1089
PhaseSpaceReader(const int natom_in, const UnitCellType unit_cell_in, const double *xcrd_in, const double *ycrd_in, const double *zcrd_in, const double *umat_in, const double *invu_in, const double *boxdim_in, const double *umat_alt_in, const double *invu_alt_in, const double *boxdim_alt_in, const double *xvel_in, const double *yvel_in, const double *zvel_in, const double *xfrc_in, const double *yfrc_in, const double *zfrc_in, const double *xalt_in, const double *yalt_in, const double *zalt_in, const double *vxalt_in, const double *vyalt_in, const double *vzalt_in, const double *fxalt_in, const double *fyalt_in, const double *fzalt_in)
Definition phasespace.cpp:54
PhaseSpaceWriter(const int natom_in, const UnitCellType unit_cell_in, double *xcrd_in, double *ycrd_in, double *zcrd_in, double *umat_in, double *invu_in, double *boxdim_in, double *umat_alt_in, double *invu_alt_in, double *boxdim_alt_in, double *xvel_in, double *yvel_in, double *zvel_in, double *xfrc_in, double *yfrc_in, double *zfrc_in, double *xalt_in, double *yalt_in, double *zalt_in, double *vxalt_in, double *vyalt_in, double *vzalt_in, double *fxalt_in, double *fyalt_in, double *fzalt_in)
Constructor takes a large list of arguments passed in from the original PhaseSpace object.
Definition phasespace.cpp:37
Collect constants and pointers to the components of a read-only PhaseSpace object.
Definition phasespace.h:81
const double * invu_alt
Transformation matrix to take coordinates into real space.
Definition phasespace.h:117
const double * vxalt
Alternate Cartesian X velocities for all particles.
Definition phasespace.h:129
const double * boxdim_alt
Definition phasespace.h:118
const double * zvel
Cartesian Z velocities of all particles.
Definition phasespace.h:122
const double * invu
Transformation matrix to take coordinates into real space.
Definition phasespace.h:112
const double * vzalt
Alternate Cartesian Z velocities for all particles.
Definition phasespace.h:131
const double * xalt
Alternate Cartesian X positions of all particles.
Definition phasespace.h:126
const int natom
Atom count for this system (still a constant)
Definition phasespace.h:105
const double * xfrc
Cartesian X forces acting on all particles.
Definition phasespace.h:123
const double * zfrc
Cartesian Z forces acting on all particles.
Definition phasespace.h:125
const double * yvel
Cartesian Y velocities of all particles.
Definition phasespace.h:121
PhaseSpaceReader(const int natom_in, const UnitCellType unit_cell_in, const double *xcrd_in, const double *ycrd_in, const double *zcrd_in, const double *umat_in, const double *invu_in, const double *boxdim_in, const double *umat_alt_in, const double *invu_alt_in, const double *boxdim_alt_in, const double *xvel_in, const double *yvel_in, const double *zvel_in, const double *xfrc_in, const double *yfrc_in, const double *zfrc_in, const double *xalt_in, const double *yalt_in, const double *zalt_in, const double *vxalt_in, const double *vyalt_in, const double *vzalt_in, const double *fxalt_in, const double *fyalt_in, const double *fzalt_in)
Definition phasespace.cpp:54
const double * yalt
Alternate Cartesian Y positions of all particles.
Definition phasespace.h:127
const double * xcrd
Cartesian X positions of all particles.
Definition phasespace.h:107
const double * fyalt
Alternate Cartesian Y forces acting on all particles.
Definition phasespace.h:133
const double * zalt
Alternate Cartesian Z positions of all particles.
Definition phasespace.h:128
const UnitCellType unit_cell
The type of unit cell.
Definition phasespace.h:106
const double * xvel
Cartesian X velocities of all particles.
Definition phasespace.h:120
const double * umat_alt
Definition phasespace.h:115
const double * fxalt
Alternate Cartesian X forces acting on all particles.
Definition phasespace.h:132
const double * fzalt
Alternate Cartesian Z forces acting on all particles.
Definition phasespace.h:134
const double * umat
Definition phasespace.h:110
const double * boxdim
Definition phasespace.h:113
const double * vyalt
Alternate Cartesian Y velocities for all particles.
Definition phasespace.h:130
const double * zcrd
Cartesian Z positions of all particles.
Definition phasespace.h:109
const double * ycrd
Cartesian Y positions of all particles.
Definition phasespace.h:108
PhaseSpaceReader(const PhaseSpaceReader &original)=default
Copy and move constructors. The assignment operators are implicitly deleted.
const double * yfrc
Cartesian Y forces acting on all particles.
Definition phasespace.h:124
Collect constants and pointers to the components of a modifiable PhaseSpace object.
Definition phasespace.h:31
double * ycrd
Cartesian Y positions of all particles.
Definition phasespace.h:51
double * yalt
Alternate Cartesian Y positions of all particles.
Definition phasespace.h:70
double * zvel
Cartesian Z velocities of all particles.
Definition phasespace.h:65
double * umat_alt
Definition phasespace.h:58
double * zalt
Alternate Cartesian Z positions of all particles.
Definition phasespace.h:71
double * yfrc
Cartesian Y forces acting on all particles.
Definition phasespace.h:67
double * vxalt
Alternate Cartesian X velocities for all particles.
Definition phasespace.h:72
double * vzalt
Alternate Cartesian Z velocities for all particles.
Definition phasespace.h:74
double * fxalt
Alternate Cartesian X forces acting on all particles.
Definition phasespace.h:75
double * zfrc
Cartesian Z forces acting on all particles.
Definition phasespace.h:68
double * vyalt
Alternate Cartesian Y velocities for all particles.
Definition phasespace.h:73
PhaseSpaceWriter(const int natom_in, const UnitCellType unit_cell_in, double *xcrd_in, double *ycrd_in, double *zcrd_in, double *umat_in, double *invu_in, double *boxdim_in, double *umat_alt_in, double *invu_alt_in, double *boxdim_alt_in, double *xvel_in, double *yvel_in, double *zvel_in, double *xfrc_in, double *yfrc_in, double *zfrc_in, double *xalt_in, double *yalt_in, double *zalt_in, double *vxalt_in, double *vyalt_in, double *vzalt_in, double *fxalt_in, double *fyalt_in, double *fzalt_in)
Constructor takes a large list of arguments passed in from the original PhaseSpace object.
Definition phasespace.cpp:37
double * invu_alt
Transformation matrix to take coordinates into real space.
Definition phasespace.h:60
const int natom
Atom count for this system (still a constant)
Definition phasespace.h:48
double * xcrd
Cartesian X positions of all particles.
Definition phasespace.h:50
PhaseSpaceWriter(const PhaseSpaceWriter &original)=default
Copy and move constructors. The assignment operators are implicitly deleted.
double * fzalt
Alternate Cartesian Z forces acting on all particles.
Definition phasespace.h:77
const UnitCellType unit_cell
The type of unit cell.
Definition phasespace.h:49
double * yvel
Cartesian Y velocities of all particles.
Definition phasespace.h:64
double * xfrc
Cartesian X forces acting on all particles.
Definition phasespace.h:66
double * boxdim_alt
Definition phasespace.h:61
double * boxdim
Definition phasespace.h:56
double * fyalt
Alternate Cartesian Y forces acting on all particles.
Definition phasespace.h:76
double * xalt
Alternate Cartesian X positions of all particles.
Definition phasespace.h:69
double * invu
Transformation matrix to take coordinates into real space.
Definition phasespace.h:55
double * umat
Definition phasespace.h:53
double * zcrd
Cartesian Z positions of all particles.
Definition phasespace.h:52
double * xvel
Cartesian X velocities of all particles.
Definition phasespace.h:63