ESYS13  Revision_
EscriptParams.h
Go to the documentation of this file.
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