Salome HOME
Enable unpacking of tuples in DataArrays.
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingTypemaps.i
1 // Copyright (C) 2007-2014  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 // Author : Anthony Geay (CEA/DEN)
20
21 #include "MEDCouplingDataArrayTypemaps.i"
22
23 static PyObject *convertMesh(ParaMEDMEM::MEDCouplingMesh *mesh, int owner) throw(INTERP_KERNEL::Exception)
24 {
25   PyObject *ret=0;
26   if(!mesh)
27     {
28       Py_XINCREF(Py_None);
29       return Py_None;
30     }
31   if(dynamic_cast<ParaMEDMEM::MEDCouplingUMesh *>(mesh))
32     ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDCouplingUMesh,owner);
33   if(dynamic_cast<ParaMEDMEM::MEDCoupling1SGTUMesh *>(mesh))
34     ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDCoupling1SGTUMesh,owner);
35   if(dynamic_cast<ParaMEDMEM::MEDCoupling1DGTUMesh *>(mesh))
36     ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDCoupling1DGTUMesh,owner);
37   if(dynamic_cast<ParaMEDMEM::MEDCouplingExtrudedMesh *>(mesh))
38     ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDCouplingExtrudedMesh,owner);
39   if(dynamic_cast<ParaMEDMEM::MEDCouplingCMesh *>(mesh))
40     ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDCouplingCMesh,owner);
41   if(dynamic_cast<ParaMEDMEM::MEDCouplingCurveLinearMesh *>(mesh))
42     ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDCouplingCurveLinearMesh,owner);
43   if(!ret)
44     throw INTERP_KERNEL::Exception("Not recognized type of mesh on downcast !");
45   return ret;
46 }
47
48 static PyObject *convertFieldDiscretization(ParaMEDMEM::MEDCouplingFieldDiscretization *fd, int owner) throw(INTERP_KERNEL::Exception)
49 {
50   PyObject *ret=0;
51   if(!fd)
52     {
53       Py_XINCREF(Py_None);
54       return Py_None;
55     }
56   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationP0 *>(fd))
57     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationP0,owner);
58   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationP1 *>(fd))
59     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationP1,owner);
60   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationGauss *>(fd))
61     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationGauss,owner);
62   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationGaussNE *>(fd))
63     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationGaussNE,owner);
64   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationKriging *>(fd))
65     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationKriging,owner);
66   if(!ret)
67     throw INTERP_KERNEL::Exception("Not recognized type of field discretization on downcast !");
68   return ret;
69 }
70
71 static PyObject* convertMultiFields(ParaMEDMEM::MEDCouplingMultiFields *mfs, int owner) throw(INTERP_KERNEL::Exception)
72 {
73   PyObject *ret=0;
74   if(!mfs)
75     {
76       Py_XINCREF(Py_None);
77       return Py_None;
78     }
79   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldOverTime *>(mfs))
80     ret=SWIG_NewPointerObj((void*)mfs,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldOverTime,owner);
81   else
82     ret=SWIG_NewPointerObj((void*)mfs,SWIGTYPE_p_ParaMEDMEM__MEDCouplingMultiFields,owner);
83   return ret;
84 }
85
86 static ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___add__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
87 {
88   const char msg[]="Unexpected situation in MEDCouplingFieldDouble.__add__ ! Expecting a not null MEDCouplingFieldDouble or DataArrayDouble or DataArrayDoubleTuple instance, or a list of double, or a double.";
89   const char msg2[]="in MEDCouplingFieldDouble.__add__ : self field has no Array of values set !";
90   void *argp;
91   //
92   if(SWIG_IsOK(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,0|0)))
93     {
94       ParaMEDMEM::MEDCouplingFieldDouble *other=reinterpret_cast< ParaMEDMEM::MEDCouplingFieldDouble * >(argp);
95       if(other)
96         return (*self)+(*other);
97       else
98         throw INTERP_KERNEL::Exception(msg);
99     }
100   //
101   double val;
102   ParaMEDMEM::DataArrayDouble *a;
103   ParaMEDMEM::DataArrayDoubleTuple *aa;
104   std::vector<double> bb;
105   int sw;
106   convertObjToPossibleCpp5(obj,sw,val,a,aa,bb);
107   switch(sw)
108     {
109     case 1:
110       {
111         if(!self->getArray())
112           throw INTERP_KERNEL::Exception(msg2);
113         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=self->getArray()->deepCpy();
114         ret->applyLin(1.,val);
115         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
116         ret2->setArray(ret);
117         return ret2.retn();
118       }
119     case 2:
120       {
121         if(!self->getArray())
122           throw INTERP_KERNEL::Exception(msg2);
123         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Add(self->getArray(),a);
124         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
125         ret2->setArray(ret);
126         return ret2.retn();
127       }
128     case 3:
129       {
130         if(!self->getArray())
131           throw INTERP_KERNEL::Exception(msg2);
132         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=aa->buildDADouble(1,self->getNumberOfComponents());
133         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Add(self->getArray(),aaa);
134         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
135         ret2->setArray(ret);
136         return ret2.retn();
137       }
138     case 4:
139       {
140         if(!self->getArray())
141           throw INTERP_KERNEL::Exception(msg2);
142         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=ParaMEDMEM::DataArrayDouble::New(); aaa->useArray(&bb[0],false,ParaMEDMEM::CPP_DEALLOC,1,(int)bb.size());
143         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Add(self->getArray(),aaa);
144         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
145         ret2->setArray(ret);
146         return ret2.retn();
147       }
148     default:
149       { throw INTERP_KERNEL::Exception(msg); }
150     }
151 }
152
153 static ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___radd__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
154 {
155   return ParaMEDMEM_MEDCouplingFieldDouble___add__Impl(self,obj);
156 }
157
158 static ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___rsub__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
159 {
160   const char msg[]="Unexpected situation in MEDCouplingFieldDouble.__rsub__ ! Expecting a not null MEDCouplingFieldDouble or DataArrayDouble or DataArrayDoubleTuple instance, or a list of double, or a double.";
161   const char msg2[]="in MEDCouplingFieldDouble.__rsub__ : self field has no Array of values set !";
162   void *argp;
163   //
164   if(SWIG_IsOK(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,0|0)))
165     {
166       ParaMEDMEM::MEDCouplingFieldDouble *other=reinterpret_cast< ParaMEDMEM::MEDCouplingFieldDouble * >(argp);
167       if(other)
168         return (*other)-(*self);
169       else
170         throw INTERP_KERNEL::Exception(msg);
171     }
172   //
173   double val;
174   ParaMEDMEM::DataArrayDouble *a;
175   ParaMEDMEM::DataArrayDoubleTuple *aa;
176   std::vector<double> bb;
177   int sw;
178   convertObjToPossibleCpp5(obj,sw,val,a,aa,bb);
179   switch(sw)
180     {
181     case 1:
182       {
183         if(!self->getArray())
184           throw INTERP_KERNEL::Exception(msg2);
185         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=self->getArray()->deepCpy();
186         ret->applyLin(-1.,val);
187         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
188         ret2->setArray(ret);
189         return ret2.retn();
190       }
191     case 2:
192       {
193         if(!self->getArray())
194           throw INTERP_KERNEL::Exception(msg2);
195         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Substract(a,self->getArray());
196         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
197         ret2->setArray(ret);
198         return ret2.retn();
199       }
200     case 3:
201       {
202         if(!self->getArray())
203           throw INTERP_KERNEL::Exception(msg2);
204         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=aa->buildDADouble(1,self->getNumberOfComponents());
205         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Substract(aaa,self->getArray());
206         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
207         ret2->setArray(ret);
208         return ret2.retn();
209       }
210     case 4:
211       {
212         if(!self->getArray())
213           throw INTERP_KERNEL::Exception(msg2);
214         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=ParaMEDMEM::DataArrayDouble::New(); aaa->useArray(&bb[0],false,ParaMEDMEM::CPP_DEALLOC,1,(int)bb.size());
215         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Substract(aaa,self->getArray());
216         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
217         ret2->setArray(ret);
218         return ret2.retn();
219       }
220     default:
221       { throw INTERP_KERNEL::Exception(msg); }
222     }
223 }
224
225 static ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___mul__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
226 {
227   const char msg[]="Unexpected situation in MEDCouplingFieldDouble.__mul__ ! Expecting a not null MEDCouplingFieldDouble or DataArrayDouble or DataArrayDoubleTuple instance, or a list of double, or a double.";
228   const char msg2[]="in MEDCouplingFieldDouble.__mul__ : self field has no Array of values set !";
229   void *argp;
230   //
231   if(SWIG_IsOK(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,0|0)))
232     {
233       ParaMEDMEM::MEDCouplingFieldDouble *other=reinterpret_cast< ParaMEDMEM::MEDCouplingFieldDouble * >(argp);
234       if(other)
235         return (*self)*(*other);
236       else
237         throw INTERP_KERNEL::Exception(msg);
238     }
239   //
240   double val;
241   ParaMEDMEM::DataArrayDouble *a;
242   ParaMEDMEM::DataArrayDoubleTuple *aa;
243   std::vector<double> bb;
244   int sw;
245   convertObjToPossibleCpp5(obj,sw,val,a,aa,bb);
246   switch(sw)
247     {
248     case 1:
249       {
250         if(!self->getArray())
251           throw INTERP_KERNEL::Exception(msg2);
252         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=self->getArray()->deepCpy();
253         ret->applyLin(val,0.);
254         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
255         ret2->setArray(ret);
256         return ret2.retn();
257       }
258     case 2:
259       {
260         if(!self->getArray())
261           throw INTERP_KERNEL::Exception(msg2);
262         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Multiply(self->getArray(),a);
263         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
264         ret2->setArray(ret);
265         return ret2.retn();
266       }
267     case 3:
268       {
269         if(!self->getArray())
270           throw INTERP_KERNEL::Exception(msg2);
271         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=aa->buildDADouble(1,self->getNumberOfComponents());
272         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Multiply(self->getArray(),aaa);
273         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
274         ret2->setArray(ret);
275         return ret2.retn();
276       }
277     case 4:
278       {
279         if(!self->getArray())
280           throw INTERP_KERNEL::Exception(msg2);
281         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=ParaMEDMEM::DataArrayDouble::New(); aaa->useArray(&bb[0],false,ParaMEDMEM::CPP_DEALLOC,1,(int)bb.size());
282         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Multiply(self->getArray(),aaa);
283         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
284         ret2->setArray(ret);
285         return ret2.retn();
286       }
287     default:
288       { throw INTERP_KERNEL::Exception(msg); }
289     }
290 }
291
292 ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___rmul__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
293 {
294   return ParaMEDMEM_MEDCouplingFieldDouble___mul__Impl(self,obj);
295 }
296
297 ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___rdiv__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
298 {
299   const char msg[]="Unexpected situation in MEDCouplingFieldDouble.__rdiv__ ! Expecting a not null MEDCouplingFieldDouble or DataArrayDouble or DataArrayDoubleTuple instance, or a list of double, or a double.";
300   const char msg2[]="in MEDCouplingFieldDouble.__div__ : self field has no Array of values set !";
301   void *argp;
302   //
303   if(SWIG_IsOK(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,0|0)))
304     {
305       ParaMEDMEM::MEDCouplingFieldDouble *other=reinterpret_cast< ParaMEDMEM::MEDCouplingFieldDouble * >(argp);
306       if(other)
307         return (*other)/(*self);
308       else
309         throw INTERP_KERNEL::Exception(msg);
310     }
311   //
312   double val;
313   ParaMEDMEM::DataArrayDouble *a;
314   ParaMEDMEM::DataArrayDoubleTuple *aa;
315   std::vector<double> bb;
316   int sw;
317   convertObjToPossibleCpp5(obj,sw,val,a,aa,bb);
318   switch(sw)
319     {
320     case 1:
321       {
322         if(!self->getArray())
323           throw INTERP_KERNEL::Exception(msg2);
324         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=self->getArray()->deepCpy();
325         ret->applyInv(val);
326         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
327         ret2->setArray(ret);
328         return ret2.retn();
329       }
330     case 2:
331       {
332         if(!self->getArray())
333           throw INTERP_KERNEL::Exception(msg2);
334         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Divide(a,self->getArray());
335         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
336         ret2->setArray(ret);
337         return ret2.retn();
338       }
339     case 3:
340       {
341         if(!self->getArray())
342           throw INTERP_KERNEL::Exception(msg2);
343         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=aa->buildDADouble(1,self->getNumberOfComponents());
344         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Divide(aaa,self->getArray());
345         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
346         ret2->setArray(ret);
347         return ret2.retn();
348       }
349     case 4:
350       {
351         if(!self->getArray())
352           throw INTERP_KERNEL::Exception(msg2);
353         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=ParaMEDMEM::DataArrayDouble::New(); aaa->useArray(&bb[0],false,ParaMEDMEM::CPP_DEALLOC,1,(int)bb.size());
354         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Divide(aaa,self->getArray());
355         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
356         ret2->setArray(ret);
357         return ret2.retn();
358       }
359     default:
360       { throw INTERP_KERNEL::Exception(msg); }
361     }
362 }