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