/[escript]/trunk/finley/src/CPPAdapter/finleycpp.cpp
ViewVC logotype

Contents of /trunk/finley/src/CPPAdapter/finleycpp.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2076 - (show annotations)
Thu Nov 20 12:34:17 2008 UTC (10 years, 10 months ago) by phornby
File size: 7709 byte(s)

I may get into trouble for this.
boost-python 1.34 does have a docstring_options class,
but does not have a 3 argument constructor for
it. So the test has been modified to 


#if ((BOOST_VERSION/100)%1000 > 34) || (BOOST_VERSION/100000 >1)

If you wish to make things more delicate, one can define a 2 argument construction
of docopt just for 1.34 (with an #elif). Probably not worth the effort frankly.

Hope that this has not broken anything for anyone else. The SVN logs suggest this is a
little fragile.....

Also, please be aware that much of our chemistry interface code, that we wish to use with
escript, makes extensive use of boost python.
Having two different boost versions mucking with the python interpreter sounds
like a really bad idea, I'm sure you'll agree.
The problem is that it is not a simple task for us to build new versions of boost-python
on all our platforms. Consequently, it would be nice to be informed when you guys
intend to upgrade a support library of this nature so that we can plan and allocate
resources to keep up.

Cheers.


1
2 /*******************************************************
3 *
4 * Copyright (c) 2003-2008 by University of Queensland
5 * Earth Systems Science Computational Center (ESSCC)
6 * http://www.uq.edu.au/esscc
7 *
8 * Primary Business: Queensland, Australia
9 * Licensed under the Open Software License version 3.0
10 * http://www.opensource.org/licenses/osl-3.0.php
11 *
12 *******************************************************/
13
14
15 #ifdef PASO_MPI
16 #include <mpi.h>
17 #include "paso/Paso_MPI.h"
18 #endif
19 extern "C" {
20 #include "../Finley.h"
21 }
22
23 #include "MeshAdapter.h"
24 #include "MeshAdapterFactory.h"
25 #include "SystemMatrixAdapter.h"
26 #include "TransportProblemAdapter.h"
27
28 #include "FinleyAdapterException.h"
29 // #include "esysUtils/EsysException.h"
30 #include "esysUtils/esysExceptionTranslator.h"
31
32 #include "escript/AbstractContinuousDomain.h"
33
34 #include <boost/python.hpp>
35 #include <boost/python/module.hpp>
36 #include <boost/python/def.hpp>
37 #include <boost/python/detail/defaults_gen.hpp>
38 #include <boost/version.hpp>
39
40 using namespace boost::python;
41
42 /**
43 \page finley Finley
44 Finley is the python module name that contains the interfaces
45 to the C++ wrapper to finley.
46
47 \version 1.0.0
48
49 \section class_desc Class Description:
50 Data
51
52 \section class_limits Class Limitations:
53 None
54
55 \section class_conds Class Conditions of Use:
56 None
57
58 \section throws Throws:
59 None
60
61 */
62
63 //
64 // The BOOST_PYTHON_FUNCTION_OVERLOADS macro generates function overloads for optional
65 // arguments to the respective finley functions.
66 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
67 //
68 // NOTE: If the number of arguments to the finley functions change
69 // the magic numbers in the BOOST_PYTHON_FUNCTION_OVERLOADS call
70 // must change.
71 //
72 // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
73 // BOOST_PYTHON_FUNCTION_OVERLOADS(readMesh_overloads,finley::readMesh,1,2)
74 // BOOST_PYTHON_FUNCTION_OVERLOADS(brick_overloads,finley::brick,0,12)
75 // BOOST_PYTHON_FUNCTION_OVERLOADS(rectangle_overloads,finley::rectangle,0,9)
76 // BOOST_PYTHON_FUNCTION_OVERLOADS(interval_overloads,finley::interval,0,6)
77 // BOOST_PYTHON_FUNCTION_OVERLOADS(glueFaces_overloads,finley::glueFaces,1,3)
78 // BOOST_PYTHON_FUNCTION_OVERLOADS(joinFaces_overloads,finley::joinFaces,1,3)
79
80 BOOST_PYTHON_MODULE(finleycpp)
81 {
82 // This feature was added in boost v1.34
83 #if ((BOOST_VERSION/100)%1000 > 34) || (BOOST_VERSION/100000 >1)
84 // params are: bool show_user_defined, bool show_py_signatures, bool show_cpp_signatures
85 docstring_options docopt(true, true, false);
86 #endif
87
88 //
89 // NOTE: The return_value_policy is necessary for functions that
90 // return pointers.
91 //
92 register_exception_translator<finley::FinleyAdapterException>(&(esysUtils::esysExceptionTranslator));
93
94 def("LoadMesh",finley::loadMesh,
95 (arg("fileName")="file.nc")
96 /* ,return_value_policy<manage_new_object>());*/
97 );
98
99 def("ReadMesh",finley::readMesh,
100 (arg("fileName")="file.fly",arg("integrationOrder")=-1, arg("reducedIntegrationOrder")=-1, arg("optimize")=true)
101 /* ,return_value_policy<manage_new_object>());*/
102 );
103
104 def("ReadGmsh",finley::readGmsh,
105 (arg("fileName")="file.msh",arg("numDim"), arg("integrationOrder")=-1, arg("reducedIntegrationOrder")=-1, arg("optimize")=true)
106 // ,return_value_policy<manage_new_object>());
107 );
108
109 def ("Brick",finley::brick,
110 (arg("n0")=1,arg("n1")=1,arg("n2")=1,
111 arg("order")=1,
112 arg("l0")=1.0,arg("l1")=1.0,arg("l2")=1.0,
113 arg("periodic0")=false,arg("periodic1")=false,arg("periodic2")=false,
114 arg("integrationOrder")=-1, arg("reducedIntegrationOrder")=-1,
115 arg("useElementsOnFace")=false,
116 arg("useFullElementOrder")=false,
117 arg("optimize")=false)
118 // ,return_value_policy<manage_new_object>());
119 );
120
121 def ("Rectangle",finley::rectangle,
122 (arg("n0")=1,arg("n1")=1,arg("order")=1,
123 arg("l0")=1.0,arg("l1")=1.0,
124 arg("periodic0")=false,arg("periodic1")=false,
125 arg("integrationOrder")=-1, arg("reducedIntegrationOrder")=-1,
126 arg("useElementsOnFace")=false,
127 arg("useFullElementOrder")=false,
128 arg("optimize")=false)
129 // ,return_value_policy<manage_new_object>());
130 );
131
132 def("Merge",finley::meshMerge
133 // ,return_value_policy<manage_new_object>());
134 );
135
136 def("GlueFaces",finley::glueFaces,
137 (arg("safetyFactor")=0.2,
138 arg("tolerance")=1.e-8,
139 arg("optimize")=true)
140 // ,return_value_policy<manage_new_object>());
141 );
142
143 def("JoinFaces",finley::joinFaces,
144 (arg("safetyFactor")=0.2,
145 arg("tolerance")=1.e-8,
146 arg("optimize")=true)
147 // ,return_value_policy<manage_new_object>());
148 );
149
150
151 class_<finley::MeshAdapter, bases<escript::AbstractContinuousDomain> >
152 ("MeshAdapter","A concrete class representing a domain. For more details, please consult the c++ documentation.",init<optional <Finley_Mesh*> >())
153 .def(init<const finley::MeshAdapter&>())
154 .def("write",&finley::MeshAdapter::write)
155 .def("print_mesh_info",&finley::MeshAdapter::Print_Mesh_Info,(arg("full")=false))
156 .def("dump",&finley::MeshAdapter::dump)
157 .def("getDescription",&finley::MeshAdapter::getDescription)
158 .def("getDim",&finley::MeshAdapter::getDim)
159 .def("getDataShape",&finley::MeshAdapter::getDataShape)
160 .def("getNumDataPointsGlobal",&finley::MeshAdapter::getNumDataPointsGlobal)
161 .def("addPDEToSystem",&finley::MeshAdapter::addPDEToSystem)
162 .def("addPDEToLumpedSystem",&finley::MeshAdapter::addPDEToLumpedSystem)
163 .def("addPDEToRHS",&finley::MeshAdapter::addPDEToRHS)
164 .def("addPDEToTransportProblem",&finley::MeshAdapter::addPDEToTransportProblem)
165 .def("newOperator",&finley::MeshAdapter::newSystemMatrix)
166 .def("newTransportProblem",&finley::MeshAdapter::newTransportProblem)
167 .def("getSystemMatrixTypeId",&finley::MeshAdapter::getSystemMatrixTypeId)
168 .def("getTransportTypeId",&finley::MeshAdapter::getTransportTypeId)
169 .def("setX",&finley::MeshAdapter::setNewX)
170 .def("getX",&finley::MeshAdapter::getX)
171 .def("getNormal",&finley::MeshAdapter::getNormal)
172 .def("getSize",&finley::MeshAdapter::getSize)
173 .def("saveDX",&finley::MeshAdapter::saveDX)
174 .def("saveVTK",&finley::MeshAdapter::saveVTK)
175 .def("setTagMap",&finley::MeshAdapter::setTagMap)
176 .def("getTag",&finley::MeshAdapter::getTag)
177 .def("isValidTagName",&finley::MeshAdapter::isValidTagName)
178 .def("showTagNames",&finley::MeshAdapter::showTagNames)
179 .def("getMPISize",&finley::MeshAdapter::getMPISize)
180 .def("getMPIRank",&finley::MeshAdapter::getMPIRank)
181 .def("MPIBarrier",&finley::MeshAdapter::MPIBarrier)
182 .def("onMasterProcessor",&finley::MeshAdapter::onMasterProcessor);
183
184 class_<finley::SystemMatrixAdapter, bases<escript::AbstractSystemMatrix> >
185 ("OperatorAdapter","A concrete class representing an operator. For more details, please see the c++ documentation.", no_init)
186 .def("print_matrix_info",&finley::SystemMatrixAdapter::Print_Matrix_Info,(arg("full")=false))
187 .def("nullifyRowsAndCols",&finley::SystemMatrixAdapter::nullifyRowsAndCols)
188 .def("resetValues",&finley::SystemMatrixAdapter::resetValues)
189 .def("saveMM",&finley::SystemMatrixAdapter::saveMM)
190 .def("saveHB",&finley::SystemMatrixAdapter::saveHB);
191
192 class_<finley::TransportProblemAdapter, bases<escript::AbstractTransportProblem> >
193 ("TransportProblemAdapter","",no_init)
194 .def("getSafeTimeStepSize",&finley::TransportProblemAdapter::getSafeTimeStepSize)
195 .def("getUnlimitedTimeStepSize",&finley::TransportProblemAdapter::getUnlimitedTimeStepSize)
196 .def("resetTransport",&finley::TransportProblemAdapter::resetTransport);
197 }

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26