1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
26 #include "MEDMEM_ArrayInterface.hxx"
27 #include "MEDMEM_Field.hxx"
28 #include "MEDMEM_IndexCheckingPolicy.hxx"
29 #include "MEDMEM_ArrayConvert.hxx"
31 using namespace MEDMEM;
36 const int nbelem1 = 20;
38 // TEST n° 1 FullInterlace et NoGauss
39 std::cout << std::endl;
40 std::cout << "Test de MEDMEM_Array en FullInterlace et NoGauss : " << std::endl;
41 std::cout << std::endl;
44 const double * myArray1Ptr = 0;
45 const double array1Ref[] = { 11 , 12 , 21 , 22 , 31 , 32 , 41 , 42 , 51 , 52 ,
46 61 , 62 , 71 , 72 , 81 , 82 , 91 , 92 , 101 , 102 ,
47 111 , 112 , 121 , 122 , 131 , 132 , 141 , 142 ,
48 151 , 152 , 161 , 162 , 171 , 172 , 181 , 182 ,
49 191 , 192 , 201 , 202 };
51 const double array2Ref[] = { 11 , 21 , 31 , 41 , 51 , 61 , 71 , 81 , 91 , 101
52 , 111 , 121 , 131 , 141 , 151 , 161 , 171 , 181
54 12 , 22 , 32 , 42 , 52 , 62 , 72 , 82 , 92 , 102
55 , 112 , 122 , 132 , 142 , 152 , 162 , 172 , 182
58 MEDMEM_Array<double> myArray1(mdim,nbelem1);
60 for (int i =1; i <= nbelem1; i++)
61 for (int j =1; j <= mdim; j++)
62 myArray1.setIJ(i,j,i*10+j);
64 myArray1Ptr = myArray1.getPtr();
65 for (int i =0; i < mdim*nbelem1; i++)
66 test1ok = test1ok && ( myArray1Ptr[i] == array1Ref[i] );
68 std::cout << "- Egualité de myArray1 et de myArray1Ref : " << test1ok << std::endl ;
71 MEDMEM_Array<double> myArray1bis(myArray1, false);
72 myArray1Ptr = myArray1bis.getPtr();
73 for (int i =0; i < mdim*nbelem1; i++)
74 test1ok = test1ok && ( myArray1Ptr[i] == array1Ref[i] );
75 std::cout << "- Constructeur par recopie en FullInterlace et NoGauss : " << test1ok << std::endl;
78 MEDMEM_Array<double> myArray1ter;
79 myArray1ter = myArray1;
80 myArray1Ptr = myArray1ter.getPtr();
81 for (int i =0; i < mdim*nbelem1; i++)
82 test1ok = test1ok && ( myArray1Ptr[i] == array1Ref[i] );
83 std::cout << "- Opérateur d'affectation en FullInterlace et NoGauss : " << test1ok << std::endl;
87 MEDMEM_Array<double> myArray1qua(mdim,nbelem1);
88 myArray1Ptr = myArray1qua.getPtr();
90 for (int i =1; i <= nbelem1; i++)
91 myArray1qua.setRow(i,&array1Ref[(i-1)*mdim]);
93 for (int i =0; i < mdim*nbelem1; i++)
94 test1ok = test1ok && ( myArray1Ptr[i] == array1Ref[i] );
95 std::cout << "- Méthode setRow en FullInterlace et NoGauss : " << test1ok << std::endl;
97 std::cout << "- Test de levée d'exception pour getColumn : ";
99 myArray1qua.getColumn(1);
101 catch (MEDMEM::MEDEXCEPTION &m) {
102 std::cout << m.what() << endl ;
106 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> * myArray1cin = ArrayConvert(myArray1);
107 myArray1Ptr = myArray1cin->getPtr();
109 for (int j=1; j <= mdim; j++)
110 for (int i=1; i <= nbelem1 ; i++ ) {
112 && ( myArray1cin->getIJ(i,j) == array2Ref[elemno] )
113 && ( myArray1Ptr[elemno] == array2Ref[elemno] );
116 std::cout << "- Convertion du mode FullInterlaceNoGaussPolicy au mode NoInterlaceNoGaussPolicy : "
117 << test1ok << std::endl;
121 // TEST n°2 NoInterlace et NoGauss
122 std::cout << std::endl;
123 std::cout << "Test de MEDMEM_Array en NoInterlace et NoGauss : " << std::endl;
124 std::cout << std::endl;
127 const double * myArray2Ptr = 0;
129 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> myArray2(mdim,nbelem1);
131 for (int i =1; i <= nbelem1; i++)
132 for (int j =1; j <= mdim; j++)
133 myArray2.setIJ(i,j,i*10+j);
135 myArray2Ptr = myArray2.getPtr();
136 for (int i =0; i < mdim*nbelem1; i++)
137 test2ok = test2ok && ( myArray2Ptr[i] == array2Ref[i] );
139 std::cout << "- Egualité de myArray2 et de myArray2Ref : " << test2ok << std::endl ;
142 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> myArray2bis(myArray2, false);
143 myArray2Ptr = myArray2bis.getPtr();
144 for (int i =0; i < mdim*nbelem1; i++)
145 test2ok = test2ok && ( myArray2Ptr[i] == array2Ref[i] );
146 std::cout << "- Constructeur par recopie en NoInterlace et NoGauss : " << test2ok << std::endl;
149 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> myArray2ter;
150 myArray2ter = myArray2;
151 myArray2Ptr = myArray2ter.getPtr();
152 for (int i =0; i < mdim*nbelem1; i++)
153 test2ok = test2ok && ( myArray2Ptr[i] == array2Ref[i] );
154 std::cout << "- Opérateur d'affectation en NoInterlace et NoGauss : " << test2ok << std::endl;
157 MEDMEM_Array<double,NoInterlaceNoGaussPolicy> myArray2qua(mdim,nbelem1);
158 myArray2Ptr = myArray2qua.getPtr();
160 for (int j =1; j <= mdim; j++)
161 myArray2qua.setColumn(j,&array2Ref[nbelem1*(j-1)]);
163 for (int i =0; i < mdim*nbelem1; i++)
164 test2ok = test2ok && ( myArray2Ptr[i] == array2Ref[i] );
165 std::cout << "- Méthode setColumn en NoInterlace et NoGauss : " << test2ok << std::endl;
167 std::cout << "- Test de levée d'exception pour getRow : " ;
169 myArray2qua.getRow(1);
171 catch (MEDMEM::MEDEXCEPTION &m) {
172 std::cout << m.what() << endl ;
176 MEDMEM_Array<double,FullInterlaceNoGaussPolicy> * myArray2cin = ArrayConvert(myArray2);
177 myArray2Ptr = myArray2cin->getPtr();
179 for (int i=1; i <= nbelem1 ; i++ )
180 for (int j=1; j <= mdim; j++) {
182 && ( myArray2cin->getIJ(i,j) == array1Ref[elemno] )
183 && ( myArray2Ptr[elemno] == array1Ref[elemno] );
186 std::cout << "- Convertion du mode NoInterlaceNoGaussPolicy au mode FullInterlaceNoGaussPolicy : "
187 << test2ok << std::endl;
190 // TEST n°3 FullInterlace et Gauss
191 const int nbelem2 = 5;
192 const int nbtypegeo = 2;
193 const int nbelgeoc[nbtypegeo+1] = {1,3,6};
194 const int nbgaussgeo[nbtypegeo+1] = {-1,2,3};
196 std::cout << std::endl;
197 std::cout << "Test de MEDMEM_Array en FullInterlace et Gauss : " << std::endl;
198 std::cout << std::endl;
201 const double * myArray3Ptr = 0;
202 const double array3Ref[] = {1.11 , 1.12 , 1.21 , 1.22 ,
203 2.11 , 2.12 , 2.21 , 2.22 ,
204 13.11 , 13.12 , 13.21 , 13.22 , 13.31 , 13.32 ,
205 14.11 , 14.12 , 14.21 , 14.22 , 14.31 , 14.32 ,
206 15.11 , 15.12 , 15.21 , 15.22 , 15.31 , 15.32 };
208 const double array4Ref[] = { 1.11 , 1.21 , 2.11 , 2.21,
209 13.11 , 13.21 , 13.31 , 14.11 , 14.21 , 14.31 ,
210 15.11 , 15.21 , 15.31 ,
211 1.12 , 1.22 , 2.12 , 2.22 ,
212 13.12 , 13.22 , 13.32 , 14.12 , 14.22 , 14.32 ,
213 15.12 , 15.22 , 15.32 };
215 MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray3(mdim,nbelem2,nbtypegeo,nbelgeoc,nbgaussgeo);
218 for (int ntyp=1; ntyp <= nbtypegeo; ntyp++ ) {
219 for (int i=0; i < (nbelgeoc[ntyp]-nbelgeoc[ntyp-1]) ; i++ ) {
220 for (int k=1; k <= nbgaussgeo[ntyp]; k++)
221 for (int j=1; j <= mdim; j++) {
222 myArray3.setIJK(elemno,j,k,elemno+(ntyp-1)*10+0.1*k+0.01*j);
227 myArray3Ptr = myArray3.getPtr();
228 for (int i =0; i < myArray3.getArraySize(); i++)
229 test3ok = test3ok && ( myArray3Ptr[i] == array3Ref[i] );
231 std::cout << "- Egualité de myArray3 et de myArray3Ref : " << test3ok << std::endl ;
234 MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray3bis(myArray3, false);
235 myArray3Ptr = myArray3bis.getPtr();
238 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
239 for (int k=1; k <= myArray3bis.getNbGauss(i); k++)
240 for (int j=1; j <= mdim; j++) {
242 && ( myArray3bis.getIJK(i,j,k) == array3Ref[elemno] )
243 && ( myArray3Ptr[elemno] == array3Ref[elemno] );
246 std::cout << "- Constructeur par recopie en FullInterlace et Gauss : " << test3ok << std::endl;
249 MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray3ter;
250 myArray3ter = myArray3; //Opérateur d'affectation
251 myArray3Ptr = myArray3ter.getPtr();
254 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
255 for (int k=1; k <= myArray3ter.getNbGauss(i); k++)
256 for (int j=1; j <= mdim; j++) {
258 && ( myArray3ter.getIJK(i,j,k) == array3Ref[elemno] )
259 && ( myArray3Ptr[elemno] == array3Ref[elemno] );
263 std::cout << "- Opérateur d'affectation en FullInterlace et Gauss : " << test3ok << std::endl;
267 MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray3qua(mdim,nbelem2,
268 nbtypegeo,nbelgeoc,nbgaussgeo);
269 myArray3Ptr = myArray3qua.getPtr();
272 for (int i =1; i <= nbelem2; i++){
273 myArray3qua.setRow(i,&array3Ref[cumul]);
274 cumul+=myArray3qua.getNbGauss(i)*mdim;
277 for (int i =0; i < myArray3qua.getArraySize(); i++)
278 test3ok = test3ok && ( myArray3Ptr[i] == array3Ref[i] );
279 std::cout << "- Méthode setRow en FullInterlace et Gauss : " << test3ok << std::endl;
281 std::cout << "- Test de levée d'exception pour getColumn : " ;
283 myArray3qua.getColumn(1);
285 catch (MEDMEM::MEDEXCEPTION &m) {
286 std::cout << m.what() << endl ;
290 MEDMEM_Array<double,NoInterlaceGaussPolicy> * myArray3cin = ArrayConvert(myArray3);
291 myArray3Ptr = myArray3cin->getPtr();
293 for (int j=1; j <= mdim; j++)
294 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
295 for (int k=1; k <= myArray3cin->getNbGauss(i); k++) {
297 && ( myArray3cin->getIJK(i,j,k) == array4Ref[elemno] )
298 && ( myArray3Ptr[elemno] == array4Ref[elemno] );
301 std::cout << "- Convertion du mode FullInterlaceGaussPolicy au mode NoInterlaceGaussPolicy : "
302 << test3ok << std::endl;
305 // TEST n°4 NoInterlace et Gauss
306 std::cout << std::endl;
307 std::cout << "Test de MEDMEM_Array en NoInterlace et Gauss : " << std::endl;
308 std::cout << std::endl;
311 const double * myArray4Ptr = 0;
313 MEDMEM_Array<double,NoInterlaceGaussPolicy> myArray4(mdim,nbelem2,nbtypegeo,nbelgeoc,nbgaussgeo);
316 for (int ntyp=1; ntyp <= nbtypegeo; ntyp++ ) {
317 for (int i=0; i < (nbelgeoc[ntyp]-nbelgeoc[ntyp-1]) ; i++ ) {
318 for (int k=1; k <= nbgaussgeo[ntyp]; k++)
319 for (int j=1; j <= mdim; j++) {
320 myArray4.setIJK(elemno,j,k,elemno+(ntyp-1)*10+0.1*k+0.01*j);
325 myArray4Ptr = myArray4.getPtr();
326 for (int i =0; i < myArray4.getArraySize(); i++) {
327 test4ok = test4ok && ( myArray4Ptr[i] == array4Ref[i] );
329 std::cout << "- Egualité de myArray4 et de myArray4Ref : " << test4ok << std::endl ;
332 MEDMEM_Array<double,NoInterlaceGaussPolicy> myArray4bis(myArray4, false);
333 myArray4Ptr = myArray4bis.getPtr();
336 for (int j=1; j <= mdim; j++)
337 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
338 for (int k=1; k <= myArray4bis.getNbGauss(i); k++) {
340 && ( myArray4bis.getIJK(i,j,k) == array4Ref[elemno] )
341 && ( myArray4Ptr[elemno] == array4Ref[elemno] );
344 std::cout << "- Constructeur par recopie en NoInterlace et Gauss : " << test4ok << std::endl;
347 MEDMEM_Array<double,NoInterlaceGaussPolicy> myArray4ter;
348 myArray4ter = myArray4; // Opérateur d'affectation
349 myArray4Ptr = myArray4ter.getPtr();
352 for (int j=1; j <= mdim; j++)
353 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
354 for (int k=1; k <= myArray4ter.getNbGauss(i); k++) {
356 && ( myArray4ter.getIJK(i,j,k) == array4Ref[elemno] )
357 && ( myArray4Ptr[elemno] == array4Ref[elemno] );
361 std::cout << "- Opérateur d'affectation en NoInterlace et Gauss : " << test4ok << std::endl;
365 MEDMEM_Array<double,NoInterlaceGaussPolicy> myArray4qua(mdim,nbelem2,nbtypegeo,nbelgeoc,nbgaussgeo);
366 myArray4Ptr = myArray4qua.getPtr();
368 for (int j =1; j <= mdim; j++)
369 myArray4qua.setColumn(j,&array4Ref[(myArray4qua.getArraySize()/mdim)*(j-1)]);
371 for (int i =0; i < myArray4qua.getArraySize(); i++)
372 test4ok = test4ok && ( myArray4Ptr[i] == array4Ref[i] );
373 std::cout << "- Méthode setColumn en NoInterlace et Gauss : " << test4ok << std::endl;
375 std::cout << "- Test de levée d'exception pour getRow : " ;
377 myArray4qua.getRow(1);
379 catch (MEDMEM::MEDEXCEPTION &m) {
380 std::cout << m.what() << endl ;
385 MEDMEM_Array<double,FullInterlaceGaussPolicy> * myArray4cin = ArrayConvert(myArray4);
386 //// MEDMEM_Array<double,FullInterlaceGaussPolicy> * myArray4cin;
387 ////ArrayConvert(myArray4,myArray4cin);
388 // typedef MEDMEM_Array<double,FullInterlaceGaussPolicy> MyArray;
389 // MyArray myArray4cin MyArray(myArray4);
390 // myArray4cin.convert(myArray4);
391 // MEDMEM_Array<double,FullInterlaceGaussPolicy> myArray4cin(myArray4);
392 myArray4Ptr = myArray4cin->getPtr();
394 for (int i=1; i < nbelgeoc[nbtypegeo] ; i++ )
395 for (int k=1; k <= myArray4cin->getNbGauss(i); k++)
396 for (int j=1; j <= mdim; j++) {
398 && ( myArray4cin->getIJK(i,j,k) == array3Ref[elemno] )
399 && ( myArray4cin->getIJK(i,j,k) == myArray3.getIJK(i,j,k) )
400 && ( myArray4Ptr[elemno] == array3Ref[elemno] );
404 std::cout << "- Convertion du mode NoInterlaceGaussPolicy au mode FullInterlaceGaussPolicy : "
405 << test4ok << std::endl;
408 //TEST DES METHODES D'INTERROGATION en NoInterlace et Gauss :
409 // MEDMEM_ArrayInterface<double,NoInterlace,Gauss>::Array & myArray4bis = myField4bis.getArray();
411 std::cout << std::endl;
412 std::cout << "Test de la méthode getDim : " << myArray4bis.getDim() << std::endl;
413 std::cout << "Test de la méthode getNbelem : " << myArray4bis.getNbElem() << std::endl;
414 std::cout << "Test de la méthode getArraySize : " << myArray4bis.getArraySize() << std::endl;
415 std::cout << "Test de la méthode getInterlacingType : " << myArray4bis.getInterlacingType() << std::endl;
418 // Test de levée d'exception si MED_ARRAY compilée avec une politique de checking
419 std::cout << std::endl;
420 std::cout << "Test de levée d'exception pour indice incohérent " << std::endl;
422 myArray4.getIJ(0,2); //L'exception génère des blocks perdus (A voir)
424 catch (MEDMEM::MEDEXCEPTION &m) {
425 std::cout << m.what() << endl ;