OpenMMBrookInterface.h 11.6 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
#ifndef OPENMM_BROOK_INTERFACE_H_
#define OPENMM_BROOK_INTERFACE_H_

/* -------------------------------------------------------------------------- *
 *                                   OpenMM                                   *
 * -------------------------------------------------------------------------- *
 * This is part of the OpenMM molecular simulation toolkit originating from   *
 * Simbios, the NIH National Center for Physics-Based Simulation of           *
 * Biological Structures at Stanford, funded under the NIH Roadmap for        *
 * Medical Research, grant U54 GM072970. See https://simtk.org.               *
 *                                                                            *
12
13
 * Portions copyright (c) 2009 Stanford University and the Authors.           *
 * Authors: Mark Friedrichs, Mike Houston                                     *
14
15
 * Contributors:                                                              *
 *                                                                            *
16
17
18
19
 * This program is free software: you can redistribute it and/or modify       *
 * it under the terms of the GNU Lesser General Public License as published   *
 * by the Free Software Foundation, either version 3 of the License, or       *
 * (at your option) any later version.                                        *
20
 *                                                                            *
21
22
23
24
 * This program is distributed in the hope that it will be useful,            *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
 * GNU Lesser General Public License for more details.                        *
25
 *                                                                            *
26
27
 * You should have received a copy of the GNU Lesser General Public License   *
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.      *
28
29
 * -------------------------------------------------------------------------- */

30
#include "openmm/kernels.h"
31
#include "../../reference/src/SimTKUtilities/SimTKOpenMMRealType.h"
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
32
#include "BrookBondParameters.h"
33
34
#include "BrookBonded.h"
#include "BrookNonBonded.h"
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
35
#include "BrookGbsa.h"
36
37
38
#include "openmm/NonbondedForce.h"
#include "openmm/OpenMMContext.h"
#include "openmm/System.h"
39
40
41
42
43
44
45
46
47
48

namespace OpenMM {

/**
 * OpenMM-Brook interface methods
 */
class OpenMMBrookInterface {

   public:
  
49
      OpenMMBrookInterface( int streamWidth, int duplicationFactor );
50
51
52
53
54
55
  
      ~OpenMMBrookInterface();
  
      /**
       * Get reference Context
       * 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
56
       * @param numberOfParticles  number of particles
57
58
59
60
61
       *
       * @return  OpenMMContext
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
62
      OpenMMContext* getReferenceOpenMMContext( int numberOfParticles );
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
      
      /** 
       * Set log file reference
       * 
       * @param  log file reference
       *
       * @return DefaultReturnValue
       *
       */
      
      int setLog( FILE* log );

      /* 
       * Get contents of object
       *
       * @param level of dump
       *
       * @return string containing contents
       *
       * */
      
      std::string getContents( int level ) const;

Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
86
87
88
89
90
91
92
93
94
      /** 
       * Get number of particles
       * 
       * @return   number of particles
       *
       */
      
      int getNumberOfParticles( void ) const;
      
Mark Friedrichs's avatar
Mark Friedrichs committed
95
96
97
98
99
100
101
102
103
104
105
      /** 
       * Set number of particles
       * 
       * @param numberOfParticles number of particles
       *
       * @return DefaultReturnValue
       *
       */
      
      int setNumberOfParticles( int numberOfParticles );
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
      /** 
       * Get particle stream width
       * 
       * @return    particle stream width
       *
       */
      
      int getParticleStreamWidth( void ) const;
      
      /** 
       * Get particle stream size
       * 
       * @return    particle stream size
       *
       */
      
      int getParticleStreamSize( void ) const;
      
124
125
126
127
128
129
130
131
132
      /** 
       * Get log file reference
       * 
       * @return  log file reference
       *
       */
      
      FILE* getLog( void ) const;
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
133
134
135
136
137
138
139
140
141
      /** 
       * Zero forces
       *
       * @param context OpenMMContextImpl context 
       *
       */
      
      void zeroForces( OpenMMContextImpl& context );
      
142
143
144
145
146
147
148
149
150
151
152
153
154
      /** 
       * Compute forces
       *
       * @param context OpenMMContextImpl context 
       *
       */
      
      void computeForces( OpenMMContextImpl& context );
      
