00001 /* @HEADER@ */ 00002 // ************************************************************************ 00003 // 00004 // Sundance 00005 // Copyright (2005) Sandia Corporation 00006 // 00007 // Copyright (year first published) Sandia Corporation. Under the terms 00008 // of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government 00009 // retains certain rights in this software. 00010 // 00011 // This library is free software; you can redistribute it and/or modify 00012 // it under the terms of the GNU Lesser General Public License as 00013 // published by the Free Software Foundation; either version 2.1 of the 00014 // License, or (at your option) any later version. 00015 // 00016 // This library is distributed in the hope that it will be useful, but 00017 // WITHOUT ANY WARRANTY; without even the implied warranty of 00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00019 // Lesser General Public License for more details. 00020 // 00021 // You should have received a copy of the GNU Lesser General Public 00022 // License along with this library; if not, write to the Free Software 00023 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00024 // USA 00025 // Questions? Contact Kevin Long (krlong@sandia.gov), 00026 // Sandia National Laboratories, Livermore, California, USA 00027 // 00028 // ************************************************************************ 00029 /* @HEADER@ */ 00030 00031 #ifndef SUNDANCE_WATCHFLAG_H 00032 #define SUNDANCE_WATCHFLAG_H 00033 00034 #include "SundanceDefs.hpp" 00035 #include "SundanceMap.hpp" 00036 #include "Teuchos_XMLObject.hpp" 00037 #include "Teuchos_ParameterList.hpp" 00038 #include <string> 00039 00040 00041 00042 namespace Sundance 00043 { 00044 using Teuchos::ParameterList; 00045 /** 00046 * Class WatchFlag is used to tag individual expressions for 00047 * increased verbosity in certain tasks. The tasks that can be marked 00048 * are listed below. Verbosity values are integers, with 0 being silent, 00049 * and typically 5 being excruciatingly detailed. 00050 * 00051 <ul> 00052 <li> evaluation 00053 <li> evaluator setup 00054 <li> discrete function evaluation 00055 <li> symbolic preprocessing 00056 <li> equation set setup 00057 <li> assembler setup 00058 <li> assembly loop 00059 <li> dof map setup 00060 <li> dof map access 00061 <li> eval mediator 00062 <li> integration 00063 <li> integral transformation 00064 <li> fill 00065 <li> matrix config 00066 <li> vector config 00067 <li> solve control 00068 </ul> 00069 * The verbosity level for a task is set using the setParam() function. 00070 * The watch can be turned on or off collectively with the deactivate function. 00071 */ 00072 class WatchFlag 00073 { 00074 public: 00075 /** */ 00076 WatchFlag(const std::string& name="", 00077 const ParameterList& params = *defaultParams()); 00078 00079 /** */ 00080 const std::string& name() const {return name_;} 00081 00082 /** */ 00083 void activate() ; 00084 00085 /** */ 00086 void deactivate() ; 00087 00088 /** */ 00089 bool isActive() const ; 00090 00091 /** */ 00092 bool operator<(const WatchFlag& other) const 00093 {return name() < other.name();} 00094 00095 /** */ 00096 XMLObject toXML() const ; 00097 00098 /** */ 00099 int param(const std::string& name) const ; 00100 00101 /** */ 00102 void setParam(const std::string& name, int val); 00103 00104 /** */ 00105 static RCP<ParameterList> defaultParams(); 00106 00107 00108 private: 00109 std::string name_; 00110 00111 RCP<ParameterList> params_; 00112 00113 static Map<std::string, bool>& isActiveMap() 00114 { 00115 static Map<std::string, bool> rtn; 00116 return rtn; 00117 } 00118 00119 }; 00120 } 00121 00122 #endif