1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package ffx.openmm.amoeba;
39
40 import com.sun.jna.ptr.DoubleByReference;
41 import com.sun.jna.ptr.IntByReference;
42 import com.sun.jna.ptr.PointerByReference;
43 import ffx.openmm.Context;
44 import ffx.openmm.DoubleArray;
45 import ffx.openmm.Force;
46 import ffx.openmm.IntArray;
47
48 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_addMultipole;
49 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_create;
50 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_destroy;
51 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getAEwald;
52 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getCovalentMap;
53 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getCovalentMaps;
54 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getCutoffDistance;
55 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getElectrostaticPotential;
56 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getEwaldErrorTolerance;
57 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getExtrapolationCoefficients;
58 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getInducedDipoles;
59 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getLabFramePermanentDipoles;
60 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getMultipoleParameters;
61 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getMutualInducedMaxIterations;
62 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getMutualInducedTargetEpsilon;
63 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getNonbondedMethod;
64 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getNumMultipoles;
65 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getPMEParameters;
66 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getPMEParametersInContext;
67 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getPmeBSplineOrder;
68 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getPmeGridDimensions;
69 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getPolarizationType;
70 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getSystemMultipoleMoments;
71 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_getTotalDipoles;
72 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setAEwald;
73 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setCovalentMap;
74 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setCutoffDistance;
75 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setEwaldErrorTolerance;
76 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setExtrapolationCoefficients;
77 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setMultipoleParameters;
78 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setMutualInducedMaxIterations;
79 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setMutualInducedTargetEpsilon;
80 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setNonbondedMethod;
81 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setPMEParameters;
82 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setPmeGridDimensions;
83 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_setPolarizationType;
84 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_updateParametersInContext;
85 import static edu.uiowa.jopenmm.OpenMMAmoebaLibrary.OpenMM_AmoebaMultipoleForce_usesPeriodicBoundaryConditions;
86 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_Boolean.OpenMM_True;
87
88
89
90
91
92
93
94
95 public class MultipoleForce extends Force {
96
97 public MultipoleForce() {
98 super(OpenMM_AmoebaMultipoleForce_create());
99 }
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116 public int addMultipole(double charge, DoubleArray molecularDipole, DoubleArray molecularQuadrupole, int axisType,
117 int multipoleAtomZ, int multipoleAtomX, int multipoleAtomY, double thole, double dampingFactor, double polarity) {
118 return OpenMM_AmoebaMultipoleForce_addMultipole(pointer, charge, molecularDipole.getPointer(), molecularQuadrupole.getPointer(),
119 axisType, multipoleAtomZ, multipoleAtomX, multipoleAtomY, thole, dampingFactor, polarity);
120 }
121
122
123
124
125 @Override
126 public void destroy() {
127 if (pointer != null) {
128 OpenMM_AmoebaMultipoleForce_destroy(pointer);
129 pointer = null;
130 }
131 }
132
133
134
135
136
137
138
139
140 @Deprecated
141 public double getAEwald() {
142 return OpenMM_AmoebaMultipoleForce_getAEwald(pointer);
143 }
144
145
146
147
148
149
150
151
152 public IntArray getCovalentMap(int i, int covalentType) {
153 IntArray covalentMap = new IntArray(0);
154 if (pointer != null) {
155 OpenMM_AmoebaMultipoleForce_getCovalentMap(pointer, i, covalentType, covalentMap.getPointer());
156 }
157 return covalentMap;
158 }
159
160
161
162
163
164
165
166 public IntArray getCovalentMaps(int i) {
167 IntArray covalentMaps = new IntArray(0);
168 if (pointer != null) {
169 OpenMM_AmoebaMultipoleForce_getCovalentMaps(pointer, i, covalentMaps.getPointer());
170 }
171 return covalentMaps;
172 }
173
174
175
176
177
178
179
180 public double getCutoffDistance() {
181 return OpenMM_AmoebaMultipoleForce_getCutoffDistance(pointer);
182 }
183
184
185
186
187
188
189
190
191 public DoubleArray getElectrostaticPotential(Context context, DoubleArray points) {
192 DoubleArray potential = new DoubleArray(0);
193 if (context.hasContextPointer() && pointer != null) {
194 OpenMM_AmoebaMultipoleForce_getElectrostaticPotential(pointer, context.getPointer(),
195 points.getPointer(), potential.getPointer());
196 }
197 return potential;
198 }
199
200
201
202
203
204
205
206
207
208 public double getEwaldErrorTolerance() {
209 return OpenMM_AmoebaMultipoleForce_getEwaldErrorTolerance(pointer);
210 }
211
212
213
214
215
216
217 public PointerByReference getExtrapolationCoefficients() {
218 return OpenMM_AmoebaMultipoleForce_getExtrapolationCoefficients(pointer);
219 }
220
221
222
223
224
225
226
227 public void getInducedDipoles(Context context, DoubleArray inducedDipoles) {
228 if (context.hasContextPointer() && pointer != null) {
229 OpenMM_AmoebaMultipoleForce_getInducedDipoles(pointer, context.getPointer(), inducedDipoles.getPointer());
230 }
231 }
232
233
234
235
236
237
238
239 public void getLabFramePermanentDipoles(Context context, DoubleArray dipoles) {
240 if (context.hasContextPointer() && pointer != null) {
241 OpenMM_AmoebaMultipoleForce_getLabFramePermanentDipoles(pointer, context.getPointer(), dipoles.getPointer());
242 }
243 }
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260 public void getMultipoleParameters(int index, DoubleByReference charge, PointerByReference molecularDipole,
261 PointerByReference molecularQuadrupole, IntByReference axisType,
262 IntByReference multipoleAtomZ, IntByReference multipoleAtomX, IntByReference multipoleAtomY,
263 DoubleByReference thole, DoubleByReference dampingFactor,
264 DoubleByReference polarity) {
265 OpenMM_AmoebaMultipoleForce_getMultipoleParameters(pointer, index, charge, molecularDipole, molecularQuadrupole,
266 axisType, multipoleAtomZ, multipoleAtomX, multipoleAtomY, thole, dampingFactor, polarity);
267 }
268
269
270
271
272
273
274 public int getMutualInducedMaxIterations() {
275 return OpenMM_AmoebaMultipoleForce_getMutualInducedMaxIterations(pointer);
276 }
277
278
279
280
281
282
283 public double getMutualInducedTargetEpsilon() {
284 return OpenMM_AmoebaMultipoleForce_getMutualInducedTargetEpsilon(pointer);
285 }
286
287
288
289
290
291
292 public int getNonbondedMethod() {
293 return OpenMM_AmoebaMultipoleForce_getNonbondedMethod(pointer);
294 }
295
296
297
298
299
300
301 public int getNumMultipoles() {
302 return OpenMM_AmoebaMultipoleForce_getNumMultipoles(pointer);
303 }
304
305
306
307
308
309
310
311
312
313
314 public void getPMEParameters(DoubleByReference alpha, IntByReference nx, IntByReference ny, IntByReference nz) {
315 OpenMM_AmoebaMultipoleForce_getPMEParameters(pointer, alpha, nx, ny, nz);
316 }
317
318
319
320
321
322
323
324
325
326
327 public void getPMEParametersInContext(Context context, DoubleByReference alpha,
328 IntByReference nx, IntByReference ny, IntByReference nz) {
329 if (context.hasContextPointer() && pointer != null) {
330 OpenMM_AmoebaMultipoleForce_getPMEParametersInContext(pointer, context.getPointer(), alpha, nx, ny, nz);
331 }
332 }
333
334
335
336
337
338
339 public IntArray getPmeGridDimensions() {
340 IntArray gridDimensions = new IntArray(0);
341 if (pointer != null) {
342 OpenMM_AmoebaMultipoleForce_getPmeGridDimensions(pointer, gridDimensions.getPointer());
343 }
344 return gridDimensions;
345 }
346
347
348
349
350
351
352 public int getPmeBSplineOrder() {
353 return OpenMM_AmoebaMultipoleForce_getPmeBSplineOrder(pointer);
354 }
355
356
357
358
359
360
361 public int getPolarizationType() {
362 return OpenMM_AmoebaMultipoleForce_getPolarizationType(pointer);
363 }
364
365
366
367
368
369
370
371 public void getSystemMultipoleMoments(Context context, DoubleArray moments) {
372 if (context.hasContextPointer() && pointer != null) {
373 OpenMM_AmoebaMultipoleForce_getSystemMultipoleMoments(pointer, context.getPointer(), moments.getPointer());
374 }
375 }
376
377
378
379
380
381
382
383 public void getTotalDipoles(Context context, DoubleArray dipoles) {
384 if (context.hasContextPointer() && pointer != null) {
385 OpenMM_AmoebaMultipoleForce_getTotalDipoles(pointer, context.getPointer(), dipoles.getPointer());
386 }
387 }
388
389
390
391
392
393
394
395
396 @Deprecated
397 public void setAEwald(double aewald) {
398 OpenMM_AmoebaMultipoleForce_setAEwald(pointer, aewald);
399 }
400
401
402
403
404
405
406
407
408 public void setCovalentMap(int i, int covalentType, IntArray covalentMap) {
409 OpenMM_AmoebaMultipoleForce_setCovalentMap(pointer, i, covalentType, covalentMap.getPointer());
410 }
411
412
413
414
415
416
417
418 public void setCutoffDistance(double cutoff) {
419 OpenMM_AmoebaMultipoleForce_setCutoffDistance(pointer, cutoff);
420 }
421
422
423
424
425
426
427
428
429
430
431
432 public void setEwaldErrorTolerance(double ewaldTolerance) {
433 OpenMM_AmoebaMultipoleForce_setEwaldErrorTolerance(pointer, ewaldTolerance);
434 }
435
436
437
438
439
440
441 public void setExtrapolationCoefficients(DoubleArray exptCoefficients) {
442 OpenMM_AmoebaMultipoleForce_setExtrapolationCoefficients(pointer, exptCoefficients.getPointer());
443 }
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460 public void setMultipoleParameters(int index, double charge, DoubleArray molecularDipole, DoubleArray molecularQuadrupole,
461 int axisType, int multipoleAtomZ, int multipoleAtomX, int multipoleAtomY,
462 double thole, double dampingFactor, double polarity) {
463 OpenMM_AmoebaMultipoleForce_setMultipoleParameters(pointer, index, charge,
464 molecularDipole.getPointer(), molecularQuadrupole.getPointer(), axisType, multipoleAtomZ, multipoleAtomX, multipoleAtomY, thole, dampingFactor, polarity);
465 }
466
467
468
469
470
471
472 public void setMutualInducedMaxIterations(int iterations) {
473 OpenMM_AmoebaMultipoleForce_setMutualInducedMaxIterations(pointer, iterations);
474 }
475
476
477
478
479
480
481 public void setMutualInducedTargetEpsilon(double epsilon) {
482 OpenMM_AmoebaMultipoleForce_setMutualInducedTargetEpsilon(pointer, epsilon);
483 }
484
485
486
487
488
489
490 public void setNonbondedMethod(int method) {
491 OpenMM_AmoebaMultipoleForce_setNonbondedMethod(pointer, method);
492 }
493
494
495
496
497
498
499
500
501
502
503 public void setPMEParameters(double alpha, int nx, int ny, int nz) {
504 OpenMM_AmoebaMultipoleForce_setPMEParameters(pointer, alpha, nx, ny, nz);
505 }
506
507
508
509
510
511
512 public void setPmeGridDimensions(IntArray gridDimensions) {
513 OpenMM_AmoebaMultipoleForce_setPmeGridDimensions(pointer, gridDimensions.getPointer());
514 }
515
516
517
518
519
520
521 public void setPolarizationType(int method) {
522 OpenMM_AmoebaMultipoleForce_setPolarizationType(pointer, method);
523 }
524
525
526
527
528
529
530 public void updateParametersInContext(Context context) {
531 if (context.hasContextPointer()) {
532 OpenMM_AmoebaMultipoleForce_updateParametersInContext(pointer, context.getPointer());
533 }
534 }
535
536
537
538
539
540
541 @Override
542 public boolean usesPeriodicBoundaryConditions() {
543 int pbc = OpenMM_AmoebaMultipoleForce_usesPeriodicBoundaryConditions(pointer);
544 return pbc == OpenMM_True;
545 }
546 }