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.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include "MEDMEM_ArrayInterface.hxx"
24 #include "MEDMEM_Field.hxx"
25 #include "MEDMEM_IndexCheckingPolicy.hxx"
26 #include "MEDMEM_ArrayConvert.hxx"
28 using namespace MEDMEM;
33 const int nbelem1 = 20;
35 // TEST n° 1 FullInterlace et NoGauss
36 std::cout << std::endl;
37 std::cout << "Test de MEDMEM_Array en FullInterlace et NoGauss : " << std::endl;
38 std::cout << std::endl;
41 const double * myArray1Ptr = 0;
42 const double array1Ref[] = { 11 , 12 , 21 , 22 , 31 , 32 , 41 , 42 , 51 , 52 ,
43 61 , 62 , 71 , 72 , 81 , 82 , 91 , 92 , 101 , 102 ,
44 111 , 112 , 121 , 122 , 131 , 132 , 141 , 142 ,
45 151 , 152 , 161 , 162 , 171 , 172 , 181 , 182 ,
46 191 , 192 , 201 , 202 };
48 const double array2Ref[] = { 11 , 21 , 31 , 41 , 51 , 61 , 71 , 81 , 91 , 101
49 , 111 , 121 , 131 , 141 , 151 , 161 , 171 , 181
51 12 , 22 , 32 , 42 , 52 , 62 , 72 , 82 , 92 , 102
52 , 112 , 122 , 132 , 142 , 152 , 162 , 172 , 182
55 MEDMEM_Array<double> myArray1(mdim,nbelem1);
57 for (int i =1; i <= nbelem1; i++)
58 for (int j =1; j <= mdim; j++)
59 myArray1.setIJ(i,j,i*10+j);
61 myArray1Ptr = myArray1.getPtr();
62 for (int i =0; i < mdim*nbelem1; i++)
63 test1ok = test1ok && ( myArray1Ptr[i] == array1Ref[i] );
65 std::cout << "- Egualité de myArray1 et de myArray1Ref : " << test1ok << std::endl ;
68 MEDMEM_Array<double> myArray1bis(myArray1, false);
69 myArray1Ptr = myArray1bis.getPtr();
70 for (int i =0; i < mdim*nbelem1; i++)
71 test1ok = test1ok && ( myArray1Ptr[i] == array1Ref[i] );
72 std::cout << "- Constructeur par recopie en FullInterlace et NoGauss : " << test1ok << std::endl;
75 MEDMEM_Array<double> myArray1ter;
76 myArray1ter = myArray1;
77 myArray1Ptr = myArray1ter.getPtr();
78 for (int i =0; i < mdim*nbelem1; i++)
79 test1ok = test1ok && ( myArray1Ptr[i] == array1Ref[i] );
80 std::cout << "- Opérateur d'affectation en FullInterlace et NoGauss : " << test1ok << std::endl;
84 MEDMEM_Array<double> myArray1qua(mdim,nbelem1);
85 myArray1Ptr = myArray1qua.getPtr();
87 for (int i =1; i <= nbelem1; i++)
88 myArray1qua.setRow(i,&array1Ref[(i-1)*mdim]);
90 for (int i =0; i < mdim*nbelem1; i++)
91 test1ok = test1ok && ( myArray1Ptr[i] == array1Ref[i] );
92 std::cout << "- Méthode setRow en FullInterlace et NoGauss : " << test1ok << std::endl;
94 std::cout << "- Test de levée d'exception pour getColumn : ";
96 myArray1qua.getColumn(1);
98 catch (MEDMEM::MEDEXCEPTION &m) {
99 std::cout << m.what() << endl ;
103 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> * myArray1cin = ArrayConvert(myArray1);
104 myArray1Ptr = myArray1cin->getPtr();
106 for (int j=1; j <= mdim; j++)
107 for (int i=1; i <= nbelem1 ; i++ ) {
109 && ( myArray1cin->getIJ(i,j) == array2Ref[elemno] )
110 && ( myArray1Ptr[elemno] == array2Ref[elemno] );
113 std::cout << "- Convertion du mode FullInterlaceNoGaussPolicy au mode NoInterlaceNoGaussPolicy : "
114 << test1ok << std::endl;
118 // TEST n°2 NoInterlace et NoGauss
119 std::cout << std::endl;
120 std::cout << "Test de MEDMEM_Array en NoInterlace et NoGauss : " << std::endl;
121 std::cout << std::endl;
124 const double * myArray2Ptr = 0;
126 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> myArray2(mdim,nbelem1);
128 for (int i =1; i <= nbelem1; i++)
129 for (int j =1; j <= mdim; j++)
130 myArray2.setIJ(i,j,i*10+j);
132 myArray2Ptr = myArray2.getPtr();
133 for (int i =0; i < mdim*nbelem1; i++)
134 test2ok = test2ok && ( myArray2Ptr[i] == array2Ref[i] );
136 std::cout << "- Egualité de myArray2 et de myArray2Ref : " << test2ok << std::endl ;
139 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> myArray2bis(myArray2, false);
140 myArray2Ptr = myArray2bis.getPtr();
141 for (int i =0; i < mdim*nbelem1; i++)
142 test2ok = test2ok && ( myArray2Ptr[i] == array2Ref[i] );
143 std::cout << "- Constructeur par recopie en NoInterlace et NoGauss : " << test2ok << std::endl;
146 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> myArray2ter;
147 myArray2ter = myArray2;
148 myArray2Ptr = myArray2ter.getPtr();
149 for (int i =0; i < mdim*nbelem1; i++)
150 test2ok = test2ok && ( myArray2Ptr[i] == array2Ref[i] );
151 std::cout << "- Opérateur d'affectation en NoInterlace et NoGauss : " << test2ok << std::endl;
154 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> myArray2qua(mdim,nbelem1);
155 myArray2Ptr = myArray2qua.getPtr();
157 for (int j =1; j <= mdim; j++)
158 myArray2qua.setColumn(j,&array2Ref[nbelem1*(j-1)]);
160 for (int i =0; i < mdim*nbelem1; i++)
161 test2ok = test2ok && ( myArray2Ptr[i] == array2Ref[i] );
162 std::cout << "- Méthode setColumn en NoInterlace et NoGauss : " << test2ok << std::endl;
164 std::cout << "- Test de levée d'exception pour getRow : " ;
166 myArray2qua.getRow(1);
168 catch (MEDMEM::MEDEXCEPTION &m) {
169 std::cout << m.what() << endl ;
173 MEDMEM_Array<double,FullInterlaceNoGaussPolicy> * myArray2cin = ArrayConvert(myArray2);
174 myArray2Ptr = myArray2cin->getPtr();
176 for (int i=1; i <= nbelem1 ; i++ )
177 for (int j=1; j <= mdim; j++) {
179 && ( myArray2cin->getIJ(i,j) == array1Ref[elemno] )
180 && ( myArray2Ptr[elemno] == array1Ref[elemno] );
183 std::cout << "- Convertion du mode NoInterlaceNoGaussPolicy au mode FullInterlaceNoGaussPolicy : "
184 << test2ok << std::endl;
187 // TEST n°3 FullInterlace et Gauss
188 const int nbelem2 = 5;
189 const int nbtypegeo = 2;
190 const int nbelgeoc[nbtypegeo+1] = {1,3,6};
191 const int nbgaussgeo[nbtypegeo+1] = {-1,2,3};
193 std::cout << std::endl;
194 std::cout << "Test de MEDMEM_Array en FullInterlace et Gauss : " << std::endl;
195 std::cout << std::endl;
198 const double * myArray3Ptr = 0;
199 const double array3Ref[] = {1.11 , 1.12 , 1.21 , 1.22 ,
200 2.11 , 2.12 , 2.21 , 2.22 ,
201 13.11 , 13.12 , 13.21 , 13.22 , 13.31 , 13.32 ,
202 14.11 , 14.12 , 14.21 , 14.22 , 14.31 , 14.32 ,
203 15.11 , 15.12 , 15.21 , 15.22 , 15.31 , 15.32 };
205 const double array4Ref[] = { 1.11 , 1.21 , 2.11 , 2.21,
206 13.11 , 13.21 , 13.31 , 14.11 , 14.21 , 14.31 ,
207 15.11 , 15.21 , 15.31 ,
208 1.12 , 1.22 , 2.12 , 2.22 ,
209 13.12 , 13.22 , 13.32 , 14.12 , 14.22 , 14.32 ,
210 15.12 , 15.22 , 15.32 };
212 MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray3(mdim,nbelem2,nbtypegeo,nbelgeoc,nbgaussgeo);
215 for (int ntyp=1; ntyp <= nbtypegeo; ntyp++ ) {
216 for (int i=0; i < (nbelgeoc[ntyp]-nbelgeoc[ntyp-1]) ; i++ ) {
217 for (int k=1; k <= nbgaussgeo[ntyp]; k++)
218 for (int j=1; j <= mdim; j++) {
219 myArray3.setIJK(elemno,j,k,elemno+(ntyp-1)*10+0.1*k+0.01*j);
224 myArray3Ptr = myArray3.getPtr();
225 for (int i =0; i < myArray3.getArraySize(); i++)
226 test3ok = test3ok && ( myArray3Ptr[i] == array3Ref[i] );
228 std::cout << "- Egualité de myArray3 et de myArray3Ref : " << test3ok << std::endl ;
231 MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray3bis(myArray3, false);
232 myArray3Ptr = myArray3bis.getPtr();
235 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
236 for (int k=1; k <= myArray3bis.getNbGauss(i); k++)
237 for (int j=1; j <= mdim; j++) {
239 && ( myArray3bis.getIJK(i,j,k) == array3Ref[elemno] )
240 && ( myArray3Ptr[elemno] == array3Ref[elemno] );
243 std::cout << "- Constructeur par recopie en FullInterlace et Gauss : " << test3ok << std::endl;
246 MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray3ter;
247 myArray3ter = myArray3; //Opérateur d'affectation
248 myArray3Ptr = myArray3ter.getPtr();
251 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
252 for (int k=1; k <= myArray3ter.getNbGauss(i); k++)
253 for (int j=1; j <= mdim; j++) {
255 && ( myArray3ter.getIJK(i,j,k) == array3Ref[elemno] )
256 && ( myArray3Ptr[elemno] == array3Ref[elemno] );
260 std::cout << "- Opérateur d'affectation en FullInterlace et Gauss : " << test3ok << std::endl;
264 MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray3qua(mdim,nbelem2,
265 nbtypegeo,nbelgeoc,nbgaussgeo);
266 myArray3Ptr = myArray3qua.getPtr();
269 for (int i =1; i <= nbelem2; i++){
270 myArray3qua.setRow(i,&array3Ref[cumul]);
271 cumul+=myArray3qua.getNbGauss(i)*mdim;
274 for (int i =0; i < myArray3qua.getArraySize(); i++)
275 test3ok = test3ok && ( myArray3Ptr[i] == array3Ref[i] );
276 std::cout << "- Méthode setRow en FullInterlace et Gauss : " << test3ok << std::endl;
278 std::cout << "- Test de levée d'exception pour getColumn : " ;
280 myArray3qua.getColumn(1);
282 catch (MEDMEM::MEDEXCEPTION &m) {
283 std::cout << m.what() << endl ;
287 MEDMEM_Array<double,NoInterlaceGaussPolicy> * myArray3cin = ArrayConvert(myArray3);
288 myArray3Ptr = myArray3cin->getPtr();
290 for (int j=1; j <= mdim; j++)
291 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
292 for (int k=1; k <= myArray3cin->getNbGauss(i); k++) {
294 && ( myArray3cin->getIJK(i,j,k) == array4Ref[elemno] )
295 && ( myArray3Ptr[elemno] == array4Ref[elemno] );
298 std::cout << "- Convertion du mode FullInterlaceGaussPolicy au mode NoInterlaceGaussPolicy : "
299 << test3ok << std::endl;
302 // TEST n°4 NoInterlace et Gauss
303 std::cout << std::endl;
304 std::cout << "Test de MEDMEM_Array en NoInterlace et Gauss : " << std::endl;
305 std::cout << std::endl;
308 const double * myArray4Ptr = 0;
310 MEDMEM_Array<double,NoInterlaceGaussPolicy> myArray4(mdim,nbelem2,nbtypegeo,nbelgeoc,nbgaussgeo);
313 for (int ntyp=1; ntyp <= nbtypegeo; ntyp++ ) {
314 for (int i=0; i < (nbelgeoc[ntyp]-nbelgeoc[ntyp-1]) ; i++ ) {
315 for (int k=1; k <= nbgaussgeo[ntyp]; k++)
316 for (int j=1; j <= mdim; j++) {
317 myArray4.setIJK(elemno,j,k,elemno+(ntyp-1)*10+0.1*k+0.01*j);
322 myArray4Ptr = myArray4.getPtr();
323 for (int i =0; i < myArray4.getArraySize(); i++) {
324 test4ok = test4ok && ( myArray4Ptr[i] == array4Ref[i] );
326 std::cout << "- Egualité de myArray4 et de myArray4Ref : " << test4ok << std::endl ;
329 MEDMEM_Array<double,NoInterlaceGaussPolicy> myArray4bis(myArray4, false);
330 myArray4Ptr = myArray4bis.getPtr();
333 for (int j=1; j <= mdim; j++)
334 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
335 for (int k=1; k <= myArray4bis.getNbGauss(i); k++) {
337 && ( myArray4bis.getIJK(i,j,k) == array4Ref[elemno] )
338 && ( myArray4Ptr[elemno] == array4Ref[elemno] );
341 std::cout << "- Constructeur par recopie en NoInterlace et Gauss : " << test4ok << std::endl;
344 MEDMEM_Array<double,NoInterlaceGaussPolicy> myArray4ter;
345 myArray4ter = myArray4; // Opérateur d'affectation
346 myArray4Ptr = myArray4ter.getPtr();
349 for (int j=1; j <= mdim; j++)
350 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
351 for (int k=1; k <= myArray4ter.getNbGauss(i); k++) {
353 && ( myArray4ter.getIJK(i,j,k) == array4Ref[elemno] )
354 && ( myArray4Ptr[elemno] == array4Ref[elemno] );
358 std::cout << "- Opérateur d'affectation en NoInterlace et Gauss : " << test4ok << std::endl;
362 MEDMEM_Array<double,NoInterlaceGaussPolicy> myArray4qua(mdim,nbelem2,nbtypegeo,nbelgeoc,nbgaussgeo);
363 myArray4Ptr = myArray4qua.getPtr();
365 for (int j =1; j <= mdim; j++)
366 myArray4qua.setColumn(j,&array4Ref[(myArray4qua.getArraySize()/mdim)*(j-1)]);
368 for (int i =0; i < myArray4qua.getArraySize(); i++)
369 test4ok = test4ok && ( myArray4Ptr[i] == array4Ref[i] );
370 std::cout << "- Méthode setColumn en NoInterlace et Gauss : " << test4ok << std::endl;
372 std::cout << "- Test de levée d'exception pour getRow : " ;
374 myArray4qua.getRow(1);
376 catch (MEDMEM::MEDEXCEPTION &m) {
377 std::cout << m.what() << endl ;
382 MEDMEM_Array<double,FullInterlaceGaussPolicy> * myArray4cin = ArrayConvert(myArray4);
383 //// MEDMEM_Array<double,FullInterlaceGaussPolicy> * myArray4cin;
384 ////ArrayConvert(myArray4,myArray4cin);
385 // typedef MEDMEM_Array<double,FullInterlaceGaussPolicy> MyArray;
386 // MyArray myArray4cin MyArray(myArray4);
387 // myArray4cin.convert(myArray4);
388 // MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray4cin(myArray4);
389 myArray4Ptr = myArray4cin->getPtr();
391 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
392 for (int k=1; k <= myArray4cin->getNbGauss(i); k++)
393 for (int j=1; j <= mdim; j++) {
395 && ( myArray4cin->getIJK(i,j,k) == array3Ref[elemno] )
396 && ( myArray4cin->getIJK(i,j,k) == myArray3.getIJK(i,j,k) )
397 && ( myArray4Ptr[elemno] == array3Ref[elemno] );
401 std::cout << "- Convertion du mode NoInterlaceGaussPolicy au mode FullInterlaceGaussPolicy : "
402 << test4ok << std::endl;
405 //TEST DES METHODES D'INTERROGATION en NoInterlace et Gauss :
406 // MEDMEM_ArrayInterface<double,NoInterlace,Gauss>::Array & myArray4bis = myField4bis.getArray();
408 std::cout << std::endl;
409 std::cout << "Test de la méthode getDim : " << myArray4bis.getDim() << std::endl;
410 std::cout << "Test de la méthode getNbelem : " << myArray4bis.getNbElem() << std::endl;
411 std::cout << "Test de la méthode getArraySize : " << myArray4bis.getArraySize() << std::endl;
412 std::cout << "Test de la méthode getInterlacingType : " << myArray4bis.getInterlacingType() << std::endl;
415 // Test de levée d'exception si MED_ARRAY compilée avec une politique de checking
416 std::cout << std::endl;
417 std::cout << "Test de levée d'exception pour indice incohérent " << std::endl;
419 myArray4.getIJ(0,2); //L'exception génère des blocks perdus (A voir)
421 catch (MEDMEM::MEDEXCEPTION &m) {
422 std::cout << m.what() << endl ;