OpenAtom  Version1.5a
Atoms.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * $Source$
3  * $Author$
4  * $Date$
5  * $Revision$
6  *****************************************************************************/
7 
8 /** \file Atoms.h
9  *
10  */
11 
12 #include "charm++.h"
13 
14 #ifndef _atoms_h_
15 #define _atoms_h_
16 
17 //////////////////////////////////////////////////////////////////////////////
18 //////////////////////////////////////////////////////////////////////////////
19 //////////////////////////////////////////////////////////////////////////////
20 class Atom {
21 //////////////////////////////////////////////////////////////////////////////
22  public:
23  Atom() {}
24  Atom(double x_, double y_, double z_, double q_, double m_) {
25  x = x_; y = y_; z = z_; q = q_; m = m_;
26  xu = yu = zu=0.0;
27  vx = 0.0; vy = 0.0; vz = 0.0;
28  fx = 0.0; fy = 0.0; fz = 0.0;
29  fxu = 0.0; fyu = 0.0; fzu = 0.0;
30  mvx2 = 0.0; mvy2 = 0.0; mvz2 = 0.0;
31  }//end constructor
32  Atom(double x_, double y_, double z_,double q_, double m_,
33  double vx_, double vy_, double vz_) {
34  x = x_; y = y_; z = z_; q = q_; m = m_;
35  xu = yu = zu=0.0;
36  vx = vx_; vy = vy_; vz = vz_;
37  fx = 0.0; fy = 0.0; fz = 0.0;
38  fxu = 0.0; fyu = 0.0; fzu = 0.0;
39  mvx2 = 0.0; mvy2 = 0.0; mvz2 = 0.0;
40  }//end constructor
41  void Init(double x_, double y_, double z_, double q_, double m_) {
42  x = x_; y = y_; z = z_; q = q_; m = m_;
43  xu = yu = zu=0.0;
44  xcm = ycm = zcm=0.0;
45  vx = 0.0; vy = 0.0; vz = 0.0;
46  fx = 0.0; fy = 0.0; fz = 0.0;
47  fxu = 0.0; fyu = 0.0; fzu = 0.0;
48  mvx2 = 0.0; mvy2 = 0.0; mvz2 = 0.0;
49  }//end Init
50  void Init(double x_, double y_, double z_, double q_, double m_,
51  double vx_, double vy_, double vz_) {
52  x = x_; y = y_; z = z_; q = q_; m = m_;
53  xu = yu = zu=0.0;
54  vx = vx_; vy = vy_; vz = vz_;
55  fx = 0.0; fy = 0.0; fz = 0.0;
56  fxu = 0.0; fyu = 0.0; fzu = 0.0;
57  mvx2 = 0.0; mvy2 = 0.0; mvz2 = 0.0;
58  }//end Init
59  Atom(Atom *a) {
60  x = a->x; y = a->y; z = a->z; q = a->q; m = a->m;
61  xu = a->xu; yu = a->yu; zu = a->zu; mu = a->mu;
62  vx = a->vx; vy = a->vy; vz = a->vz;
63  fx = a->fx; fy = a->fy; fz = a->fz;
64  fxu = a->fxu; fyu = a->fyu; fzu = a->fzu;
65  mvx2 = 0.0; mvy2 = 0.0; mvz2 = 0.0;
66  }//end constructor
67 
68 
69  double x, y, z, q, m;
70  double fx,fy,fz;
71  double vxold,vyold,vzold;
72  double xold,yold,zold;
73  double vx,vy,vz,mvx2,mvy2,mvz2;
74 
75  double xu, yu, zu, mu;
76  double xcm, ycm, zcm;
77  double fxu,fyu,fzu;
78 
79  void pup(PUP::er &p) {
80  p|x; p|y; p|z; p|q; p|m;
81  p|fx; p|fy; p|fz;
82  p|vx; p|vy; p|vz;
83  p|mvx2; p|mvy2; p|mvz2;
84  p|xu; p|yu; p|zu; p|mu;
85  p|fxu; p|fyu; p|fzu;
86  }//pup routine
87 
88 };//end Atom
89 
90 PUPmarshall(Atom);
91 //////////////////////////////////////////////////////////////////////////////
92 
93 //////////////////////////////////////////////////////////////////////////////
94 //////////////////////////////////////////////////////////////////////////////
95 //////////////////////////////////////////////////////////////////////////////
96 class FastAtoms {
97 //////////////////////////////////////////////////////////////////////////////
98  public:
99 
100  int natm;
101  double *xu,*yu,*zu,*q; // no masses or velocities cause these are working vectors
102  double *fxu,*fyu,*fzu;
103  double *x,*y,*z; // no masses or velocities cause these are working vectors
104  double *fx,*fy,*fz;
105  FastAtoms(){natm=0;xu=yu=zu=q=fzu=fyu=x=y=z=fx=fy=fz=NULL;}
106  ~FastAtoms(){}
107 
108 };//end FastAtom
109 //////////////////////////////////////////////////////////////////////////////
110 
111 //////////////////////////////////////////////////////////////////////////////
112 //////////////////////////////////////////////////////////////////////////////
113 //////////////////////////////////////////////////////////////////////////////
114 class PIMD_CM {
115 //////////////////////////////////////////////////////////////////////////////
116  public:
117  int natm;
118  double *x,*y,*z;
119  PIMD_CM(){x=NULL; y=NULL;z=NULL;}
120  ~PIMD_CM(){}
121 
122 };//end PIMD_CM
123 //////////////////////////////////////////////////////////////////////////////
124 
125 
126 //////////////////////////////////////////////////////////////////////////////
127 //////////////////////////////////////////////////////////////////////////////
128 //////////////////////////////////////////////////////////////////////////////
129 class AtomNHC {
130 //////////////////////////////////////////////////////////////////////////////
131  public:
132  int len_nhc;
133  double kT;
134  double posKT;
135  double fx[5],fy[5],fz[5];
136  double vx[5],vy[5],vz[5];
137  double m[5];
138  AtomNHC() {}
139  AtomNHC(int len_nhc_in,double kT_in, double *vx_in, double *vy_in, double *vz_in,
140  double *m_in) {
141  len_nhc = len_nhc_in;
142  checkLenNHC(len_nhc);
143  kT = kT_in;
144  posKT = 0.0;
145  for(int i=0;i<len_nhc;i++){
146  m[i] = m_in[i];
147  vx[i] = vx_in[i]; vy[i] = vy_in[i]; vz[i] = vz_in[i];
148  fx[i] = 0.0; fy[i] = 0.0; fz[i] = 0.0;
149  }//endfor
150  }//end constructor
151  AtomNHC(AtomNHC *a) {
152  len_nhc = a->len_nhc;
153  kT = a->kT;
154  posKT = 0.0;
155  checkLenNHC(len_nhc);
156  for(int i=0;i<len_nhc;i++){
157  m[i] = a->m[i];
158  vx[i] = a->vx[i]; vy[i] = a->vy[i]; vz[i] = a->vz[i];
159  fx[i] = a->fx[i]; fy[i] = a->fy[i]; fz[i] = a->fz[i];
160  }//endfor
161  }//end constructor
162 
163  void Init(int len_nhc_in,double kT_in, double *vx_in, double *vy_in, double *vz_in,
164  double *m_in) {
165  len_nhc = len_nhc_in;
166  kT = kT_in;
167  posKT = 0.0;
168  checkLenNHC(len_nhc);
169  for(int i=0;i<len_nhc;i++){
170  m[i] = m_in[i];
171  vx[i] = vx_in[i]; vy[i] = vy_in[i]; vz[i] = vz_in[i];
172  fx[i] = 0.0; fy[i] = 0.0; fz[i] = 0.0;
173  }//endfor
174  }//end Init
175  void Init(AtomNHC *a) {
176  len_nhc = a->len_nhc;
177  kT = a->kT;
178  posKT = 0.0;
179  checkLenNHC(len_nhc);
180  for(int i=0;i<len_nhc;i++){
181  m[i] = a->m[i];
182  vx[i] = a->vx[i]; vy[i] = a->vy[i]; vz[i] = a->vz[i];
183  fx[i] = a->fx[i]; fy[i] = a->fy[i]; fz[i] = a->fz[i];
184  }//endfor
185  }//end Init
186 
187  ~AtomNHC() { }// destructor
188 
189  void pup(PUP::er &p) {
190  p|len_nhc; p|kT; p|posKT;
191  p(m,len_nhc);
192  p(vx,len_nhc); p(vy,len_nhc); p(vz,len_nhc);
193  p(fx,len_nhc); p(fy,len_nhc); p(fz,len_nhc);
194  }//routine
195 
196  void checkLenNHC(int mylen_nhc){
197  if(mylen_nhc>5){
198  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@\n");
199  CkPrintf("The maximum allowed Atm NHC len is 5.\n");
200  CkPrintf("@@@@@@@@@@@@@@@@@@@@_error_@@@@@@@@@@@@@@@@@@@@@@\n");
201  CkExit();
202  }//endif
203  }//endif
204 };//end AtomNHC
205 
206 PUPmarshall(AtomNHC);
207 //////////////////////////////////////////////////////////////////////////////
208 
209 #endif
Definition: Atoms.h:129
Definition: Atoms.h:20
Definition: Atoms.h:114