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
20 #include "MEDCouplingBasicsTest.hxx"
21 #include "MEDCouplingUMesh.hxx"
22 #include "MEDCouplingCMesh.hxx"
23 #include "MEDCouplingExtrudedMesh.hxx"
24 #include "MEDCouplingFieldDouble.hxx"
25 #include "MEDCouplingMemArray.hxx"
26 #include "MEDCouplingMultiFields.hxx"
28 void CppExampleFieldDoubleBuildSubPart1()
30 //! [CppSnippetFieldDoubleBuildSubPart1_1]
31 ParaMEDMEM::MEDCouplingUMesh *mesh1=ParaMEDMEM::MEDCouplingBasicsTest::build2DTargetMesh_1();
32 ParaMEDMEM::MEDCouplingFieldDouble *f1=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_CELLS,ParaMEDMEM::ONE_TIME);
35 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
36 array->alloc(mesh1->getNumberOfCells(),2);
37 const double arr1[10]={3.,103.,4.,104.,5.,105.,6.,106.,7.,107.};
38 std::copy(arr1,arr1+10,array->getPointer());
41 //! [CppSnippetFieldDoubleBuildSubPart1_1]
42 //! [CppSnippetFieldDoubleBuildSubPart1_2]
43 const int part1[3]={2,1,4};
44 ParaMEDMEM::MEDCouplingFieldDouble *f2=f1->buildSubPart(part1,part1+3);
45 //! [CppSnippetFieldDoubleBuildSubPart1_2]
47 CPPUNIT_ASSERT_EQUAL(3,f2->getMesh()->getNumberOfCells());
48 CPPUNIT_ASSERT_EQUAL(6,f2->getMesh()->getNumberOfNodes());
49 CPPUNIT_ASSERT_EQUAL(2,f2->getMesh()->getSpaceDimension());
50 CPPUNIT_ASSERT_EQUAL(2,f2->getMesh()->getMeshDimension());
51 ParaMEDMEM::MEDCouplingUMesh *m2C=dynamic_cast<ParaMEDMEM::MEDCouplingUMesh *>(const_cast<ParaMEDMEM::MEDCouplingMesh *>(f2->getMesh()));
52 CPPUNIT_ASSERT_EQUAL(13,m2C->getMeshLength());
53 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};
55 CPPUNIT_ASSERT_DOUBLES_EQUAL(expected2[i],m2C->getCoords()->getIJ(0,i),1.e-12);
56 const double expected3[13]={3,2,3,1,3,0,2,1,4,4,5,3,2};
57 CPPUNIT_ASSERT(std::equal(expected3,expected3+13,m2C->getNodalConnectivity()->getConstPointer()));
58 const double expected4[4]={0,4,8,13};
59 CPPUNIT_ASSERT(std::equal(expected4,expected4+4,m2C->getNodalConnectivityIndex()->getConstPointer()));
62 //! [CppSnippetFieldDoubleBuildSubPart1_3]
63 f1=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_NODES,ParaMEDMEM::ONE_TIME);
66 array=ParaMEDMEM::DataArrayDouble::New();
67 array->alloc(mesh1->getNumberOfNodes(),2);
68 const double arr2[18]={3.,103.,4.,104.,5.,105.,6.,106.,7.,107.,8.,108.,9.,109.,10.,110.,11.,111.};
69 std::copy(arr2,arr2+18,array->getPointer());
72 //! [CppSnippetFieldDoubleBuildSubPart1_3]
73 //! [CppSnippetFieldDoubleBuildSubPart1_4]
74 const int part2[2]={1,2};
75 f2=f1->buildSubPart(part2,part2+2);
76 //! [CppSnippetFieldDoubleBuildSubPart1_4]
78 //idem previous because nodes of cell#4 are not fully present in part3
79 const int part3[2]={1,2};
80 ParaMEDMEM::DataArrayInt *arrr=ParaMEDMEM::DataArrayInt::New();
82 std::copy(part3,part3+2,arrr->getPointer());
83 f2=f1->buildSubPart(arrr);
87 const int part4[3]={1,2,4};
88 f2=f1->buildSubPart(part4,part4+3);
96 void CppSnippetUMeshStdBuild1()
98 //! [CppSnippetUMeshStdBuild1_1]
99 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.,
100 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. };
101 int nodalConnPerCell[18]={0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4};
102 //! [CppSnippetUMeshStdBuild1_1]
103 //! [CppSnippetUMeshStdBuild1_2]
104 ParaMEDMEM::MEDCouplingUMesh *mesh=ParaMEDMEM::MEDCouplingUMesh::New("My2DMesh",2);
105 //! [CppSnippetUMeshStdBuild1_2]
106 //! [CppSnippetUMeshStdBuild1_3]
107 mesh->allocateCells(5);//You can put more than 5 if you want but not less.
108 mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,nodalConnPerCell);
109 mesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,nodalConnPerCell+4);
110 mesh->insertNextCell(INTERP_KERNEL::NORM_TRI3,3,nodalConnPerCell+7);
111 mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,nodalConnPerCell+10);
112 mesh->insertNextCell(INTERP_KERNEL::NORM_QUAD4,4,nodalConnPerCell+14);
113 mesh->finishInsertingCells();
114 //! [CppSnippetUMeshStdBuild1_3]
115 //! [CppSnippetUMeshStdBuild1_4]
116 ParaMEDMEM::DataArrayDouble *myCoords=ParaMEDMEM::DataArrayDouble::New();
117 myCoords->alloc(9,3);//here myCoords are declared to have 3 components, mesh will deduce that its spaceDim==3.
118 std::copy(coords,coords+27,myCoords->getPointer());
119 mesh->setCoords(myCoords);//myCorrds contains 9 tuples, that is to say mesh contains 9 nodes.
121 //! [CppSnippetUMeshStdBuild1_4]
122 mesh->checkCoherency();
123 //! [CppSnippetUMeshStdBuild1_5]
125 //! [CppSnippetUMeshStdBuild1_5]
128 void CppSnippetCMeshStdBuild1()
130 //! [CppSnippetCMeshStdBuild1_1]
131 double XCoords[9]={-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22};
132 double YCoords[7]={0.,0.1,0.37,0.45,0.47,0.49,1.007};
133 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New();
135 std::copy(XCoords,XCoords+9,arrX->getPointer());
136 arrX->setInfoOnComponent(0,"X [m]");
137 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New();
139 std::copy(YCoords,YCoords+7,arrY->getPointer());
140 arrY->setInfoOnComponent(0,"Y [m]");
141 //! [CppSnippetCMeshStdBuild1_1]
142 //! [CppSnippetCMeshStdBuild1_2]
143 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
144 mesh->setCoords(arrX,arrY);
147 //! [CppSnippetCMeshStdBuild1_2]
148 //! [CppSnippetCMeshStdBuild1_3]
149 CPPUNIT_ASSERT_EQUAL(8*6,mesh->getNumberOfCells());
150 CPPUNIT_ASSERT_EQUAL(9*7,mesh->getNumberOfNodes());
151 CPPUNIT_ASSERT_EQUAL(2,mesh->getSpaceDimension());
152 CPPUNIT_ASSERT_EQUAL(2,mesh->getMeshDimension());
153 //! [CppSnippetCMeshStdBuild1_3]
155 mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
156 arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
157 arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
158 //! [CppSnippetCMeshStdBuild1_2bis]
159 mesh->setCoordsAt(0,arrX);
161 mesh->setCoordsAt(1,arrY);
163 //! [CppSnippetCMeshStdBuild1_2bis]
164 CPPUNIT_ASSERT_EQUAL(8*6,mesh->getNumberOfCells());
165 CPPUNIT_ASSERT_EQUAL(9*7,mesh->getNumberOfNodes());
166 CPPUNIT_ASSERT_EQUAL(2,mesh->getSpaceDimension());
167 CPPUNIT_ASSERT_EQUAL(2,mesh->getMeshDimension());
168 //! [CppSnippetCMeshStdBuild1_4]
170 //! [CppSnippetCMeshStdBuild1_4]
173 void CppSnippetUMeshAdvBuild1()
175 //! [CppSnippetUMeshAdvBuild1_1]
176 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.,
177 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. };
178 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};
179 int nodalConnPerCellIndex[6]={0,5,9,13,18,23};
180 //! [CppSnippetUMeshAdvBuild1_1]
181 //! [CppSnippetUMeshAdvBuild1_2]
182 ParaMEDMEM::MEDCouplingUMesh *mesh=ParaMEDMEM::MEDCouplingUMesh::New("My2DMesh",2);
183 //! [CppSnippetUMeshAdvBuild1_2]
184 //! [CppSnippetUMeshAdvBuild1_3]
185 ParaMEDMEM::DataArrayInt *nodalConn=ParaMEDMEM::DataArrayInt::New();
186 nodalConn->alloc(23,1);
187 std::copy(nodalConnPerCell,nodalConnPerCell+23,nodalConn->getPointer());
188 ParaMEDMEM::DataArrayInt *nodalConnI=ParaMEDMEM::DataArrayInt::New();
189 nodalConnI->alloc(6,1);
190 std::copy(nodalConnPerCellIndex,nodalConnPerCellIndex+6,nodalConnI->getPointer());
191 mesh->setConnectivity(nodalConn,nodalConnI,true);
192 nodalConn->decrRef();// nodalConn DataArrayInt instance is owned by mesh after call to setConnectivity method. No more need here -> decrRef()
193 nodalConnI->decrRef();// nodalConnI DataArrayInt instance is owned by mesh after call to setConnectivity method. No more need here -> decrRef()
194 //! [CppSnippetUMeshAdvBuild1_3]
195 //! [CppSnippetUMeshAdvBuild1_4]
196 ParaMEDMEM::DataArrayDouble *myCoords=ParaMEDMEM::DataArrayDouble::New();
197 myCoords->alloc(9,3);//here myCoords are declared to have 3 components, mesh will deduce that its spaceDim==3.
198 std::copy(coords,coords+27,myCoords->getPointer());
199 mesh->setCoords(myCoords);//myCorrds contains 9 tuples, that is to say mesh contains 9 nodes.
201 //! [CppSnippetUMeshAdvBuild1_4]
202 mesh->checkCoherency();
203 //! [CppSnippetUMeshAdvBuild1_5]
205 //! [CppSnippetUMeshAdvBuild1_5]
208 void CppSnippetDataArrayBuild1()
210 //! [CppSnippetDataArrayBuild1_0]
211 const int nbOfNodes=12;
212 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.};
214 ParaMEDMEM::DataArrayDouble *myCoords=0;
216 //! [CppSnippetDataArrayBuild1_0]
218 //! [CppSnippetDataArrayBuild1_1]
219 myCoords=ParaMEDMEM::DataArrayDouble::New();
220 myCoords->useArray(coords,false,ParaMEDMEM::CPP_DEALLOC,nbOfNodes,3);
221 //now use myCoords as you need
223 //myCoords is no more usefully here : release it
225 //! [CppSnippetDataArrayBuild1_1]
226 //! [CppSnippetDataArrayBuild1_2]
227 myCoords=ParaMEDMEM::DataArrayDouble::New();
228 tmp=new double[3*nbOfNodes];
229 std::copy(coords,coords+3*nbOfNodes,tmp);
230 myCoords->useArray(tmp,true,ParaMEDMEM::CPP_DEALLOC,nbOfNodes,3);
231 //now use myCoords as you need
233 //myCoords is no more usefully, release it
235 //! [CppSnippetDataArrayBuild1_2]
236 //! [CppSnippetDataArrayBuild1_3]
237 myCoords=ParaMEDMEM::DataArrayDouble::New();
238 tmp=(double *)malloc(3*nbOfNodes*sizeof(double));
239 std::copy(coords,coords+3*nbOfNodes,tmp);
240 myCoords->useArray(tmp,true,ParaMEDMEM::C_DEALLOC,nbOfNodes,3);
241 //now use myCoords as you need
243 //myCoords is no more usefully here : release it
245 //! [CppSnippetDataArrayBuild1_3]
246 //! [CppSnippetDataArrayBuild1_4]
247 myCoords=ParaMEDMEM::DataArrayDouble::New();
248 myCoords->alloc(nbOfNodes,3);
249 tmp=myCoords->getPointer();
250 std::copy(coords,coords+3*nbOfNodes,tmp);
251 myCoords->declareAsNew();//you have modified data pointed by internal pointer notify object
252 //now use myCoords as you need
254 //myCoords is no more usefully here : release it
256 //! [CppSnippetDataArrayBuild1_4]
257 myCoords=ParaMEDMEM::DataArrayDouble::New();
258 myCoords->alloc(nbOfNodes,3);
259 tmp=myCoords->getPointer();
260 std::copy(coords,coords+3*nbOfNodes,tmp);
261 ParaMEDMEM::DataArrayDouble *myCoordsCpy=0;
262 //! [CppSnippetDataArrayBuild1_5]
263 myCoordsCpy=myCoords->deepCpy();
264 //! [CppSnippetDataArrayBuild1_5]
265 //! [CppSnippetDataArrayBuild1_6]
266 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));
267 myCoordsCpy->setIJ(0,0,1000.);
268 CPPUNIT_ASSERT(!myCoordsCpy->isEqual(*myCoords,1e-12));//myCoordsCpy only has been modified
269 //! [CppSnippetDataArrayBuild1_6]
270 //! [CppSnippetDataArrayBuild1_7]
271 myCoordsCpy->decrRef();
272 //! [CppSnippetDataArrayBuild1_7]
273 //! [CppSnippetDataArrayBuild1_5bis]
274 myCoordsCpy=myCoords->performCpy(true);
275 //! [CppSnippetDataArrayBuild1_5bis]
276 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));
277 myCoordsCpy->setIJ(0,0,1000.);
278 CPPUNIT_ASSERT(!myCoordsCpy->isEqual(*myCoords,1e-12));//myCoordsCpy only has been modified
279 myCoordsCpy->decrRef();
280 //! [CppSnippetDataArrayBuild1_8]
281 myCoordsCpy=myCoords->performCpy(false);
282 //! [CppSnippetDataArrayBuild1_8]
283 //! [CppSnippetDataArrayBuild1_9]
284 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));
285 myCoordsCpy->setIJ(0,0,1000.);
286 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));//myCoords and myCoordsCpy have been modified simultaneously
287 //! [CppSnippetDataArrayBuild1_9]
288 //! [CppSnippetDataArrayBuild1_10]
289 myCoordsCpy->decrRef();
290 //! [CppSnippetDataArrayBuild1_10]
291 //! [CppSnippetDataArrayBuild1_11]
292 myCoordsCpy=ParaMEDMEM::DataArrayDouble::New();
293 //! [CppSnippetDataArrayBuild1_11]
294 //! [CppSnippetDataArrayBuild1_12]
295 myCoordsCpy->cpyFrom(*myCoords);
296 //! [CppSnippetDataArrayBuild1_12]
297 //! [CppSnippetDataArrayBuild1_13]
298 CPPUNIT_ASSERT(myCoordsCpy->isEqual(*myCoords,1e-12));
299 myCoordsCpy->setIJ(0,0,2000.);
300 CPPUNIT_ASSERT(!myCoordsCpy->isEqual(*myCoords,1e-12));//myCoordsCpy only has been modified
301 //! [CppSnippetDataArrayBuild1_13]
302 //! [CppSnippetDataArrayBuild1_14]
303 myCoordsCpy->decrRef();
304 //! [CppSnippetDataArrayBuild1_14]
308 void CppSnippetFieldDoubleBuild1()
310 double XCoords[9]={-0.3,0.07,0.1,0.3,0.45,0.47,0.49,1.,1.22};
311 double YCoords[7]={0.07,0.1,0.37,0.45,0.47,0.49,1.007};
312 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
313 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
314 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
315 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
316 //! [CppSnippetFieldDoubleBuild1_1]
317 ParaMEDMEM::MEDCouplingFieldDouble* fieldOnCells=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_CELLS,ParaMEDMEM::NO_TIME);
318 fieldOnCells->setName("MyTensorFieldOnCellNoTime");
319 fieldOnCells->setMesh(mesh);
320 mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnCells
321 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
322 array->alloc(fieldOnCells->getMesh()->getNumberOfCells(),9);//Implicitely fieldOnCells will be a 9 components field.
323 array->fillWithValue(7.);
324 fieldOnCells->setArray(array);
326 // fieldOnCells is now usable
328 // fieldOnCells is no more usefully here : release it
329 fieldOnCells->decrRef();
330 //! [CppSnippetFieldDoubleBuild1_1]
331 arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
332 arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
333 mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
334 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
335 //! [CppSnippetFieldDoubleBuild1_2]
336 ParaMEDMEM::MEDCouplingFieldDouble *f1=mesh->fillFromAnalytic(ParaMEDMEM::ON_CELLS,1,"x*x+y*y*3+2.*x");//f1 is scalar
337 ParaMEDMEM::MEDCouplingFieldDouble *f2=mesh->fillFromAnalytic(ParaMEDMEM::ON_CELLS,1,"cos(x+y/x)");//f2 is scalar too
338 ParaMEDMEM::MEDCouplingFieldDouble *f2bis=mesh->fillFromAnalytic(ParaMEDMEM::ON_CELLS,2,"x*x*IVec+3*y*JVec");//f2bis is a vectors field
339 ParaMEDMEM::MEDCouplingFieldDouble *f3=(*f1)+(*f2);//f3 scalar
340 ParaMEDMEM::MEDCouplingFieldDouble *f4=(*f3)/(*f2);//f4 scalar
341 f2bis->applyFunc(1,"sqrt(x*x+y*y)");//f2bis becomes scalar
342 ParaMEDMEM::MEDCouplingFieldDouble *f5=(*f2bis)*(*f4);//f5 scalar
343 const double pos1[2]={0.48,0.38};
345 f4->getValueOn(pos1,&res);//f4 is scalar so the returned value is of size 1.
347 //! [CppSnippetFieldDoubleBuild1_2]
349 //! [CppSnippetFieldDoubleBuild1_3]
350 // f1, f2, f2bis, f3, f4, f5 are no more usefully here : release them
357 //! [CppSnippetFieldDoubleBuild1_3]
360 void CppSnippetFieldDoubleBuild2()
362 double XCoords[9]={-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22};
363 double YCoords[7]={0.,0.1,0.37,0.45,0.47,0.49,1.007};
364 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
365 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
366 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
367 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
368 //! [CppSnippetFieldDoubleBuild2_1]
369 ParaMEDMEM::MEDCouplingFieldDouble* fieldOnNodes=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_NODES,ParaMEDMEM::NO_TIME);
370 fieldOnNodes->setName("MyScalarFieldOnNodeNoTime");
371 fieldOnNodes->setMesh(mesh);
372 mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnNodes
373 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
374 array->alloc(fieldOnNodes->getMesh()->getNumberOfNodes(),1);//Implicitely fieldOnNodes will be a 1 component field.
375 array->fillWithValue(8.);
376 fieldOnNodes->setArray(array);
378 // fieldOnNodes is now usable
380 // fieldOnNodes is no more usefully here : release it
381 fieldOnNodes->decrRef();
382 //! [CppSnippetFieldDoubleBuild2_1]
385 void CppSnippetFieldDoubleBuild3()
387 double XCoords[9]={-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22};
388 double YCoords[7]={0.,0.1,0.37,0.45,0.47,0.49,1.007};
389 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
390 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
391 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
392 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
393 //! [CppSnippetFieldDoubleBuild3_1]
394 ParaMEDMEM::MEDCouplingFieldDouble* fieldOnCells=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_CELLS,ParaMEDMEM::ONE_TIME);
395 fieldOnCells->setName("MyTensorFieldOnCellNoTime");
396 fieldOnCells->setTimeUnit("ms"); // Time unit is ms.
397 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
398 fieldOnCells->setMesh(mesh);
399 mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnCells
400 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
401 array->alloc(fieldOnCells->getMesh()->getNumberOfCells(),2);//Implicitely fieldOnCells will be a 2 components field.
402 array->fillWithValue(7.);
403 fieldOnCells->setArray(array);
405 // fieldOnCells is now usable
407 // fieldOnCells is no more usefully here : release it
408 fieldOnCells->decrRef();
409 //! [CppSnippetFieldDoubleBuild3_1]
412 void CppSnippetFieldDoubleBuild4()
414 double XCoords[9]={-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22};
415 double YCoords[7]={0.,0.1,0.37,0.45,0.47,0.49,1.007};
416 ParaMEDMEM::DataArrayDouble *arrX=ParaMEDMEM::DataArrayDouble::New(); arrX->alloc(9,1); std::copy(XCoords,XCoords+9,arrX->getPointer()); arrX->setInfoOnComponent(0,"X [m]");
417 ParaMEDMEM::DataArrayDouble *arrY=ParaMEDMEM::DataArrayDouble::New(); arrY->alloc(7,1); std::copy(YCoords,YCoords+7,arrY->getPointer()); arrY->setInfoOnComponent(0,"Y [m]");
418 ParaMEDMEM::MEDCouplingCMesh *mesh=ParaMEDMEM::MEDCouplingCMesh::New("My2D_CMesh");
419 mesh->setCoords(arrX,arrY); arrX->decrRef(); arrY->decrRef();
420 //! [CppSnippetFieldDoubleBuild4_1]
421 ParaMEDMEM::MEDCouplingFieldDouble* fieldOnNodes=ParaMEDMEM::MEDCouplingFieldDouble::New(ParaMEDMEM::ON_NODES,ParaMEDMEM::CONST_ON_TIME_INTERVAL);
422 fieldOnNodes->setName("MyVecFieldOnNodeWithConstTime");
423 fieldOnNodes->setTimeUnit("ms"); // Time unit is ms.
424 fieldOnNodes->setStartTime(4.22,2,-1);
425 fieldOnNodes->setEndTime(6.44,4,-1); // fieldOnNodes is defined in interval [4.22 ms,6.44 ms]
426 fieldOnNodes->setMesh(mesh);
427 mesh->decrRef(); // no more need of mesh because mesh has been attached to fieldOnNodes
428 ParaMEDMEM::DataArrayDouble *array=ParaMEDMEM::DataArrayDouble::New();
429 array->alloc(fieldOnNodes->getMesh()->getNumberOfNodes(),3);//Implicitely fieldOnNodes will be a 3 components field.
430 array->fillWithValue(8.);
431 fieldOnNodes->setArray(array);
433 // fieldOnNodes is now usable
435 // fieldOnNodes is no more usefully here : release it
436 fieldOnNodes->decrRef();
437 //! [CppSnippetFieldDoubleBuild4_1]
440 int main(int argc, char *argv[])
442 CppExampleFieldDoubleBuildSubPart1();
443 CppSnippetUMeshStdBuild1();
444 CppSnippetUMeshAdvBuild1();
445 CppSnippetDataArrayBuild1();
446 CppSnippetCMeshStdBuild1();
447 CppSnippetFieldDoubleBuild1();
448 CppSnippetFieldDoubleBuild2();
449 CppSnippetFieldDoubleBuild3();
450 CppSnippetFieldDoubleBuild4();