ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/primitives/Atom.hpp
(Generate patch)

Comparing trunk/OOPSE-2.0/src/primitives/Atom.hpp (file contents):
Revision 1492 by tim, Fri Sep 24 16:27:58 2004 UTC vs.
Revision 1930 by gezelter, Wed Jan 12 22:41:40 2005 UTC

# Line 1 | Line 1
1 < #ifndef _ATOM_H_
2 < #define _ATOM_H_
1 > /*
2 > * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 > *
4 > * The University of Notre Dame grants you ("Licensee") a
5 > * non-exclusive, royalty free, license to use, modify and
6 > * redistribute this software in source and binary code form, provided
7 > * that the following conditions are met:
8 > *
9 > * 1. Acknowledgement of the program authors must be made in any
10 > *    publication of scientific results based in part on use of the
11 > *    program.  An acceptable form of acknowledgement is citation of
12 > *    the article in which the program was described (Matthew
13 > *    A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 > *    J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 > *    Parallel Simulation Engine for Molecular Dynamics,"
16 > *    J. Comput. Chem. 26, pp. 252-271 (2005))
17 > *
18 > * 2. Redistributions of source code must retain the above copyright
19 > *    notice, this list of conditions and the following disclaimer.
20 > *
21 > * 3. Redistributions in binary form must reproduce the above copyright
22 > *    notice, this list of conditions and the following disclaimer in the
23 > *    documentation and/or other materials provided with the
24 > *    distribution.
25 > *
26 > * This software is provided "AS IS," without a warranty of any
27 > * kind. All express or implied conditions, representations and
28 > * warranties, including any implied warranty of merchantability,
29 > * fitness for a particular purpose or non-infringement, are hereby
30 > * excluded.  The University of Notre Dame and its licensors shall not
31 > * be liable for any damages suffered by licensee as a result of
32 > * using, modifying or distributing the software or its
33 > * derivatives. In no event will the University of Notre Dame or its
34 > * licensors be liable for any lost revenue, profit or data, or for
35 > * direct, indirect, special, consequential, incidental or punitive
36 > * damages, however caused and regardless of the theory of liability,
37 > * arising out of the use of or inability to use software, even if the
38 > * University of Notre Dame has been advised of the possibility of
39 > * such damages.
40 > */
41 >
42 > /**
43 > * @file Atom.hpp
44 > * @author    tlin
45 > * @date  10/22/2004
46 > * @version 1.0
47 > */
48  
49 < #include <string.h>
50 < #include <stdlib.h>
6 < #include <iostream>
49 > #ifndef PRIMITIVES_ATOM_HPP
50 > #define PRIMITIVES_ATOM_HPP
51  
8 #include "brains/SimState.hpp"
52   #include "primitives/StuntDouble.hpp"
53 < #include "visitors/BaseVisitor.hpp"
53 > #include "types/AtomType.hpp"
54  
55 < class Atom : public StuntDouble {
56 < public:
55 > namespace oopse{
56 >    class Atom : public StuntDouble {
57 >        public:
58 >            Atom(AtomType* at);
59  
60 <  Atom(int theIndex, SimState* theConfig );
61 <  virtual ~Atom() {}
60 >            virtual std::string getType() {return atomType_->getName();}
61 >        
62 >            /**
63 >             * Returns the inertia tensor of this stuntdouble
64 >             * @return the inertia tensor of this stuntdouble
65 >             */
66 >            virtual Mat3x3d getI();
67  
68 <  virtual void setCoords(void);
68 >            /**
69 >             * Returns the gradient of this stuntdouble
70 >             * @return the inertia tensor of this stuntdouble
71 >             */
72 >            virtual std::vector<double> getGrad();
73  
74 <  void getPos( double theP[3] );
21 <  void setPos( double theP[3] );
74 >            virtual void accept(BaseVisitor* v);
75  
76 <  void getVel( double theV[3] );
77 <  void setVel( double theV[3] );
76 >            /**
77 >             * Returns the AtomType of this Atom.
78 >             * @return the atom type of this atom
79 >             */
80 >            AtomType* getAtomType() {
81 >                return atomType_;
82 >            }
83 >            
84 >            //forward  functions of AtomType class
85 >            bool    isCharge()  {
86 >                return atomType_->isCharge();
87 >            }
88 >            
89 >            bool    isDirectional() {
90 >                return atomType_->isDirectional();
91 >            }
92  
93 <  void getFrc( double theF[3] );
94 <  void addFrc( double theF[3] );
93 >            bool    isDipole()  {
94 >                return atomType_->isDipole();
95 >            }
96  
97 <  virtual void zeroForces();
97 >            bool    isQudrapole()  {
98 >                return atomType_->isQuadrupole();
99 >            }
100 >            
101 >            bool    isMultipole()  {
102 >                return atomType_->isMultipole();
103 >            }
104 >            
105 >            bool    isGayBerne()  {
106 >                return atomType_->isGayBerne();
107 >            }
108 >            
109 >            bool    isSticky()  {
110 >                return atomType_->isSticky();
111 >            }
112  
113 <  double getMass() {return c_mass;}
114 <  void setMass(double mass) {c_mass = mass;}
115 <  
34 <  int getIndex() const {return index;}
35 <  void setIndex(int theIndex);
113 >            bool    isShape()  {
114 >                return atomType_->isShape();
115 >            }            
116  
117 <  char *getType() {return c_name;}
118 <  void setType(char * name) {strcpy(c_name,name);}
119 <  
120 <  int getIdent( void ) { return ident; }
121 <  void setIdent( int info ) { ident = info; }
117 >            int getIdent() {
118 >                return atomType_->getIdent();
119 >            }
120 >            
121 >        protected:
122 >            AtomType* atomType_;
123 >    };
124  
125 < #ifdef IS_MPI
44 <  int getGlobalIndex( void ) { return myGlobalIndex; }
45 <  void setGlobalIndex( int info ) { myGlobalIndex = info; }
46 < #endif // is_mpi
125 > }//namepace oopse
126  
127 <  void setHasDipole( int value ) { has_dipole = value; }
49 <  int hasDipole( void ) { return has_dipole; }
50 <
51 <  void setHasCharge(int value) {has_charge = value;}
52 <  int hasCharge(void) {return has_charge;}
53 <
54 <
55 <  virtual void accept(BaseVisitor* v) {v->visit(this);}
56 <  
57 < protected:
58 <  
59 <  SimState* myConfig;
60 <
61 <  double* pos; // the position array
62 <  double* vel; // the velocity array
63 <  double* frc; // the forc array
64 <  double* trq; // the torque vector  ( space fixed )
65 <  double* Amat; // the rotation matrix
66 <  double* mu;   // the array of dipole moments
67 <  double* ul;   // the lab frame unit directional vector
68 <
69 <  double zAngle; // the rotation about the z-axis ( body-fixed )
70 <
71 <  double c_mass; /* the mass of the atom in amu */
72 <
73 <  int index; /* set the atom's index */
74 <  int offset; // the atom's offset in the storage array
75 <  int offsetX, offsetY, offsetZ;
76 <
77 <  int Axx, Axy, Axz; // the rotational matrix indices
78 <  int Ayx, Ayy, Ayz;
79 <  int Azx, Azy, Azz;
80 <
81 <  char c_name[100]; /* it's name */
82 <  int ident;  // it's unique numeric identity.
83 <  
84 <  int has_dipole; // dipole boolean
85 <  int has_charge; // charge boolean
86 <
87 <  bool hasCoords;
88 <
89 < #ifdef IS_MPI
90 <  int myGlobalIndex;
91 < #endif
92 <  
93 < };
94 <
95 < #endif
127 > #endif //PRIMITIVES_ATOM_HPP

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines