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

# Content
1 #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