1 // ****************************************************************************** 2 // 3 // Title: Force Field X. 4 // Description: Force Field X - Software for Molecular Biophysics. 5 // Copyright: Copyright (c) Michael J. Schnieders 2001-2025. 6 // 7 // This file is part of Force Field X. 8 // 9 // Force Field X is free software; you can redistribute it and/or modify it 10 // under the terms of the GNU General Public License version 3 as published by 11 // the Free Software Foundation. 12 // 13 // Force Field X is distributed in the hope that it will be useful, but WITHOUT 14 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 15 // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 16 // details. 17 // 18 // You should have received a copy of the GNU General Public License along with 19 // Force Field X; if not, write to the Free Software Foundation, Inc., 59 Temple 20 // Place, Suite 330, Boston, MA 02111-1307 USA 21 // 22 // Linking this library statically or dynamically with other modules is making a 23 // combined work based on this library. Thus, the terms and conditions of the 24 // GNU General Public License cover the whole combination. 25 // 26 // As a special exception, the copyright holders of this library give you 27 // permission to link this library with independent modules to produce an 28 // executable, regardless of the license terms of these independent modules, and 29 // to copy and distribute the resulting executable under terms of your choice, 30 // provided that you also meet, for each linked independent module, the terms 31 // and conditions of the license of that module. An independent module is a 32 // module which is not derived from or based on this library. If you modify this 33 // library, you may extend this exception to your version of the library, but 34 // you are not obligated to do so. If you do not wish to do so, delete this 35 // exception statement from your version. 36 // 37 // ****************************************************************************** 38 package ffx.openmm; 39 40 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_addComputedValue; 41 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_addEnergyTerm; 42 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_addGlobalParameter; 43 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_addParticle; 44 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_addPerParticleParameter; 45 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_create; 46 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_destroy; 47 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_setCutoffDistance; 48 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_setParticleParameters; 49 import static edu.uiowa.jopenmm.OpenMMLibrary.OpenMM_CustomGBForce_updateParametersInContext; 50 51 /** 52 * Custom GB Force. 53 */ 54 public class CustomGBForce extends Force { 55 56 /** 57 * OpenMM CustomGBForce constructor. 58 */ 59 public CustomGBForce() { 60 pointer = OpenMM_CustomGBForce_create(); 61 } 62 63 /** 64 * Add per particle parameter. 65 * 66 * @param name The name of the parameter. 67 */ 68 public void addPerParticleParameter(String name) { 69 OpenMM_CustomGBForce_addPerParticleParameter(pointer, name); 70 } 71 72 /** 73 * Add a global parameter. 74 * 75 * @param name The parameter name. 76 * @param value The parameter value. 77 */ 78 public void addGlobalParameter(String name, double value) { 79 OpenMM_CustomGBForce_addGlobalParameter(pointer, name, value); 80 } 81 82 /** 83 * Add a computed value. 84 * 85 * @param name The computed value name. 86 * @param expression The computed value expression. 87 * @param type The computed value type. 88 */ 89 public void addComputedValue(String name, String expression, int type) { 90 OpenMM_CustomGBForce_addComputedValue(pointer, name, expression, type); 91 } 92 93 /** 94 * Add an energy term. 95 * 96 * @param expression The energy term expression. 97 * @param type The energy term type. 98 */ 99 public void addEnergyTerm(String expression, int type) { 100 OpenMM_CustomGBForce_addEnergyTerm(pointer, expression, type); 101 } 102 103 /** 104 * Add a particle to the force. 105 * 106 * @param particleParameters The particle parameters. 107 */ 108 public void addParticle(DoubleArray particleParameters) { 109 OpenMM_CustomGBForce_addParticle(pointer, particleParameters.getPointer()); 110 } 111 112 /** 113 * Set the particle parameters. 114 * 115 * @param index The particle index. 116 * @param particleParameters The particle parameters. 117 */ 118 public void setParticleParameters(int index, DoubleArray particleParameters) { 119 OpenMM_CustomGBForce_setParticleParameters(pointer, index, particleParameters.getPointer()); 120 } 121 122 /** 123 * Set the cutoff distance. 124 * 125 * @param off The cutoff distance. 126 */ 127 public void setCutoffDistance(double off) { 128 OpenMM_CustomGBForce_setCutoffDistance(pointer, off); 129 } 130 131 /** 132 * Update the parameters in the context. 133 * 134 * @param context The context. 135 */ 136 public void updateParametersInContext(Context context) { 137 if (context.hasContextPointer()) { 138 OpenMM_CustomGBForce_updateParametersInContext(pointer, context.getPointer()); 139 } 140 } 141 142 /** 143 * Destroy the force. 144 */ 145 public void destroy() { 146 if (pointer != null) { 147 OpenMM_CustomGBForce_destroy(pointer); 148 pointer = null; 149 } 150 } 151 152 }