ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-1.0/libmdtools/ForceFields.hpp
Revision: 1334
Committed: Fri Jul 16 18:58:03 2004 UTC (19 years, 11 months ago) by gezelter
File size: 4429 byte(s)
Log Message:
Initial import of OOPSE-1.0 source tree

File Contents

# User Rev Content
1 gezelter 1334 #ifndef __FORCEFIELDS_H__
2     #define __FORCEFIELDS_H__
3    
4     #define MK_STR(s) # s
5     #define STR_DEFINE(t, s) t = MK_STR(s)
6    
7    
8     #include <stdio.h>
9     #include <stdlib.h>
10     #include <math.h>
11    
12     #include "Atom.hpp"
13     #include "SimInfo.hpp"
14     #include "StuntDouble.hpp"
15    
16     #ifdef IS_MPI
17     #include "mpiForceField.h"
18     #endif
19    
20     #include "fForceField.h"
21     #include "fortranWrapDefines.hpp"
22    
23     class bond_pair{
24     public:
25     bond_pair(){}
26     ~bond_pair(){}
27    
28     int a;
29     int b;
30     };
31    
32     class bend_set{
33     public:
34     bend_set(){ isGhost = 0; }
35     ~bend_set(){}
36    
37     int ghost;
38     int isGhost;
39    
40     int a;
41     int b;
42     int c;
43     };
44    
45     class torsion_set{
46     public:
47     torsion_set(){}
48     ~torsion_set(){}
49    
50     int a;
51     int b;
52     int c;
53     int d;
54     };
55    
56    
57    
58     class ForceFields{
59    
60     public:
61     ForceFields(){ frcFile = NULL; entry_plug = NULL; has_variant=0;}
62     ForceFields(char * theVariant ){ frcFile = NULL; entry_plug = NULL; has_variant=1; strcpy(variant, theVariant); }
63     virtual ~ForceFields(){}
64    
65     void setSimInfo( SimInfo* the_entry_plug ) { entry_plug = the_entry_plug; }
66    
67     virtual void readParams( void ) = 0;
68    
69     virtual void cleanMe( void ) = 0;
70    
71    
72     virtual void initializeAtoms( int nAtoms, Atom** atomArray ) = 0;
73     virtual void initializeBonds( int nBonds, Bond** bondArray,
74     bond_pair* the_bonds ) = 0;
75     virtual void initializeBends( int nBends, Bend** bendArray,
76     bend_set* the_bends ) = 0;
77     virtual void initializeTorsions( int nTorsions, Torsion** torsionArray,
78     torsion_set* the_torsions ) = 0;
79     virtual void initForceField( int ljMixRule ) = 0;
80     virtual void initRestraints();
81     virtual void dumpzAngle();
82    
83     virtual void calcRcut( void );
84     virtual void setRcut( double LJrcut );
85     virtual void doForces( int calcPot, int calcStress );
86    
87     void setFortranForceLoop( doForceLoop_TD fsub ){
88     fortranForceLoop = fsub;
89     }
90    
91     protected:
92    
93     void initFortran( int ljMixPolicy, int useReactionField );
94     doForceLoop_TD fortranForceLoop;
95    
96     FILE *frcFile;
97     SimInfo* entry_plug;
98    
99     int lineNum;
100     char readLine[500];
101     char* eof_test;
102     char variant[100];
103     short int has_variant;
104     double bigSigma;
105    
106     };
107    
108    
109     class DUFF : public ForceFields{
110    
111     public:
112     DUFF();
113     virtual ~DUFF();
114    
115     void readParams();
116     void cleanMe( void );
117    
118     void initializeAtoms( int nAtoms, Atom** atomArray );
119     void initializeBonds( int nBonds, Bond** bondArray,
120     bond_pair* the_bonds );
121     void initializeBends( int nBends, Bend** bendArray,
122     bend_set* the_bends );
123     void initializeTorsions( int nTorsions, Torsion** torsionArray,
124     torsion_set* the_torsions );
125    
126     void initForceField( int ljMixRule );
127    
128     private:
129    
130     void fastForward( char* stopText, char* searchOwner );
131     };
132    
133     class LJFF : public ForceFields{
134    
135     public:
136     LJFF();
137     virtual ~LJFF();
138    
139    
140     void readParams();
141     void cleanMe( void );
142    
143     void initializeAtoms( int nAtoms, Atom** atomArray );
144     void initializeBonds( int nBonds, Bond** bondArray,
145     bond_pair* the_bonds );
146     void initializeBends( int nBends, Bend** bendArray,
147     bend_set* the_bends );
148     void initializeTorsions( int nTorsions, Torsion** torsionArray,
149     torsion_set* the_torsions );
150    
151     void initForceField( int ljMixRule );
152    
153     private:
154    
155     void fastForward( char* stopText, char* searchOwner );
156    
157     };
158    
159     class EAM_FF : public ForceFields{
160    
161     public:
162     EAM_FF();
163     EAM_FF(char* the_variant);
164     virtual ~EAM_FF();
165    
166    
167     void readParams();
168     void cleanMe( void );
169    
170     void initializeAtoms( int nAtoms, Atom** atomArray );
171     void initializeBonds( int nBonds, Bond** bondArray,
172     bond_pair* the_bonds );
173     void initializeBends( int nBends, Bend** bendArray,
174     bend_set* the_bends );
175     void initializeTorsions( int nTorsions, Torsion** torsionArray,
176     torsion_set* the_torsions );
177    
178     void initForceField( int ljMixRule );
179    
180     void calcRcut( void );
181     private:
182    
183     void fastForward( char* stopText, char* searchOwner );
184    
185     double eamRcut;
186     };
187    
188     class WATER : public ForceFields{
189    
190     public:
191     WATER();
192     virtual ~WATER();
193    
194     void readParams();
195     void cleanMe( void );
196     void initializeAtoms( int nAtoms, Atom** atomArray );
197     void initializeBonds( int nBonds, Bond** bondArray,
198     bond_pair* the_bonds );
199     void initializeBends( int nBends, Bend** bendArray,
200     bend_set* the_bends );
201     void initializeTorsions( int nTorsions, Torsion** torsionArray,
202     torsion_set* the_torsions );
203     void initForceField( int ljMixRule );
204    
205     private:
206    
207     void fastForward( char* stopText, char* searchOwner );
208     void sectionSearch( char* secHead, char* stopText, char* searchOwner );
209    
210     };
211    
212     #endif
213