1 |
|
|
2 |
/******************************************************* |
/******************************************************* |
3 |
* |
* |
4 |
* Copyright (c) 2003-2008 by University of Queensland |
* Copyright (c) 2003-2009 by University of Queensland |
5 |
* Earth Systems Science Computational Center (ESSCC) |
* Earth Systems Science Computational Center (ESSCC) |
6 |
* http://www.uq.edu.au/esscc |
* http://www.uq.edu.au/esscc |
7 |
* |
* |
24 |
#include "DataVector.h" |
#include "DataVector.h" |
25 |
#include "paso/Paso_MPI.h" |
#include "paso/Paso_MPI.h" |
26 |
#include "EscriptParams.h" |
#include "EscriptParams.h" |
27 |
|
#include "TestDomain.h" |
28 |
|
|
29 |
|
|
30 |
extern "C" { |
extern "C" { |
31 |
#include "escript/blocktimer.h" |
#include "esysUtils/blocktimer.h" |
32 |
} |
} |
33 |
|
|
34 |
#include "esysUtils/esysExceptionTranslator.h" |
#include "esysUtils/esysExceptionTranslator.h" |
35 |
|
|
36 |
|
#include <boost/version.hpp> |
37 |
#include <boost/python.hpp> |
#include <boost/python.hpp> |
38 |
#include <boost/python/module.hpp> |
#include <boost/python/module.hpp> |
39 |
#include <boost/python/def.hpp> |
#include <boost/python/def.hpp> |
47 |
|
|
48 |
/*! \mainpage Esys Documentation |
/*! \mainpage Esys Documentation |
49 |
* |
* |
50 |
* \version 1.0.0 |
* \version 2.9.0 |
51 |
* |
* |
52 |
* - \ref escript |
* - \ref escript |
53 |
* |
* |
55 |
* |
* |
56 |
* - \ref finley |
* - \ref finley |
57 |
* |
* |
58 |
* - <a href=http://iservo.edu.au/esys/epydoc/index.html>Python module documentation (epydoc generated)</a> |
* - <a href="../../epydoc/index.html">Python module documentation (epydoc generated)</a> |
59 |
* |
* |
60 |
*/ |
*/ |
61 |
|
|
63 |
* Escript is the python module that contains the interfaces |
* Escript is the python module that contains the interfaces |
64 |
* to the C++ side of escript. |
* to the C++ side of escript. |
65 |
* |
* |
66 |
* \version 1.0.0 |
* |
67 |
* |
* |
68 |
* \section class_desc Class Description: |
* \section class_desc Class Description: |
69 |
* Data |
* Data |
82 |
BOOST_PYTHON_MODULE(escriptcpp) |
BOOST_PYTHON_MODULE(escriptcpp) |
83 |
{ |
{ |
84 |
// This feature was added in boost v1.34 |
// This feature was added in boost v1.34 |
85 |
#if ((BOOST_VERSION/100)%1000 > 33) || (BOOST_VERSION/100000 >1) |
#if ((BOOST_VERSION/100)%1000 > 34) || (BOOST_VERSION/100000 >1) |
86 |
//#if ((BOOST_VERSION/100)%1000) > 33 |
//#if ((BOOST_VERSION/100)%1000) > 34 |
87 |
// params are: bool show_user_defined, bool show_py_signatures, bool show_cpp_signatures |
// params are: bool show_user_defined, bool show_py_signatures, bool show_cpp_signatures |
88 |
|
#if BOOST_VERSION > 103399 |
89 |
docstring_options docopt(true, true, false); |
docstring_options docopt(true, true, false); |
90 |
|
#endif |
91 |
#endif |
#endif |
92 |
|
|
93 |
def("setNumberOfThreads",escript::setNumberOfThreads); |
def("setNumberOfThreads",escript::setNumberOfThreads); |
102 |
def("printParallelThreadCounts",escript::printParallelThreadCnt); |
def("printParallelThreadCounts",escript::printParallelThreadCnt); |
103 |
def("getMPISizeWorld",escript::getMPISizeWorld); |
def("getMPISizeWorld",escript::getMPISizeWorld); |
104 |
def("getMPIRankWorld",escript::getMPIRankWorld); |
def("getMPIRankWorld",escript::getMPIRankWorld); |
105 |
|
def("MPIBarrierWorld",escript::MPIBarrierWorld); |
106 |
|
def("getMPIWorldMax",escript::getMPIWorldMax); |
107 |
|
def("getMachinePrecision",escript::getMachinePrecision); |
108 |
|
def("getMaxFloat",escript::getMaxFloat); |
109 |
// |
// |
110 |
// Interface for AbstractDomain |
// Interface for AbstractDomain |
111 |
// |
// |
112 |
class_<escript::AbstractDomain, escript::Domain_ptr>("Domain","Base class for all domains.",no_init) |
class_<escript::AbstractDomain, escript::Domain_ptr>("Domain","Base class for all domains.",no_init) |
113 |
|
.def("getStatus",&escript::AbstractDomain::getStatus) |
114 |
.def("setTagMap",&escript::AbstractDomain::setTagMap) |
.def("setTagMap",&escript::AbstractDomain::setTagMap) |
115 |
.def("getTag",&escript::AbstractDomain::getTag) |
.def("getTag",&escript::AbstractDomain::getTag) |
116 |
.def("isValidTagName",&escript::AbstractDomain::isValidTagName) |
.def("isValidTagName",&escript::AbstractDomain::isValidTagName) |
120 |
.def("getNormal",&escript::AbstractDomain::getNormal) |
.def("getNormal",&escript::AbstractDomain::getNormal) |
121 |
.def("getSize",&escript::AbstractDomain::getSize) |
.def("getSize",&escript::AbstractDomain::getSize) |
122 |
.def("saveVTK",&escript::AbstractDomain::saveVTK) |
.def("saveVTK",&escript::AbstractDomain::saveVTK) |
123 |
|
.def("dump",&escript::AbstractDomain::dump) |
124 |
.def("saveDX",&escript::AbstractDomain::saveDX) |
.def("saveDX",&escript::AbstractDomain::saveDX) |
125 |
.def("getMPISize",&escript::AbstractDomain::getMPISize) |
.def("getMPISize",&escript::AbstractDomain::getMPISize) |
126 |
.def("getMPIRank",&escript::AbstractDomain::getMPIRank) |
.def("getMPIRank",&escript::AbstractDomain::getMPIRank) |
137 |
.def("getSystemMatrixTypeId",&escript::AbstractContinuousDomain::getSystemMatrixTypeId) |
.def("getSystemMatrixTypeId",&escript::AbstractContinuousDomain::getSystemMatrixTypeId) |
138 |
.def("getTransportTypeId",&escript::AbstractContinuousDomain::getTransportTypeId); |
.def("getTransportTypeId",&escript::AbstractContinuousDomain::getTransportTypeId); |
139 |
|
|
140 |
|
|
141 |
|
// |
142 |
|
// Interface for TestDomain |
143 |
|
// |
144 |
|
class_ <escript::TestDomain, bases<escript::AbstractDomain> >("TestDomain", "Test Class for domains with no structure. May be removed from future releases without notice.", init<int,int>()); |
145 |
|
|
146 |
|
// This is the only python visible way to get a TestDomain |
147 |
|
def("getTestDomainFunctionSpace",&escript::getTestDomainFunctionSpace, "For testing only. May be removed without notice."); |
148 |
|
|
149 |
// |
// |
150 |
// Interface for FunctionSpace |
// Interface for FunctionSpace |
151 |
// |
// |
170 |
// |
// |
171 |
class_<escript::Data>("Data","Represents a collection of datapoints. It is used to store the values of a function. For more details please consult the c++ class documentation.",init<>() ) |
class_<escript::Data>("Data","Represents a collection of datapoints. It is used to store the values of a function. For more details please consult the c++ class documentation.",init<>() ) |
172 |
// various constructors for Data objects |
// various constructors for Data objects |
|
.def(init<const numeric::array&, optional<const escript::FunctionSpace&, bool> >(args("value","what","expand"))) |
|
173 |
.def(init<const object&, optional<const escript::FunctionSpace&, bool> >(args("value","what","expand"))) |
.def(init<const object&, optional<const escript::FunctionSpace&, bool> >(args("value","what","expand"))) |
174 |
.def(init<const double, const tuple&, optional<const escript::FunctionSpace&, bool> >(args("value","shape","what","expand"))) |
.def(init<const double, const tuple&, optional<const escript::FunctionSpace&, bool> >(args("value","shape","what","expand"))) |
175 |
.def(init<const escript::Data&, const escript::FunctionSpace&>(args("value","what"))) |
.def(init<const escript::Data&, const escript::FunctionSpace&>(args("value","what"))) |
177 |
// Note for Lutz, Need to specify the call policy in order to return a |
// Note for Lutz, Need to specify the call policy in order to return a |
178 |
// reference. In this case return_internal_reference. |
// reference. In this case return_internal_reference. |
179 |
.def("__str__",&escript::Data::toString) |
.def("__str__",&escript::Data::toString) |
|
// .def("getDomain",&escript::Data::getDomain,return_internal_reference<>()) |
|
180 |
.def("getDomain",&escript::Data::getDomainPython) |
.def("getDomain",&escript::Data::getDomainPython) |
181 |
.def("getFunctionSpace",&escript::Data::getFunctionSpace,return_value_policy<copy_const_reference>()) |
.def("getFunctionSpace",&escript::Data::getFunctionSpace,return_value_policy<copy_const_reference>()) |
182 |
.def("isEmpty",&escript::Data::isEmpty) |
.def("isEmpty",&escript::Data::isEmpty) |
185 |
.def("getShape",&escript::Data::getShapeTuple) |
.def("getShape",&escript::Data::getShapeTuple) |
186 |
.def("getRank",&escript::Data::getDataPointRank) |
.def("getRank",&escript::Data::getDataPointRank) |
187 |
.def("dump",&escript::Data::dump) |
.def("dump",&escript::Data::dump) |
188 |
|
.def("toListOfTuples",&escript::Data::toListOfTuples, (arg("scalarastuple")=false)) |
189 |
.def("copyWithMask",&escript::Data::copyWithMask) |
.def("copyWithMask",&escript::Data::copyWithMask) |
190 |
.def("setTaggedValue",&escript::Data::setTaggedValue) |
.def("setTaggedValue",&escript::Data::setTaggedValue) |
191 |
.def("setTaggedValue",&escript::Data::setTaggedValueByName) |
.def("setTaggedValue",&escript::Data::setTaggedValueByName) |
199 |
.def("tag",&escript::Data::tag) |
.def("tag",&escript::Data::tag) |
200 |
.def("resolve",&escript::Data::resolve) |
.def("resolve",&escript::Data::resolve) |
201 |
.def("copy",&escript::Data::copy) |
.def("copy",&escript::Data::copy) |
202 |
.def("copy",&escript::Data::copySelf,return_value_policy<manage_new_object>()) |
.def("copy",&escript::Data::copySelf) |
203 |
.def("delay",&escript::Data::delay) |
.def("delay",&escript::Data::delay) |
204 |
.def("setValueOfDataPoint",&escript::Data::setValueOfDataPointToPyObject) |
.def("setValueOfDataPoint",&escript::Data::setValueOfDataPointToPyObject) |
205 |
.def("setValueOfDataPoint",&escript::Data::setValueOfDataPointToArray) |
.def("setValueOfDataPoint",&escript::Data::setValueOfDataPointToArray) |
206 |
.def("setValueOfDataPoint",&escript::Data::setValueOfDataPoint) |
.def("setValueOfDataPoint",&escript::Data::setValueOfDataPoint) |
207 |
.def("getValueOfDataPoint",&escript::Data::getValueOfDataPoint) |
.def("getTupleForDataPoint",&escript::Data::getValueOfDataPointAsTuple) |
208 |
.def("getValueOfGlobalDataPoint",&escript::Data::getValueOfGlobalDataPoint) |
.def("getTupleForGlobalDataPoint",&escript::Data::getValueOfGlobalDataPointAsTuple) |
209 |
.def("setToZero",&escript::Data::setToZero) |
.def("setToZero",&escript::Data::setToZero) |
210 |
.def("interpolate",&escript::Data::interpolate) |
.def("interpolate",&escript::Data::interpolate) |
211 |
.def("minGlobalDataPoint",&escript::Data::minGlobalDataPoint) |
.def("minGlobalDataPoint",&escript::Data::minGlobalDataPoint) |
212 |
|
.def("maxGlobalDataPoint",&escript::Data::maxGlobalDataPoint) |
213 |
.def("saveDX",&escript::Data::saveDX) |
.def("saveDX",&escript::Data::saveDX) |
214 |
.def("saveVTK",&escript::Data::saveVTK) |
.def("saveVTK",&escript::Data::saveVTK) |
215 |
.def("getTagNumber",&escript::Data::getTagNumber) |
.def("getTagNumber",&escript::Data::getTagNumber) |
255 |
.def("_Lsup",&escript::Data::Lsup) |
.def("_Lsup",&escript::Data::Lsup) |
256 |
.def("_sup",&escript::Data::sup) |
.def("_sup",&escript::Data::sup) |
257 |
.def("_inf",&escript::Data::inf) |
.def("_inf",&escript::Data::inf) |
258 |
.def("_integrate",&escript::Data::integrate) |
.def("_integrateToTuple",&escript::Data::integrateToTuple) |
259 |
|
|
260 |
// following implements the python abs operator |
// following implements the python abs operator |
261 |
.def("__abs__",&escript::Data::abs) |
.def("__abs__",&escript::Data::abs) |
382 |
(arg("value")=0)); |
(arg("value")=0)); |
383 |
def("getEscriptParamInt",escript::getEscriptParamInt, |
def("getEscriptParamInt",escript::getEscriptParamInt, |
384 |
(arg("sentinel")=0)); |
(arg("sentinel")=0)); |
385 |
|
def("listEscriptParams",escript::listEscriptParams); |
386 |
|
|
387 |
// |
// |
388 |
// Register esysExceptionTranslator |
// Register esysExceptionTranslator |
389 |
// |
// |
390 |
register_exception_translator<esysUtils::EsysException>(&esysUtils::esysExceptionTranslator); |
register_exception_translator<esysUtils::EsysException>(&esysUtils::esysExceptionTranslator); |
|
|
|
391 |
} |
} |