ESYS13
Revision_
|
00001 00002 /******************************************************* 00003 * 00004 * Copyright (c) 2003-2012 by University of Queensland 00005 * Earth Systems Science Computational Center (ESSCC) 00006 * http://www.uq.edu.au/esscc 00007 * 00008 * Primary Business: Queensland, Australia 00009 * Licensed under the Open Software License version 3.0 00010 * http://www.opensource.org/licenses/osl-3.0.php 00011 * 00012 *******************************************************/ 00013 00014 #ifndef escript_EscriptParams_H 00015 #define escript_EscriptParams_H 00016 #include "system_dep.h" 00017 #include <boost/python/list.hpp> 00018 #include "Data.h" // for the operators 00019 00020 namespace escript 00021 { 00022 00023 class Data; 00024 class DataLazy; 00025 00026 class EscriptParams 00027 { 00028 public: 00029 ESCRIPT_DLL_API 00030 EscriptParams(); 00031 00032 ESCRIPT_DLL_API 00033 int getInt(const char* name, int sentinel=0) const; 00034 00035 ESCRIPT_DLL_API 00036 void setInt(const char* name, int value); 00037 00038 boost::python::list 00039 listEscriptParams(); 00040 00041 private: 00042 00043 // If we get more params we can replace this with a map 00044 int too_many_lines; 00045 int autolazy; 00046 int too_many_levels; 00047 // int too_many_nodes; 00048 int resolve_collective; 00049 int lazy_str_fmt; 00050 int lapack_support; 00051 int lazy_verbose; 00052 int amg_disabled; 00053 00054 protected: 00055 // This is to provide fast access for methods in Data. 00056 // Its a little bit ugly, needing all those friends but I really want to 00057 // limit outside access to the char* interface 00058 00059 int getTOO_MANY_LINES() {return too_many_lines;} 00060 int getAUTOLAZY() { return autolazy;} 00061 int getTOO_MANY_LEVELS() {return too_many_levels;} 00062 // int getTOO_MANY_NODES() {return too_many_nodes;} 00063 int getRESOLVE_COLLECTIVE() {return resolve_collective;} 00064 int getLAZY_STR_FMT() {return lazy_str_fmt;} 00065 int getLAZY_VERBOSE() {return lazy_verbose;} 00066 00067 friend class escript::Data; 00068 friend class escript::DataLazy; 00069 friend Data operator+(const boost::python::api::object&, const escript::Data&); 00070 friend Data operator-(const boost::python::api::object&, const escript::Data&); 00071 friend Data operator*(const boost::python::api::object&, const escript::Data&); 00072 friend Data operator/(const boost::python::api::object&, const escript::Data&); 00073 friend Data operator+(const escript::Data&, const escript::Data&); 00074 friend Data operator-(const escript::Data&, const escript::Data&); 00075 friend Data operator*(const escript::Data&, const escript::Data&); 00076 friend Data operator/(const escript::Data&, const escript::Data&); 00077 friend Data operator+(const escript::Data&, const boost::python::api::object&); 00078 friend Data operator-(const escript::Data&, const boost::python::api::object&); 00079 friend Data operator*(const escript::Data&, const boost::python::api::object&); 00080 friend Data operator/(const escript::Data&, const boost::python::api::object&); 00081 friend Data C_GeneralTensorProduct(escript::Data& arg_0, escript::Data& arg_1, 00082 int axis_offset, int transpose); 00083 friend Data condEval(escript::Data& mask, escript::Data& trueval, escript::Data& falseval); 00084 }; 00085 00086 00087 extern EscriptParams escriptParams; 00088 00093 ESCRIPT_DLL_API 00094 void setEscriptParamInt(const char* name, int value); 00095 00100 ESCRIPT_DLL_API 00101 int getEscriptParamInt(const char* name, int sentinel=0); 00102 00107 ESCRIPT_DLL_API 00108 inline boost::python::list listEscriptParams() 00109 { 00110 return escriptParams.listEscriptParams(); 00111 } 00112 00113 00114 00115 } 00116 #endif