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