      /** 
       * Compute energy
       *
       * @param context OpenMMContextImpl context 
Mark Friedrichs's avatar
Mark Friedrichs committed
155
156
157
       * @param system  system reference
       *
       * @return potential energy
158
159
160
       *
       */
      
Mark Friedrichs's avatar
Mark Friedrichs committed
161
      double computeEnergy( OpenMMContextImpl& context, System& system );
162
163
164
165
166
167
168
169
      
      /** 
       * Set trigger Force Kernel
       *
       * @param triggerForceKernel kernel to calculate force
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
170
      void setTriggerForceKernel( void* triggerForceKernel );
171
172
      
      /** 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
173
       * Get trigger Force Kernel
174
       *
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
175
       * @return triggerForceKernel kernel to calculate force
176
177
178
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
179
      void* getTriggerForceKernel( void ) const;
180
181
      
      /** 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
182
       * Set trigger Energy Kernel
183
       *
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
184
       * @param triggerEnergyKernel kernel to calculate force
185
186
187
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
188
      void setTriggerEnergyKernel( void* triggerEnergyKernel );
189
190
191
192
      
      /** 
       * Get trigger Energy Kernel
       *
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
193
       * @return triggerEnergyKernel kernel to calculate force
194
195
196
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
197
      void* getTriggerEnergyKernel( void ) const;
198
      
Mark Friedrichs's avatar
Mark Friedrichs committed
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
      /** 
       * Get BrookNonBonded reference
       * 
       * @return BrookNonBonded reference
       *
       */
      
      BrookNonBonded& getBrookNonBonded( void );
      
      /** 
       * Get BrookGbsa reference
       * 
       * @return BrookGbsa reference
       *
       */
      
      BrookGbsa& getBrookGbsa( void );
      
217
      /** 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
218
       * Get BrookBondParameters for harmonic bond force
219
       * 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
220
221
222
223
       * @return brookBondParameters for BrookBondParameters for harmonic bond force
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
224
      BrookBondParameters* getHarmonicBondForceParameters( void ) const;
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
225
226
227
228
229
      
      /** 
       * Set BrookBondParameters for harmonic bond force
       * 
       * @param brookBondParameters BrookBondParameters for harmonic bond force
230
231
232
233
234
235
236
       *
       * @return DefaultReturnValue
       *
       */
      
      int setHarmonicBondForceParameters( BrookBondParameters* brookBondParameters );
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
237
238
239
240
241
242
243
      /** 
       * Get BrookBondParameters for harmonic angle force
       * 
       * @return brookBondParameters for BrookBondParameters for harmonic angle force
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
244
      BrookBondParameters* getHarmonicAngleForceParameters( void ) const;
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
245
      
246
247
248
249
250
251
252
253
254
255
256
257
      /** 
       * Set BrookBondParameters for harmonic angle force
       * 
       * @param brookBondParameters brookBondParameters for BrookBondParameters for harmonic angle force
       *
       * @return DefaultReturnValue
       *
       */
      
      int setHarmonicAngleForceParameters( BrookBondParameters* brookBondParameters );
      
      /** 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
258
259
260
261
262
263
       * Get BrookBondParameters for periodic torsion force
       * 
       * @return brookBondParameters for BrookBondParameters for periodic torsion force
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
264
      BrookBondParameters* getPeriodicTorsionForceParameters( void ) const;
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
265
266
267

      /** 
       * Set BrookBondParameters for periodic torsion force
268
       * 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
269
       * @param brookBondParameters for periodic torsion force
270
271
272
273
274
275
276
277
       *
       * @return  DefaultReturnValue
       *
       */
      
      int setPeriodicTorsionForceParameters( BrookBondParameters* brookBondParameters );
      
      /** 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
278
       * Get BrookBondParameters for RB torsion force
279
       * 
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
280
281
282
283
       * @return brookBondParameters for BrookBondParameters for RB torsion force
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
284
      BrookBondParameters* getRBTorsionForceParameters( void ) const;
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
285
286
287
288
289

      /** 
       * Set BrookBondParameters for RB torsion force
       * 
       * @param brookBondParameters brookBondParameters for RB torsion force
290
291
292
293
294
295
296
       *
       * @return  DefaultReturnValue
       *
       */
      
