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.potential.utils; 39 40 import java.io.Serial; 41 42 /** 43 * This Exception class indicates an error in calculating energy or gradients. Expected behavior is 44 * that it will be caught by Potential.energy(), resulting in any necessary cleanup. Then, if the 45 * causeSevere flag is set true, ForceFieldEnergy will issue a <code>logger.severe</code> (resulting 46 * in exit). Otherwise, ForceFieldEnergy will simply rethrow the exception. The default is to rethrow 47 * the exception. 48 * 49 * @author Jacob Litman 50 * @author Michael J. Schnieders 51 * @since 1.0 52 */ 53 public class EnergyException extends ArithmeticException { 54 55 @Serial 56 private static final long serialVersionUID = 1L; 57 58 private final double energy; 59 private final boolean causeSevere; 60 61 /** Constructor for EnergyException. */ 62 public EnergyException() { 63 super(); 64 causeSevere = false; 65 energy = Double.NaN; 66 } 67 68 /** 69 * Constructor for EnergyException. 70 * 71 * @param str a {@link java.lang.String} object. 72 */ 73 public EnergyException(String str) { 74 super(str); 75 causeSevere = false; 76 energy = Double.NaN; 77 } 78 79 /** 80 * Constructor for EnergyException. 81 * 82 * @param str a {@link java.lang.String} object. 83 * @param causeSevere a boolean. 84 */ 85 public EnergyException(String str, boolean causeSevere) { 86 super(str); 87 this.causeSevere = causeSevere; 88 energy = Double.NaN; 89 } 90 91 /** 92 * Constructor for EnergyException. 93 * 94 * @param str a {@link java.lang.String} object. 95 * @param causeSevere a boolean. 96 */ 97 public EnergyException(String str, boolean causeSevere, double energy) { 98 super(str); 99 this.causeSevere = causeSevere; 100 this.energy = energy; 101 } 102 103 /** 104 * Return the reported Energy. 105 * 106 * @return Energy. 107 */ 108 public double getEnergy() { 109 return energy; 110 } 111 112 /** 113 * doCauseSevere. 114 * 115 * @return a boolean. 116 */ 117 public boolean doCauseSevere() { 118 return causeSevere; 119 } 120 }