1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D
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
19 // Author : Anthony Geay (CEA/DEN)
21 #include "MEDCouplingBasicsTest.hxx"
22 #include "MEDCouplingUMesh.hxx"
23 #include "MEDCouplingCMesh.hxx"
24 #include "MEDCouplingExtrudedMesh.hxx"
25 #include "MEDCouplingFieldDouble.hxx"
26 #include "MEDCouplingMemArray.hxx"
27 #include "MEDCouplingMultiFields.hxx"
29 void CppExample_DataArrayInt_buildPermutationArr()
31 using namespace ParaMEDMEM;
32 //! [CppSnippet_DataArrayInt_buildPermutationArr_1]
33 DataArrayInt *a=DataArrayInt::New();
34 const int vala[5]={4,5,6,7,8};
36 std::copy(vala,vala+5,a->getPointer());
37 DataArrayInt *b=DataArrayInt::New();
38 const int valb[5]={5,4,8,6,7};
40 std::copy(valb,valb+5,b->getPointer());
41 DataArrayInt *c=a->buildPermutationArr(*b);
42 //! [CppSnippet_DataArrayInt_buildPermutationArr_1]
43 const int expect1[5]={1,0,4,2,3};
44 CPPUNIT_ASSERT_EQUAL(5,c->getNumberOfTuples());
45 CPPUNIT_ASSERT_EQUAL(1,c->getNumberOfComponents());
46 CPPUNIT_ASSERT(std::equal(expect1,expect1+5,c->getConstPointer()));
47 CPPUNIT_ASSERT(a->isEqualWithoutConsideringStrAndOrder(*b));
53 void CppExample_DataArrayInt_invertArrayO2N2N2O()
55 using namespace ParaMEDMEM;
56 //! [CppSnippet_DataArrayInt_invertArrayO2N2N2O_1]
57 const int arr1[6]={2,0,4,1,5,3};
58 DataArrayInt *da=DataArrayInt::New();
60 std::copy(arr1,arr1+6,da->getPointer());
61 DataArrayInt *da2=da->invertArrayO2N2N2O(6);
62 const int expected1[6]={1,3,0,5,2,4};
64 CPPUNIT_ASSERT_EQUAL(expected1[i],da2->getIJ(i,0));
65 //! [CppSnippet_DataArrayInt_invertArrayO2N2N2O_1]
70 void CppExample_DataArrayInt_invertArrayN2O2O2N()
72 using namespace ParaMEDMEM;
73 //! [CppSnippet_DataArrayInt_invertArrayN2O2O2N_1]
74 const int arr1[6]={2,0,4,1,5,3};
75 DataArrayInt *da=DataArrayInt::New();
77 std::copy(arr1,arr1+6,da->getPointer());
78 DataArrayInt *da2=da->invertArrayN2O2O2N(6);
79 const int expected1[6]={1,3,0,5,2,4};
81 CPPUNIT_ASSERT_EQUAL(expected1[i],da2->getIJ(i,0));
82 //! [CppSnippet_DataArrayInt_invertArrayN2O2O2N_1]
87 void CppExample_DataArrayDouble_getIdsInRange()
89 using namespace ParaMEDMEM;
90 //! [CppSnippet_DataArrayDouble_getIdsInRange_1]
91 DataArrayDouble *da=DataArrayDouble::New();
95 DataArrayInt* da2 = da->getIdsInRange( 2.5, 6 );
96 //! [CppSnippet_DataArrayDouble_getIdsInRange_1]
101 void CppExample_DataArrayDouble_findCommonTuples()
103 using namespace ParaMEDMEM;
104 //! [CppSnippet_DataArrayDouble_findCommonTuples1]
105 DataArrayDouble *da=DataArrayDouble::New();
107 const double array2[12]={2.3,2.3, // 0
114 std::copy(array2,array2+12,da->getPointer());
115 //! [CppSnippet_DataArrayDouble_findCommonTuples1]
116 //! [CppSnippet_DataArrayDouble_findCommonTuples2]
117 DataArrayInt *c=0,*cI=0;
118 da->findCommonTuples(1e-1,-1,c,cI);
120 const int expected3[5]={0,3,4,1,2};
121 const int expected4[3]={0,3,5};
122 CPPUNIT_ASSERT(std::equal(expected3,expected3+5,c->getConstPointer()));
123 CPPUNIT_ASSERT(std::equal(expected4,expected4+3,cI->getConstPointer()));
127 //! [CppSnippet_DataArrayDouble_findCommonTuples2]
130 void CppExample_DataArrayDouble_Meld1()
132 using namespace ParaMEDMEM;
133 //! [CppSnippet_DataArrayDouble_Meld1_1]
134 const int sameNbTuples = 7;
136 DataArrayDouble *da1=DataArrayDouble::New();
137 da1->alloc(sameNbTuples,2);
138 da1->fillWithValue(7.);
139 da1->setInfoOnComponent(0,"c0da1");
140 da1->setInfoOnComponent(1,"c1da1");
142 DataArrayDouble *da2=DataArrayDouble::New();
143 da2->alloc(sameNbTuples,1);
145 da2->setInfoOnComponent(0,"c0da2");
148 //! [CppSnippet_DataArrayDouble_Meld1_1]
149 //! [CppSnippet_DataArrayDouble_Meld1_2]
152 //! [CppSnippet_DataArrayDouble_Meld1_2]
155 void CppExample_DataArrayInt_Meld1()
157 using namespace ParaMEDMEM;
158 //! [CppSnippet_DataArrayInt_Meld1_1]
159 const int sameNbTuples = 7;
161 DataArrayInt *da1=DataArrayInt::New();
162 da1->alloc(sameNbTuples,2);
163 da1->fillWithValue(7);
164 da1->setInfoOnComponent(0,"c0da1");
165 da1->setInfoOnComponent(1,"c1da1");
167 DataArrayInt *da2=DataArrayInt::New();
168 da2->alloc(sameNbTuples,1);
170 da2->setInfoOnComponent(0,"c0da2");
173 //! [CppSnippet_DataArrayInt_Meld1_1]
174 //! [CppSnippet_DataArrayInt_Meld1_2]
177 //! [CppSnippet_DataArrayInt_Meld1_2]
180 void CppExampleFieldDoubleBuildSubPart1()
182 //! [CppSnippetFieldDoubleBuildSubPart1_1]
183 ParaMEDMEM::MEDCouplingUMesh *mesh1=ParaMEDMEM::MEDCouplingBasicsTest::build2DTargetMesh_1();
184 ParaMEDMEM::MEDCouplingFieldDouble *f1=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_CELLS,ParaMEDMEM::ONE_TIME);
185 f1->setTime(2.3,5,6);
187 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
188 array->alloc(mesh1->getNumberOfCells(),2);
189 const double arr1[10]={3.,103.,4.,104.,5.,105.,6.,106.,7.,107.};
190 std::copy(arr1,arr1+10,array->getPointer());
193 //! [CppSnippetFieldDoubleBuildSubPart1_1]
194 //! [CppSnippetFieldDoubleBuildSubPart1_2]
195 const int part1[3]={2,1,4};
196 ParaMEDMEM::MEDCouplingFieldDouble *f2=f1->buildSubPart(part1,part1+3);
197 //! [CppSnippetFieldDoubleBuildSubPart1_2]
199 CPPUNIT_ASSERT_EQUAL(3,f2->getMesh()->getNumberOfCells());
200 CPPUNIT_ASSERT_EQUAL(6,f2->getMesh()->getNumberOfNodes());
201 CPPUNIT_ASSERT_EQUAL(2,f2->getMesh()->getSpaceDimension());
202 CPPUNIT_ASSERT_EQUAL(2,f2->getMesh()->getMeshDimension());
203 ParaMEDMEM::MEDCouplingUMesh *m2C=dynamic_cast<ParaMEDMEM::MEDCouplingUMesh *>(const_cast<ParaMEDMEM::MEDCouplingMesh *>(f2->getMesh()));
204 CPPUNIT_ASSERT_EQUAL(13,m2C->getMeshLength());
205 const double expected2[12]={0.2, -0.3, 0.7, -0.3, 0.2, 0.2, 0.7, 0.2, 0.2, 0.7, 0.7, 0.7};
206 for(int i=0;i<12;i++)
207 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],m2C->getCoords()->getIJ(0,i),1.e-12);
208 const double expected3[13]={3,2,3,1,3,0,2,1,4,4,5,3,2};
209 CPPUNIT_ASSERT(std::equal(expected3,expected3+13,m2C->getNodalConnectivity()->getConstPointer()));
210 const double expected4[4]={0,4,8,13};
211 CPPUNIT_ASSERT(std::equal(expected4,expected4+4,m2C->getNodalConnectivityIndex()->getConstPointer()));
214 //! [CppSnippetFieldDoubleBuildSubPart1_3]
215 f1=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_NODES,ParaMEDMEM::ONE_TIME);
216 f1->setTime(2.3,5,6);
218 array=ParaMEDMEM::DataArrayDouble::New();
219 array->alloc(mesh1->getNumberOfNodes(),2);
220 const double arr2[18]={3.,103.,4.,104.,5.,105.,6.,106.,7.,107.,8.,108.,9.,109.,10.,110.,11.,111.};
221 std::copy(arr2,arr2+18,array->getPointer());
224 //! [CppSnippetFieldDoubleBuildSubPart1_3]
225 //! [CppSnippetFieldDoubleBuildSubPart1_4]
226 const int part2[2]={1,2};
227 f2=f1->buildSubPart(part2,part2+2);
228 //! [CppSnippetFieldDoubleBuildSubPart1_4]
230 //idem previous because nodes of cell#4 are not fully present in part3
231 const int part3[2]={1,2};
232 ParaMEDMEM::DataArrayInt *arrr=ParaMEDMEM::DataArrayInt::New();
234 std::copy(part3,part3+2,arrr->getPointer());
235 f2=f1->buildSubPart(arrr);
239 const int part4[3]={1,2,4};
240 f2=f1->buildSubPart(part4,part4+3);
248 void CppSnippetUMeshStdBuild1()
250 //! [CppSnippetUMeshStdBuild1_1]
251 double coords[27]={-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0.,
252 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. };
253 int nodalConnPerCell[18]={0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4};
254 //! [CppSnippetUMeshStdBuild1_1]
255 //! [CppSnippetUMeshStdBuild1_2]
256 ParaMEDMEM::MEDCouplingUMesh *mesh=ParaMEDMEM::MEDCouplingUMesh::New("My2DMesh",2);
257 //! [CppSnippetUMeshStdBuild1_2]
258 //! [CppSnippetUMeshStdBuild1_3]
259 mesh->allocateCells(5);//You can put more than 5 if you want but not less.
260 mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,nodalConnPerCell);
261 mesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,nodalConnPerCell+4);
262 mesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,nodalConnPerCell+7);
263 mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,nodalConnPerCell+10);
264 mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,nodalConnPerCell+14);
265 mesh->finishInsertingCells();
266 //! [CppSnippetUMeshStdBuild1_3]
267 //! [CppSnippetUMeshStdBuild1_4]
268 ParaMEDMEM::DataArrayDouble *myCoords=ParaMEDMEM::DataArrayDouble::New();
269 myCoords->alloc(9,3);//here myCoords are declared to have 3 components, mesh will deduce that its spaceDim==3.
270 std::copy(coords,coords+27,myCoords->getPointer());
271 mesh->setCoords(myCoords);//myCorrds contains 9 tuples, that is to say mesh contains 9 nodes.
273 //! [CppSnippetUMeshStdBuild1_4]
274 mesh->checkCoherency();
275 //! [CppSnippetUMeshStdBuild1_5]
277 //! [CppSnippetUMeshStdBuild1_5]
280 void CppSnippetCMeshStdBuild1()
282 //! [CppSnippetCMeshStdBuild1_1]
283 double XCoords[9]={-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22};
284 double YCoords[7]={0.,0.1,0.37,0.45,0.47,0.49,1.007};
285 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New();
287 std::copy(XCoords,XCoords+9,arrX->getPointer());
288 arrX->setInfoOnComponent(0,"X [m]");
289 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New();
291 std::copy(YCoords,YCoords+7,arrY->getPointer());
292 arrY->setInfoOnComponent(0,"Y [m]");
293 //! [CppSnippetCMeshStdBuild1_1]
294 //! [CppSnippetCMeshStdBuild1_2]
295 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
296 mesh->setCoords(arrX,arrY);
299 //! [CppSnippetCMeshStdBuild1_2]
300 //! [CppSnippetCMeshStdBuild1_3]
301 CPPUNIT_ASSERT_EQUAL(8*6,mesh->getNumberOfCells());
302 CPPUNIT_ASSERT_EQUAL(9*7,mesh->getNumberOfNodes());
303 CPPUNIT_ASSERT_EQUAL(2,mesh->getSpaceDimension());
304 CPPUNIT_ASSERT_EQUAL(2,mesh->getMeshDimension());
305 //! [CppSnippetCMeshStdBuild1_3]
307 mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
308 arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
309 arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
310 //! [CppSnippetCMeshStdBuild1_2bis]
311 mesh->setCoordsAt(0,arrX);
313 mesh->setCoordsAt(1,arrY);
315 //! [CppSnippetCMeshStdBuild1_2bis]
316 CPPUNIT_ASSERT_EQUAL(8*6,mesh->getNumberOfCells());
317 CPPUNIT_ASSERT_EQUAL(9*7,mesh->getNumberOfNodes());
318 CPPUNIT_ASSERT_EQUAL(2,mesh->getSpaceDimension());
319 CPPUNIT_ASSERT_EQUAL(2,mesh->getMeshDimension());
320 //! [CppSnippetCMeshStdBuild1_4]
322 //! [CppSnippetCMeshStdBuild1_4]
325 void CppSnippetUMeshAdvBuild1()
327 //! [CppSnippetUMeshAdvBuild1_1]
328 double coords[27]={-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0.,
329 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. };
330 int nodalConnPerCell[23]={4,0,3,4,1, 3,1,4,2, 3,4,5,2, 4,6,7,4,3, 4,7,8,5,4};
331 int nodalConnPerCellIndex[6]={0,5,9,13,18,23};
332 //! [CppSnippetUMeshAdvBuild1_1]
333 //! [CppSnippetUMeshAdvBuild1_2]
334 ParaMEDMEM::MEDCouplingUMesh *mesh=ParaMEDMEM::MEDCouplingUMesh::New("My2DMesh",2);
335 //! [CppSnippetUMeshAdvBuild1_2]
336 //! [CppSnippetUMeshAdvBuild1_3]
337 ParaMEDMEM::DataArrayInt *nodalConn=ParaMEDMEM::DataArrayInt::New();
338 nodalConn->alloc(23,1);
339 std::copy(nodalConnPerCell,nodalConnPerCell+23,nodalConn->getPointer());
340 ParaMEDMEM::DataArrayInt *nodalConnI=ParaMEDMEM::DataArrayInt::New();
341 nodalConnI->alloc(6,1);
342 std::copy(nodalConnPerCellIndex,nodalConnPerCellIndex+6,nodalConnI->getPointer());
343 mesh->setConnectivity(nodalConn,nodalConnI,true);
344 nodalConn->decrRef();// nodalConn DataArrayInt instance is owned by mesh after call to setConnectivity method. No more need here -> decrRef()
345 nodalConnI->decrRef();// nodalConnI DataArrayInt instance is owned by mesh after call to setConnectivity method. No more need here -> decrRef()
346 //! [CppSnippetUMeshAdvBuild1_3]
347 //! [CppSnippetUMeshAdvBuild1_4]
348 ParaMEDMEM::DataArrayDouble *myCoords=ParaMEDMEM::DataArrayDouble::New();
349 myCoords->alloc(9,3);//here myCoords are declared to have 3 components, mesh will deduce that its spaceDim==3.
350 std::copy(coords,coords+27,myCoords->getPointer());
351 mesh->setCoords(myCoords);//myCorrds contains 9 tuples, that is to say mesh contains 9 nodes.
353 //! [CppSnippetUMeshAdvBuild1_4]
354 mesh->checkCoherency();
355 //! [CppSnippetUMeshAdvBuild1_5]
357 //! [CppSnippetUMeshAdvBuild1_5]
360 void CppSnippetDataArrayBuild1()
362 //! [CppSnippetDataArrayBuild1_0]
363 const int nbOfNodes=12;
364 double coords[3*nbOfNodes]={2.,3.,4.,3.,4.,5.,4.,5.,6.,5.,6.,7.,6.,7.,8.,7.,8.,9.,8.,9.,10.,9.,10.,11.,10.,11.,12.,11.,12.,13.,12.,13.,14.,13.,14.,15.};
366 ParaMEDMEM::DataArrayDouble *myCoords=0;
368 //! [CppSnippetDataArrayBuild1_0]
370 //! [CppSnippetDataArrayBuild1_1]
371 myCoords=ParaMEDMEM::DataArrayDouble::New();
372 myCoords->useArray(coords,false,ParaMEDMEM::CPP_DEALLOC,nbOfNodes,3);
373 //now use myCoords as you need
375 //myCoords is no more useful here : release it
377 //! [CppSnippetDataArrayBuild1_1]
378 //! [CppSnippetDataArrayBuild1_2]
379 myCoords=ParaMEDMEM::DataArrayDouble::New();
380 tmp=new double[3*nbOfNodes];
381 std::copy(coords,coords+3*nbOfNodes,tmp);
382 myCoords->useArray(tmp,true,ParaMEDMEM::CPP_DEALLOC,nbOfNodes,3);
383 //now use myCoords as you need
385 //myCoords is no more useful, release it
387 //! [CppSnippetDataArrayBuild1_2]
388 //! [CppSnippetDataArrayBuild1_3]
389 myCoords=ParaMEDMEM::DataArrayDouble::New();
390 tmp=(double *)malloc(3*nbOfNodes*sizeof(double));
391 std::copy(coords,coords+3*nbOfNodes,tmp);
392 myCoords->useArray(tmp,true,ParaMEDMEM::C_DEALLOC,nbOfNodes,3);
393 //now use myCoords as you need
395 //myCoords is no more useful here : release it
397 //! [CppSnippetDataArrayBuild1_3]
398 //! [CppSnippetDataArrayBuild1_4]
399 myCoords=ParaMEDMEM::DataArrayDouble::New();
400 myCoords->alloc(nbOfNodes,3);
401 tmp=myCoords->getPointer();
402 std::copy(coords,coords+3*nbOfNodes,tmp);
403 myCoords->declareAsNew();//you have modified data pointed by internal pointer notify object
404 //now use myCoords as you need
406 //myCoords is no more useful here : release it
408 //! [CppSnippetDataArrayBuild1_4]
409 myCoords=ParaMEDMEM::DataArrayDouble::New();
410 myCoords->alloc(nbOfNodes,3);
411 tmp=myCoords->getPointer();
412 std::copy(coords,coords+3*nbOfNodes,tmp);
413 ParaMEDMEM::DataArrayDouble *myCoordsCpy=0;
414 //! [CppSnippetDataArrayBuild1_5]
415 myCoordsCpy=myCoords->deepCpy();
416 //! [CppSnippetDataArrayBuild1_5]
417 //! [CppSnippetDataArrayBuild1_6]
418 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));
419 myCoordsCpy->setIJ(0,0,1000.);
420 CPPUNIT_ASSERT(!myCoordsCpy->isEqual(*myCoords,1e-12));//myCoordsCpy only has been modified
421 //! [CppSnippetDataArrayBuild1_6]
422 //! [CppSnippetDataArrayBuild1_7]
423 myCoordsCpy->decrRef();
424 //! [CppSnippetDataArrayBuild1_7]
425 //! [CppSnippetDataArrayBuild1_5bis]
426 myCoordsCpy=myCoords->performCpy(true);
427 //! [CppSnippetDataArrayBuild1_5bis]
428 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));
429 myCoordsCpy->setIJ(0,0,1000.);
430 CPPUNIT_ASSERT(!myCoordsCpy->isEqual(*myCoords,1e-12));//myCoordsCpy only has been modified
431 myCoordsCpy->decrRef();
432 //! [CppSnippetDataArrayBuild1_8]
433 myCoordsCpy=myCoords->performCpy(false);
434 //! [CppSnippetDataArrayBuild1_8]
435 //! [CppSnippetDataArrayBuild1_9]
436 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));
437 myCoordsCpy->setIJ(0,0,1000.);
438 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));//myCoords and myCoordsCpy have been modified simultaneously
439 //! [CppSnippetDataArrayBuild1_9]
440 //! [CppSnippetDataArrayBuild1_10]
441 myCoordsCpy->decrRef();
442 //! [CppSnippetDataArrayBuild1_10]
443 //! [CppSnippetDataArrayBuild1_11]
444 myCoordsCpy=ParaMEDMEM::DataArrayDouble::New();
445 //! [CppSnippetDataArrayBuild1_11]
446 //! [CppSnippetDataArrayBuild1_12]
447 myCoordsCpy->cpyFrom(*myCoords);
448 //! [CppSnippetDataArrayBuild1_12]
449 //! [CppSnippetDataArrayBuild1_13]
450 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));
451 myCoordsCpy->setIJ(0,0,2000.);
452 CPPUNIT_ASSERT(!myCoordsCpy->isEqual(*myCoords,1e-12));//myCoordsCpy only has been modified
453 //! [CppSnippetDataArrayBuild1_13]
454 //! [CppSnippetDataArrayBuild1_14]
455 myCoordsCpy->decrRef();
456 //! [CppSnippetDataArrayBuild1_14]
458 //! [CppSnippetDataArrayBuild1_14]
461 void CppSnippetFieldDoubleBuild1()
463 double XCoords[9]={-0.3,0.07,0.1,0.3,0.45,0.47,0.49,1.,1.22};
464 double YCoords[7]={0.07,0.1,0.37,0.45,0.47,0.49,1.007};
465 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
466 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
467 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
468 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
469 //! [CppSnippetFieldDoubleBuild1_1]
470 ParaMEDMEM::MEDCouplingFieldDouble* fieldOnCells=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_CELLS,ParaMEDMEM::NO_TIME);
471 fieldOnCells->setName("MyTensorFieldOnCellNoTime");
472 fieldOnCells->setMesh(mesh);
473 mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnCells
474 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
475 array->alloc(fieldOnCells->getMesh()->getNumberOfCells(),9);//Implicitely fieldOnCells will be a 9 components field.
476 array->fillWithValue(7.);
477 fieldOnCells->setArray(array);
479 // fieldOnCells is now usable
481 // fieldOnCells is no more useful here : release it
482 fieldOnCells->decrRef();
483 //! [CppSnippetFieldDoubleBuild1_1]
484 arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
485 arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
486 mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
487 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
488 //! [CppSnippetFieldDoubleBuild1_2]
489 ParaMEDMEM::MEDCouplingFieldDouble *f1=mesh->fillFromAnalytic(ParaMEDMEM::ON_CELLS,1,"x*x+y*y*3+2.*x");//f1 is scalar
490 ParaMEDMEM::MEDCouplingFieldDouble *f2=mesh->fillFromAnalytic(ParaMEDMEM::ON_CELLS,1,"cos(x+y/x)");//f2 is scalar too
491 ParaMEDMEM::MEDCouplingFieldDouble *f2bis=mesh->fillFromAnalytic(ParaMEDMEM::ON_CELLS,2,"x*x*IVec+3*y*JVec");//f2bis is a vectors field
492 ParaMEDMEM::MEDCouplingFieldDouble *f3=(*f1)+(*f2);//f3 scalar
493 ParaMEDMEM::MEDCouplingFieldDouble *f4=(*f3)/(*f2);//f4 scalar
494 f2bis->applyFunc(1,"sqrt(x*x+y*y)");//f2bis becomes scalar
495 ParaMEDMEM::MEDCouplingFieldDouble *f5=(*f2bis)*(*f4);//f5 scalar
496 const double pos1[2]={0.48,0.38};
498 f4->getValueOn(pos1,&res);//f4 is scalar so the returned value is of size 1.
500 //! [CppSnippetFieldDoubleBuild1_2]
502 //! [CppSnippetFieldDoubleBuild1_3]
503 // f1, f2, f2bis, f3, f4, f5 are no more useful here : release them
510 //! [CppSnippetFieldDoubleBuild1_3]
513 void CppSnippetFieldDoubleBuild2()
515 double XCoords[9]={-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22};
516 double YCoords[7]={0.,0.1,0.37,0.45,0.47,0.49,1.007};
517 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
518 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
519 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
520 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
521 //! [CppSnippetFieldDoubleBuild2_1]
522 ParaMEDMEM::MEDCouplingFieldDouble* fieldOnNodes=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_NODES,ParaMEDMEM::NO_TIME);
523 fieldOnNodes->setName("MyScalarFieldOnNodeNoTime");
524 fieldOnNodes->setMesh(mesh);
525 mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnNodes
526 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
527 array->alloc(fieldOnNodes->getMesh()->getNumberOfNodes(),1);//Implicitely fieldOnNodes will be a 1 component field.
528 array->fillWithValue(8.);
529 fieldOnNodes->setArray(array);
531 // fieldOnNodes is now usable
533 // fieldOnNodes is no more useful here : release it
534 fieldOnNodes->decrRef();
535 //! [CppSnippetFieldDoubleBuild2_1]
538 void CppSnippetFieldDoubleBuild3()
540 double XCoords[9]={-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22};
541 double YCoords[7]={0.,0.1,0.37,0.45,0.47,0.49,1.007};
542 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
543 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
544 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
545 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
546 //! [CppSnippetFieldDoubleBuild3_1]
547 ParaMEDMEM::MEDCouplingFieldDouble* fieldOnCells=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_CELLS,ParaMEDMEM::ONE_TIME);
548 fieldOnCells->setName("MyTensorFieldOnCellNoTime");
549 fieldOnCells->setTimeUnit("ms"); // Time unit is ms.
550 fieldOnCells->setTime(4.22,2,-1); // Time attached is 4.22 ms, iteration id is 2 and order id (or sub iteration id) is -1
551 fieldOnCells->setMesh(mesh);
552 mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnCells
553 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
554 array->alloc(fieldOnCells->getMesh()->getNumberOfCells(),2);//Implicitely fieldOnCells will be a 2 components field.
555 array->fillWithValue(7.);
556 fieldOnCells->setArray(array);
558 // fieldOnCells is now usable
560 // fieldOnCells is no more useful here : release it
561 fieldOnCells->decrRef();
562 //! [CppSnippetFieldDoubleBuild3_1]
565 void CppSnippetFieldDoubleBuild4()
567 double XCoords[9]={-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22};
568 double YCoords[7]={0.,0.1,0.37,0.45,0.47,0.49,1.007};
569 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
570 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
571 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
572 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
573 //! [CppSnippetFieldDoubleBuild4_1]
574 ParaMEDMEM::MEDCouplingFieldDouble* fieldOnNodes=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_NODES,ParaMEDMEM::CONST_ON_TIME_INTERVAL);
575 fieldOnNodes->setName("MyVecFieldOnNodeWithConstTime");
576 fieldOnNodes->setTimeUnit("ms"); // Time unit is ms.
577 fieldOnNodes->setStartTime(4.22,2,-1);
578 fieldOnNodes->setEndTime(6.44,4,-1); // fieldOnNodes is defined in interval [4.22 ms,6.44 ms]
579 fieldOnNodes->setMesh(mesh);
580 mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnNodes
581 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
582 array->alloc(fieldOnNodes->getMesh()->getNumberOfNodes(),3);//Implicitely fieldOnNodes will be a 3 components field.
583 array->fillWithValue(8.);
584 fieldOnNodes->setArray(array);
586 // fieldOnNodes is now usable
588 // fieldOnNodes is no more useful here : release it
589 fieldOnNodes->decrRef();
590 //! [CppSnippetFieldDoubleBuild4_1]
593 int main(int argc, char *argv[])
595 CppExample_DataArrayInt_buildPermutationArr();
596 CppExample_DataArrayInt_invertArrayO2N2N2O();
597 CppExample_DataArrayInt_invertArrayN2O2O2N();
598 CppExample_DataArrayDouble_getIdsInRange();
599 CppExample_DataArrayDouble_findCommonTuples();
600 CppExample_DataArrayDouble_Meld1();
601 CppExampleFieldDoubleBuildSubPart1();
602 CppSnippetUMeshStdBuild1();
603 CppSnippetUMeshAdvBuild1();
604 CppSnippetDataArrayBuild1();
605 CppSnippetCMeshStdBuild1();
606 CppSnippetFieldDoubleBuild1();
607 CppSnippetFieldDoubleBuild2();
608 CppSnippetFieldDoubleBuild3();
609 CppSnippetFieldDoubleBuild4();