Failure.h

Go to the documentation of this file.
00001 /* Ergo, version 3.2, a program for linear scaling electronic structure
00002  * calculations.
00003  * Copyright (C) 2012 Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek.
00004  * 
00005  * This program is free software: you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation, either version 3 of the License, or
00008  * (at your option) any later version.
00009  * 
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  * 
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00017  * 
00018  * Primary academic reference:
00019  * Kohn−Sham Density Functional Theory Electronic Structure Calculations 
00020  * with Linearly Scaling Computational Time and Memory Usage,
00021  * Elias Rudberg, Emanuel H. Rubensson, and Pawel Salek,
00022  * J. Chem. Theory Comput. 7, 340 (2011),
00023  * <http://dx.doi.org/10.1021/ct100611z>
00024  * 
00025  * For further information about Ergo, see <http://www.ergoscf.org>.
00026  */
00027 
00028 /* The Failure class is used for exception handling.                *
00029  * It inherits std::exception which means that an instance of this  *
00030  * class can be caught by catching std::exception&                  *
00031  * The "&" must be there, otherwise the failure message             *
00032  * will be "cut out".                                               *
00033  * Retrieve the message with a call to the member function "what()" *  
00034  *                                                                  *
00035  *                                                                  *
00036  *     \\\|||///  \    (C) Emanuel Rubensson, August, 2005          *
00037  *     \ ~   ~ /   \                                                *
00038  *     | @   @ |    \  mail:  emanuel@theochem.kth.se               *
00039  * oOo---(_)---oOo---\----------------------------------------------*
00040  *                                                                  */
00041 
00042 #ifndef FAILURE
00043 #define FAILURE
00044 #include <exception>
00045 namespace mat
00046 {
00047   class Failure : public std::exception {
00048       const char* message;
00049     public:
00050       Failure()
00051         :message("Failure: No failure information available")
00052         {}
00053       explicit Failure (const char* msg)
00054         :message(msg)
00055         {}
00056       virtual ~Failure() throw() {}
00057       virtual const char* what() const throw()
00058         {return message;}
00059   };
00060 
00061   class Acceptable : public Failure {
00062   public:
00063     Acceptable()
00064       :Failure("Acceptable: No acceptable failure information available")
00065       {}
00066     explicit Acceptable (const char* msg)
00067       :Failure(msg)
00068       {}
00069   };
00070   
00071   class AcceptableMaxIter : public Acceptable {
00072     int maxiter;
00073   public:
00074     AcceptableMaxIter()
00075       :Acceptable("AcceptableMaxIter: No acceptable failure information available"),
00076       maxiter(0)
00077       {}
00078     explicit AcceptableMaxIter (const char* msg, int maxi = 0)
00079       :Acceptable(msg), maxiter(maxi)
00080       {}
00081     int get_maxiter() const {
00082       return maxiter;
00083     }
00084   };
00085   
00086 } /* end namespace */
00087 #endif

Generated on Wed Nov 21 09:32:01 2012 for ergo by  doxygen 1.4.7