      int setRBTorsionForceParameters( BrookBondParameters* brookBondParameters );
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
297
298
299
300
301
302
303
      /** 
       * Get BrookBondParameters for LJ 14 forces
       * 
       * @return brookBondParameters for BrookBondParameters for LJ 14 forces
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
304
      BrookBondParameters* getNonBonded14ForceParameters( void ) const;
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
305

306
307
308
309
310
311
312
313
314
      /** 
       * Set BrookBondParameters for LJ 14 force
       * 
       * @param brookBondParameters brookBondParameters for LJ 14 force
       *
       * @return  DefaultReturnValue
       *
       */
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
315
      int setNonBonded14ForceParameters( BrookBondParameters* brookBondParameters );
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
316
317
318
319
320
321
322
323
324
      
      /** 
       * Get positions stream
       * 
       * @return particle positions 
       *
       */
         
      BrookStreamImpl* getParticlePositions( void );
325
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
      /** 
       * Set positions stream
       * 
       * @param positions Brook stream containing particle positions
       *
       * @return  DefaultReturnValue
       *
       */
      
      int setParticlePositions( BrookStreamImpl* positions );
      
      /** 
       * Get velocities stream
       * 
       * @return particle velocities
       *
       */
             
      BrookStreamImpl* getParticleVelocities( void );
       
      /** 
       * Set velocities stream
       * 
       * @param velocities Brook stream containing particle velocities
       *
       * @return  DefaultReturnValue
       *
       */
      
      int setParticleVelocities( BrookStreamImpl* velocities );
      
      /** 
       * Get forces stream
       * 
       * @return ParticleForces
       *
       */
             
      BrookStreamImpl* getParticleForces( void );

      /** 
       * Set forces stream
       * 
       * @param forces Brook stream containing particle forces
       *
       * @return  DefaultReturnValue
       *
       */
      
      int setParticleForces( BrookStreamImpl* forces );

Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
377
378
379
380
381
382
383
384
385
      /** 
       * Print forces to file 
       * 
       * @param context     context
       *
       */
      
      void printForcesToFile( OpenMMContextImpl& context );
      
386
387
   private:
   
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
388
389
390
      static const int DefaultReturnValue = 0;
      static const int ErrorReturnValue   = -1;

391
392
393
394
395
396
      enum BondParameterIndices { HarmonicBondIndex, HarmonicAngleIndex, PeriodicTorsionForceIndex, RbTorsionForceIndex, LJ14Index, LastBondForce };

      // log file reference

      FILE* _log;

Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
397
398
399
      int _particleStreamWidth;
      int _particleStreamSize;

Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
400
       // number of particles
401

Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
402
       int _numberOfParticles;
403
   
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
404
       // Brook bonded, nonbonded, Gbsa
405

Mark Friedrichs's avatar
Mark Friedrichs committed
406
407
408
       BrookBonded     _brookBonded;
       BrookNonBonded  _brookNonBonded;
       BrookGbsa       _brookGbsa;
409

Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
410
411
412
       void* _triggerForceKernel;
       void* _triggerEnergyKernel;

413
414
       BrookBondParameters* _bondParameters[LastBondForce];

Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
415
416
417
418
419
420
       // context-related fields

       BrookStreamImpl* _positions;
       BrookStreamImpl* _velocities;
       BrookStreamImpl* _forces;

421
422
423
424
425
426
427
428
429
430
431
432
      /** 
       * Set BrookBondParameters 
       * 
       * @param index
       * @param brookBondParameters brookBondParameters for BrookBondParameters
       *
       * @return DefaultReturnValue
       *
       */
      
      int _setBondParameters( BondParameterIndices index, BrookBondParameters* brookBondParameters );
      
Mark Friedrichs's avatar
Mods  
Mark Friedrichs committed
433
434
435
436
437
438
439
440
441
442
443
      /** 
       * Get BrookBondParameters at specified index
       * 
       * @param   index
       *
       * @return  BrookBondParameters* object
       *
       */
      
      BrookBondParameters* _getBondParameters( BondParameterIndices index ) const;
      
444
445
446
447
448
};

} // namespace OpenMM

#endif /* OPENMM_BROOK_INTERFACE_H_ */