Salome HOME
Add structured image grid meshes into MEDCoupling.
[modules/med.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(dynamic_cast<ParaMEDMEM::MEDCouplingIMesh *>(mesh))
44     ret=SWIG_NewPointerObj((void*)mesh,SWIGTYPE_p_ParaMEDMEM__MEDCouplingIMesh,owner);
45   if(!ret)
46     throw INTERP_KERNEL::Exception("Not recognized type of mesh on downcast !");
47   return ret;
48 }
49
50 static PyObject *convertFieldDiscretization(ParaMEDMEM::MEDCouplingFieldDiscretization *fd, int owner) throw(INTERP_KERNEL::Exception)
51 {
52   PyObject *ret=0;
53   if(!fd)
54     {
55       Py_XINCREF(Py_None);
56       return Py_None;
57     }
58   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationP0 *>(fd))
59     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationP0,owner);
60   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationP1 *>(fd))
61     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationP1,owner);
62   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationGauss *>(fd))
63     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationGauss,owner);
64   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationGaussNE *>(fd))
65     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationGaussNE,owner);
66   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldDiscretizationKriging *>(fd))
67     ret=SWIG_NewPointerObj(reinterpret_cast<void*>(fd),SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDiscretizationKriging,owner);
68   if(!ret)
69     throw INTERP_KERNEL::Exception("Not recognized type of field discretization on downcast !");
70   return ret;
71 }
72
73 static PyObject* convertMultiFields(ParaMEDMEM::MEDCouplingMultiFields *mfs, int owner) throw(INTERP_KERNEL::Exception)
74 {
75   PyObject *ret=0;
76   if(!mfs)
77     {
78       Py_XINCREF(Py_None);
79       return Py_None;
80     }
81   if(dynamic_cast<ParaMEDMEM::MEDCouplingFieldOverTime *>(mfs))
82     ret=SWIG_NewPointerObj((void*)mfs,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldOverTime,owner);
83   else
84     ret=SWIG_NewPointerObj((void*)mfs,SWIGTYPE_p_ParaMEDMEM__MEDCouplingMultiFields,owner);
85   return ret;
86 }
87
88 static ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___add__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
89 {
90   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.";
91   const char msg2[]="in MEDCouplingFieldDouble.__add__ : self field has no Array of values set !";
92   void *argp;
93   //
94   if(SWIG_IsOK(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,0|0)))
95     {
96       ParaMEDMEM::MEDCouplingFieldDouble *other=reinterpret_cast< ParaMEDMEM::MEDCouplingFieldDouble * >(argp);
97       if(other)
98         return (*self)+(*other);
99       else
100         throw INTERP_KERNEL::Exception(msg);
101     }
102   //
103   double val;
104   ParaMEDMEM::DataArrayDouble *a;
105   ParaMEDMEM::DataArrayDoubleTuple *aa;
106   std::vector<double> bb;
107   int sw;
108   convertObjToPossibleCpp5(obj,sw,val,a,aa,bb);
109   switch(sw)
110     {
111     case 1:
112       {
113         if(!self->getArray())
114           throw INTERP_KERNEL::Exception(msg2);
115         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=self->getArray()->deepCpy();
116         ret->applyLin(1.,val);
117         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
118         ret2->setArray(ret);
119         return ret2.retn();
120       }
121     case 2:
122       {
123         if(!self->getArray())
124           throw INTERP_KERNEL::Exception(msg2);
125         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Add(self->getArray(),a);
126         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
127         ret2->setArray(ret);
128         return ret2.retn();
129       }
130     case 3:
131       {
132         if(!self->getArray())
133           throw INTERP_KERNEL::Exception(msg2);
134         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=aa->buildDADouble(1,self->getNumberOfComponents());
135         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Add(self->getArray(),aaa);
136         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
137         ret2->setArray(ret);
138         return ret2.retn();
139       }
140     case 4:
141       {
142         if(!self->getArray())
143           throw INTERP_KERNEL::Exception(msg2);
144         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=ParaMEDMEM::DataArrayDouble::New(); aaa->useArray(&bb[0],false,ParaMEDMEM::CPP_DEALLOC,1,(int)bb.size());
145         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Add(self->getArray(),aaa);
146         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
147         ret2->setArray(ret);
148         return ret2.retn();
149       }
150     default:
151       { throw INTERP_KERNEL::Exception(msg); }
152     }
153 }
154
155 static ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___radd__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
156 {
157   return ParaMEDMEM_MEDCouplingFieldDouble___add__Impl(self,obj);
158 }
159
160 static ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___rsub__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
161 {
162   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.";
163   const char msg2[]="in MEDCouplingFieldDouble.__rsub__ : self field has no Array of values set !";
164   void *argp;
165   //
166   if(SWIG_IsOK(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,0|0)))
167     {
168       ParaMEDMEM::MEDCouplingFieldDouble *other=reinterpret_cast< ParaMEDMEM::MEDCouplingFieldDouble * >(argp);
169       if(other)
170         return (*other)-(*self);
171       else
172         throw INTERP_KERNEL::Exception(msg);
173     }
174   //
175   double val;
176   ParaMEDMEM::DataArrayDouble *a;
177   ParaMEDMEM::DataArrayDoubleTuple *aa;
178   std::vector<double> bb;
179   int sw;
180   convertObjToPossibleCpp5(obj,sw,val,a,aa,bb);
181   switch(sw)
182     {
183     case 1:
184       {
185         if(!self->getArray())
186           throw INTERP_KERNEL::Exception(msg2);
187         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=self->getArray()->deepCpy();
188         ret->applyLin(-1.,val);
189         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
190         ret2->setArray(ret);
191         return ret2.retn();
192       }
193     case 2:
194       {
195         if(!self->getArray())
196           throw INTERP_KERNEL::Exception(msg2);
197         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Substract(a,self->getArray());
198         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
199         ret2->setArray(ret);
200         return ret2.retn();
201       }
202     case 3:
203       {
204         if(!self->getArray())
205           throw INTERP_KERNEL::Exception(msg2);
206         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=aa->buildDADouble(1,self->getNumberOfComponents());
207         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Substract(aaa,self->getArray());
208         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
209         ret2->setArray(ret);
210         return ret2.retn();
211       }
212     case 4:
213       {
214         if(!self->getArray())
215           throw INTERP_KERNEL::Exception(msg2);
216         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=ParaMEDMEM::DataArrayDouble::New(); aaa->useArray(&bb[0],false,ParaMEDMEM::CPP_DEALLOC,1,(int)bb.size());
217         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Substract(aaa,self->getArray());
218         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
219         ret2->setArray(ret);
220         return ret2.retn();
221       }
222     default:
223       { throw INTERP_KERNEL::Exception(msg); }
224     }
225 }
226
227 static ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___mul__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
228 {
229   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.";
230   const char msg2[]="in MEDCouplingFieldDouble.__mul__ : self field has no Array of values set !";
231   void *argp;
232   //
233   if(SWIG_IsOK(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,0|0)))
234     {
235       ParaMEDMEM::MEDCouplingFieldDouble *other=reinterpret_cast< ParaMEDMEM::MEDCouplingFieldDouble * >(argp);
236       if(other)
237         return (*self)*(*other);
238       else
239         throw INTERP_KERNEL::Exception(msg);
240     }
241   //
242   double val;
243   ParaMEDMEM::DataArrayDouble *a;
244   ParaMEDMEM::DataArrayDoubleTuple *aa;
245   std::vector<double> bb;
246   int sw;
247   convertObjToPossibleCpp5(obj,sw,val,a,aa,bb);
248   switch(sw)
249     {
250     case 1:
251       {
252         if(!self->getArray())
253           throw INTERP_KERNEL::Exception(msg2);
254         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=self->getArray()->deepCpy();
255         ret->applyLin(val,0.);
256         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
257         ret2->setArray(ret);
258         return ret2.retn();
259       }
260     case 2:
261       {
262         if(!self->getArray())
263           throw INTERP_KERNEL::Exception(msg2);
264         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Multiply(self->getArray(),a);
265         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
266         ret2->setArray(ret);
267         return ret2.retn();
268       }
269     case 3:
270       {
271         if(!self->getArray())
272           throw INTERP_KERNEL::Exception(msg2);
273         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=aa->buildDADouble(1,self->getNumberOfComponents());
274         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Multiply(self->getArray(),aaa);
275         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
276         ret2->setArray(ret);
277         return ret2.retn();
278       }
279     case 4:
280       {
281         if(!self->getArray())
282           throw INTERP_KERNEL::Exception(msg2);
283         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=ParaMEDMEM::DataArrayDouble::New(); aaa->useArray(&bb[0],false,ParaMEDMEM::CPP_DEALLOC,1,(int)bb.size());
284         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Multiply(self->getArray(),aaa);
285         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
286         ret2->setArray(ret);
287         return ret2.retn();
288       }
289     default:
290       { throw INTERP_KERNEL::Exception(msg); }
291     }
292 }
293
294 ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___rmul__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
295 {
296   return ParaMEDMEM_MEDCouplingFieldDouble___mul__Impl(self,obj);
297 }
298
299 ParaMEDMEM::MEDCouplingFieldDouble *ParaMEDMEM_MEDCouplingFieldDouble___rdiv__Impl(ParaMEDMEM::MEDCouplingFieldDouble *self, PyObject *obj) throw(INTERP_KERNEL::Exception)
300 {
301   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.";
302   const char msg2[]="in MEDCouplingFieldDouble.__div__ : self field has no Array of values set !";
303   void *argp;
304   //
305   if(SWIG_IsOK(SWIG_ConvertPtr(obj,&argp,SWIGTYPE_p_ParaMEDMEM__MEDCouplingFieldDouble,0|0)))
306     {
307       ParaMEDMEM::MEDCouplingFieldDouble *other=reinterpret_cast< ParaMEDMEM::MEDCouplingFieldDouble * >(argp);
308       if(other)
309         return (*other)/(*self);
310       else
311         throw INTERP_KERNEL::Exception(msg);
312     }
313   //
314   double val;
315   ParaMEDMEM::DataArrayDouble *a;
316   ParaMEDMEM::DataArrayDoubleTuple *aa;
317   std::vector<double> bb;
318   int sw;
319   convertObjToPossibleCpp5(obj,sw,val,a,aa,bb);
320   switch(sw)
321     {
322     case 1:
323       {
324         if(!self->getArray())
325           throw INTERP_KERNEL::Exception(msg2);
326         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=self->getArray()->deepCpy();
327         ret->applyInv(val);
328         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
329         ret2->setArray(ret);
330         return ret2.retn();
331       }
332     case 2:
333       {
334         if(!self->getArray())
335           throw INTERP_KERNEL::Exception(msg2);
336         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Divide(a,self->getArray());
337         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
338         ret2->setArray(ret);
339         return ret2.retn();
340       }
341     case 3:
342       {
343         if(!self->getArray())
344           throw INTERP_KERNEL::Exception(msg2);
345         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=aa->buildDADouble(1,self->getNumberOfComponents());
346         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Divide(aaa,self->getArray());
347         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
348         ret2->setArray(ret);
349         return ret2.retn();
350       }
351     case 4:
352       {
353         if(!self->getArray())
354           throw INTERP_KERNEL::Exception(msg2);
355         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> aaa=ParaMEDMEM::DataArrayDouble::New(); aaa->useArray(&bb[0],false,ParaMEDMEM::CPP_DEALLOC,1,(int)bb.size());
356         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::DataArrayDouble> ret=ParaMEDMEM::DataArrayDouble::Divide(aaa,self->getArray());
357         ParaMEDMEM::MEDCouplingAutoRefCountObjectPtr<ParaMEDMEM::MEDCouplingFieldDouble> ret2=self->clone(false);
358         ret2->setArray(ret);
359         return ret2.retn();
360       }
361     default:
362       { throw INTERP_KERNEL::Exception(msg); }
363     }
364 }