Salome HOME
Join modifications from BR_Dev_For_4_0 tag V4_1_1.
[modules/med.git] / src / MEDMEM / MEDMEM_ArrayConvert.hxx
1 // Copyright (C) 2005  OPEN CASCADE, CEA, EDF R&D, LEG
2 //           PRINCIPIA R&D, EADS CCR, Lip6, BV, CEDRAT
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.
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 #ifndef MEDMEM_ARRAY_CONVERT_HXX
20 #define MEDMEM_ARRAY_CONVERT_HXX
21
22 namespace MEDMEM {
23
24 template  <class T, class CHECKING_POLICY >
25 MEDMEM_Array<T, FullInterlaceGaussPolicy, CHECKING_POLICY> *
26 ArrayConvert(
27              const MEDMEM_Array< T, NoInterlaceGaussPolicy, CHECKING_POLICY > &array, T* values=0
28              )
29 {
30   MEDMEM_Array<T,FullInterlaceGaussPolicy,CHECKING_POLICY> * myArray;
31   if(values)
32     myArray = new MEDMEM_Array<T,FullInterlaceGaussPolicy,CHECKING_POLICY> 
33       (values,
34        array.getDim(),
35        array.getNbElem(),
36        array.getNbGeoType(),
37        array.getNbElemGeoC(),
38        array.getNbGaussGeo(),
39        true,false
40        );
41   else
42      myArray= new MEDMEM_Array<T,FullInterlaceGaussPolicy,CHECKING_POLICY> 
43       (array.getDim(),
44        array.getNbElem(),
45        array.getNbGeoType(),
46        array.getNbElemGeoC(),
47        array.getNbGaussGeo()
48        );
49   for (int i=1; i <= array.getNbElem() ; i++ )
50     for (int k=1; k<= array.getNbGauss(i); k++ )
51       for (int j=1; j<= array.getDim(); j++ )
52         myArray->setIJK(i,j,k,array.getIJK(i,j,k));
53
54   return myArray;
55
56 };
57
58 template  <class T, class CHECKING_POLICY>
59 MEDMEM_Array<T, NoInterlaceGaussPolicy, CHECKING_POLICY> *
60 ArrayConvert(
61              const MEDMEM_Array< T, FullInterlaceGaussPolicy, CHECKING_POLICY > &array, T* values=0
62              )
63 {
64   MEDMEM_Array<T,NoInterlaceGaussPolicy,CHECKING_POLICY> * myArray;
65   if(values)
66     myArray = new MEDMEM_Array<T, NoInterlaceGaussPolicy,CHECKING_POLICY> (
67                                                                            values,
68                                                                            array.getDim(),
69                                                                            array.getNbElem(),
70                                                                            array.getNbGeoType(),
71                                                                            array.getNbElemGeoC(),
72                                                                            array.getNbGaussGeo(),
73                                                                            true,false
74                                                                            );
75   else
76     myArray = new MEDMEM_Array<T, NoInterlaceGaussPolicy,CHECKING_POLICY> (
77                                                                            array.getDim(),
78                                                                            array.getNbElem(),
79                                                                            array.getNbGeoType(),
80                                                                            array.getNbElemGeoC(),
81                                                                            array.getNbGaussGeo()
82                                                                            );
83   for (int i=1; i <= array.getNbElem() ; i++ )
84     for (int k=1; k<= array.getNbGauss(i); k++ )
85       for (int j=1; j<= array.getDim(); j++ )
86         myArray->setIJK(i,j,k,array.getIJK(i,j,k));
87
88   return myArray;
89
90 };
91
92 template  <class T, class CHECKING_POLICY>
93 MEDMEM_Array<T, FullInterlaceGaussPolicy, CHECKING_POLICY> *
94 ArrayConvert(
95              const MEDMEM_Array< T, NoInterlaceByTypeGaussPolicy, CHECKING_POLICY > &array, T* values=0
96              )
97 {
98   MEDMEM_Array<T,FullInterlaceGaussPolicy,CHECKING_POLICY> * myArray;
99   if(values)
100     myArray = new MEDMEM_Array<T, FullInterlaceGaussPolicy,CHECKING_POLICY> (
101                                                                            values,
102                                                                            array.getDim(),
103                                                                            array.getNbElem(),
104                                                                            array.getNbGeoType(),
105                                                                            array.getNbElemGeoC(),
106                                                                            array.getNbGaussGeo(),
107                                                                            true,false
108                                                                            );
109   else
110     myArray = new MEDMEM_Array<T, FullInterlaceGaussPolicy,CHECKING_POLICY> (
111                                                                            array.getDim(),
112                                                                            array.getNbElem(),
113                                                                            array.getNbGeoType(),
114                                                                            array.getNbElemGeoC(),
115                                                                            array.getNbGaussGeo()
116                                                                            );
117   for (int i=1; i <= array.getNbElem() ; i++ )
118     for (int k=1; k<= array.getNbGauss(i); k++ )
119       for (int j=1; j<= array.getDim(); j++ )
120         myArray->setIJK(i,j,k,array.getIJK(i,j,k));
121   
122   return myArray;
123
124 }
125
126 template  <class T, class CHECKING_POLICY>
127 MEDMEM_Array<T, NoInterlaceGaussPolicy, CHECKING_POLICY> *
128 ArrayConvert2No(
129              const MEDMEM_Array< T, NoInterlaceByTypeGaussPolicy, CHECKING_POLICY > &array, T* values=0
130              )
131 {
132   MEDMEM_Array<T,NoInterlaceGaussPolicy,CHECKING_POLICY> * myArray;
133   if(values)
134     myArray = new MEDMEM_Array<T, NoInterlaceGaussPolicy,CHECKING_POLICY> (
135                                                                            values,
136                                                                            array.getDim(),
137                                                                            array.getNbElem(),
138                                                                            array.getNbGeoType(),
139                                                                            array.getNbElemGeoC(),
140                                                                            array.getNbGaussGeo(),
141                                                                            true,false
142                                                                            );
143   else
144     myArray = new MEDMEM_Array<T, NoInterlaceGaussPolicy,CHECKING_POLICY> (
145                                                                            array.getDim(),
146                                                                            array.getNbElem(),
147                                                                            array.getNbGeoType(),
148                                                                            array.getNbElemGeoC(),
149                                                                            array.getNbGaussGeo()
150                                                                            );
151   for (int i=1; i <= array.getNbElem() ; i++ )
152     for (int k=1; k<= array.getNbGauss(i); k++ )
153       for (int j=1; j<= array.getDim(); j++ )
154         myArray->setIJK(i,j,k,array.getIJK(i,j,k));
155   
156   return myArray;
157
158 };
159
160 template  <class T, class CHECKING_POLICY>
161 MEDMEM_Array<T, NoInterlaceNoGaussPolicy, CHECKING_POLICY> *
162 ArrayConvert(
163              const MEDMEM_Array< T, FullInterlaceNoGaussPolicy, CHECKING_POLICY > &array, T* values=0
164              )
165 {
166   MEDMEM_Array<T,NoInterlaceNoGaussPolicy,CHECKING_POLICY> * myArray;
167   if(values)
168     myArray=new MEDMEM_Array<T, NoInterlaceNoGaussPolicy, CHECKING_POLICY> ( values,
169                                                                              array.getDim(),
170                                                                              array.getNbElem(),
171                                                                              true,false
172                                                                              );
173   else
174     myArray = new MEDMEM_Array<T, NoInterlaceNoGaussPolicy, CHECKING_POLICY> (
175                                                                               array.getDim(),
176                                                                               array.getNbElem()
177                                                                               );
178   for (int i=1; i <= array.getNbElem() ; i++ )
179     for (int j=1; j<= array.getDim(); j++ )
180       myArray->setIJ(i,j,array.getIJ(i,j));
181
182   return myArray;
183
184 };
185
186 template  <class T, class CHECKING_POLICY>
187 MEDMEM_Array<T, FullInterlaceNoGaussPolicy, CHECKING_POLICY> *
188 ArrayConvert(
189              const MEDMEM_Array< T, NoInterlaceByTypeNoGaussPolicy, CHECKING_POLICY > &array, T* values=0
190              )
191 {
192   MEDMEM_Array<T,FullInterlaceNoGaussPolicy,CHECKING_POLICY> * myArray;
193   if(values)
194     myArray=new MEDMEM_Array<T, FullInterlaceNoGaussPolicy, CHECKING_POLICY> ( values,
195                                                                              array.getDim(),
196                                                                              array.getNbElem(),
197                                                                              true,false
198                                                                              );
199   else
200     myArray = new MEDMEM_Array<T, FullInterlaceNoGaussPolicy, CHECKING_POLICY> (
201                                                                               array.getDim(),
202                                                                               array.getNbElem()
203                                                                               );
204   for (int i=1; i <= array.getNbElem() ; i++ )
205     for (int j=1; j<= array.getDim(); j++ )
206       myArray->setIJ(i,j,array.getIJ(i,j));
207   
208   return myArray;
209
210 }
211
212 template  <class T, class CHECKING_POLICY>
213 MEDMEM_Array<T, NoInterlaceNoGaussPolicy, CHECKING_POLICY> *
214 ArrayConvert2No(
215              const MEDMEM_Array< T, NoInterlaceByTypeNoGaussPolicy, CHECKING_POLICY > &array, T* values=0
216              )
217 {
218   MEDMEM_Array<T,NoInterlaceNoGaussPolicy,CHECKING_POLICY> * myArray;
219   if(values)
220     myArray=new MEDMEM_Array<T, NoInterlaceNoGaussPolicy, CHECKING_POLICY> ( values,
221                                                                              array.getDim(),
222                                                                              array.getNbElem(),
223                                                                              true,false
224                                                                              );
225   else
226     myArray = new MEDMEM_Array<T, NoInterlaceNoGaussPolicy, CHECKING_POLICY> (
227                                                                               array.getDim(),
228                                                                               array.getNbElem()
229                                                                               );
230   for (int i=1; i <= array.getNbElem() ; i++ )
231     for (int j=1; j<= array.getDim(); j++ )
232       myArray->setIJ(i,j,array.getIJ(i,j));
233   
234   return myArray;
235
236 };
237
238 template  <class T, class CHECKING_POLICY>
239 MEDMEM_Array<T, FullInterlaceNoGaussPolicy, CHECKING_POLICY> *
240 ArrayConvert(
241              const MEDMEM_Array< T, NoInterlaceNoGaussPolicy, CHECKING_POLICY > &array, T* values=0
242              )
243 {
244   MEDMEM_Array<T,FullInterlaceNoGaussPolicy,CHECKING_POLICY> * myArray;
245   if(values)
246     myArray= new MEDMEM_Array<T, FullInterlaceNoGaussPolicy, CHECKING_POLICY> (values,
247                                                                                array.getDim(),
248                                                                                array.getNbElem(),
249                                                                                true,false
250                                                                                );
251   else
252     myArray= new MEDMEM_Array<T, FullInterlaceNoGaussPolicy, CHECKING_POLICY> (
253                                                                                array.getDim(),
254                                                                                array.getNbElem()
255                                                                                );
256   for (int i=1; i <= array.getNbElem() ; i++ )
257     for (int j=1; j<= array.getDim(); j++ )
258       myArray->setIJ(i,j,array.getIJ(i,j));
259
260   return myArray;
261
262 };
263
264
265
266 // template  <class T,class INTERLACING_POLICY,class INTERLACING_POLICY_OTHER,
267 //         class CHECKING_POLICY>
268 // void ArrayConvert(
269 //                const MEDMEM_Array< T, INTERLACING_POLICY, CHECKING_POLICY > & arrayin,
270 //                MEDMEM_Array< T, INTERLACING_POLICY_OTHER, CHECKING_POLICY> * & arrayout
271 //                )
272 // {
273
274 //   MEDMEM_Array<T,INTERLACING_POLICY_OTHER,CHECKING_POLICY> *  myArray;
275 //   myArray= new MEDMEM_Array< T, INTERLACING_POLICY_OTHER, CHECKING_POLICY > (
276 //                    arrayin.getDim(),
277 //                    arrayin.getNbElem(),
278 //                    arrayin.getNbGeoType(),
279 //                    arrayin.getNbElemGeoC(),
280 //                    arrayin.getNbGaussGeo()
281 //                    );
282
283 //   for (int i=1; i <= arrayin.getNbElem() ; i++ )
284 //     for (int k=1; k<= arrayin.getNbGauss(i); k++ )
285 //       for (int j=1; j<= arrayin.getDim(); j++ )
286 //      myArray->setIJK(i,j,k,arrayin.getIJK(i,j,k));
287
288 //   arrayout=myArray;
289
290 // };
291
292
293
294
295
296 // template  <class ARRAY_ELEMENT_TYPE,
297 //         class GAUSS_TAG,class CHECKING_POLICY=IndexCheckPolicy>
298 //            typename MEDMEM_ArrayInterface<ARRAY_ELEMENT_TYPE,
299 //                    FullInterlace,
300 //                    GAUSS_TAG,
301 //                    CHECKING_POLICY>::Array &
302 // convertBis(const typename MEDMEM_ArrayInterface<
303 //         ARRAY_ELEMENT_TYPE,
304 //         NoInterlace,
305 //         GAUSS_TAG,
306 //         CHECKING_POLICY>::Array & array ) {
307 //   std::cout << "-------- Convert 3" << std::endl;
308 // };
309
310 } //END NAMESPACE
311 #endif