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

Comparing trunk/OOPSE-2.0/src/types/MoleculeStamp.hpp (file contents):
Revision 1492 by tim, Fri Sep 24 16:27:58 2004 UTC vs.
Revision 2483 by tim, Mon Dec 5 18:23:30 2005 UTC

# Line 1 | Line 1
1 < #ifndef __MOLECULESTAMP_H__
2 < #define __MOLECULESTAMP_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 > #ifndef TYPES_MOLECULESTAMP_HPP
43 > #define TYPES_MOLECULESTAMP_HPP
44   #include <vector>
45   #include <utility>
46   #include "types/AtomStamp.hpp"
# Line 8 | Line 49
49   #include "types/TorsionStamp.hpp"
50   #include "types/RigidBodyStamp.hpp"
51   #include "types/CutoffGroupStamp.hpp"
52 < #include "io/LinkedAssign.hpp"
52 > #include "types/FragmentStamp.hpp"
53  
54 < using namespace std;
55 < class MoleculeStamp{
54 > namespace oopse {
55 > class MoleculeStamp : public DataHolder {
56 >    DeclareParameter(Name, std::string);
57 >  public:
58 >    MoleculeStamp();
59 >    virtual ~MoleculeStamp();
60 >    
61 >    bool addAtomStamp( AtomStamp* atom);
62 >    bool addBondStamp( BondStamp* bond);
63 >    bool addBendStamp( BendStamp* bend);
64 >    bool addTorsionStamp( TorsionStamp* torsion);  
65 >    bool addRigidBodyStamp( RigidBodyStamp* rigidbody);
66 >    bool addCutoffGroupStamp( CutoffGroupStamp* cutoffgroup);
67 >    bool addFragmentStamp( FragmentStamp* fragment);
68 >  
69 >    int  getNAtoms() { return atomStamps_.size(); }
70 >    int  getNBonds() { return bondStamps_.size(); }
71 >    int  getNBends() { return bendStamps_.size(); }
72 >    int  getNTorsions() { return torsionStamps_.size(); }
73 >    int  getNRigidBodies() { return rigidBodyStamps_.size(); }
74 >    int  getNCutoffGroups() { return cutoffGroupStamps_.size(); }  
75 >    int getNIntegrable() { return nintegrable_;}
76 >    virtual void validate();
77 >    
78 >    AtomStamp* getAtomStamp(int index) { return atomStamps_[index]; }
79 >    BondStamp* getBondStamp(int index) { return bondStamps_[index]; }
80 >    BendStamp* getBendStamp(int index) { return bendStamps_[index]; }
81 >    TorsionStamp* getTorsionStamp(int index) { return torsionStamps_[index]; }
82 >    RigidBodyStamp* getRigidBodyStamp(int index) { return rigidBodyStamps_[index]; }
83 >    CutoffGroupStamp* getCutoffGroupStamp(int index) { return cutoffGroupStamps_[index]; }
84 >    FragmentStamp* getFragmentStamp(int index) { return fragmentStamps_[index]; }
85  
86 < public:
87 <  MoleculeStamp();
88 <  ~MoleculeStamp();
89 <
20 <  char* assignString( char* lhs, char* rhs );
21 <  char* assignDouble( char* lhs, double rhs );
22 <  char* assignInt( char* lhs, int rhs );
23 <  char* checkMe( void );
24 <
25 <  char* addAtom( AtomStamp* the_atom, int atomIndex );
26 <  char* addRigidBody( RigidBodyStamp* the_rigidbody, int rigidBodyIndex );
27 <  char* addCutoffGroup( CutoffGroupStamp* the_cutoffgroup, int cutoffGroupIndex );
28 <  char* addBond( BondStamp* the_bond, int bondIndex );
29 <  char* addBend( BendStamp* the_bend, int bendIndex );
30 <  char* addTorsion( TorsionStamp* the_torsion, int torsionIndex );  
31 <
32 <  char* getID( void )         { return name; }
33 <  int   getNAtoms( void )     { return n_atoms; }
34 <  int   getNBonds( void )     { return n_bonds; }
35 <  int   getNBends( void )     { return n_bends; }
36 <  int   getNTorsions( void )  { return n_torsions; }
37 <  int   getNRigidBodies(void) { return n_rigidbodies; }
38 <  int   getNCutoffGroups(void){ return n_cutoffgroups; }  
39 <  int   getNIntegrable(void)  { return n_integrable; }
40 <
41 <  AtomStamp* getAtom( int index ) { return atoms[index]; }
42 <  BondStamp* getBond( int index ) { return bonds[index]; }
43 <  BendStamp* getBend( int index ) { return bends[index]; }
44 <  TorsionStamp* getTorsion( int index ) { return torsions[index]; }
45 <  RigidBodyStamp* getRigidBody( int index ) { return rigidBodies[index]; }
46 <  CutoffGroupStamp* getCutoffGroup( int index ) { return cutoffGroups[index]; }
47 <
48 <
49 <  bool isBondInSameRigidBody(BondStamp*bond);
50 <  bool isAtomInRigidBody(int atomIndex);  
51 <  bool isAtomInRigidBody(int atomIndex, int& whichRigidBody, int& consAtomIndex);  
52 <  vector<pair<int, int> > getJointAtoms(int rb1, int rb2);
86 >    bool isBondInSameRigidBody(BondStamp*bond);
87 >    bool isAtomInRigidBody(int atomIndex);  
88 >    bool isAtomInRigidBody(int atomIndex, int& whichRigidBody, int& consAtomIndex);  
89 >    std::vector<std::pair<int, int> > getJointAtoms(int rb1, int rb2);
90    
91 <  int haveExtras( void ) { return have_extras; }
55 <  LinkedAssign* getUnhandled( void ) { return unhandled; }
56 <  
57 <  static char errMsg[500];
58 < private:
59 <  
60 <  
61 <  char name[100];
62 <  int n_atoms;
63 <  int n_bonds;
64 <  int n_bends;
65 <  int n_torsions;
66 <  int n_rigidbodies;
67 <  int n_cutoffgroups;
68 <  int n_integrable;
69 <  
70 <  int have_name, have_atoms, have_bonds, have_bends, have_torsions;
71 <  int have_rigidbodies, have_cutoffgroups;
91 >  private:
92  
93 <  AtomStamp** atoms;
94 <  BondStamp** bonds;
95 <  BendStamp** bends;
96 <  TorsionStamp** torsions;  
97 <  RigidBodyStamp** rigidBodies;  
98 <  CutoffGroupStamp** cutoffGroups;  
99 <
100 <  LinkedAssign* unhandled; // the unhandled assignments
101 <  short int have_extras;
93 >    void fillBondInfo();
94 >    void checkAtoms();
95 >    void checkBonds();
96 >    void checkBends();
97 >    void checkTorsions();
98 >    void checkRigidBodies();
99 >    void checkCutoffGroups();
100 >    void checkFragments();
101 >    template <class Cont, class T>
102 >    bool addIndexSensitiveStamp(Cont& cont, T* stamp) {
103 >    typename Cont::iterator i;
104 >    int index = stamp->getIndex();
105 >    bool ret = false;
106 >    size_t size = cont.size();
107 >    
108 >    if (size >= index +1) {
109 >        if (cont[index]!= NULL) {
110 >            ret = false;
111 >        }else {
112 >            cont[index] = stamp;
113 >            ret = true;
114 >        }
115 >    } else {
116 >        cont.insert(cont.end(), index - cont.size() + 1, NULL);
117 >        cont[index] = stamp;
118 >        ret = true;
119 >    }
120 >    
121 >    return ret;
122 >    }
123 >    
124 >    std::vector<AtomStamp*> atomStamps_;
125 >    std::vector<BondStamp*> bondStamps_;
126 >    std::vector<BendStamp*> bendStamps_;
127 >    std::vector<TorsionStamp*> torsionStamps_;
128 >    std::vector<RigidBodyStamp*> rigidBodyStamps_;
129 >    std::vector<CutoffGroupStamp*> cutoffGroupStamps_;
130 >    std::vector<FragmentStamp*> fragmentStamps_;
131 >    std::vector<int> atom2Rigidbody;
132 >    int nintegrable_;
133   };
134  
135 + }
136   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines