From 3a3ca9b8fd8d4f6bc7d6e097cb2ffee29ff4af45 Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 15 May 2018 13:26:46 +0300 Subject: [PATCH] medcoupling documentation modification --- CMakeLists.txt | 2 + doc/CMakeLists.txt | 3 +- doc/developer/CMakeLists.txt | 20 + .../doxygen/BuildPyExamplesFromCPP.py | 0 .../doxygen/CMakeLists.txt | 45 +- .../doxygen/Doxyfile_med_dev.in} | 11 +- .../doxygen/doxfiles/appendix/appendix.dox | 0 .../doxygen/doxfiles/appendix/glossary.dox | 0 .../doxygen/doxfiles/appendix/install.dox | 0 .../doxfiles/appendix/interpkernel.dox | 0 .../doxygen/doxfiles/appendix/med-file.dox | 0 .../doxygen/doxfiles/appendix/porting.dox | 0 .../doxygen/doxfiles/appendix/references.dox | 0 .../doxygen/doxfiles/examples/examples.dox | 0 .../examples/medcouplingexamplesarrays.doxy | 0 .../examples/medcouplingexamplesfields.doxy | 0 .../examples/medcouplingexamplesfooter.doxy | 0 .../examples/medcouplingexamplesheader.doxy | 0 .../examples/medcouplingexamplesmeshes.doxy | 0 .../examples/medcouplingexamplesother.doxy | 0 .../doxygen/doxfiles/faq.dox | 0 .../doxygen/doxfiles/index.dox | 0 .../doxfiles/reference/arrays/arrays.dox | 0 .../doxfiles/reference/arrays/numbering.dox | 0 .../reference/cpp/MEDCouplingTimeLabel.dox | 0 .../doxygen/doxfiles/reference/cpp/cpp.dox | 0 .../reference/distrib/corba-distrib.dox | 0 .../doxfiles/reference/distrib/distrib.dox | 0 .../doxfiles/reference/distrib/parallel.dox | 0 .../reference/fields/MEDCouplingFields.dox | 0 .../reference/fields/discretization.dox | 0 .../doxfiles/reference/fields/fields.dox | 0 .../reference/interpolation/Geometric2D.dox | 0 .../reference/interpolation/NatureOfField.dox | 0 .../reference/interpolation/barycoords.dox | 0 .../reference/interpolation/interpolation.dox | 0 .../reference/interpolation/interptheory.dox | 0 .../interpolation/intersec-specifics.dox | 0 .../reference/interpolation/intersectors.dox | 0 .../reference/interpolation/intro-interp.dox | 0 .../reference/interpolation/mapped_bary.dox | 0 .../reference/interpolation/remapper.dox | 0 .../doxfiles/reference/medcoupling.dox | 0 .../reference/medloader/MEDLoader.dox | 0 .../medloader/MEDLoaderAdvancedAPI.dox | 0 .../reference/medloader/MEDLoaderBasicAPI.dox | 0 .../reference/medloader/intro-medloader.dox | 0 .../reference/medloader/medloader1.dox | 0 .../reference/meshes/MEDCouplingCMesh.dox | 0 .../reference/meshes/MEDCouplingExtruded.dox | 0 .../reference/meshes/MEDCouplingPointSet.dox | 0 .../reference/meshes/MEDCouplingUMesh.dox | 0 .../doxfiles/reference/meshes/meshes.dox | 0 .../misc/MEDCouplingFieldTemplates.dox | 0 .../doxygen/doxfiles/reference/misc/icoco.dox | 0 .../doxygen/doxfiles/reference/misc/misc.dox | 0 .../doxygen/doxfiles/reference/misc/tools.dox | 0 .../doxygen/doxfiles/reference/reference.dox | 0 .../doxfiles/start/functionalities.dox | 0 .../doxygen/doxfiles/start/intro-start.dox | 0 .../doxygen/doxfiles/start/library.dox | 0 .../doxygen/doxfiles/start/python-api.dox | 0 .../doxygen/doxfiles/start/start.dox | 0 .../doxygen/doxfiles/start/terminology.dox | 0 .../doxygen/doxfiles/tutorial.dox | 0 .../doxygen/doxy2swig/MEDCoupling_doc.i.in | 0 .../doxygen/doxy2swig/MEDLoader_doc.i.in | 0 .../doxygen/doxy2swig/doxy2swig.cmake | 5 +- .../doxygen/doxy2swig/doxy2swig.py | 0 .../doxygen/fakesources/MEDCouplingField.C | 0 .../fakesources/MEDCouplingFieldDouble.C | 0 .../doxygen/fakesources/MEDCouplingMemArray.C | 0 .../doxygen/fakesources/MEDCouplingMesh.C | 0 .../doxygen/fakesources/MEDCouplingPointSet.C | 0 .../doxygen/fakesources/MEDCouplingUMesh.C | 0 .../doxygen/fakesources/MEDFileField.C | 0 .../doxygen/fakesources/MEDFileMesh.C | 0 .../doxygen/fakesources/namespaces.C | 0 .../doxygen/figures/IndirectIndex.jpg | Bin .../doxygen/figures/MED.png | Bin .../doxygen/figures/MEDCouplingUMeshConn.eps | 0 .../doxygen/figures/MEDCouplingUMeshConn.fig | 0 .../doxygen/figures/MEDCouplingUMeshConn.png | Bin .../doxygen/figures/MEDFileConcepts.fig | 0 .../doxygen/figures/MEDFileConcepts.png | Bin .../doxygen/figures/MED_small.eps | 0 .../doxygen/figures/MED_small.png | Bin .../figures/MedCoupling_Architecture.png | Bin .../doxygen/figures/NonCoincident.png | Bin .../doxygen/figures/NonCoincident_small.eps | 0 .../doxygen/figures/NonCoincident_small.png | Bin .../doxygen/figures/NonOverlapping.fig | 0 .../doxygen/figures/NonOverlapping.png | Bin .../doxygen/figures/OverlapDEC1.fig | 0 .../doxygen/figures/OverlapDEC1.png | Bin .../doxygen/figures/SampGeo2D1.eps | 0 .../doxygen/figures/SampGeo2D1.png | Bin .../doxygen/figures/SampGeo2D2.eps | 0 .../doxygen/figures/SampGeo2D2.png | Bin .../doxygen/figures/SampGeo2D3.eps | 0 .../doxygen/figures/SampGeo2D3.png | Bin .../doxygen/figures/SampGeo2D4.eps | 0 .../doxygen/figures/SampGeo2D4.png | Bin .../doxygen/figures/UML-0.png | Bin .../doxygen/figures/UML-1.png | Bin .../doxygen/figures/UML-2.png | Bin .../doxygen/figures/UML-3.png | Bin .../doxygen/figures/UML-4.png | Bin .../doxygen/figures/UML-5.png | Bin .../doxygen/figures/UML-6.png | Bin .../doxygen/figures/UML-7.png | Bin .../doxygen/figures/UML-8.png | Bin .../doxygen/figures/UML.png | Bin .../doxygen/figures/UML_light.png | Bin .../doxygen/figures/UML_small.png | Bin .../doxygen/figures/connectivity_arrays.eps | 0 .../doxygen/figures/connectivity_arrays.png | Bin .../figures/connectivity_arrays_small.eps | 0 .../figures/connectivity_arrays_small.png | Bin .../doxygen/figures/connectivity_example.png | Bin .../figures/connectivity_example_small.png | Bin .../doxygen/figures/fine_mesh.png | Bin .../doxygen/figures/geom.png | Bin .../doxygen/figures/grid_example.png | Bin .../doxygen/figures/interpolationimage.png | Bin .../doxygen/figures/med-file-uml.png | Bin .../figures/med-loader-adv-classes.png | Bin .../doxygen/figures/medlayers.png | Bin .../doxygen/figures/medlayers_70pc.png | Bin .../doxygen/figures/mesh_splitted.png | Bin .../doxygen/figures/mesh_unsplitted.png | Bin .../doxygen/figures/polygon_connectivity.png | Bin .../figures/polygon_connectivity_small.eps | 0 .../figures/polygon_connectivity_small.png | Bin .../figures/polyhedron_connectivity.png | Bin .../figures/polyhedron_connectivity_small.eps | 0 .../figures/polyhedron_connectivity_small.png | Bin .../doxygen/figures/projectionHQ.png | Bin .../doxygen/figures/projectionHQ_600.png | Bin .../doxygen/figures/source_field.png | Bin .../doxygen/figures/source_mesh.png | Bin .../doxygen/figures/target_field.png | Bin .../doxygen/figures/target_mesh.png | Bin .../figures/tetra_simplexize_24_48.jpg | Bin .../doxygen/figures/tetra_simplexize_5_6.jpg | Bin .../doxygen/images/head.png | Bin .../doxygen/static/footer.html | 0 .../doxygen/static/header.html.in | 0 .../doxygen/static/medcoupling_extra.css | 0 doc/tutorial/CMakeLists.txt | 2 +- doc/user/CMakeLists.txt | 25 +- doc/user/conf.py.in | 194 ++++ doc/user/images/cartesian.png | Bin 0 -> 788 bytes doc/user/images/cartesian.py | 113 +++ doc/user/images/convert2quadratic.png | Bin 0 -> 386 bytes doc/user/images/convert2quadratic.py | 144 +++ doc/user/images/curvelinear.png | Bin 0 -> 463 bytes doc/user/images/curvelinear.py | 111 +++ doc/user/images/explodeIntoEdges.png | Bin 0 -> 433 bytes doc/user/images/explodeIntoEdges.py | 123 +++ doc/user/images/extractSlice3D.png | Bin 0 -> 7258 bytes doc/user/images/extractSlice3D.py | 140 +++ doc/user/images/extract_feilds.py | 162 ++++ doc/user/images/extract_fields.png | Bin 0 -> 20844 bytes .../images/extract_mesh_fetched_nodes.png | Bin 0 -> 4096 bytes doc/user/images/extract_mesh_fetched_nodes.py | 114 +++ doc/user/images/extract_mesh_ids.png | Bin 0 -> 2214 bytes doc/user/images/extract_mesh_ids.py | 124 +++ doc/user/images/extrusion.png | Bin 0 -> 6150 bytes doc/user/images/extrusion.py | 173 ++++ doc/user/images/intersect_2d1d.png | Bin 0 -> 2184 bytes doc/user/images/intersect_2d1d.py | 177 ++++ doc/user/images/intersect_2d2d.png | Bin 0 -> 1507 bytes doc/user/images/intersect_2d2d.py | 140 +++ doc/user/images/measure_field.png | Bin 0 -> 11540 bytes doc/user/images/measure_field.py | 101 +++ doc/user/images/medrenumber.png | Bin 0 -> 10782 bytes doc/user/images/medrenumber.py | 148 +++ doc/user/images/orderConsecutiveCells1D.png | Bin 0 -> 1139 bytes doc/user/images/orderConsecutiveCells1D.py | 131 +++ doc/user/images/orient_2d.png | Bin 0 -> 2882 bytes doc/user/images/orient_2d.py | 115 +++ doc/user/images/ortho_field.png | Bin 0 -> 39629 bytes doc/user/images/ortho_field.py | 142 +++ doc/user/images/partition.png | Bin 0 -> 364 bytes doc/user/images/partition.py | 138 +++ doc/user/images/partition_with_layer.png | Bin 0 -> 290 bytes doc/user/images/partition_with_layer.py | 155 ++++ doc/user/images/pointe_fieldnodeint.png | Bin 0 -> 14601 bytes doc/user/images/pointe_fieldnodeint.py | 88 ++ doc/user/images/projection_P0P1_dual.png | Bin 0 -> 642 bytes doc/user/images/projection_P0P1_dual.py | 130 +++ doc/user/images/projection_P0P1_meshes.png | Bin 0 -> 581 bytes doc/user/images/projection_P0P1_meshes.py | 127 +++ doc/user/images/projection_P1P0_dual.png | Bin 0 -> 890 bytes doc/user/images/projection_P1P0_dual.py | 131 +++ doc/user/images/projection_bnd_box.png | Bin 0 -> 1988 bytes doc/user/images/projection_bnd_box.py | 140 +++ ...ojection_setMaxDistance3DSurfIntersect.png | Bin 0 -> 2161 bytes ...rojection_setMaxDistance3DSurfIntersect.py | 126 +++ doc/user/images/renumber_nodes.png | Bin 0 -> 1265 bytes doc/user/images/renumber_nodes.py | 122 +++ doc/user/images/simplexize.png | Bin 0 -> 7000 bytes doc/user/images/simplexize.py | 129 +++ doc/user/images/skin.png | Bin 0 -> 460 bytes doc/user/images/skin.py | 123 +++ doc/user/images/zones.png | Bin 0 -> 216 bytes doc/user/images/zones.py | 107 +++ doc/user/input/basic_concepts.rst | 89 ++ doc/user/input/data_analysis.rst | 561 ++++++++++++ doc/user/input/data_conversion.rst | 246 +++++ doc/user/input/data_movement.rst | 502 +++++++++++ doc/user/input/data_optimization.rst | 49 + doc/user/input/index.rst | 30 + .../locale/fr/LC_MESSAGES/basic_concepts.po | 202 +++++ .../locale/fr/LC_MESSAGES/data_analysis.po | 842 ++++++++++++++++++ .../locale/fr/LC_MESSAGES/data_conversion.po | 476 ++++++++++ .../locale/fr/LC_MESSAGES/data_movement.po | 823 +++++++++++++++++ .../fr/LC_MESSAGES/data_optimization.po | 94 ++ doc/user/locale/fr/LC_MESSAGES/index.po | 80 ++ doc/user/static/switchers.js.in | 72 ++ doc/user/templates/layout.html | 30 + src/MEDCoupling/MEDCouplingFieldDouble.cxx | 4 +- .../MEDCouplingExamplesTest.py | 4 +- .../UsersGuideExamplesTest.py | 616 +++++++++++++ .../UsersGuideExamplesTest_numpy.py | 33 + src/MEDCoupling_Swig/tests.set | 2 + src/MEDLoader/Swig/UsersGuideExamplesTest.py | 186 ++++ src/MEDLoader/Swig/tests.set | 1 + 229 files changed, 8892 insertions(+), 31 deletions(-) create mode 100644 doc/developer/CMakeLists.txt rename doc/{user => developer}/doxygen/BuildPyExamplesFromCPP.py (100%) rename doc/{user => developer}/doxygen/CMakeLists.txt (73%) rename doc/{user/doxygen/Doxyfile_med_user.in => developer/doxygen/Doxyfile_med_dev.in} (98%) rename doc/{user => developer}/doxygen/doxfiles/appendix/appendix.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/appendix/glossary.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/appendix/install.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/appendix/interpkernel.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/appendix/med-file.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/appendix/porting.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/appendix/references.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/examples/examples.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/examples/medcouplingexamplesarrays.doxy (100%) rename doc/{user => developer}/doxygen/doxfiles/examples/medcouplingexamplesfields.doxy (100%) rename doc/{user => developer}/doxygen/doxfiles/examples/medcouplingexamplesfooter.doxy (100%) rename doc/{user => developer}/doxygen/doxfiles/examples/medcouplingexamplesheader.doxy (100%) rename doc/{user => developer}/doxygen/doxfiles/examples/medcouplingexamplesmeshes.doxy (100%) rename doc/{user => developer}/doxygen/doxfiles/examples/medcouplingexamplesother.doxy (100%) rename doc/{user => developer}/doxygen/doxfiles/faq.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/index.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/arrays/arrays.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/arrays/numbering.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/cpp/MEDCouplingTimeLabel.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/cpp/cpp.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/distrib/corba-distrib.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/distrib/distrib.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/distrib/parallel.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/fields/MEDCouplingFields.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/fields/discretization.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/fields/fields.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/Geometric2D.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/NatureOfField.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/barycoords.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/interpolation.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/interptheory.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/intersec-specifics.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/intersectors.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/intro-interp.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/mapped_bary.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/interpolation/remapper.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/medcoupling.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/medloader/MEDLoader.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/medloader/MEDLoaderAdvancedAPI.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/medloader/MEDLoaderBasicAPI.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/medloader/intro-medloader.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/medloader/medloader1.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/meshes/MEDCouplingCMesh.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/meshes/MEDCouplingExtruded.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/meshes/MEDCouplingPointSet.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/meshes/MEDCouplingUMesh.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/meshes/meshes.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/misc/MEDCouplingFieldTemplates.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/misc/icoco.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/misc/misc.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/misc/tools.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/reference/reference.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/start/functionalities.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/start/intro-start.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/start/library.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/start/python-api.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/start/start.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/start/terminology.dox (100%) rename doc/{user => developer}/doxygen/doxfiles/tutorial.dox (100%) rename doc/{user => developer}/doxygen/doxy2swig/MEDCoupling_doc.i.in (100%) rename doc/{user => developer}/doxygen/doxy2swig/MEDLoader_doc.i.in (100%) rename doc/{user => developer}/doxygen/doxy2swig/doxy2swig.cmake (97%) rename doc/{user => developer}/doxygen/doxy2swig/doxy2swig.py (100%) rename doc/{user => developer}/doxygen/fakesources/MEDCouplingField.C (100%) rename doc/{user => developer}/doxygen/fakesources/MEDCouplingFieldDouble.C (100%) rename doc/{user => developer}/doxygen/fakesources/MEDCouplingMemArray.C (100%) rename doc/{user => developer}/doxygen/fakesources/MEDCouplingMesh.C (100%) rename doc/{user => developer}/doxygen/fakesources/MEDCouplingPointSet.C (100%) rename doc/{user => developer}/doxygen/fakesources/MEDCouplingUMesh.C (100%) rename doc/{user => developer}/doxygen/fakesources/MEDFileField.C (100%) rename doc/{user => developer}/doxygen/fakesources/MEDFileMesh.C (100%) rename doc/{user => developer}/doxygen/fakesources/namespaces.C (100%) rename doc/{user => developer}/doxygen/figures/IndirectIndex.jpg (100%) rename doc/{user => developer}/doxygen/figures/MED.png (100%) rename doc/{user => developer}/doxygen/figures/MEDCouplingUMeshConn.eps (100%) rename doc/{user => developer}/doxygen/figures/MEDCouplingUMeshConn.fig (100%) rename doc/{user => developer}/doxygen/figures/MEDCouplingUMeshConn.png (100%) rename doc/{user => developer}/doxygen/figures/MEDFileConcepts.fig (100%) rename doc/{user => developer}/doxygen/figures/MEDFileConcepts.png (100%) rename doc/{user => developer}/doxygen/figures/MED_small.eps (100%) rename doc/{user => developer}/doxygen/figures/MED_small.png (100%) rename doc/{user => developer}/doxygen/figures/MedCoupling_Architecture.png (100%) rename doc/{user => developer}/doxygen/figures/NonCoincident.png (100%) rename doc/{user => developer}/doxygen/figures/NonCoincident_small.eps (100%) rename doc/{user => developer}/doxygen/figures/NonCoincident_small.png (100%) rename doc/{user => developer}/doxygen/figures/NonOverlapping.fig (100%) rename doc/{user => developer}/doxygen/figures/NonOverlapping.png (100%) rename doc/{user => developer}/doxygen/figures/OverlapDEC1.fig (100%) rename doc/{user => developer}/doxygen/figures/OverlapDEC1.png (100%) rename doc/{user => developer}/doxygen/figures/SampGeo2D1.eps (100%) rename doc/{user => developer}/doxygen/figures/SampGeo2D1.png (100%) rename doc/{user => developer}/doxygen/figures/SampGeo2D2.eps (100%) rename doc/{user => developer}/doxygen/figures/SampGeo2D2.png (100%) rename doc/{user => developer}/doxygen/figures/SampGeo2D3.eps (100%) rename doc/{user => developer}/doxygen/figures/SampGeo2D3.png (100%) rename doc/{user => developer}/doxygen/figures/SampGeo2D4.eps (100%) rename doc/{user => developer}/doxygen/figures/SampGeo2D4.png (100%) rename doc/{user => developer}/doxygen/figures/UML-0.png (100%) rename doc/{user => developer}/doxygen/figures/UML-1.png (100%) rename doc/{user => developer}/doxygen/figures/UML-2.png (100%) rename doc/{user => developer}/doxygen/figures/UML-3.png (100%) rename doc/{user => developer}/doxygen/figures/UML-4.png (100%) rename doc/{user => developer}/doxygen/figures/UML-5.png (100%) rename doc/{user => developer}/doxygen/figures/UML-6.png (100%) rename doc/{user => developer}/doxygen/figures/UML-7.png (100%) rename doc/{user => developer}/doxygen/figures/UML-8.png (100%) rename doc/{user => developer}/doxygen/figures/UML.png (100%) rename doc/{user => developer}/doxygen/figures/UML_light.png (100%) rename doc/{user => developer}/doxygen/figures/UML_small.png (100%) rename doc/{user => developer}/doxygen/figures/connectivity_arrays.eps (100%) rename doc/{user => developer}/doxygen/figures/connectivity_arrays.png (100%) rename doc/{user => developer}/doxygen/figures/connectivity_arrays_small.eps (100%) rename doc/{user => developer}/doxygen/figures/connectivity_arrays_small.png (100%) rename doc/{user => developer}/doxygen/figures/connectivity_example.png (100%) rename doc/{user => developer}/doxygen/figures/connectivity_example_small.png (100%) rename doc/{user => developer}/doxygen/figures/fine_mesh.png (100%) rename doc/{user => developer}/doxygen/figures/geom.png (100%) rename doc/{user => developer}/doxygen/figures/grid_example.png (100%) rename doc/{user => developer}/doxygen/figures/interpolationimage.png (100%) rename doc/{user => developer}/doxygen/figures/med-file-uml.png (100%) rename doc/{user => developer}/doxygen/figures/med-loader-adv-classes.png (100%) rename doc/{user => developer}/doxygen/figures/medlayers.png (100%) rename doc/{user => developer}/doxygen/figures/medlayers_70pc.png (100%) rename doc/{user => developer}/doxygen/figures/mesh_splitted.png (100%) rename doc/{user => developer}/doxygen/figures/mesh_unsplitted.png (100%) rename doc/{user => developer}/doxygen/figures/polygon_connectivity.png (100%) rename doc/{user => developer}/doxygen/figures/polygon_connectivity_small.eps (100%) rename doc/{user => developer}/doxygen/figures/polygon_connectivity_small.png (100%) rename doc/{user => developer}/doxygen/figures/polyhedron_connectivity.png (100%) rename doc/{user => developer}/doxygen/figures/polyhedron_connectivity_small.eps (100%) rename doc/{user => developer}/doxygen/figures/polyhedron_connectivity_small.png (100%) rename doc/{user => developer}/doxygen/figures/projectionHQ.png (100%) rename doc/{user => developer}/doxygen/figures/projectionHQ_600.png (100%) rename doc/{user => developer}/doxygen/figures/source_field.png (100%) rename doc/{user => developer}/doxygen/figures/source_mesh.png (100%) rename doc/{user => developer}/doxygen/figures/target_field.png (100%) rename doc/{user => developer}/doxygen/figures/target_mesh.png (100%) rename doc/{user => developer}/doxygen/figures/tetra_simplexize_24_48.jpg (100%) rename doc/{user => developer}/doxygen/figures/tetra_simplexize_5_6.jpg (100%) rename doc/{user => developer}/doxygen/images/head.png (100%) rename doc/{user => developer}/doxygen/static/footer.html (100%) rename doc/{user => developer}/doxygen/static/header.html.in (100%) rename doc/{user => developer}/doxygen/static/medcoupling_extra.css (100%) create mode 100644 doc/user/conf.py.in create mode 100644 doc/user/images/cartesian.png create mode 100644 doc/user/images/cartesian.py create mode 100644 doc/user/images/convert2quadratic.png create mode 100644 doc/user/images/convert2quadratic.py create mode 100644 doc/user/images/curvelinear.png create mode 100644 doc/user/images/curvelinear.py create mode 100644 doc/user/images/explodeIntoEdges.png create mode 100644 doc/user/images/explodeIntoEdges.py create mode 100644 doc/user/images/extractSlice3D.png create mode 100644 doc/user/images/extractSlice3D.py create mode 100644 doc/user/images/extract_feilds.py create mode 100644 doc/user/images/extract_fields.png create mode 100644 doc/user/images/extract_mesh_fetched_nodes.png create mode 100644 doc/user/images/extract_mesh_fetched_nodes.py create mode 100644 doc/user/images/extract_mesh_ids.png create mode 100644 doc/user/images/extract_mesh_ids.py create mode 100644 doc/user/images/extrusion.png create mode 100644 doc/user/images/extrusion.py create mode 100644 doc/user/images/intersect_2d1d.png create mode 100644 doc/user/images/intersect_2d1d.py create mode 100644 doc/user/images/intersect_2d2d.png create mode 100644 doc/user/images/intersect_2d2d.py create mode 100644 doc/user/images/measure_field.png create mode 100644 doc/user/images/measure_field.py create mode 100644 doc/user/images/medrenumber.png create mode 100644 doc/user/images/medrenumber.py create mode 100644 doc/user/images/orderConsecutiveCells1D.png create mode 100644 doc/user/images/orderConsecutiveCells1D.py create mode 100644 doc/user/images/orient_2d.png create mode 100644 doc/user/images/orient_2d.py create mode 100644 doc/user/images/ortho_field.png create mode 100644 doc/user/images/ortho_field.py create mode 100644 doc/user/images/partition.png create mode 100644 doc/user/images/partition.py create mode 100644 doc/user/images/partition_with_layer.png create mode 100644 doc/user/images/partition_with_layer.py create mode 100644 doc/user/images/pointe_fieldnodeint.png create mode 100644 doc/user/images/pointe_fieldnodeint.py create mode 100644 doc/user/images/projection_P0P1_dual.png create mode 100644 doc/user/images/projection_P0P1_dual.py create mode 100644 doc/user/images/projection_P0P1_meshes.png create mode 100644 doc/user/images/projection_P0P1_meshes.py create mode 100644 doc/user/images/projection_P1P0_dual.png create mode 100644 doc/user/images/projection_P1P0_dual.py create mode 100644 doc/user/images/projection_bnd_box.png create mode 100644 doc/user/images/projection_bnd_box.py create mode 100644 doc/user/images/projection_setMaxDistance3DSurfIntersect.png create mode 100644 doc/user/images/projection_setMaxDistance3DSurfIntersect.py create mode 100644 doc/user/images/renumber_nodes.png create mode 100644 doc/user/images/renumber_nodes.py create mode 100644 doc/user/images/simplexize.png create mode 100644 doc/user/images/simplexize.py create mode 100644 doc/user/images/skin.png create mode 100644 doc/user/images/skin.py create mode 100644 doc/user/images/zones.png create mode 100644 doc/user/images/zones.py create mode 100644 doc/user/input/basic_concepts.rst create mode 100644 doc/user/input/data_analysis.rst create mode 100644 doc/user/input/data_conversion.rst create mode 100644 doc/user/input/data_movement.rst create mode 100644 doc/user/input/data_optimization.rst create mode 100644 doc/user/input/index.rst create mode 100644 doc/user/locale/fr/LC_MESSAGES/basic_concepts.po create mode 100644 doc/user/locale/fr/LC_MESSAGES/data_analysis.po create mode 100644 doc/user/locale/fr/LC_MESSAGES/data_conversion.po create mode 100644 doc/user/locale/fr/LC_MESSAGES/data_movement.po create mode 100644 doc/user/locale/fr/LC_MESSAGES/data_optimization.po create mode 100644 doc/user/locale/fr/LC_MESSAGES/index.po create mode 100644 doc/user/static/switchers.js.in create mode 100644 doc/user/templates/layout.html create mode 100644 src/MEDCoupling_Swig/UsersGuideExamplesTest.py create mode 100644 src/MEDCoupling_Swig/UsersGuideExamplesTest_numpy.py create mode 100644 src/MEDLoader/Swig/UsersGuideExamplesTest.py diff --git a/CMakeLists.txt b/CMakeLists.txt index d5f992d71..efc4e3ba2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,6 +79,8 @@ IF(WIN32) SET(XDR_DEFAULT_OPTION OFF) ENDIF() CMAKE_DEPENDENT_OPTION(MEDCOUPLING_MEDLOADER_USE_XDR "Enable use of XDR for SauvReader." ${XDR_DEFAULT_OPTION} "NOT MEDCOUPLING_MICROMED" OFF) +CMAKE_DEPENDENT_OPTION(MEDCOUPLING_BUILD_FRENCH_DOC "Generate MEDCOUPLING French documentation" OFF + "MEDCOUPLING_BUILD_DOC" OFF) IF(MEDCOUPLING_BUILD_STATIC) SET(BUILD_SHARED_LIBS 0) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 0747aef11..f496840c2 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -17,5 +17,6 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -ADD_SUBDIRECTORY(user) +ADD_SUBDIRECTORY(developer) ADD_SUBDIRECTORY(tutorial) +ADD_SUBDIRECTORY(user) diff --git a/doc/developer/CMakeLists.txt b/doc/developer/CMakeLists.txt new file mode 100644 index 000000000..186e64694 --- /dev/null +++ b/doc/developer/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright (C) 2012-2016 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +ADD_SUBDIRECTORY(doxygen) diff --git a/doc/user/doxygen/BuildPyExamplesFromCPP.py b/doc/developer/doxygen/BuildPyExamplesFromCPP.py similarity index 100% rename from doc/user/doxygen/BuildPyExamplesFromCPP.py rename to doc/developer/doxygen/BuildPyExamplesFromCPP.py diff --git a/doc/user/doxygen/CMakeLists.txt b/doc/developer/doxygen/CMakeLists.txt similarity index 73% rename from doc/user/doxygen/CMakeLists.txt rename to doc/developer/doxygen/CMakeLists.txt index c141a32c5..3d1b2dede 100644 --- a/doc/user/doxygen/CMakeLists.txt +++ b/doc/developer/doxygen/CMakeLists.txt @@ -17,7 +17,16 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -SALOME_CONFIGURE_FILE(Doxyfile_med_user.in Doxyfile_med_user) +# Set MEDCOUPLING_SERVER_BASED_SEARCH=ON when building docs for putting on www.salome-platform.org +# MEDCOUPLING_SERVER_BASED_SEARCH is used in Doxyfile_med_dev +# +IF(MEDCOUPLING_SERVER_BASED_SEARCH) + SET(MEDCOUPLING_SERVER_BASED_SEARCH "YES") +ELSE() + SET(MEDCOUPLING_SERVER_BASED_SEARCH "NO") +ENDIF() + +SALOME_CONFIGURE_FILE(Doxyfile_med_dev.in Doxyfile_med_dev) SALOME_CONFIGURE_FILE(static/header.html.in static/header.html) @@ -39,7 +48,7 @@ IF(MEDCOUPLING_ENABLE_PYTHON) doxfiles/examples/medcouplingexamplesarrays.doxy doxfiles/examples/medcouplingexamplesother.doxy doxfiles/examples/medcouplingexamplesfooter.doxy - ) + ) # This function adds IN_FILE contents to the end of OUT_FILE FUNCTION(concat IN_FILE OUT_FILE) @@ -57,28 +66,28 @@ IF(MEDCOUPLING_ENABLE_PYTHON) # gets updated if its content has changed. # Here is the "standard" procedure, as if ${input} was hand-written. - ADD_CUSTOM_TARGET(usr_docs ALL + ADD_CUSTOM_TARGET(dev_docs ALL COMMAND ${PYTHON_EXECUTABLE} ${pythondocexamplesgenerator} ${input} ${output} - COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile_med_user + COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile_med_dev VERBATIM WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) # Create dummy target gathering the generation of all .i files: ADD_CUSTOM_TARGET(swig_ready) - ADD_DEPENDENCIES(swig_ready usr_docs) + ADD_DEPENDENCIES(swig_ready dev_docs) - MEDCOUPLING_SWIG_DOCSTRING_CONFIGURE(usr_docs swig_ready MEDCoupling) - MEDCOUPLING_SWIG_DOCSTRING_CONFIGURE(usr_docs swig_ready MEDLoader) + MEDCOUPLING_SWIG_DOCSTRING_CONFIGURE(dev_docs swig_ready MEDCoupling) + MEDCOUPLING_SWIG_DOCSTRING_CONFIGURE(dev_docs swig_ready MEDLoader) - SET(doxyfile_med_user ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_med_user) - FILE(STRINGS ${doxyfile_med_user} enabled_sections REGEX "ENABLED_SECTIONS") + SET(doxyfile_med_dev ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile_med_dev) + FILE(STRINGS ${doxyfile_med_dev} enabled_sections REGEX "ENABLED_SECTIONS") IF(enabled_sections) - FILE(READ ${doxyfile_med_user} doxy_file) + FILE(READ ${doxyfile_med_dev} doxy_file) STRING(REPLACE ${enabled_sections} "${enabled_sections} ENABLE_EXAMPLES" new_doxy_file ${doxy_file}) - FILE(WRITE ${doxyfile_med_user} ${new_doxy_file}) + FILE(WRITE ${doxyfile_med_dev} ${new_doxy_file}) ELSE() - FILE(APPEND ${doxyfile_med_user} + FILE(APPEND ${doxyfile_med_dev} "#Temporary variable to enable python documentation sections\nENABLED_SECTIONS = ENABLE_EXAMPLES") ENDIF() @@ -86,16 +95,16 @@ IF(MEDCOUPLING_ENABLE_PYTHON) INCLUDE(doxy2swig/doxy2swig.cmake) ELSE() - ADD_CUSTOM_TARGET(usr_docs ALL - COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile_med_user + ADD_CUSTOM_TARGET(dev_docs ALL + COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile_med_dev VERBATIM WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) ENDIF() -#INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target usr_docs)") -INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc_ref_user/html/ DESTINATION ${MEDCOUPLING_INSTALL_DOC}) -INSTALL(FILES images/head.png DESTINATION ${MEDCOUPLING_INSTALL_DOC}) +#INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target dev_docs)") +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc_ref_dev/html/ DESTINATION ${MEDCOUPLING_INSTALL_DOC}/developer) +INSTALL(FILES images/head.png DESTINATION ${MEDCOUPLING_INSTALL_DOC}/developer) -SET(MAKE_CLEAN_FILES doc_ref_user tmp) +SET(MAKE_CLEAN_FILES doc_ref_dev tmp) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${MAKE_CLEAN_FILES}") diff --git a/doc/user/doxygen/Doxyfile_med_user.in b/doc/developer/doxygen/Doxyfile_med_dev.in similarity index 98% rename from doc/user/doxygen/Doxyfile_med_user.in rename to doc/developer/doxygen/Doxyfile_med_dev.in index bb32a09fc..6965a18e2 100644 --- a/doc/user/doxygen/Doxyfile_med_user.in +++ b/doc/developer/doxygen/Doxyfile_med_dev.in @@ -22,9 +22,9 @@ # General configuration options #--------------------------------------------------------------------------- # -PROJECT_NAME = "MEDCoupling Users' Guide" +PROJECT_NAME = "MEDCoupling Developers' Guide" PROJECT_NUMBER = -OUTPUT_DIRECTORY = doc_ref_user +OUTPUT_DIRECTORY = doc_ref_dev OUTPUT_LANGUAGE = English EXTRACT_ALL = YES EXTRACT_PRIVATE = NO @@ -66,7 +66,7 @@ QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_FORMAT = "$file:$line: $text" -WARN_LOGFILE = log_user +WARN_LOGFILE = log_dev #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- @@ -109,7 +109,6 @@ FILE_PATTERNS = InterpKernelDEC.*xx \ ExplicitCoincidentDEC.*xx \ NonCoincidentDEC.*xx \ CommInterface.*xx \ - ICoCo*.*xx \ NormalizedGeometricTypes \ NormalizedUnstructuredMesh.*xx \ Interpolation2D.*xx \ @@ -153,7 +152,6 @@ FILE_PATTERNS = InterpKernelDEC.*xx \ MEDCouplingCartesianAMRMesh.*xx \ MEDCouplingTimeLabel.*xx \ MEDCouplingRefCountObject.*xx \ - MCAuto.*xx \ MEDCouplingMemArray.*xx \ MEDCouplingGaussLocalization.*xx \ MEDCouplingRemapper.*xx \ @@ -172,6 +170,7 @@ FILE_PATTERNS = InterpKernelDEC.*xx \ RECURSIVE = YES EXCLUDE = CVS EXCLUDE_PATTERNS = *~ +EXCLUDE_SYMBOLS = ICoCo EXAMPLE_PATH = @PROJECT_SOURCE_DIR@/src/ParaMEDMEM \ @PROJECT_SOURCE_DIR@/src/MEDCoupling/Test \ @PROJECT_SOURCE_DIR@/src/MEDCoupling_Swig \ @@ -290,3 +289,5 @@ DOT_CLEANUP = YES # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = YES +SERVER_BASED_SEARCH = @MEDCOUPLING_SERVER_BASED_SEARCH@ +EXTERNAL_SEARCH = NO diff --git a/doc/user/doxygen/doxfiles/appendix/appendix.dox b/doc/developer/doxygen/doxfiles/appendix/appendix.dox similarity index 100% rename from doc/user/doxygen/doxfiles/appendix/appendix.dox rename to doc/developer/doxygen/doxfiles/appendix/appendix.dox diff --git a/doc/user/doxygen/doxfiles/appendix/glossary.dox b/doc/developer/doxygen/doxfiles/appendix/glossary.dox similarity index 100% rename from doc/user/doxygen/doxfiles/appendix/glossary.dox rename to doc/developer/doxygen/doxfiles/appendix/glossary.dox diff --git a/doc/user/doxygen/doxfiles/appendix/install.dox b/doc/developer/doxygen/doxfiles/appendix/install.dox similarity index 100% rename from doc/user/doxygen/doxfiles/appendix/install.dox rename to doc/developer/doxygen/doxfiles/appendix/install.dox diff --git a/doc/user/doxygen/doxfiles/appendix/interpkernel.dox b/doc/developer/doxygen/doxfiles/appendix/interpkernel.dox similarity index 100% rename from doc/user/doxygen/doxfiles/appendix/interpkernel.dox rename to doc/developer/doxygen/doxfiles/appendix/interpkernel.dox diff --git a/doc/user/doxygen/doxfiles/appendix/med-file.dox b/doc/developer/doxygen/doxfiles/appendix/med-file.dox similarity index 100% rename from doc/user/doxygen/doxfiles/appendix/med-file.dox rename to doc/developer/doxygen/doxfiles/appendix/med-file.dox diff --git a/doc/user/doxygen/doxfiles/appendix/porting.dox b/doc/developer/doxygen/doxfiles/appendix/porting.dox similarity index 100% rename from doc/user/doxygen/doxfiles/appendix/porting.dox rename to doc/developer/doxygen/doxfiles/appendix/porting.dox diff --git a/doc/user/doxygen/doxfiles/appendix/references.dox b/doc/developer/doxygen/doxfiles/appendix/references.dox similarity index 100% rename from doc/user/doxygen/doxfiles/appendix/references.dox rename to doc/developer/doxygen/doxfiles/appendix/references.dox diff --git a/doc/user/doxygen/doxfiles/examples/examples.dox b/doc/developer/doxygen/doxfiles/examples/examples.dox similarity index 100% rename from doc/user/doxygen/doxfiles/examples/examples.dox rename to doc/developer/doxygen/doxfiles/examples/examples.dox diff --git a/doc/user/doxygen/doxfiles/examples/medcouplingexamplesarrays.doxy b/doc/developer/doxygen/doxfiles/examples/medcouplingexamplesarrays.doxy similarity index 100% rename from doc/user/doxygen/doxfiles/examples/medcouplingexamplesarrays.doxy rename to doc/developer/doxygen/doxfiles/examples/medcouplingexamplesarrays.doxy diff --git a/doc/user/doxygen/doxfiles/examples/medcouplingexamplesfields.doxy b/doc/developer/doxygen/doxfiles/examples/medcouplingexamplesfields.doxy similarity index 100% rename from doc/user/doxygen/doxfiles/examples/medcouplingexamplesfields.doxy rename to doc/developer/doxygen/doxfiles/examples/medcouplingexamplesfields.doxy diff --git a/doc/user/doxygen/doxfiles/examples/medcouplingexamplesfooter.doxy b/doc/developer/doxygen/doxfiles/examples/medcouplingexamplesfooter.doxy similarity index 100% rename from doc/user/doxygen/doxfiles/examples/medcouplingexamplesfooter.doxy rename to doc/developer/doxygen/doxfiles/examples/medcouplingexamplesfooter.doxy diff --git a/doc/user/doxygen/doxfiles/examples/medcouplingexamplesheader.doxy b/doc/developer/doxygen/doxfiles/examples/medcouplingexamplesheader.doxy similarity index 100% rename from doc/user/doxygen/doxfiles/examples/medcouplingexamplesheader.doxy rename to doc/developer/doxygen/doxfiles/examples/medcouplingexamplesheader.doxy diff --git a/doc/user/doxygen/doxfiles/examples/medcouplingexamplesmeshes.doxy b/doc/developer/doxygen/doxfiles/examples/medcouplingexamplesmeshes.doxy similarity index 100% rename from doc/user/doxygen/doxfiles/examples/medcouplingexamplesmeshes.doxy rename to doc/developer/doxygen/doxfiles/examples/medcouplingexamplesmeshes.doxy diff --git a/doc/user/doxygen/doxfiles/examples/medcouplingexamplesother.doxy b/doc/developer/doxygen/doxfiles/examples/medcouplingexamplesother.doxy similarity index 100% rename from doc/user/doxygen/doxfiles/examples/medcouplingexamplesother.doxy rename to doc/developer/doxygen/doxfiles/examples/medcouplingexamplesother.doxy diff --git a/doc/user/doxygen/doxfiles/faq.dox b/doc/developer/doxygen/doxfiles/faq.dox similarity index 100% rename from doc/user/doxygen/doxfiles/faq.dox rename to doc/developer/doxygen/doxfiles/faq.dox diff --git a/doc/user/doxygen/doxfiles/index.dox b/doc/developer/doxygen/doxfiles/index.dox similarity index 100% rename from doc/user/doxygen/doxfiles/index.dox rename to doc/developer/doxygen/doxfiles/index.dox diff --git a/doc/user/doxygen/doxfiles/reference/arrays/arrays.dox b/doc/developer/doxygen/doxfiles/reference/arrays/arrays.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/arrays/arrays.dox rename to doc/developer/doxygen/doxfiles/reference/arrays/arrays.dox diff --git a/doc/user/doxygen/doxfiles/reference/arrays/numbering.dox b/doc/developer/doxygen/doxfiles/reference/arrays/numbering.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/arrays/numbering.dox rename to doc/developer/doxygen/doxfiles/reference/arrays/numbering.dox diff --git a/doc/user/doxygen/doxfiles/reference/cpp/MEDCouplingTimeLabel.dox b/doc/developer/doxygen/doxfiles/reference/cpp/MEDCouplingTimeLabel.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/cpp/MEDCouplingTimeLabel.dox rename to doc/developer/doxygen/doxfiles/reference/cpp/MEDCouplingTimeLabel.dox diff --git a/doc/user/doxygen/doxfiles/reference/cpp/cpp.dox b/doc/developer/doxygen/doxfiles/reference/cpp/cpp.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/cpp/cpp.dox rename to doc/developer/doxygen/doxfiles/reference/cpp/cpp.dox diff --git a/doc/user/doxygen/doxfiles/reference/distrib/corba-distrib.dox b/doc/developer/doxygen/doxfiles/reference/distrib/corba-distrib.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/distrib/corba-distrib.dox rename to doc/developer/doxygen/doxfiles/reference/distrib/corba-distrib.dox diff --git a/doc/user/doxygen/doxfiles/reference/distrib/distrib.dox b/doc/developer/doxygen/doxfiles/reference/distrib/distrib.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/distrib/distrib.dox rename to doc/developer/doxygen/doxfiles/reference/distrib/distrib.dox diff --git a/doc/user/doxygen/doxfiles/reference/distrib/parallel.dox b/doc/developer/doxygen/doxfiles/reference/distrib/parallel.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/distrib/parallel.dox rename to doc/developer/doxygen/doxfiles/reference/distrib/parallel.dox diff --git a/doc/user/doxygen/doxfiles/reference/fields/MEDCouplingFields.dox b/doc/developer/doxygen/doxfiles/reference/fields/MEDCouplingFields.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/fields/MEDCouplingFields.dox rename to doc/developer/doxygen/doxfiles/reference/fields/MEDCouplingFields.dox diff --git a/doc/user/doxygen/doxfiles/reference/fields/discretization.dox b/doc/developer/doxygen/doxfiles/reference/fields/discretization.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/fields/discretization.dox rename to doc/developer/doxygen/doxfiles/reference/fields/discretization.dox diff --git a/doc/user/doxygen/doxfiles/reference/fields/fields.dox b/doc/developer/doxygen/doxfiles/reference/fields/fields.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/fields/fields.dox rename to doc/developer/doxygen/doxfiles/reference/fields/fields.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/Geometric2D.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/Geometric2D.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/Geometric2D.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/Geometric2D.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/NatureOfField.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/NatureOfField.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/NatureOfField.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/NatureOfField.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/barycoords.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/barycoords.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/barycoords.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/barycoords.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/interpolation.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/interpolation.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/interpolation.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/interpolation.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/interptheory.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/interptheory.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/interptheory.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/interptheory.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/intersec-specifics.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/intersec-specifics.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/intersec-specifics.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/intersec-specifics.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/intersectors.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/intersectors.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/intersectors.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/intersectors.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/intro-interp.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/intro-interp.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/intro-interp.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/intro-interp.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/mapped_bary.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/mapped_bary.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/mapped_bary.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/mapped_bary.dox diff --git a/doc/user/doxygen/doxfiles/reference/interpolation/remapper.dox b/doc/developer/doxygen/doxfiles/reference/interpolation/remapper.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/interpolation/remapper.dox rename to doc/developer/doxygen/doxfiles/reference/interpolation/remapper.dox diff --git a/doc/user/doxygen/doxfiles/reference/medcoupling.dox b/doc/developer/doxygen/doxfiles/reference/medcoupling.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/medcoupling.dox rename to doc/developer/doxygen/doxfiles/reference/medcoupling.dox diff --git a/doc/user/doxygen/doxfiles/reference/medloader/MEDLoader.dox b/doc/developer/doxygen/doxfiles/reference/medloader/MEDLoader.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/medloader/MEDLoader.dox rename to doc/developer/doxygen/doxfiles/reference/medloader/MEDLoader.dox diff --git a/doc/user/doxygen/doxfiles/reference/medloader/MEDLoaderAdvancedAPI.dox b/doc/developer/doxygen/doxfiles/reference/medloader/MEDLoaderAdvancedAPI.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/medloader/MEDLoaderAdvancedAPI.dox rename to doc/developer/doxygen/doxfiles/reference/medloader/MEDLoaderAdvancedAPI.dox diff --git a/doc/user/doxygen/doxfiles/reference/medloader/MEDLoaderBasicAPI.dox b/doc/developer/doxygen/doxfiles/reference/medloader/MEDLoaderBasicAPI.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/medloader/MEDLoaderBasicAPI.dox rename to doc/developer/doxygen/doxfiles/reference/medloader/MEDLoaderBasicAPI.dox diff --git a/doc/user/doxygen/doxfiles/reference/medloader/intro-medloader.dox b/doc/developer/doxygen/doxfiles/reference/medloader/intro-medloader.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/medloader/intro-medloader.dox rename to doc/developer/doxygen/doxfiles/reference/medloader/intro-medloader.dox diff --git a/doc/user/doxygen/doxfiles/reference/medloader/medloader1.dox b/doc/developer/doxygen/doxfiles/reference/medloader/medloader1.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/medloader/medloader1.dox rename to doc/developer/doxygen/doxfiles/reference/medloader/medloader1.dox diff --git a/doc/user/doxygen/doxfiles/reference/meshes/MEDCouplingCMesh.dox b/doc/developer/doxygen/doxfiles/reference/meshes/MEDCouplingCMesh.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/meshes/MEDCouplingCMesh.dox rename to doc/developer/doxygen/doxfiles/reference/meshes/MEDCouplingCMesh.dox diff --git a/doc/user/doxygen/doxfiles/reference/meshes/MEDCouplingExtruded.dox b/doc/developer/doxygen/doxfiles/reference/meshes/MEDCouplingExtruded.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/meshes/MEDCouplingExtruded.dox rename to doc/developer/doxygen/doxfiles/reference/meshes/MEDCouplingExtruded.dox diff --git a/doc/user/doxygen/doxfiles/reference/meshes/MEDCouplingPointSet.dox b/doc/developer/doxygen/doxfiles/reference/meshes/MEDCouplingPointSet.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/meshes/MEDCouplingPointSet.dox rename to doc/developer/doxygen/doxfiles/reference/meshes/MEDCouplingPointSet.dox diff --git a/doc/user/doxygen/doxfiles/reference/meshes/MEDCouplingUMesh.dox b/doc/developer/doxygen/doxfiles/reference/meshes/MEDCouplingUMesh.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/meshes/MEDCouplingUMesh.dox rename to doc/developer/doxygen/doxfiles/reference/meshes/MEDCouplingUMesh.dox diff --git a/doc/user/doxygen/doxfiles/reference/meshes/meshes.dox b/doc/developer/doxygen/doxfiles/reference/meshes/meshes.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/meshes/meshes.dox rename to doc/developer/doxygen/doxfiles/reference/meshes/meshes.dox diff --git a/doc/user/doxygen/doxfiles/reference/misc/MEDCouplingFieldTemplates.dox b/doc/developer/doxygen/doxfiles/reference/misc/MEDCouplingFieldTemplates.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/misc/MEDCouplingFieldTemplates.dox rename to doc/developer/doxygen/doxfiles/reference/misc/MEDCouplingFieldTemplates.dox diff --git a/doc/user/doxygen/doxfiles/reference/misc/icoco.dox b/doc/developer/doxygen/doxfiles/reference/misc/icoco.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/misc/icoco.dox rename to doc/developer/doxygen/doxfiles/reference/misc/icoco.dox diff --git a/doc/user/doxygen/doxfiles/reference/misc/misc.dox b/doc/developer/doxygen/doxfiles/reference/misc/misc.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/misc/misc.dox rename to doc/developer/doxygen/doxfiles/reference/misc/misc.dox diff --git a/doc/user/doxygen/doxfiles/reference/misc/tools.dox b/doc/developer/doxygen/doxfiles/reference/misc/tools.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/misc/tools.dox rename to doc/developer/doxygen/doxfiles/reference/misc/tools.dox diff --git a/doc/user/doxygen/doxfiles/reference/reference.dox b/doc/developer/doxygen/doxfiles/reference/reference.dox similarity index 100% rename from doc/user/doxygen/doxfiles/reference/reference.dox rename to doc/developer/doxygen/doxfiles/reference/reference.dox diff --git a/doc/user/doxygen/doxfiles/start/functionalities.dox b/doc/developer/doxygen/doxfiles/start/functionalities.dox similarity index 100% rename from doc/user/doxygen/doxfiles/start/functionalities.dox rename to doc/developer/doxygen/doxfiles/start/functionalities.dox diff --git a/doc/user/doxygen/doxfiles/start/intro-start.dox b/doc/developer/doxygen/doxfiles/start/intro-start.dox similarity index 100% rename from doc/user/doxygen/doxfiles/start/intro-start.dox rename to doc/developer/doxygen/doxfiles/start/intro-start.dox diff --git a/doc/user/doxygen/doxfiles/start/library.dox b/doc/developer/doxygen/doxfiles/start/library.dox similarity index 100% rename from doc/user/doxygen/doxfiles/start/library.dox rename to doc/developer/doxygen/doxfiles/start/library.dox diff --git a/doc/user/doxygen/doxfiles/start/python-api.dox b/doc/developer/doxygen/doxfiles/start/python-api.dox similarity index 100% rename from doc/user/doxygen/doxfiles/start/python-api.dox rename to doc/developer/doxygen/doxfiles/start/python-api.dox diff --git a/doc/user/doxygen/doxfiles/start/start.dox b/doc/developer/doxygen/doxfiles/start/start.dox similarity index 100% rename from doc/user/doxygen/doxfiles/start/start.dox rename to doc/developer/doxygen/doxfiles/start/start.dox diff --git a/doc/user/doxygen/doxfiles/start/terminology.dox b/doc/developer/doxygen/doxfiles/start/terminology.dox similarity index 100% rename from doc/user/doxygen/doxfiles/start/terminology.dox rename to doc/developer/doxygen/doxfiles/start/terminology.dox diff --git a/doc/user/doxygen/doxfiles/tutorial.dox b/doc/developer/doxygen/doxfiles/tutorial.dox similarity index 100% rename from doc/user/doxygen/doxfiles/tutorial.dox rename to doc/developer/doxygen/doxfiles/tutorial.dox diff --git a/doc/user/doxygen/doxy2swig/MEDCoupling_doc.i.in b/doc/developer/doxygen/doxy2swig/MEDCoupling_doc.i.in similarity index 100% rename from doc/user/doxygen/doxy2swig/MEDCoupling_doc.i.in rename to doc/developer/doxygen/doxy2swig/MEDCoupling_doc.i.in diff --git a/doc/user/doxygen/doxy2swig/MEDLoader_doc.i.in b/doc/developer/doxygen/doxy2swig/MEDLoader_doc.i.in similarity index 100% rename from doc/user/doxygen/doxy2swig/MEDLoader_doc.i.in rename to doc/developer/doxygen/doxy2swig/MEDLoader_doc.i.in diff --git a/doc/user/doxygen/doxy2swig/doxy2swig.cmake b/doc/developer/doxygen/doxy2swig/doxy2swig.cmake similarity index 97% rename from doc/user/doxygen/doxy2swig/doxy2swig.cmake rename to doc/developer/doxygen/doxy2swig/doxy2swig.cmake index 2be193083..7ff999da3 100644 --- a/doc/user/doxygen/doxy2swig/doxy2swig.cmake +++ b/doc/developer/doxygen/doxy2swig/doxy2swig.cmake @@ -22,7 +22,8 @@ ## the docstrings built from the C++ doxygen documentation. ## -SET(_DOXY2SWIG ${PROJECT_SOURCE_DIR}/doc/user/doxygen/doxy2swig/doxy2swig.py) +SET(_DOXY2SWIG ${PROJECT_SOURCE_DIR}/doc/developer/doxygen/doxy2swig/doxy2swig.py) + SET(_SWIG_DOC_SUFFIX "doc_class_") # @@ -61,7 +62,7 @@ MACRO(MEDCOUPLING_SWIG_DOCSTRING_GENERATE target_doc target_swig cls_list swig_m # List of generated SWIG files (.i) for doc purposes only: SET(${swig_files}) FOREACH(_cls IN LISTS ${cls_list}) - SET(_xml_file "${CMAKE_CURRENT_BINARY_DIR}/../doxygen/doc_ref_user/xml/class${_cls}.xml") + SET(_xml_file "${CMAKE_CURRENT_BINARY_DIR}/../doxygen/doc_ref_dev/xml/class${_cls}.xml") SET(_swig_file_base "${_SWIG_DOC_SUFFIX}${_cls}.i") SET(_swig_file "${PROJECT_BINARY_DIR}/doc/${_swig_file_base}" ) diff --git a/doc/user/doxygen/doxy2swig/doxy2swig.py b/doc/developer/doxygen/doxy2swig/doxy2swig.py similarity index 100% rename from doc/user/doxygen/doxy2swig/doxy2swig.py rename to doc/developer/doxygen/doxy2swig/doxy2swig.py diff --git a/doc/user/doxygen/fakesources/MEDCouplingField.C b/doc/developer/doxygen/fakesources/MEDCouplingField.C similarity index 100% rename from doc/user/doxygen/fakesources/MEDCouplingField.C rename to doc/developer/doxygen/fakesources/MEDCouplingField.C diff --git a/doc/user/doxygen/fakesources/MEDCouplingFieldDouble.C b/doc/developer/doxygen/fakesources/MEDCouplingFieldDouble.C similarity index 100% rename from doc/user/doxygen/fakesources/MEDCouplingFieldDouble.C rename to doc/developer/doxygen/fakesources/MEDCouplingFieldDouble.C diff --git a/doc/user/doxygen/fakesources/MEDCouplingMemArray.C b/doc/developer/doxygen/fakesources/MEDCouplingMemArray.C similarity index 100% rename from doc/user/doxygen/fakesources/MEDCouplingMemArray.C rename to doc/developer/doxygen/fakesources/MEDCouplingMemArray.C diff --git a/doc/user/doxygen/fakesources/MEDCouplingMesh.C b/doc/developer/doxygen/fakesources/MEDCouplingMesh.C similarity index 100% rename from doc/user/doxygen/fakesources/MEDCouplingMesh.C rename to doc/developer/doxygen/fakesources/MEDCouplingMesh.C diff --git a/doc/user/doxygen/fakesources/MEDCouplingPointSet.C b/doc/developer/doxygen/fakesources/MEDCouplingPointSet.C similarity index 100% rename from doc/user/doxygen/fakesources/MEDCouplingPointSet.C rename to doc/developer/doxygen/fakesources/MEDCouplingPointSet.C diff --git a/doc/user/doxygen/fakesources/MEDCouplingUMesh.C b/doc/developer/doxygen/fakesources/MEDCouplingUMesh.C similarity index 100% rename from doc/user/doxygen/fakesources/MEDCouplingUMesh.C rename to doc/developer/doxygen/fakesources/MEDCouplingUMesh.C diff --git a/doc/user/doxygen/fakesources/MEDFileField.C b/doc/developer/doxygen/fakesources/MEDFileField.C similarity index 100% rename from doc/user/doxygen/fakesources/MEDFileField.C rename to doc/developer/doxygen/fakesources/MEDFileField.C diff --git a/doc/user/doxygen/fakesources/MEDFileMesh.C b/doc/developer/doxygen/fakesources/MEDFileMesh.C similarity index 100% rename from doc/user/doxygen/fakesources/MEDFileMesh.C rename to doc/developer/doxygen/fakesources/MEDFileMesh.C diff --git a/doc/user/doxygen/fakesources/namespaces.C b/doc/developer/doxygen/fakesources/namespaces.C similarity index 100% rename from doc/user/doxygen/fakesources/namespaces.C rename to doc/developer/doxygen/fakesources/namespaces.C diff --git a/doc/user/doxygen/figures/IndirectIndex.jpg b/doc/developer/doxygen/figures/IndirectIndex.jpg similarity index 100% rename from doc/user/doxygen/figures/IndirectIndex.jpg rename to doc/developer/doxygen/figures/IndirectIndex.jpg diff --git a/doc/user/doxygen/figures/MED.png b/doc/developer/doxygen/figures/MED.png similarity index 100% rename from doc/user/doxygen/figures/MED.png rename to doc/developer/doxygen/figures/MED.png diff --git a/doc/user/doxygen/figures/MEDCouplingUMeshConn.eps b/doc/developer/doxygen/figures/MEDCouplingUMeshConn.eps similarity index 100% rename from doc/user/doxygen/figures/MEDCouplingUMeshConn.eps rename to doc/developer/doxygen/figures/MEDCouplingUMeshConn.eps diff --git a/doc/user/doxygen/figures/MEDCouplingUMeshConn.fig b/doc/developer/doxygen/figures/MEDCouplingUMeshConn.fig similarity index 100% rename from doc/user/doxygen/figures/MEDCouplingUMeshConn.fig rename to doc/developer/doxygen/figures/MEDCouplingUMeshConn.fig diff --git a/doc/user/doxygen/figures/MEDCouplingUMeshConn.png b/doc/developer/doxygen/figures/MEDCouplingUMeshConn.png similarity index 100% rename from doc/user/doxygen/figures/MEDCouplingUMeshConn.png rename to doc/developer/doxygen/figures/MEDCouplingUMeshConn.png diff --git a/doc/user/doxygen/figures/MEDFileConcepts.fig b/doc/developer/doxygen/figures/MEDFileConcepts.fig similarity index 100% rename from doc/user/doxygen/figures/MEDFileConcepts.fig rename to doc/developer/doxygen/figures/MEDFileConcepts.fig diff --git a/doc/user/doxygen/figures/MEDFileConcepts.png b/doc/developer/doxygen/figures/MEDFileConcepts.png similarity index 100% rename from doc/user/doxygen/figures/MEDFileConcepts.png rename to doc/developer/doxygen/figures/MEDFileConcepts.png diff --git a/doc/user/doxygen/figures/MED_small.eps b/doc/developer/doxygen/figures/MED_small.eps similarity index 100% rename from doc/user/doxygen/figures/MED_small.eps rename to doc/developer/doxygen/figures/MED_small.eps diff --git a/doc/user/doxygen/figures/MED_small.png b/doc/developer/doxygen/figures/MED_small.png similarity index 100% rename from doc/user/doxygen/figures/MED_small.png rename to doc/developer/doxygen/figures/MED_small.png diff --git a/doc/user/doxygen/figures/MedCoupling_Architecture.png b/doc/developer/doxygen/figures/MedCoupling_Architecture.png similarity index 100% rename from doc/user/doxygen/figures/MedCoupling_Architecture.png rename to doc/developer/doxygen/figures/MedCoupling_Architecture.png diff --git a/doc/user/doxygen/figures/NonCoincident.png b/doc/developer/doxygen/figures/NonCoincident.png similarity index 100% rename from doc/user/doxygen/figures/NonCoincident.png rename to doc/developer/doxygen/figures/NonCoincident.png diff --git a/doc/user/doxygen/figures/NonCoincident_small.eps b/doc/developer/doxygen/figures/NonCoincident_small.eps similarity index 100% rename from doc/user/doxygen/figures/NonCoincident_small.eps rename to doc/developer/doxygen/figures/NonCoincident_small.eps diff --git a/doc/user/doxygen/figures/NonCoincident_small.png b/doc/developer/doxygen/figures/NonCoincident_small.png similarity index 100% rename from doc/user/doxygen/figures/NonCoincident_small.png rename to doc/developer/doxygen/figures/NonCoincident_small.png diff --git a/doc/user/doxygen/figures/NonOverlapping.fig b/doc/developer/doxygen/figures/NonOverlapping.fig similarity index 100% rename from doc/user/doxygen/figures/NonOverlapping.fig rename to doc/developer/doxygen/figures/NonOverlapping.fig diff --git a/doc/user/doxygen/figures/NonOverlapping.png b/doc/developer/doxygen/figures/NonOverlapping.png similarity index 100% rename from doc/user/doxygen/figures/NonOverlapping.png rename to doc/developer/doxygen/figures/NonOverlapping.png diff --git a/doc/user/doxygen/figures/OverlapDEC1.fig b/doc/developer/doxygen/figures/OverlapDEC1.fig similarity index 100% rename from doc/user/doxygen/figures/OverlapDEC1.fig rename to doc/developer/doxygen/figures/OverlapDEC1.fig diff --git a/doc/user/doxygen/figures/OverlapDEC1.png b/doc/developer/doxygen/figures/OverlapDEC1.png similarity index 100% rename from doc/user/doxygen/figures/OverlapDEC1.png rename to doc/developer/doxygen/figures/OverlapDEC1.png diff --git a/doc/user/doxygen/figures/SampGeo2D1.eps b/doc/developer/doxygen/figures/SampGeo2D1.eps similarity index 100% rename from doc/user/doxygen/figures/SampGeo2D1.eps rename to doc/developer/doxygen/figures/SampGeo2D1.eps diff --git a/doc/user/doxygen/figures/SampGeo2D1.png b/doc/developer/doxygen/figures/SampGeo2D1.png similarity index 100% rename from doc/user/doxygen/figures/SampGeo2D1.png rename to doc/developer/doxygen/figures/SampGeo2D1.png diff --git a/doc/user/doxygen/figures/SampGeo2D2.eps b/doc/developer/doxygen/figures/SampGeo2D2.eps similarity index 100% rename from doc/user/doxygen/figures/SampGeo2D2.eps rename to doc/developer/doxygen/figures/SampGeo2D2.eps diff --git a/doc/user/doxygen/figures/SampGeo2D2.png b/doc/developer/doxygen/figures/SampGeo2D2.png similarity index 100% rename from doc/user/doxygen/figures/SampGeo2D2.png rename to doc/developer/doxygen/figures/SampGeo2D2.png diff --git a/doc/user/doxygen/figures/SampGeo2D3.eps b/doc/developer/doxygen/figures/SampGeo2D3.eps similarity index 100% rename from doc/user/doxygen/figures/SampGeo2D3.eps rename to doc/developer/doxygen/figures/SampGeo2D3.eps diff --git a/doc/user/doxygen/figures/SampGeo2D3.png b/doc/developer/doxygen/figures/SampGeo2D3.png similarity index 100% rename from doc/user/doxygen/figures/SampGeo2D3.png rename to doc/developer/doxygen/figures/SampGeo2D3.png diff --git a/doc/user/doxygen/figures/SampGeo2D4.eps b/doc/developer/doxygen/figures/SampGeo2D4.eps similarity index 100% rename from doc/user/doxygen/figures/SampGeo2D4.eps rename to doc/developer/doxygen/figures/SampGeo2D4.eps diff --git a/doc/user/doxygen/figures/SampGeo2D4.png b/doc/developer/doxygen/figures/SampGeo2D4.png similarity index 100% rename from doc/user/doxygen/figures/SampGeo2D4.png rename to doc/developer/doxygen/figures/SampGeo2D4.png diff --git a/doc/user/doxygen/figures/UML-0.png b/doc/developer/doxygen/figures/UML-0.png similarity index 100% rename from doc/user/doxygen/figures/UML-0.png rename to doc/developer/doxygen/figures/UML-0.png diff --git a/doc/user/doxygen/figures/UML-1.png b/doc/developer/doxygen/figures/UML-1.png similarity index 100% rename from doc/user/doxygen/figures/UML-1.png rename to doc/developer/doxygen/figures/UML-1.png diff --git a/doc/user/doxygen/figures/UML-2.png b/doc/developer/doxygen/figures/UML-2.png similarity index 100% rename from doc/user/doxygen/figures/UML-2.png rename to doc/developer/doxygen/figures/UML-2.png diff --git a/doc/user/doxygen/figures/UML-3.png b/doc/developer/doxygen/figures/UML-3.png similarity index 100% rename from doc/user/doxygen/figures/UML-3.png rename to doc/developer/doxygen/figures/UML-3.png diff --git a/doc/user/doxygen/figures/UML-4.png b/doc/developer/doxygen/figures/UML-4.png similarity index 100% rename from doc/user/doxygen/figures/UML-4.png rename to doc/developer/doxygen/figures/UML-4.png diff --git a/doc/user/doxygen/figures/UML-5.png b/doc/developer/doxygen/figures/UML-5.png similarity index 100% rename from doc/user/doxygen/figures/UML-5.png rename to doc/developer/doxygen/figures/UML-5.png diff --git a/doc/user/doxygen/figures/UML-6.png b/doc/developer/doxygen/figures/UML-6.png similarity index 100% rename from doc/user/doxygen/figures/UML-6.png rename to doc/developer/doxygen/figures/UML-6.png diff --git a/doc/user/doxygen/figures/UML-7.png b/doc/developer/doxygen/figures/UML-7.png similarity index 100% rename from doc/user/doxygen/figures/UML-7.png rename to doc/developer/doxygen/figures/UML-7.png diff --git a/doc/user/doxygen/figures/UML-8.png b/doc/developer/doxygen/figures/UML-8.png similarity index 100% rename from doc/user/doxygen/figures/UML-8.png rename to doc/developer/doxygen/figures/UML-8.png diff --git a/doc/user/doxygen/figures/UML.png b/doc/developer/doxygen/figures/UML.png similarity index 100% rename from doc/user/doxygen/figures/UML.png rename to doc/developer/doxygen/figures/UML.png diff --git a/doc/user/doxygen/figures/UML_light.png b/doc/developer/doxygen/figures/UML_light.png similarity index 100% rename from doc/user/doxygen/figures/UML_light.png rename to doc/developer/doxygen/figures/UML_light.png diff --git a/doc/user/doxygen/figures/UML_small.png b/doc/developer/doxygen/figures/UML_small.png similarity index 100% rename from doc/user/doxygen/figures/UML_small.png rename to doc/developer/doxygen/figures/UML_small.png diff --git a/doc/user/doxygen/figures/connectivity_arrays.eps b/doc/developer/doxygen/figures/connectivity_arrays.eps similarity index 100% rename from doc/user/doxygen/figures/connectivity_arrays.eps rename to doc/developer/doxygen/figures/connectivity_arrays.eps diff --git a/doc/user/doxygen/figures/connectivity_arrays.png b/doc/developer/doxygen/figures/connectivity_arrays.png similarity index 100% rename from doc/user/doxygen/figures/connectivity_arrays.png rename to doc/developer/doxygen/figures/connectivity_arrays.png diff --git a/doc/user/doxygen/figures/connectivity_arrays_small.eps b/doc/developer/doxygen/figures/connectivity_arrays_small.eps similarity index 100% rename from doc/user/doxygen/figures/connectivity_arrays_small.eps rename to doc/developer/doxygen/figures/connectivity_arrays_small.eps diff --git a/doc/user/doxygen/figures/connectivity_arrays_small.png b/doc/developer/doxygen/figures/connectivity_arrays_small.png similarity index 100% rename from doc/user/doxygen/figures/connectivity_arrays_small.png rename to doc/developer/doxygen/figures/connectivity_arrays_small.png diff --git a/doc/user/doxygen/figures/connectivity_example.png b/doc/developer/doxygen/figures/connectivity_example.png similarity index 100% rename from doc/user/doxygen/figures/connectivity_example.png rename to doc/developer/doxygen/figures/connectivity_example.png diff --git a/doc/user/doxygen/figures/connectivity_example_small.png b/doc/developer/doxygen/figures/connectivity_example_small.png similarity index 100% rename from doc/user/doxygen/figures/connectivity_example_small.png rename to doc/developer/doxygen/figures/connectivity_example_small.png diff --git a/doc/user/doxygen/figures/fine_mesh.png b/doc/developer/doxygen/figures/fine_mesh.png similarity index 100% rename from doc/user/doxygen/figures/fine_mesh.png rename to doc/developer/doxygen/figures/fine_mesh.png diff --git a/doc/user/doxygen/figures/geom.png b/doc/developer/doxygen/figures/geom.png similarity index 100% rename from doc/user/doxygen/figures/geom.png rename to doc/developer/doxygen/figures/geom.png diff --git a/doc/user/doxygen/figures/grid_example.png b/doc/developer/doxygen/figures/grid_example.png similarity index 100% rename from doc/user/doxygen/figures/grid_example.png rename to doc/developer/doxygen/figures/grid_example.png diff --git a/doc/user/doxygen/figures/interpolationimage.png b/doc/developer/doxygen/figures/interpolationimage.png similarity index 100% rename from doc/user/doxygen/figures/interpolationimage.png rename to doc/developer/doxygen/figures/interpolationimage.png diff --git a/doc/user/doxygen/figures/med-file-uml.png b/doc/developer/doxygen/figures/med-file-uml.png similarity index 100% rename from doc/user/doxygen/figures/med-file-uml.png rename to doc/developer/doxygen/figures/med-file-uml.png diff --git a/doc/user/doxygen/figures/med-loader-adv-classes.png b/doc/developer/doxygen/figures/med-loader-adv-classes.png similarity index 100% rename from doc/user/doxygen/figures/med-loader-adv-classes.png rename to doc/developer/doxygen/figures/med-loader-adv-classes.png diff --git a/doc/user/doxygen/figures/medlayers.png b/doc/developer/doxygen/figures/medlayers.png similarity index 100% rename from doc/user/doxygen/figures/medlayers.png rename to doc/developer/doxygen/figures/medlayers.png diff --git a/doc/user/doxygen/figures/medlayers_70pc.png b/doc/developer/doxygen/figures/medlayers_70pc.png similarity index 100% rename from doc/user/doxygen/figures/medlayers_70pc.png rename to doc/developer/doxygen/figures/medlayers_70pc.png diff --git a/doc/user/doxygen/figures/mesh_splitted.png b/doc/developer/doxygen/figures/mesh_splitted.png similarity index 100% rename from doc/user/doxygen/figures/mesh_splitted.png rename to doc/developer/doxygen/figures/mesh_splitted.png diff --git a/doc/user/doxygen/figures/mesh_unsplitted.png b/doc/developer/doxygen/figures/mesh_unsplitted.png similarity index 100% rename from doc/user/doxygen/figures/mesh_unsplitted.png rename to doc/developer/doxygen/figures/mesh_unsplitted.png diff --git a/doc/user/doxygen/figures/polygon_connectivity.png b/doc/developer/doxygen/figures/polygon_connectivity.png similarity index 100% rename from doc/user/doxygen/figures/polygon_connectivity.png rename to doc/developer/doxygen/figures/polygon_connectivity.png diff --git a/doc/user/doxygen/figures/polygon_connectivity_small.eps b/doc/developer/doxygen/figures/polygon_connectivity_small.eps similarity index 100% rename from doc/user/doxygen/figures/polygon_connectivity_small.eps rename to doc/developer/doxygen/figures/polygon_connectivity_small.eps diff --git a/doc/user/doxygen/figures/polygon_connectivity_small.png b/doc/developer/doxygen/figures/polygon_connectivity_small.png similarity index 100% rename from doc/user/doxygen/figures/polygon_connectivity_small.png rename to doc/developer/doxygen/figures/polygon_connectivity_small.png diff --git a/doc/user/doxygen/figures/polyhedron_connectivity.png b/doc/developer/doxygen/figures/polyhedron_connectivity.png similarity index 100% rename from doc/user/doxygen/figures/polyhedron_connectivity.png rename to doc/developer/doxygen/figures/polyhedron_connectivity.png diff --git a/doc/user/doxygen/figures/polyhedron_connectivity_small.eps b/doc/developer/doxygen/figures/polyhedron_connectivity_small.eps similarity index 100% rename from doc/user/doxygen/figures/polyhedron_connectivity_small.eps rename to doc/developer/doxygen/figures/polyhedron_connectivity_small.eps diff --git a/doc/user/doxygen/figures/polyhedron_connectivity_small.png b/doc/developer/doxygen/figures/polyhedron_connectivity_small.png similarity index 100% rename from doc/user/doxygen/figures/polyhedron_connectivity_small.png rename to doc/developer/doxygen/figures/polyhedron_connectivity_small.png diff --git a/doc/user/doxygen/figures/projectionHQ.png b/doc/developer/doxygen/figures/projectionHQ.png similarity index 100% rename from doc/user/doxygen/figures/projectionHQ.png rename to doc/developer/doxygen/figures/projectionHQ.png diff --git a/doc/user/doxygen/figures/projectionHQ_600.png b/doc/developer/doxygen/figures/projectionHQ_600.png similarity index 100% rename from doc/user/doxygen/figures/projectionHQ_600.png rename to doc/developer/doxygen/figures/projectionHQ_600.png diff --git a/doc/user/doxygen/figures/source_field.png b/doc/developer/doxygen/figures/source_field.png similarity index 100% rename from doc/user/doxygen/figures/source_field.png rename to doc/developer/doxygen/figures/source_field.png diff --git a/doc/user/doxygen/figures/source_mesh.png b/doc/developer/doxygen/figures/source_mesh.png similarity index 100% rename from doc/user/doxygen/figures/source_mesh.png rename to doc/developer/doxygen/figures/source_mesh.png diff --git a/doc/user/doxygen/figures/target_field.png b/doc/developer/doxygen/figures/target_field.png similarity index 100% rename from doc/user/doxygen/figures/target_field.png rename to doc/developer/doxygen/figures/target_field.png diff --git a/doc/user/doxygen/figures/target_mesh.png b/doc/developer/doxygen/figures/target_mesh.png similarity index 100% rename from doc/user/doxygen/figures/target_mesh.png rename to doc/developer/doxygen/figures/target_mesh.png diff --git a/doc/user/doxygen/figures/tetra_simplexize_24_48.jpg b/doc/developer/doxygen/figures/tetra_simplexize_24_48.jpg similarity index 100% rename from doc/user/doxygen/figures/tetra_simplexize_24_48.jpg rename to doc/developer/doxygen/figures/tetra_simplexize_24_48.jpg diff --git a/doc/user/doxygen/figures/tetra_simplexize_5_6.jpg b/doc/developer/doxygen/figures/tetra_simplexize_5_6.jpg similarity index 100% rename from doc/user/doxygen/figures/tetra_simplexize_5_6.jpg rename to doc/developer/doxygen/figures/tetra_simplexize_5_6.jpg diff --git a/doc/user/doxygen/images/head.png b/doc/developer/doxygen/images/head.png similarity index 100% rename from doc/user/doxygen/images/head.png rename to doc/developer/doxygen/images/head.png diff --git a/doc/user/doxygen/static/footer.html b/doc/developer/doxygen/static/footer.html similarity index 100% rename from doc/user/doxygen/static/footer.html rename to doc/developer/doxygen/static/footer.html diff --git a/doc/user/doxygen/static/header.html.in b/doc/developer/doxygen/static/header.html.in similarity index 100% rename from doc/user/doxygen/static/header.html.in rename to doc/developer/doxygen/static/header.html.in diff --git a/doc/user/doxygen/static/medcoupling_extra.css b/doc/developer/doxygen/static/medcoupling_extra.css similarity index 100% rename from doc/user/doxygen/static/medcoupling_extra.css rename to doc/developer/doxygen/static/medcoupling_extra.css diff --git a/doc/tutorial/CMakeLists.txt b/doc/tutorial/CMakeLists.txt index cafc00920..ecbf8d00d 100644 --- a/doc/tutorial/CMakeLists.txt +++ b/doc/tutorial/CMakeLists.txt @@ -23,7 +23,7 @@ SET(_cmd_options -c ${CMAKE_CURRENT_BINARY_DIR} -b html -d doctrees -D latex_pap SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd env_script "${SPHINX_EXECUTABLE}" "${_cmd_options}") ADD_CUSTOM_TARGET(tutorial_doc COMMAND ${_cmd}) -ADD_DEPENDENCIES(usr_docs tutorial_doc) +ADD_DEPENDENCIES(dev_docs tutorial_doc) #INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target tutorial_doc)") INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/ DESTINATION ${MEDCOUPLING_INSTALL_DOC}/tutorial) diff --git a/doc/user/CMakeLists.txt b/doc/user/CMakeLists.txt index 186e64694..5c1378a08 100644 --- a/doc/user/CMakeLists.txt +++ b/doc/user/CMakeLists.txt @@ -17,4 +17,27 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -ADD_SUBDIRECTORY(doxygen) +INCLUDE(UseSphinx) + +SALOME_CONFIGURE_FILE(conf.py.in conf.py) + +IF(MEDCOUPLING_BUILD_FRENCH_DOC) + SET(BUILD_LANGUAGE_SWITCHER "true") + SALOME_CONFIGURE_FILE(static/switchers.js.in static/switchers.js) + ADD_MULTI_LANG_DOCUMENTATION(TARGET_NAME usr_doc MODULE html LANGUAGES fr) +ELSE() + SET(BUILD_LANGUAGE_SWITCHER "false") + SALOME_CONFIGURE_FILE(static/switchers.js.in static/switchers.js) + ADD_MULTI_LANG_DOCUMENTATION(TARGET_NAME usr_doc MODULE html) +ENDIF() + +#ADD_DEPENDENCIES(usr_doc dev_docs) + +INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target usr_doc)") +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION ${MEDCOUPLING_INSTALL_DOC}/user) +IF(MEDCOUPLING_BUILD_FRENCH_DOC) + INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html_fr DESTINATION ${MEDCOUPLING_INSTALL_DOC}/user) +ENDIF() + +SET(make_clean_files html html_fr doctrees locale potfiles static) +SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}") diff --git a/doc/user/conf.py.in b/doc/user/conf.py.in new file mode 100644 index 000000000..0b143134d --- /dev/null +++ b/doc/user/conf.py.in @@ -0,0 +1,194 @@ +# -*- coding: utf-8 -*- +# +# Code Coupling and Code Integration documentation build configuration file, created by +# sphinx-quickstart on Tue Apr 28 15:28:57 2009. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# The contents of this file are pickled, so don't put values in the namespace +# that aren't pickleable (module imports are okay, they're removed automatically). +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If your extensions are in another directory, add it here. If the directory +# is relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +#sys.path.append(os.path.abspath('.')) + +# General configuration +# --------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.pngmath', 'sphinx.ext.mathjax'] + +# Add any paths that contain templates here, relative to this directory. +#templates_path = ['_templates'] +templates_path = [os.path.join('@CMAKE_CURRENT_SOURCE_DIR@','templates')] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u"MEDCoupling User's Guide" +copyright = u'2015-2017, Geay, Bruneton' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '@MEDCOUPLING_VERSION@' +# The full version, including alpha/beta/rc tags. +release = '@MEDCOUPLING_VERSION@' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +#unused_docs = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = [] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# Options for HTML output +# ----------------------- + +html_theme = '@SPHINX_THEME@' + +# The style sheet to use for HTML and HTML Help pages. A file of that name +# must exist either in Sphinx' static/ path, or in one of the custom paths +# given in html_static_path. +#html_style = 'default.css' + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = '' + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['_static'] +html_static_path = [os.path.join('@CMAKE_CURRENT_BINARY_DIR@','static')] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_use_modindex = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, the reST sources are included in the HTML build as _sources/. +#html_copy_source = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'MEDCouplingUsersGuide' + + +# Options for LaTeX output +# ------------------------ + +# The paper size ('letter' or 'a4'). +#latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +#latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, document class [howto/manual]). +latex_documents = [ + ('index', 'MEDCouplingUserGuide.tex', ur"MEDCoupling User's Guide", + ur'A. Geay, A. Bruneton', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = '' + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_use_modindex = True + +locale_dirs = [os.path.join('@CMAKE_CURRENT_BINARY_DIR@','locale')] # path is example but recommended. +gettext_compact = False # optional diff --git a/doc/user/images/cartesian.png b/doc/user/images/cartesian.png new file mode 100644 index 0000000000000000000000000000000000000000..81b0a43d54eaf343edc77deff6cb2e627ed0c4f3 GIT binary patch literal 788 zcmeAS@N?(olHy`uVBq!ia0y~yU{nUO4{5rLBJtq=?mO?JR?8nNPAg;ES$<{P^!Rt*TCTtSvCQu1!Q-DY po^7gXfutcK9a(SQ(1eQ5JzmByYu9Rf_(44$rjF6*2UngB7^Jjeh5 literal 0 HcmV?d00001 diff --git a/doc/user/images/cartesian.py b/doc/user/images/cartesian.py new file mode 100644 index 000000000..7ac1c79d0 --- /dev/null +++ b/doc/user/images/cartesian.py @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000001000000080000001a00560054004b005600690065007700650072005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:2 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * +from MEDLoader import WriteMesh + +XCoords=[-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22] # 9 values along X +YCoords=[0.,0.1,0.37,0.45,0.47,0.49,1.007] # 7 values along Y +arrX=DataArrayDouble(XCoords) +arrX.setInfoOnComponent(0,"X [m]") +arrY=DataArrayDouble(YCoords) +arrY.setInfoOnComponent(0,"Y [m]") +mesh=MEDCouplingCMesh("My2D_CMesh") +mesh.setCoords(arrX,arrY) +WriteMesh("mesh1.med",mesh,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + +import libSALOME_Swig +gui = libSALOME_Swig.SALOMEGUI_Swig() +gui.AddIObject( salome.ObjectToID( mesh_1.GetMesh() )) diff --git a/doc/user/images/convert2quadratic.png b/doc/user/images/convert2quadratic.png new file mode 100644 index 0000000000000000000000000000000000000000..3e00c4e4c6d6ba42a23df2d06337ceb9b61c9b70 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^T|jKZ!2~4D%C<%WDdu7)&kzm{j@u9Y9{{2-%*d=H*UG@asOstB7*a9k?Hxz1Lk0p47bRbcR-ckF%4-qgjolLboBRJ;7fIoL zx?Bg}>}_8WSFZ0+eWrOEPk$62|8?Q-w(g-lpI$jem(4p}R`c$9`pSY3#eZzyKYjW7 zBl_5mJBI>We@K6M);4Yb{_0J0f9u37E(qnnwIG~-R^^2=&1rHbpBKzzKWmfm%+VO9 zkl8%b3`s%Bz3y&vtfRtL6og(~Y<7K3R?*j*IF{fYtJrfd%$5cl_sr0Rt6$NspLnCo zZWW#@u6{1-oD!M<#RsJ$ literal 0 HcmV?d00001 diff --git a/doc/user/images/convert2quadratic.py b/doc/user/images/convert2quadratic.py new file mode 100644 index 000000000..d4cb1d08f --- /dev/null +++ b/doc/user/images/convert2quadratic.py @@ -0,0 +1,144 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000001000000080000001a00560054004b005600690065007700650072005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:2 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * +from MEDLoader import WriteMesh + +arr=DataArrayDouble(range(2)) +mc=MEDCouplingCMesh("m1") +mc.setCoords(arr,arr) +m1=mc.buildUnstructured() +m2=m1.deepCopy() +m2.translate([1.5,0]) +m1.convertLinearCellsToQuadratic(0) +m2.convertLinearCellsToQuadratic(1) +m2.setName("m2") +WriteMesh("mesh1.med",m1,True) +WriteMesh("mesh1.med",m2,False) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1,mesh_2], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +g1 = mesh_1.MakeGroupByIds("all nodes", SMESH.NODE, range(1,10)) +g2 = mesh_2.MakeGroupByIds("all nodes", SMESH.NODE, range(1,10)) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (m1) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_3:11:1 (all nodes) parameters +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Representation", "0") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0.666667:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (m2) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4:11:1 (all nodes) parameters +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_Representation", "0") +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0.666667:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4:11:1", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/curvelinear.png b/doc/user/images/curvelinear.png new file mode 100644 index 0000000000000000000000000000000000000000..ce6e6dcbd13c308cb6137b926b49aee3c24b2a68 GIT binary patch literal 463 zcmeAS@N?(olHy`uVBq!ia0vp^2|ygg!2~2#JlswKDdu7)&kzm{j@u9Y9{{2-%*d=H*UG@aSmf#A7*a9k?XAJxJ@#yAK>EEvrk^!%nWs z)6ZB|Ij=kV{l#CrcWjv*&tJ=bpyzw}`TM8K`@}8;C9Yk6{>jA#C6<-DSgc|a7tdyj z_1y60`@H3<0otu0&zVXcH{4}(VAk04`?t@=?{0+>bGO#0^Gb5uVl}x`x3+fWL(V21 zmaEK~Z^A#aB(gPWHM)FTUD0H~>}cws{8oIKo#T(y3#}& zu6$dq;UDlJq+2gw1IvU5b)xXFszWQ9Hd^ww?OHBI}PYu9(jl{_qx97Y05 zIHvsCzL;amDTfJ-3e1jdKv#l$t$! gZgKpaFw0(s*-@J3<=-F521W^kr>mdKI;Vst01gbb2LJ#7 literal 0 HcmV?d00001 diff --git a/doc/user/images/curvelinear.py b/doc/user/images/curvelinear.py new file mode 100644 index 000000000..268a8e844 --- /dev/null +++ b/doc/user/images/curvelinear.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000001000000080000001a00560054004b005600690065007700650072005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:2 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * +from MEDLoader import WriteMesh + +m=MEDCouplingCurveLinearMesh("myCurveLinearMesh") +m.setNodeGridStructure([2,3]) +coords=DataArrayDouble([0.,0., 2.,0., 0.,1., 1.9,1.1, 0.3,1.9, 2.2,2.1],6,2) +coords.setInfoOnComponents(["X [m]","Y [m]"]) +m.setCoords(coords) + +WriteMesh("mesh1.med",m,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + +import libSALOME_Swig +gui = libSALOME_Swig.SALOMEGUI_Swig() +gui.AddIObject( salome.ObjectToID( mesh_1.GetMesh() )) diff --git a/doc/user/images/explodeIntoEdges.png b/doc/user/images/explodeIntoEdges.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa941543641c90545207333d26cf4f3ee429a12 GIT binary patch literal 433 zcmeAS@N?(olHy`uVBq!ia0vp^XMs4Jg9%7#D2GV{Ddu7)&kzm{j@u9Y9{{2-%*d=H*UG@a7~<*T7*a9k?d^k^%!UlEj+#rhEom}&88YG3l+8YVW>wN3c&ax# zR`BzS9lpQwnpDA!+gHsGcwdlYof~*Tvi1A!^Ph|3isbixo&1k+*8QjJV>4_2{(PHP z(_?r|`TAk@`If(r9K0&Eo%`Is`OWiYi*t=z9S{7Hcz4pH3oCiBSVP30aJhfQ; V)Ujtl*MWh~;OXk;vd$@?2>_WF$MpaJ literal 0 HcmV?d00001 diff --git a/doc/user/images/explodeIntoEdges.py b/doc/user/images/explodeIntoEdges.py new file mode 100644 index 000000000..0c626eab6 --- /dev/null +++ b/doc/user/images/explodeIntoEdges.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000001000000080000001a00560054004b005600690065007700650072005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:2 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(5)) +mesh1=MEDCouplingCMesh("mesh") +mesh1.setCoords(coordsArr,coordsArr) +mesh1 = mesh1.buildUnstructured() + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",mesh1,True) + +mesh1d,d,di,r,ri=mesh1.explodeIntoEdges() +WriteMesh("mesh2.med",mesh1d,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([mesh_2], status) = smesh.CreateMeshesFromMED(r'mesh2.med') + +mesh_2.TranslateObject( mesh_2, [6,0,0], False ) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (mesh) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:1:f:0:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + diff --git a/doc/user/images/extractSlice3D.png b/doc/user/images/extractSlice3D.png new file mode 100644 index 0000000000000000000000000000000000000000..3e039373f2e6c2cd089fae0941a44242cd8014ed GIT binary patch literal 7258 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 literal 0 HcmV?d00001 diff --git a/doc/user/images/extract_mesh_fetched_nodes.png b/doc/user/images/extract_mesh_fetched_nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..c35c9eaf974ec6e5f2f065a7fc0b25aa7894164a GIT binary patch literal 4096 zcmY*cbyQSO*uHdwq?E9(fUwlk-Mz%Jba(%dMmnUsl?EvV2?3=+8l(|XktGBKBqb#l z!aqee!|NDKe~nTEQu9@zc@D~b>sd>WI7Wq}Qj zucC$lAt51p4fz9nCGt`?^#zAZ{;OCxP?lH#ps3JLRxk)GIw%S^T*(gQt+QPZ(BH7V5*u8B!%bvIGhGD;R)lf9z;tO$c zoyf@OX!0U&2@@h`3-SV8n)4t1(d+AWE$^opa-+$cnwmmoBeo{Xp^h za1xS}A64({?V&r8N7Ei?>K2t(M@9lTIMJ7vfgKh)MjaQVdNT(D_5Nh~cbY0(@U9JtSCiX?o0e$1>;OXo9hO?l~F zYI{AMG3G!-M5I`zYi%7dQzGLq?77n25qNB;si|piZ_m&Fc5Y5jZ`{z((9Fz?Nz~oN z-Ca8L5*~SVx}8mBtgEkY@9Ns&_5}vl^$s{#RMBk|YHe-Z+S;nGuRlLO=jG)kZ8sSVbff8P#0u>fsT7ea2-v_2$hR5K1K_B{elQ@CgDm zRVb$Kb_J6cxfo5Pehg&Pw?BXWoRN{Sq@*OtG9)Af`10ioZsAK#1Ya(zq@TLA_1)3h zAg<%!;NbRT{^z+lpT9Rj;9|73wOii52No6=UsYCS=;>%`;y`GKC&tHNFc=-51))4N zGh^RFE@Jn%d~rmJ_rYfxIQ2oSaNZ;9lF_CV)stgR5qe2eK9dH5eq_> z%ngGjBus3cfD^5H!!4Vb=;;X|a&n~!;wmWckQf_ZY)uu?sDxc@=1NLRc64-94uw$c zS;voU`pC)k78De48#j=$$`<9gJ32ZlD=V9rEL5W^fQ9eh9i5#gHhrM$#jD8t{Cq69 zhzR?6Lw#eTE*ljs9i60<)M{4%zpU)a#Kc}jx-1k*4nmwlFEB7Mp{cL`83dk}_sRND zV&xDf((RBU4(6ex6fF<&^7Yl9UtCyNh>5|4j=x5h;@@Ln&_EejS(TKPm1Sq^>+4ff z9#6vsMwWX*+KP*dv$H?{9Ls(Lg*pf_C>&!&CBgWH` z-Fa%-)~&3ppqVbKAHtGy+iQ*A{@ty8OEa_MaCNzn4n}^gU7#$VJgR@gL>z++37J9< zqjfRvCbUb;va+&YzkUVk>gqzn!ZgNUN##@oNBR-s8$OLx)9uW4F+zL<+-oTl|G!JE)YZjB+;=Obw6yfu zvwo0Wq|#P9{U?@}mqDb4hKA7SuDZIE4&NUswW7hh;YsDK9?QEw{*^|bO+-Nu&D7hB z5G(fT(PDn#RB9UUDtwzbVn zPS(}blr4`JqGG*MQ&WR1^JPLr1^Z8gZWPvz7s7GeSb8>2m zgqWC(D$(xZVm0F1+?*gB4q3^-rqymXZL(7toij>QUOzn4(USc0-%?M)(OvW>!u|99 z0Pdy@Vqswne^GI9D#jQt2H?K};25O%l}PhlYW@UqFP)dx|BTY04JKX=l-I z{;}ijlRl|x9PfVNwzggc zmz$D8%EVNd{TNvy;Tu=hYT&j6?)dEN>_erv44R$*JRgZy5o!1J=5ru(6lDAfgiH(! z50BK2Mxj}lJpy}PsHuUr5V1r>MDrQ%HYS_<+UvAnd@{O%oi z)^v&`+3AuiDk>%>CK%i-{kb92B{Jq#Rv(gS>QdTCWz4d=Z(Y(iV zG$d6XqKiugIuMW;OQnNO=BhM%Z~rhwf&}#RhS9fX^NnWn_hv^;kU>GiKs4SOCRRZ| zUyw2o1-YS*F^-|GJl-b?CmeDi;8~P6x;#H5Xmp-ok&%(1prBw$7Yn;StFGoO*v<0i z>>>ej)64eB|N0#9j;^Yr1?R{BFUIl1i{oR|riq2hGl;jh_rr$|Ra8`hgM)D$LG_Z} zjZU|bpu9Vm31kFMs0W9=KJ?Na!>?1{wy8q

7O93U14C6QGc7f=k`9@*>CJekb1p z_AbcVsrHEd+S5!F?a1?q&5e;%^RA~)yu9Gv-d4Ym;%x+mDgcF3MH44ItN4ZfyNdWU zU`&4Cm9hyX37bPJMq-2N=Wz19fO69y~2B{aR^_-)ux(a*g`Hf`Ad&#)N{ zfG!Q}GNkDKW%r6BLEvmWG_v1gLvUGXGAOyCw0fZ3;^K2mxvpi3nPjbXaMIYrEbmX* zm+zcszSfz7a&7PExVg3UqOeeNV=`ncGOzY1d~S9&a*3opKdS3~lQ_LcZRd?RW>x(L zpI1AtjkxqIs7GH)EYVV1)J~sx`7IJb6`BRdsd31EGlQwvmoLk6`qldyg2`v7Z6RR}jqO zpKShD3WsXWHrI!b4S6NB$h32L}dDPEVaD^K5Nx6%ZCg zh6YQAU3alGt6^AwO>PcgOLs|3+g|R}WXC0k;Xq4E%ft&_^QNf3N!HKgXYJ=+Ec@{g zx??8Ks+N_-if-}a2H{iGsl643I(i+{S`HS>GQsm-zdl8`J^`6@3^bPrL@?&AEE$%9 z4!fWb9jZhMEMgUy<*^Szo*2;GbAR8`@?~|^nv(|12CAHcsBXOG?HCd3`SMog&g+F9 z+(Hh!&&oIN3lnz`V04Riud=Etb_nEUXXo|WV0=SE!-Fx7A=E0pu|A2l^1yc{1MY?! zl7i^Qyq|jGPtdI*qN1wG%J=5?2ZmXXRyUf0h+Dg$a>aT3*-(I92J4v|bX_d;NFe+Q zi{W+R4vr1a22@CUYISGo$OY`cjHcNrIS@WC83*kd`3q2+Qx)QaKH3xWPp(1i!ldKc&DfR zg!C7UFIzMMdIa@f>)c*#m%73(C}|muYcR>a8R5)>PXwItN@$?JsZ^1DE(DAN%N$;m z8~&bTZT)jo?R4=GJa}J{u4)CuB41r1yu}Dw{MLA*+7e0}wqy9^ubM&M9(uj=`YeZl z1~yKA{<32~SH|7BK? bZ0{%zD~Q}s`dF>t9Ujn7(NS(tw2As3`Y_Sj literal 0 HcmV?d00001 diff --git a/doc/user/images/extract_mesh_fetched_nodes.py b/doc/user/images/extract_mesh_fetched_nodes.py new file mode 100644 index 000000000..2a49a353f --- /dev/null +++ b/doc/user/images/extract_mesh_fetched_nodes.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import sys +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000002000000080000001a00560054004b005600690065007700650072005f0030005f00300000000202") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:1 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(6)) +mesh1=MEDCouplingCMesh("mesh") +mesh1.setCoords(coordsArr,coordsArr[:3]) + +from MEDLoader import WriteMesh + +mesh1.translate( [6.5,0] ) +mesh2 = mesh1.buildUnstructured() +part = mesh2[1,2,4,5,7,8] +WriteMesh("part.med",part,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +([mesh], status) = smesh.CreateMeshesFromMED(r'part.med') + + +## Set names of Mesh objects +smesh.SetName(mesh.GetMesh(), 'mesh') + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/extract_mesh_ids.png b/doc/user/images/extract_mesh_ids.png new file mode 100644 index 0000000000000000000000000000000000000000..6232d32ef870410f598b89513de92265e19e432b GIT binary patch literal 2214 zcmZ`*X*3(!7LK8GSr7STB9wi>v;e;+6A%IC3gA!9jrt^p&26n`KTHfR(jsz{-GUGO5?y3e(>q zxN0IrJqR^VIXMJ6dsqvqF2Tx@BtylL8{dhU%kA|yknsBEkUz%e_McnZjBH#z{hj0R zB=7ddz83Gu^E}3nu(n4K2u^U7%62);prDzLFRKg=>Aqe8*YOtjrh7)DVvA3TR;olnkQPpXCE+RklBvp`rznegtO5 z1}W_r9lV!rcLL&;foHzvOQW7ML`g>FI@6B*gU-tNPwt?~20`!^p`3g@Q_HFXT zF`t{pB1-@}6O7SkdpeM6U3s_ZGgc#M8jKR2ID_wV?(8eYyxFf@HU4X@ZrGT$1!1Y+q6sH5|WlzFpBAARc{-HnmW3OB?BM&GNo(Ppx$Dla8ZFi7bo;x+*K#EqXUv)Y*U{>D_hklzc4h9)QDoh|akTTvMm5=lV{dRGv#YgSG1tO>-PbL%j@5 z?flIuV(q6P@m1vl)wp-sh5E}UniVZTaP9W5jehU;<<{>Sl~O%w=?;53mRk&u=%xFl zgd>;!^8w4H?4;56pUYz*vqau)dGRLx&AvxoSYfAMs?Y2sI%B`QRLz1LLDsRcyu+(H z`8DKwWAOseUeuC`^rT|z5?_Q$`sbHX-(Eq9{#qT1PTd)go#lBdR%!()PJQb%)VyRR z3fSh8F0d#?zd9veB8&U>Y93u2RAZ%DUUi~zWdR{a)%u!x-#N_B8hw!Nneyn4#lmy=3>E?hJ&4rV;?`6R_9l@SKa#wlQvmb3lMH_MM2XT>1$2k zqK*DwFLh_@wfIeKO#bFRIgoJ~6HzzkEEj zyM2W&XV3$P+GPRg4Qml_rfS*w3t`wj-7|~T>5=a(CCv(21D`FVz_GKp%;N$hTK^^s z4r|b{X+<9?2^B>2u<7jdz|8XRf1^Df` zW`l}C=9rYJ);$s{vCt|vE7t43IqoIj;EF@CN|vR>!%~ld13ROth64w^@`>>R!Kkto zc2ah1*GHF0;= z&|?6sN1ies?Ai;p$4u{IvH)9426VQJOZY+2`go-N>R=F$dkvDii^R8|=YHA|Tlps% z)51|v;1BBIeHgbynO||DT1==!eeC_Pn1eSPu9^;U-?3-DQMV}}X6;kq2iMmDdf^MA^|gL<2eAJkMYOuZ2ij%*dYPl^paGhTAj zZHPL)>(ZMu5hntcA2XcFN>n&z3sNWyx|OHhDqhhd3|3hW9=619$8;vFDz2n0sU3}= z9@K=MGm=(fy!vl;ea7+WP$QfaRnN>P^)j(r(`PZ&uMN6;MG4y_iYf1bG&i6VX4yN#{wru%Mz34)Un<9-36OsY zKivS=ExGKe-T$hx0+==xSby##|Dx+Uqa0owzSE?!!(-0^XAaA1cVf{3Pzb7_>_w@p z0$_v7GcVp0YlY8Ce31h!5$oWNO@G#V8L^^zsgpC6Xu`dw!-Ri2%m38mpZo_p)X##s VAwrDPT$n!%fSHjsq{`4G<}cyyRDJ*e literal 0 HcmV?d00001 diff --git a/doc/user/images/extract_mesh_ids.py b/doc/user/images/extract_mesh_ids.py new file mode 100644 index 000000000..c619c055b --- /dev/null +++ b/doc/user/images/extract_mesh_ids.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import sys +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000001000000080000001a00560054004b005600690065007700650072005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 1") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:1 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(6)) +mesh1=MEDCouplingCMesh("mesh") +mesh1.setCoords(coordsArr,coordsArr[:3]) + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",mesh1,True) + +mesh1.translate( [6.5,0] ) +mesh2 = mesh1.buildUnstructured() +part = mesh2[1,2,4,5,7,8] +WriteMesh("part.med",part,True) + + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([mesh_2], status) = smesh.CreateMeshesFromMED(r'part.med') + + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_4 (mesh) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/extrusion.png b/doc/user/images/extrusion.png new file mode 100644 index 0000000000000000000000000000000000000000..ef4a48949b25f9b12bf10a4b8abab1305409fa08 GIT binary patch literal 6150 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 eLju$vYaZNy_>%G=-i~T=nK2>r6 literal 0 HcmV?d00001 diff --git a/doc/user/images/extrusion.py b/doc/user/images/extrusion.py new file mode 100644 index 000000000..73f3334c4 --- /dev/null +++ b/doc/user/images/extrusion.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000001000000080000001a00560054004b005600690065007700650072005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:2 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(3)) +mesh1=MEDCouplingCMesh("mesh") +mesh1.setCoords(coordsArr,coordsArr,coordsArr[:1]) +mesh1 = mesh1.buildUnstructured() + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",mesh1,True) + +import math +r = 3. +nb = 10 +a = 5. +coords = [] +for i in range( nb ): + x = r * math.cos( math.radians( i*a )) - r + z = r * math.sin( math.radians( i*a )) + coords.extend([ x, 0, z ]) + +m2=MEDCouplingCurveLinearMesh("myCurveLinearMesh") +m2.setNodeGridStructure([1,nb]) +coo=DataArrayDouble(coords,nb,3) +m2.setCoords(coo) +m2 = m2.buildUnstructured() + +WriteMesh("part.med",m2,True) + +m3=mesh1.buildExtrudedMesh(m2,0) +WriteMesh("mesh2.med",m3,True) + +m3=mesh1.buildExtrudedMesh(m2,1) +WriteMesh("mesh3.med",m3,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([mesh_2], status) = smesh.CreateMeshesFromMED(r'part.med') +([mesh_3], status) = smesh.CreateMeshesFromMED(r'mesh2.med') +([mesh_4], status) = smesh.CreateMeshesFromMED(r'mesh3.med') + +mesh_3.TranslateObject( mesh_3, [2.5,0,0], False ) +mesh_4.TranslateObject( mesh_4, [5,0,0], False ) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (myCurveLinearMesh) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:1:f:0:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_5 (Extruded) parameters +ipar.setParameter("SMESH_5", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_5", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_5", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_5", "VTKViewer_0_Entities", "e:0:f:0:v:1:0d:0:b:0") +ipar.setParameter("SMESH_5", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_5", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_5", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_5", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_5", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_6 (Extruded) parameters +ipar.setParameter("SMESH_6", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_6", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_6", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_6", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_6", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_6", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_6", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_6", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_6", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + +import libSALOME_Swig +gui = libSALOME_Swig.SALOMEGUI_Swig() +gui.AddIObject( salome.ObjectToID( mesh_1.GetMesh() )) +gui.AddIObject( salome.ObjectToID( mesh_3.GetMesh() )) +gui.AddIObject( salome.ObjectToID( mesh_4.GetMesh() )) diff --git a/doc/user/images/intersect_2d1d.png b/doc/user/images/intersect_2d1d.png new file mode 100644 index 0000000000000000000000000000000000000000..46b8c935f3042aa0ddf9d8dd385b263575847de3 GIT binary patch literal 2184 zcmZuzX;70(77d#Ol-(e!LIfiLl+7hkFhC+kF&L5nJ`@sAAQ2J1pdh;}BD)6hA@#8s z7z1Gyd5Sy{!G|WS3dW6LHGph_d9n-4$JEqRP1XG9?sLyMeQ*Ehy4@*fNKQ(MI*KqD zOo?~`?+SxS=|Fe}E)C7ImgY;)BExndQsHoT->}ON6eqj!SQMrA_o_7dr3hC#meWy69N~ zK8C%W8ywgld^)YkRt@!fzIss#7IIso=(sh{2%KO9#AG3*;;kH;PcQaQG;*+Fo+L$YTu@uDyhZCpS4bkqJrug?L-bADZ z!e`=sZ>TIjY46H7RTUv!!=czygFD?wa^z-{Gz`L7G@RKF`kA@Swb*ZRc84$syj(jt z3Yi0e`;fWjb;zcmytrv**xv^IdVP$i*OQg6UGZdg)L|d3ZH=H8+Tu?C0y!5J(2lx4 z*lipM@e@o{39n0d{)VcbtYgZHFT*NZ`H-wNO~2`2dGV!1N#GuQ(wcyIqqIgIQ)z&X zN(Q}<=s*H#mj%tq7T~w~BxMPhy4)6B@lPdg3x9q*zsKdbwfTdRE41Ng71wpUvUOkT zFN;g{hr6=mmsfr?vw5_s+R<^*lmS7^IeCI+ia6G>cuvp1)&6*-&eKLEvLP1e3E7qN zR#Yk=_MTHq6XgmfR8`UtThum&7cwOiAvfAMV@+87?aFvkoDLxU{x)UTsJcbGA;c-d&;BsF91 zIVCEv;`264MtrG`0q>Ej=z)NV&+^2bYV*I-G-Dbry>UrwQ`I;5SCNB4wk?#Jal^XN zR-mvo5LPdbu@~R%C2+(N_u1l*^#4;o@8cou^A+B)f+ozG$1#BreyoG7$&`4rmXhxS zV_2E@+hVG*82iB)uleQ%BuX!!t~C`5t`FfNQ8rc%RB_@%A14Con*j@gK_dhRn)Oig zK{_E0^3mJP`BM@Bv~EK4z3VDC`T3*6nSh7*=iMxDDDHP9hCo620&$<6TQXVp zsHGhZg{r^6=95Ul9lueWL$KzHi%6*OmvGqH3-@3rB1^^R+~38i-0hGYx=0qjsIp<7Y+1DkKj2>H|Hw6FmRgWk z7i^8Jc@sv~xBC2e6ApfGm)uAIxDMOqtHrOXkEkJha=nC-?`>y_+w1X31_NFJmu>dC zg9K^61C8HHtkPsVCfVBVYb+bO{e~w!MUnBdyUYMBOE-pY>rh@LsK||{XtL3{{8##a zVmdu4hLRFCx#%DOeM|8krX4bW5?euLddAmHLI3-|&G819PFBGWX=U}xzBSCNRvT)A z@Col(8Q93JLJ9};sCbM21=f~CaY7N?mUr9?@+l!{ zsone*yLVMbq8S5jDG@c4UqUZq(sIqN^4E|7_RJw!yn9apf74#4q)KmHBoCrhs<21C)HAAx2lU02kHxJt2_(kTAWe zT5+>r=HZ-(*lRzva^50>KCmYvUpLK!dasJkt@m9j=9HC3d3ni=sn1!aH(7aClN#4~ zeQTi`;6Lp6*WC;oRU&t}?ACZy?L3Hzl>eedOB|2YzCV4ObcN=0b-!?K(LOU3LV(?@X0f@cXk>R>`;`|DuLsJg9 zO}E1zURaQ%@*H6D*~)<`#H(2lhJk>n=0 zvaBUavBvoe$_{ZA6Tv_OzN$dTaUmcz%CLpCy_y(|yEP5PcN3T-ZZd8WM}gGQ8Eu1ky$lc; zfe=kqvOcSvkt@v5{n%$w@YJ}y3A5q%ti-}o@9CRKo6^-v*6bi<^s&H%{k11dz%+94 z6g@1gYbeGZ+83P+-V7rGG0Q5?LYNwW&H!dG_Au>p)%36{f=olA%+9;6cb0#QO_|&c zv;b{kFHV0-VVMFg*`pb!j1O}8_M~t|rkGQ*2mJtIos2numR|Ubpv-Gy9(0|jKCg^O z0&7|&K{#&2&@ohy#iguLukifrUZ7E)nQlWib!C>5=#*|wqC#zGUPFVcBr*$TJ?%n0>qBw}j-X@QHLCsEM`s}E%cXw M5eX!Gl> + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(6)) +mesh2d=MEDCouplingCMesh("mesh2d") +mesh2d.setCoords(coordsArr,coordsArr[:2]) +mesh2d=mesh2d.buildUnstructured() + +mesh1d=MEDCouplingCMesh("mesh1d") +mesh1d.setCoords(coordsArr,coordsArr[:1]) +mesh1d=mesh1d.buildUnstructured() +mesh1d.rotate( [2.3,0], math.radians( 25 )) +mesh1d.translate( [0.2,0.4] ) + +m2d,m1d,a2d,a1d=MEDCouplingUMesh.Intersect2DMeshWith1DLine( mesh2d, mesh1d, 1e-12 ) +m1d.setName("m1d") + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",mesh2d,True) +WriteMesh("mesh1.med",mesh1d,False) +WriteMesh("mesh1.med",m2d,False) +WriteMesh("mesh1.med",m1d,False) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +([m_1d, m_2d, mesh_1d, mesh_2d], status) = smesh.CreateMeshesFromMED(r'mesh1.med') + +m_1d.TranslateObject( m_1d, [0,2,0], False ) +m_2d.TranslateObject( m_2d, [0,2,0], False ) + +m_1d.MakeGroup ( "nodes", SMESH.NODE, SMESH.FT_NodeConnectivityNumber,">",0) +mesh_1d.MakeGroup( "all nodes", SMESH.NODE, SMESH.FT_RangeOfIds,"=","1-20") + + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_4 (merge) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_3 (m1d) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:1:f:0:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_5 (mesh1d) parameters +ipar.setParameter("SMESH_5", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_5", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_5", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_5", "VTKViewer_0_Entities", "e:1:f:0:v:0:0d:0:b:0") +ipar.setParameter("SMESH_5", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_5", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_5", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_5", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_5", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_6 (mesh2d) parameters +ipar.setParameter("SMESH_6", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_6", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_6", "VTKViewer_0_IsShrunk", "1") +ipar.setParameter("SMESH_6", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_6", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_6", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_6", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_6", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_6", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_3:11:1 (nodes) parameters +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Representation", "0") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0.666667:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3:11:1", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_5:11:1 (all nodes) parameters +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_Representation", "0") +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0.666667:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_5:11:1", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/intersect_2d2d.png b/doc/user/images/intersect_2d2d.png new file mode 100644 index 0000000000000000000000000000000000000000..7d651582e398b194532216335663bc0deac7b4d0 GIT binary patch literal 1507 zcmV<91swW`P)NTQK$oQN%-loWs@8YIxgAhHjFNTOc-8ALPy zB+-3=de9Ep2Q?(o9m6w-Xh3l!(KT^<&<@!LDJ0P;1~=x322@589Y|Axek1#!gCu&% zK7)t`l=b2L0u(*IswBcQ`v7-zq91lWh>`->Ac?+-Tn{qKKE50WDbj1ZZ;_$;Na}tgHl|K4c zi-Klubk%-y)TH;hgh`aRy?y`>A8)jn`K8Xq*kOi0QF87}QnSI7f4*XsG=Qrk?$Add8ZGU2&hXm*-GG<#Y zV-~U#?Ixqb!I}F#SyQPo+h(83GJ_?N!U1V{8lUDqU@SGq%y+#plIZ;bDRqT!6ouia zreN;tjG1~8>Fm_j)a=t-a&Bk#TlBj>D!o6SV4@W)`$E-)7Yw!|D6zHF} zU!dVg@@gm(FIiUNJx@Po)04>Sd(4jiHfe?< z5XLOJiAl7*SeV;(D5Xk!1=YsvDc_h)c|Otle3R#9`99OfzXM)|*6ic4}2{$?jzLd|vj+ zE_sssNpy9m64atvb!jIJ}~>DEO~}&Nz}Ph5#O&W4~Lg( zV^;81&u?dwDChxsdng$WdvW)?bIii6cZP!`8a^EQ?^g_mz2SS#n1%B)iPG%U`H!Ea zS#mfD_M9>6^jMZ<|DVcyd>)4k4j9G^%jeG|GD~aw=KSg>@&*Mc_&z%`J|GoNjh%@P9lYpVt@<+G`T%d-!l6MAVA!Yv$K4)hztTk@ceyeQ?ri@ z0s{GwL^)~^83csm{5xRBW*->@1hr41ptXn$0zz}{M6ECT;(mJ@z}6p06rvVUf`Cl? zJ5jrsePj@jk3qOj`2k^?N zPSpBp5hVz~dviMx83f>rvz@42tVLuHfb+(8A~FcTRU?y#3<7Y^g|oBv`UH&(0??zY z6LDi6z!29uQTwkJQGx&rbf**PKW`sEESEbG01Wrx{Q>}>{R^b~V502h`MLlA002ov JPDHLkV1f}ww=)0$ literal 0 HcmV?d00001 diff --git a/doc/user/images/intersect_2d2d.py b/doc/user/images/intersect_2d2d.py new file mode 100644 index 000000000..37219194c --- /dev/null +++ b/doc/user/images/intersect_2d2d.py @@ -0,0 +1,140 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import sys +import salome +import math + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000000000000080000001a00560054004b005600690065007700650072005f0030005f00300000000002") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:1 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(6)) +mesh2d=MEDCouplingCMesh("mesh2") +mesh2d.setCoords(coordsArr,coordsArr[:2]) +mesh2d=mesh2d.buildUnstructured() + +mesh1d=mesh2d.deepCopy() +mesh1d.rotate( [2.3,0], math.radians( 25 )) +#mesh1d.translate( [0.2,0.4] ) +mesh1d.setName("mesh1") + +m2d,a2d,a1d=MEDCouplingUMesh.Intersect2DMeshes( mesh2d, mesh1d, 1e-12 ) + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",mesh2d,True) +WriteMesh("mesh1.med",mesh1d,False) +WriteMesh("mesh1.med",m2d,False) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +([m_2d, mesh_1d, mesh_2d], status) = smesh.CreateMeshesFromMED(r'mesh1.med') + +m_2d.TranslateObject( m_2d, [6,0,0], False ) + + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_4 (mesh1) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_3 (Intersect2D) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_5 (mesh2) parameters +ipar.setParameter("SMESH_5", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_5", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_5", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_5", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_5", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_5", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_5", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_5", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_5", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/measure_field.png b/doc/user/images/measure_field.png new file mode 100644 index 0000000000000000000000000000000000000000..d58dea25ecec9cbef387dc31109ac968722106da GIT binary patch literal 11540 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 A&j0`b literal 0 HcmV?d00001 diff --git a/doc/user/images/measure_field.py b/doc/user/images/measure_field.py new file mode 100644 index 000000000..24cbd6497 --- /dev/null +++ b/doc/user/images/measure_field.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +from MEDCoupling import * +from MEDLoader import WriteMesh, WriteFieldUsingAlreadyWrittenMesh + +medfile="mesh1.med" +XCoords=[-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22] # 9 values along X +YCoords=[0.,0.1,0.37,0.45,0.47,0.49,1.007] # 7 values along Y +arrX=DataArrayDouble(XCoords) +arrX.setInfoOnComponent(0,"X [m]") +arrY=DataArrayDouble(YCoords) +arrY.setInfoOnComponent(0,"Y [m]") +mesh=MEDCouplingCMesh("CMesh") +mesh.setCoords(arrX,arrY) +WriteMesh(medfile,mesh,True) + +f=mesh.getMeasureField(True) +WriteFieldUsingAlreadyWrittenMesh(medfile,f) + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "ParaView_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003b5000000040000000100000001000000080000001800500061007200610056006900650077005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "ParaViS") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 1") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "ParaView_1") +# fill list ParaView_1 +ipar.append("ParaView_1", "ParaView scene:33 - viewer:1") +ipar.append("ParaView_1", "empty") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "ParaViS") + +### +### PARAVIS component +### + +import pvsimple +pvsimple.ShowParaviewView() +#### import the simple module from the paraview +from pvsimple import * +#### disable automatic camera reset on 'Show' +pvsimple._DisableFirstRenderCameraReset() + +# create a new 'MED Reader' +mesh1med = MEDReader(FileName=medfile) + +# Properties modified on mesh1med +mesh1med.AllArrays = ['TS0/CMesh/ComSup0/MeasureOfMesh_CMesh@@][@@P0'] + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') +# uncomment following to set a specific view size +# renderView1.ViewSize = [935, 531] + +# show data in view +mesh1medDisplay = Show(mesh1med, renderView1) + +# trace defaults for the display properties. +mesh1medDisplay.Representation = 'Surface' + +# update the view to ensure updated data information +renderView1.Update() + +# set scalar coloring +ColorBy(mesh1medDisplay, ('CELLS', 'MeasureOfMesh_CMesh')) + +# rescale color and/or opacity maps used to include current data range +mesh1medDisplay.RescaleTransferFunctionToDataRange(True, False) + +# show color bar/color legend +mesh1medDisplay.SetScalarBarVisibility(renderView1, True) + +# get color transfer function/color map for 'MeasureOfMesh_CMesh' +measureOfMesh_CMeshLUT = GetColorTransferFunction('MeasureOfMesh_CMesh') + +#### saving camera placements for all active views + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [1.7629894333642653, 1.5037968367059755, -3.5223589503586297] +renderView1.CameraFocalPoint = [1.7629894333642653, 1.5037968367059755, 0.0] +renderView1.CameraParallelScale = 1.6150499279094872 + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/medrenumber.png b/doc/user/images/medrenumber.png new file mode 100644 index 0000000000000000000000000000000000000000..edc9fc32563bfb7407ea60441a7c2cc10eee68b4 GIT binary patch literal 10782 zcmZ9SWmFu^+O7u+65Mrg_XN)%K|=^`!7W&DAA;-Pg9Qk#!7T)L26uvl1RvZP+&R4a z+xvXy>>u6LwYpYyt?H8dx$2HoQ&GUdqQn9K062>8WHkT)q|eXKWf;iM_m|9xKc5p6 zH)%yJ3=E8gHPzMUET;22J-6rLV*gx7C=9?b0DumlDEn3moOzh#4JMImdFq7V2gjRX zzHLBFmeY#Kr7H;3J=(dJK}XZ;r`sbTc}pw^!%Y}KYYtqOLTxWOSVxwpV?*{b1SrVH z)4S3q)Zj)Sq2i$SNg;1vDdc3H?^YdERaNa(N$gI%o_LLLZn>>2JNCBoDd!-@g%IH5 z5ipYmzwuMYLSE8CBCxK|r>LmE;FEcX7gDa+2@f6bGY z0KHXitBvJkflpmZNH=5PxvM&Os*kSsmD=OQ5gS? z(Hy8b5_GaZqfbl)sGda(tF!UKGGIHJSa`|5UAl%rJ*&*goEqo`y6}3)$vckm?5bPm z9vt#te5ak-(_=)dwg%IlX+L>Rz3v>@9tZ$`J^OY@67USH=tTQoQJ8QB@|ueewuq)Z z0E~~KpE`(`6&Pt9_2Trtf%jcLbiQ06!_SFM0SN!|;WS}nFQ}X=qrvXbt~d8r8S*wZ zwwpEH)~!SS^8n{3cp9D^tA$zQjoW97raviaM2D>kkIOggU$9>UQexW7;i5NMj9|@_ zLV;IPR4nvI8DtO4&i>WER(VBH0M*!CzwAL0v=GnLECkq+j4(;923YqBF|0y)mibp+ z3pWtYM1Fs~Y0ql-6B8Mf*-Eom8f5-=w!|ay?32jC<&a@v;o4TWc1|X@TzQ;G0BIPN za&}VNZTli|_X2}*Q$?MH8y zQq`}2v0fkd5v5w_J0%lqO7xC3eAQI{f(%=Zxv7y+T@=7Kx?4M}m7mxh(JkXC+1}eQ zq)dO&X}|&yXhlXpQ}@RO@Mr;~4nJLCPqP&}qjd0g6=v}5vQV!;OTFMDUa`Q7HqX&K zfeGgmLb(|>`7xqsz^b&UF>SD%-k`qxO{V4okCy40rp*eD@CqIvx-MQ6Z9zhM?FDw$ zOF*lH!a`NALRd1U%d3DM9FYdz)3A>9DQjxw_lYH%5#Sjd|6=1E7uxLoNYBmz1d7eK zpx(df)kHY>`I+5iwyo+EX-)k$n{p9~&!Z(nd%lCR?y5lLVGt7BXK^U88i$S)A0OfP zZO~8Ui8p__KMI=MX zgrLF7?5lI-;4zNa<*-tDyG0zzYc8#Op0Sf?Cc8OFU*`GInnZB^6?E87YSEWGFy!X? zGsO#4l)xpEd^aZp)i;E1b82@As4|#l`;wGKbBOW*WAh!R;s&oYZg9~gfT8oN3No%b z6S4*F?uXm|)LBAN8*eoh$7-wlMiu60J0Bso`I@%j>@}A!B_PGBz!U|*RJ^*fV(vmp zDjw3ybUq^Fmu;Vx@ftVZKc}}=oSZfMQ-};G;d%IxQ|PUl2(zAg_jz;qV!e^CHOy` zekKD|2*dS+C`xy)VFj`)Z*N+z2_|x6KDw8EK9UKN25lV+65@?ylZhJmkX5+KeCoBN z(^A2vS#dfo35Ai0-?Z8Duh&ILAv5+6y~>sXYj}^@OsSIq|AwF3ysSRr;3$l&hZ9RWU58xW>KfWuFQ6=kzy}HWt7KUkhnwX_MhG88n5Powpd=MtC7-)hz z=fOwLxy7R_B#Et2pvP~5{K34GFA(7G)Z`Hg4>JoEQ)`k&M_-x_v}vLScD-q(dy=$2 zeu6gXC#cmaxLidj?lEJ(6#_?%Ht4}!;;XtfbbHHk;#MbduOQrxDUoi78a(3}@CwMa`SN+z zIv?qtLN050%-3aTd79mN$zD6q-gf-~nb1driBpuv_YuKFKIDCMemLnr9jEfq0E_dq zRH<~n2}>AO3ngp5bEOLmbn*;k64=bb6*rx36&hxJY%1rl)Tx%UG2v<8ZI@K$^StPQ z*YYqF@Xb9e#HWR(P>f!x&El$qB!N=zqX&JcgcQ6f{8Pln=erjn{ty$97!pnC*IrBH z689cym&s~G73D!q7j%~}tnaiL?F#1*3G5u}V?WQ6_G3OV<;&H}$yiN@$9q2u=)73~ zYJnf82bJvAcng1NF{!FZMQnf@DQ+>u$&>nABALeD+Q00!@HBa{`sqir&zQw@w5=*8 zN$iqUuQ34?^{w-?@*G5hZ`Ef7DP;Q7$OvBnZ}>)=%l_gwub0%92Gc()zhEtDBLr+U zXP4MSqtX=(8GsZH1zkaRlQ~r1#hBeSvtnG(HQEeQqQi_)g`(0#z(5cUuS365hOpCe z42uJwOYEi#aXV!^Ka5Ry`t5w*=SrM~^MXNhjg1SbVtVXF zx@?xab)-HofD~-2^XpgUHa%)!c0UX7sLV|f6j{&z1&vhvVdKdtO2(RhLmOgcupkfm z^gPlk(xSf1MGqiXMMjA;YaQGtDT_=TTv9||4cFE%opxRg3!=3<(>Kb{j=q~_aDf@Y0x_Go}9K{Ui2;5qgqdbT# zb|qG<19Nrx?Wka0L}N6)so*ghgh)8cOGeo*OZ>1yky;iwrx@^i5r;yVMUH*vM-TLF zng7CNKOLT-w6!N8#NB5AV+*-=0g!fnAx?^D5|8x-Itx)UiMe)i*LTikmgG7d(C5hczoYio?zOqr&rg zAkS5aSB`T1mE?(<7m5V}XPVMqH9XfxnX&StlACX7{^%HnY7{5@mgf7Vn87pnWo3un zJDs-PsyA|=`4t7N)2|mdc8mcA+`yMgdIk@i6aSqqvsK;o*zyr;wSOeb;m2D`p6i!;GGZ!83mY` z<83%IAf>!x22v!iKfW8bxI&tv@Yv^A`9YoGrrt>JFA;qAoxUA~p8&2To*bNMVQXu4 zMmGna%0cDuN+n`=BNND=l~^e4)3%m8QW^W+b{Nc$S8>-oyS z@Sgt)i%1SqOZJfP;5M@Lv4v`n;YYGR!f#yTBtBtxG~%Pc(__uv52pA9}*D z00*tmhN@oSa%pHq|G~rBQyFb-)RmxC(D5o7I>KfgX`i2*Z=Ts6QyoMM+hY@OfI{F2 zeSRnDcQKQtWM38`+h6jRj$Q5n`c`zcLKYgsDZO`O3Y8pfTdh@is@IlCjdmr-D{JvK zXXDLTzjL~(4hWYYREZr?**pn%d(RF@-n{rg-FfV-0Q)Ss95rBZmFL9SR9R&G|HzQR zY?Z&W>3CJkQ@HDMa$JT+f0`|sPiRK*-%u`Q4i1+#f#3T0b`mD)R`Zj_^lD*U0k^vQkjwh;`nwOB{hef%JMw*%4*7M$GmWsn9a? zxEyEt1Ho&C=N0eG5p2kw)W^jAhWO`bmyBq>FQm+EM5vo55}9eB8Eh~44iqF_T6N>- zO4W;7PSMK2v_vk^#e8C5T5hELKBw=N{CBMn7Ro82U%WwyObvpoKk>FM~ z>t^-Gy)cJ?N(|TR3J&w?k)@s2q??xDJ*>8$6ztq52rlAdovor#C5XkJW;L8! zDVB-M+{HJJW4&iEue8Z}ju$^w{GKC%wP^Cc#M2G*^~`hQ{a39g^He9%;1p%~&ti`! zB{wyH$>1)3?{fD(=`ZaEQQfWYUV_g(Mhv)7FXYhjoIVtO76U=vgL=s)qg*rZNH(_t zxh|a4E2?K=dc88j6_;UP@+C-n9(!LqFo8&qsz{H;N51{Zl`%5OLxl&$g!)|FM;=*1}d?h_F)6hWjhW8&vT{q{oXxG;PZRQY+rVcoI_Z) z3i+0oN-aR?GT8VGY4y-$unFf05r{%0T5#;GpHeu49i}S&k``fOF4ee|r)W207ZcZ5 z;Ghed#dV^QiACLaH}9(hwXEfOz9LN#seww$BG{hTq2STQ=Wy+%5I3{zfl&bKvxH78 zu$doS_Q)>lJ~?e!sdW%kj+1=QwfGM{S?*UMH$kt&>X! zRPKWvH#2Bg$#-Uaun={QOMb~hDYX5m9Vez2X8Bz{9{lrVV=@#otfB3>Vw43&n!mA1 zjw^TLlE8UsCeO|TyZ$8bV@ z%tCa;yJDwhCBi9smxaRaz?d`{}o0&(X4YH>{G^n=XI1}2W7rF*K_`nI`{wX5ljw>{sS(sygV@Y*M-PsP*>PUZ86MRPVyRn(sQapja z>5!=tSfxS`A9w4HNT-nkBM?uwu3xs7rIl+0JCe*||Hy*EHH%Nh2;inoR@^Z|uvVh@ z^yRhG#P*!+`jN&o5~~s7r&>P{{59g=agdIUI=RPQYG-Ozlg8jk7Fk3=1B9LFeVutp zxA~fmJPp3EEV7LUcfV{|yOBgdMmuk4B`0Ex!`>wJ&z*X)|Ax#S%4T~yI-+B72ET8* z$x+*sGrlR&E#ufPiIIybisMLzXqPFP_`@2B$&ND-*%Y8(NY>-j2o;Dv94#-;YK~S- zA?3=@YbBLeNWR``D&Ilq*`*AspjS`f{XyWd7m`qk%bFz)vnRwm#WRr|&n;6nq;1Q! zhr=U}Hr}M8Y+90oU=Z$j*w(;-aK6(E;^C2#Exwf0Z<-8zOi?@@w zC*9Mcop8g4bY;ULN#qt~!+IVUD?ysEs;=()K_wa>+cDPr1RXmB;9YAv7u1{4`RXH+ za1=}5zz~o!CUbu+p0LjD*I!1=dL#UmB&u>f9V{=jayU*}F&A@A^V!B&0b z2xdR}u+sjUd}lIfuAEEK7G%PiD}XyHn$I^ogegW*d7#un`$_S)WD%FVL~-nm<)`w5 zRK_)Z2Y4BqDCw|ZbozFw2LbwUYZ$LSo!=R3dbJ1Vx&x5ph#a_n$A2;I^*sh_^VgEB zrQ+Su^&z(Z{PQq_zoTyomqmaoCdu5&r&2;6ij^88Iq8G0;;7!Rt_-bQOs+V2;{NvHQ< zJlrdnW+u_c7zZYSioIQf|LHuuFNv!^CA1wSG7I5GV03QxJ*coxS?&-VzC|Wi@6%~r ziM=oeIkYh8x8imSsjZLtsSQjtPqJH{s0DL$Exf-l)X>6*dE%It8`%UQBWl{0zTMT( zN)9xN=h<_9a9#-8r*>o`%lYo>xnNRK#T7{uVb)p`QMt8@e4`2?zRNJ||8_SCQRies zxSh$9i*HXxo;XApk_0WUh4bQ43Sdl}MS5N-{0;$MA$!=@6Cp(0DQ@ALoWQ!mcXt_! zKCMW|TM{Mf+xEMG4e-cz^RElb^N|GVd*bYnkjzTaiLzDQ6CyT+=LB;RF;OEdf+K`w^&RbmSgO3U~Q2 z{cP><$BDgVm)f(Ks;50sq|W2&2iB!8pTTs}N*pl!mIn%U+Z6RRtrwg~BX%Zo)vV>n zDZ0u7+12Rv?Hld+8lV&1pG}EE#q!lG%1F2Td&z`;Ol$#&dr|kjnbH?ebRV)>Sb-Oh zES7wZ`z|B85ZFh4G>F&QhS~Glk`$ewC45W6F#d&h>*ucY@f+!8eYBeEnU^HbkhPSX zakf+B<+gw2?eE#w)6+N&MI6%>*8Wlc_``iCW9#uQR7aFy^1F+k$!r-q%XsT+f3!1b zZew6+Uyqm09Is8vMXzx!v79$n_*wAk_e^bt$Y4cb*CT7ZKq5mT=#Ng@9?IBbXXy{S zhYyq{?a&HKub{JZE8P?A{S zwqk(L8E_k<2<_7o@mqYw_ye0Z0+QFq_!&Vi_i4WC9q23L`GI{1L5m%{`3h}OESb#| zS4Ifn&}x1jHMqk4IzH3cU8T%&Oc46)GYh8`1BxJH%04{V`t_kE z--aQ|N{G3W!Igh8-4xX(u`4sJ2Z0~>R7nMrfcIX#2Jqo@S(Iyixg2F!H36Q?nJ5dw z^fbEI^rNvz9ZMa8f$kX`00&J%Zd7yOpwCRJd3q_k7?KVjx@GOI|c`q1_WG)<&kfJL`!LO6Q4gt`1w-!RXN4z5Hf(YAP z;kkr;*v8Mh(RZTHti>!yQZ|#eF-BqgM>Sb-L$+2zYag|Jr7d=URe!I@2x&LCEzA@R zc=RnPbX^Cz2)AS2CVg{_`V2kRO8F?7;GLqKQqiPVmr}iI7g)2b@O0q38<|v{BO+RW zaoC!t$qR4fdQ}j;9U^ep3F&QiyIFhF_J;nxZ$%ep+~Cg5a)ygN`8gD~^s9pvvGP5k zx{iKgj}y_XCcm0$^Sf?WOeh=62$xtVU-!guM7e0g1qst-+x|ToQT;8~OB9=KiBU8g zUF_|1otR!H^raT8#a0pS` zbwi!fX1c(R_{))39p|({ko3lUhAUO=FJAVO!o*OpP7{}=40R-=_-^vAu3_k}B<^DJg6@UGbtT-He!SdIaV1l9iTj3)gC+EwoVp-LK8igV*Be%(|x2m7>S6t>XcI#N! zim4aT|NQtjC=>!tS$I&f^+pGF99^7f$WY6aJh!xB5B4H5&0~v<>jzd5a}=vi%C9H| z*#I3>l>!wUrKfobrddJ#OfS*-xI+&Ck7K65iMg%}rI`X7@_f@jdtvQt?|y9X0Ean9 zIe;E;crR@EuBPPiyMrH4+MGJEpE2h4J%O4>*hF~3{)8ynsAR1l>3N9Nos z#S|8}*#bqEvgp^f)PyIHk61G8RHS8UZ&n^f!CkyFwWF4C!=-GX&(q}2W&GnG);ne7 zKokFdlRG2dQe6SmZbeexpwK@qj}}A>K)^#?-Y-Rg@mT*TWgFWCPg>k)MH{O$InxAo z^Mm{D!;kzP*Vd);nsE>l!OVWfW#F$iKUt!PUf$X3Tn>N5$`=$p1|ke~;57abVs+84 zwAme5z79qtVp-%_S|ts#XL)J|VXkp5a5=@PO5H#?b`gVUppCrJtn2;9GVuO&Lw7BL5HFBd4Rykk43!KdQR zd(5sqw3{px)X)cX#Xcb1eL%Nj(%(DM$d5l!>L_6IBz9s&IDcy=%JO=I(=V$jcsUqh zU&45o2=Kn%tqNAT4It@71>1X!$fjaOOnpQ@vx4NJu*p#&l*zL zju8VqA6y)dA_o5YUFT2db$_BHF&yTho{N)?6*3_R$xV(VoUUm(kqTXAHC$NdmF#g5 z9j&*Q?<;_|1+x}8NZ$V#K20=_IS!_{88)h2?6X*t5YfpPaby#_*SuP3qL?hiIsMIn z>A&(|^JR<)w$2(8hg*nQu32^HZOIA%EuichYpyWSHPa$=i)BK-0DITrg0q+jWwiR< z6wB1|_qel9*>8u`1?(GqZ(J8obJuzyQ-|~(RK13*RrzJN zyH$q?lh6|f4$#5Vmz4{lIm`s|knPy6B@2G1(4i}uD9C|?VI016bheK;dCbm-3BkDhv|-QS>>W%lVsc{^GJ0^ae*3f?nQg^R z4l&t_WWV{3;vcsD(<_6aPp1B0_)DPFs-QPA93tn1bb_^e^$>Nj;y-7C;dxg` zUsnV;oTI;z-QrWWt{@6o1V;E1O-q#SeqY)ohP{=od#RREQ>5L?8&M@;9((-(H2zDg z=EFCbH?2KRgiXvcr-72W)ic=zHHXr_MN@ob6K9B|uXC*kQkUlv(63`;!FXfIbD8*_ z%!=nvd?E8%M;B(bTW_iqh-EV6Lk5q4B724zx$Uz*p#C2(!2DQ3x!2a}zjjmcjfUWCqro*M#a>I7wV8@z z3Bzxf1s?dnEIKJtcX0BwQhjDR{!)S{1%vhWf35b}Qk@#Glg7x7*dZVa@#bx{vq)9- zOe({9V(!A{A|!Z-QDCd^R#ffeQOM{fUCB`G^KNlL|5Oi0 zOfJzqhI{#kYfr0J^N(luTR5><)1B}JY=X1z$aMY8-Gd858e1ptpHKAY%I#b5*2R5O zY8vU86>2@u^u6TA=>%+|I@ZT5OsV%&GjY>U*!&Iz^LGMZYthdd%XT6DFQJ|FdI;Gw z_>xzBvlqAn-KNi`+a=E%gJ!~OpXJ)+34*tS5v}CExJgMu*98rK#AMKt1P2^uCp+~N z&N=LIq???B64+nq>?>)QAv>8#_XqapYiezTjej8tl;+CJ4KD}SFSN03F5nO?Bn;>> zDyY465@{n!^)MF-A&hf-Oy2F)_JSq$GA+I)n0^dhE~we&{M7O3(Su%zua@=Q>H8d~ zGsZe_$&$jOJ~5fx$FDq!HsVlT_y=lbK{_{$~40>ym|6?au{g7i#9 z*ty+7M=Aw`JMt!Ew!AgZ%nq3TQ@*`_2mI!*r!vhnkNXAx89#d?Zp08~qG6;DLah}q zO58X9MU|kP*$3cqR^W{Ly+$y<_dDl?XaQr z(f59*YR{38DpvZ$ube*??!ipT8ZAW(N*jcDx(R$sE_TiU%=WtzSI=9>F<+kDY`#&} zZGv1YV_4I<>!JyIw8}T)@+r>q9HP#l%04=MyL2=%&&71h_cu7zekASL6=Gg?v+f5s zl=VC}njycSPIsL8hKgsT6TL(o5qZkxDN!9OmOr#)pRf#QIYfpfvc_YLD}zcYSP$3E zlnZmG@@bY1sgk)dr!qcDSfUt{MKsCxR}MCj$hewI9K2S!d7ACO$FnURB-Mz3l)p<` zgz#7`RvqKNidKnSmwPjURC$~8i9GjxoKvrbTWLguF)01uS_w4kHNbuISNL;`exl8V z?m!>$iu5MbT}jT0EaaQ{29h5u5cdd{WfL%Nb@K7&bR(15Y+wHA?{@5W3_uR^)Tk4! zH*J=+TAzZy-$Z%}+%sqI{k~gmw;`Ji>g15<5~@{_vzeSR+o|h!>4Lyr_9QX|ke7eb z%SU_ma*Eo+jg3F>;=3fG2`9*ce(t*Og~_}*ITbJQ!1U+rGZE2kP=c><5PlCcAQ@Ms zb=F2|i@X%+L8)I-|8oLf(}A3EyzE`4G$eD>juacMOjY8Gn=&}6_U7#*iWqP!TUkWM z8{MBbD{=M66(dstMM9SRoENj%hA<*djdJa%nU3T7(SyKka=ynF|KqdpT0u-n$w>C# zucCH(C>RAckYBXE{x91P!(}rj15Y1pN5Vc??(h>A7ynb#eaJ`F`kj|FgAtE`KiW;! z%dZ&89wh$R`ebryXJtXIR`Gp)?=mRfIuBKEh&kg>G3TyiO*L@JS4Z40y$X3e6~OJU z`Hly42>)q8fe1;R(Mj{>y>yWKf{yJ&gp)zk*|!*up$)haOVUAq%#}w@uZMLX&i_F6 z*i(RJB-Ekw{ALopt7%w*97=ne695d^2KHrY*k0<59CS<(_0A?`iaDc8be7Z=*~}8O zK1KG#HXY&OS|PsQMhsMjEriOtkH{Xmv6v(j^1)?YyWYm|x9|^16<; zf{$X1kX_uw*ZiW>ojNrhwMK(uw|z;X^uUY438|?*S79Em!O1;==Tfx$ib-TNCkqrjL8-}iY?n~ zLJ#UtU%82|E$6O=C0$eEJ(cP-enM6XVCQnR7+h)kwHK)KL5q8Apjr&Qk&`{(j6sI?=?s3bdDw&>) zgU<<7!yx~u4p8$C!|1#4g3n7NQ{!whJp9>&;&|7HsrW|7=7Mpz*0T@^ooHNw{ZhoL z%<8NR#QW>Ppv*BLZ{85?ORHv%YPxQxB5>dy7GX-Tz95PctF}?A-sMZuENKm+gOzYR z>)hp{XQ!8pF^*)sJ{-I2v*NCenZ0Y}_%Sp8q&Lht298oleH9v6+>&`^*7{}f z55=N2*KG{5@ACJTKbE17srI$uvp7_67q`->chB8L0u8%6aqdt4{mOswe$RJXb|cfV z(ef+w{Q~vdpt6nwKeZI;#hG?WZ{!rqe(wdMYWP|P@9V3zX8Ej$F1PhChNp2Olhn@Y zSYe10?ObX*o*UDX5kh*aHU?W#(tN?fHZ5~=h{hPs?@s%Q4ZuX;oTGIm*!?k_Y_`{> z#DypOde=`2wg+XH{U{GKk(a#wI$(9>!T|hn7hfj8Ek`%OJ0SB3I5PM_&D@y|7}6w0KBmJ7@?!X*4QV-?f(EM}(m*J~Yhxr|@XAk{VwB~`^3j_ss)@+YQ;ygyL3pDC zov8(yBw@yPC%xKdB3gc+CRW{JFP+toTqPo8E$@S7gtwNGZh{A`l&2 tU_zH4Dk>@;VG}ek5Fr2mIVEqN+7>Vz39udeo*kY5ML8AODrwW;{{zSI0E++s literal 0 HcmV?d00001 diff --git a/doc/user/images/medrenumber.py b/doc/user/images/medrenumber.py new file mode 100644 index 000000000..1eee507f2 --- /dev/null +++ b/doc/user/images/medrenumber.py @@ -0,0 +1,148 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import sys +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import salome_notebook +notebook = salome_notebook.NoteBook(theStudy) +sys.path.insert( 0, r'/misc/dn27/users_Linux/eap/salome/tmp') + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000200000002000000080000001a004f00430043005600690065007700650072005f0030005f00300000000102000000080000001a00560054004b005600690065007700650072005f0030005f00300000000202") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 1") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_2") +# fill list VTKViewer_2 +ipar.append("VTKViewer_2", "VTK scene:1 - viewer:1") +ipar.append("VTKViewer_2", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +### +### GEOM component +### + +import GEOM +from salome.geom import geomBuilder +import math +import SALOMEDS + + +geompy = geomBuilder.New(theStudy) + +Face_1 = geompy.MakeFaceHW(100, 100, 1) +geompy.addToStudy( Face_1, 'Face_1' ) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +Mesh_1 = smesh.Mesh(Face_1) +Regular_1D = Mesh_1.Segment() +Number_of_Segments_1 = Regular_1D.NumberOfSegments(3) +MEFISTO_2D = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO) +isDone = Mesh_1.Compute() +isDone = Mesh_1.RemoveElements( range( 1,13 )) +Mesh_1.ExportMED( r'mesh1.med', overwrite=1 ) + + +#from MEDCoupling import * +from MEDLoader import ReadMeshFromFile, WriteMesh +m = ReadMeshFromFile("mesh1.med") + +from MEDRenumber import RenumberingFactory +ren=RenumberingFactory("BOOST") +a,b=m.computeNeighborsOfCells() +n2o,_=ren.renumber(a,b) +mrenum=m[n2o] +WriteMesh("mesh2.med",mrenum,True) + +([Mesh_renum], status) = smesh.CreateMeshesFromMED(r'mesh2.med') +Mesh_renum.TranslateObject( Mesh_renum, [ 120, 0, 0 ], 0 ) + + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (Mesh_1) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (Mesh_Renum) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/orderConsecutiveCells1D.png b/doc/user/images/orderConsecutiveCells1D.png new file mode 100644 index 0000000000000000000000000000000000000000..4537133a87f5a672ba7511a41573f30ee07664b2 GIT binary patch literal 1139 zcmeAS@N?(olHy`uVBq!ia0vp^8-du2g9%8o|9k%lNHG^Xd4_OsaNK_A{{YD4Ebxdd z1}e7#VMb;pxmE@S7BNp3$B>FSZ}0efCV}L^G1jXj2E{7KeEQtmjt`UxBA~v(%O#Ob)Z+HIl zy;J_y_BHLluMj_f@uBOBURyCeP#2A_WnA#YL5+dWh_PS-XM^&YmizCw*F69J`|Mt| zGgq%py_**w8@tr-&*R6*d3kzLz1OZ?+qQlC{CV>(-DnaB5=pJAvygiB$Z8yG9Q1rC_VgGA>d>-ySL)RayfbV_O`Zr_wH$&wYRtLKmK_7 z^y!Tb4gxI)4?0Fp%hb7b`}XQJYeGbpu3Xu9tfnQvYOb8D?A`nK`(2b42CP`W-al|k zSJ(df+pk?}?BdO4t5(08UtM4S{@uHKckVo~$V*Lay)EMF{2N;(AbmiscU8J$=?mGvC4coT4m5PVvZLdyDY<&LHX`zB=kcv>D)m)Y46G}5r zKQ-|^ono{w;6&Eed-v~8K5MvP^XAJJFD}fSweEGudCu7Dp`lY%I-ggrzyABrAD?`| ztHqDnU%q_lpiod=?*6UhQ1PLxtwl1|Z``mjGFr4M3+S=g$qCunuOB@+^t9;el`A4# zt(~2n875i3#6m;YuV24<)v7}eH)wR-%rTpMa>l;anLr11J$n20?aiAruV$TnTEyb) zVN_UD^r&cO*ZNqksgEl6EnV80(6`Y=>Ej>S6@y;C^Ah5IR6DYEpdopFy zu3fVd{4_g`CbhS>&z(EhZ1&l_?eem+mNI-&-6@fM#~<&E(VOen-`lIJt2=XFQgX8L zOdq8dVCw1aZ#kUUWGS{+<{z{7(jdF}>-X*Zw_5+n{s6g|3_5>5-AweHVHx%R@B7lH zJ6@DWORP!Q%W;mgq4EC#STb$)VUS5-dY~Z8z&?|~;snb9M|cV*TI!I`ltAHr!?e4u zt|8SkCV0*bYPswB^vaRsj>vMsMfVSfq&O|VvcDvLimUMX*qyuaGG+)e5So@`VM%_sl%WKCCqFHQB mAN&v9^?k;J)zG|opW#@2-;Lt$d-H(B27{-opUXO@geCw1z!>WQ literal 0 HcmV?d00001 diff --git a/doc/user/images/orderConsecutiveCells1D.py b/doc/user/images/orderConsecutiveCells1D.py new file mode 100644 index 000000000..4d26fca62 --- /dev/null +++ b/doc/user/images/orderConsecutiveCells1D.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import sys +import salome +import math + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000000000000080000001a00560054004b005600690065007700650072005f0030005f00300000000002") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:1 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * +from MEDLoader import WriteMesh + +coordsArr=DataArrayDouble(range(6)) + +m1d=MEDCouplingUMesh("m1d",1) +m1d.setCoords(coordsArr) +m1d.allocateCells(5) +m1d.insertNextCell(NORM_SEG2,[3,4]) +m1d.insertNextCell(NORM_SEG2,[5,4]) +m1d.insertNextCell(NORM_SEG2,[3,2]) +m1d.insertNextCell(NORM_SEG2,[2,1]) +m1d.insertNextCell(NORM_SEG2,[0,1]) +m1d.finishInsertingCells() +WriteMesh("mesh1.med",m1d,True) + +m1d.renumberCells( m1d.orderConsecutiveCells1D().invertArrayN2O2O2N(5), True ) +m1d.setName("renumberCells") +WriteMesh("mesh1.med",m1d,False) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +([m_1d, m_renum], status) = smesh.CreateMeshesFromMED(r'mesh1.med') + +m_renum.TranslateObject( m_renum, [0,-1,0], False ) + + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_4 (m1d) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_3 (renumberCells) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/orient_2d.png b/doc/user/images/orient_2d.png new file mode 100644 index 0000000000000000000000000000000000000000..f28c5d26006306f1d9869b89954d1d561ecdc3cc GIT binary patch literal 2882 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 literal 0 HcmV?d00001 diff --git a/doc/user/images/orient_2d.py b/doc/user/images/orient_2d.py new file mode 100644 index 000000000..d6b8409a8 --- /dev/null +++ b/doc/user/images/orient_2d.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import sys +import salome +import math + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000000000000080000001a00560054004b005600690065007700650072005f0030005f00300000000002") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:1 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * +from MEDLoader import WriteMesh + +coordsArr=DataArrayDouble(range(6)) +mesh2d=MEDCouplingCMesh("mesh2") +mesh2d.setCoords(coordsArr,coordsArr[:2]) +WriteMesh("mesh1.med",mesh2d,True) + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +([m_2d], status) = smesh.CreateMeshesFromMED(r'mesh1.med') + +m2=m_2d.TranslateObjectMakeMesh( m_2d, [-6,0,0] ) +m2.Reorient([2,4]) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh2) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.5:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (Mesh_4) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.5:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/ortho_field.png b/doc/user/images/ortho_field.png new file mode 100644 index 0000000000000000000000000000000000000000..d7de5e500b886b0d68c662bdc1a9d4fc592cc51b GIT binary patch literal 39629 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 u=JC}WCZ1qdCkpBZo4s?b9 literal 0 HcmV?d00001 diff --git a/doc/user/images/ortho_field.py b/doc/user/images/ortho_field.py new file mode 100644 index 000000000..7d27868d9 --- /dev/null +++ b/doc/user/images/ortho_field.py @@ -0,0 +1,142 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(3)) +mesh1=MEDCouplingCMesh("mesh") +mesh1.setCoords(coordsArr,coordsArr,coordsArr[:1]) +mesh1 = mesh1.buildUnstructured() + +import math +r = 3. +nb = 10 +a = 5. +coords = [] +for i in range( nb ): + x = r * math.cos( math.radians( i*a )) - r + z = r * math.sin( math.radians( i*a )) + coords.extend([ x, 0, z ]) + +m2=MEDCouplingCurveLinearMesh("myCurveLinearMesh") +m2.setNodeGridStructure([1,nb]) +coo=DataArrayDouble(coords,nb,3) +m2.setCoords(coo) +m2 = m2.buildUnstructured() + +m3=mesh1.buildExtrudedMesh(m2,1) + +skin=m3.computeSkin() +skin.setName("skin") +ortho = skin.buildOrthogonalField() +ortho.setName("ortho_field") + +from MEDLoader import WriteField, WriteMesh +medfile="mesh1.med" +WriteMesh(medfile,ortho.getMesh(),True) +WriteField(medfile,ortho,False) + + +import sys +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "ParaView_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "00000001000000000000000201000000010000038f000000040000000100000001000000080000001800500061007200610056006900650077005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "ParaViS") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 1") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "ParaView_1") +# fill list ParaView_1 +ipar.append("ParaView_1", "ParaView scene:7 - viewer:1") +ipar.append("ParaView_1", "empty") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "ParaViS") + + +### +### PARAVIS component +### + +import pvsimple +pvsimple.ShowParaviewView() +#### import the simple module from the paraview +from pvsimple import * +#### disable automatic camera reset on 'Show' +pvsimple._DisableFirstRenderCameraReset() + +# create a new 'MED Reader' +mesh1med = MEDReader(FileName=medfile) + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') +# uncomment following to set a specific view size +# renderView1.ViewSize = [897, 531] + +# show data in view +mesh1medDisplay = Show(mesh1med, renderView1) + +# reset view to fit data +renderView1.ResetCamera() + +# update the view to ensure updated data information +renderView1.Update() + +# change representation type +mesh1medDisplay.SetRepresentationType('Surface With Edges') + +# create a new 'Glyph' +glyph1 = Glyph(Input=mesh1med,GlyphType='Arrow') + +# Properties modified on glyph1 +glyph1.Vectors = ['CELLS', 'ortho_field'] + +# show data in view +glyph1Display = Show(glyph1, renderView1) + +# trace defaults for the display properties. +glyph1Display.Representation = 'Surface' + +# update the view to ensure updated data information +renderView1.Update() + +# Properties modified on glyph1 +glyph1.GlyphMode = 'All Points' + +# update the view to ensure updated data information +renderView1.Update() + +# Properties modified on glyph1 +glyph1.ScaleFactor = 0.7071067811865466 + +# update the view to ensure updated data information +renderView1.Update() + +# set active source +SetActiveSource(mesh1med) + +# Properties modified on renderView1 +renderView1.Background = [1.0, 1.0, 1.0] + +#### saving camera placements for all active views + +# current camera placement for renderView1 +renderView1.CameraPosition = [-9.40023601342297, -11.82197473872875, 6.269507101837803] +renderView1.CameraFocalPoint = [-3.714211157684638, -4.502747059961789, 3.6997577635620735] +renderView1.CameraViewUp = [0.6941544280720486, -0.3114076799016199, 0.6489798817268972] +renderView1.CameraParallelScale = 2.4893170029349183 + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/partition.png b/doc/user/images/partition.png new file mode 100644 index 0000000000000000000000000000000000000000..d66f2c4433fa45619884697c65ed98d361094fe4 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^y+9n!!2~3?%?#WPq?n7HJVQ7*IBq}me*oli7I;J! z1C?8WFe9^)Tq^?uBfqDMV@SoEw>KTR4jC}GIx64$f9fLxuTtkC{wuG@M%A!<<~fr1F2#+%+k^jll3?@O1TaS?83{1OOl7k< + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + + +from MEDCoupling import * +from MEDLoader import ReadMeshFromFile, WriteMesh + +coordsArr=DataArrayDouble(range(8)) +m=MEDCouplingCMesh("mesh") +m.setCoords(coordsArr,coordsArr) +m = m.buildUnstructured() +#m.rotate([3.5,3.5],math.pi/4.) + +WriteMesh("mesh1.med",m,True) + +from MEDCoupling import MEDCouplingSkyLineArray +import MEDPartitioner +a,b=m.computeNeighborsOfCells() +sk=MEDCouplingSkyLineArray(b,a) +g=MEDPartitioner.MEDPartitioner.Graph(sk) +g.partGraph(4) +procIdOnCells=g.getPartition().getValuesArray() +p0=procIdOnCells.findIdsEqual(0) +part0=m[p0] + +WriteMesh("part.med",part0,True) + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +([Mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([Mesh_2], status) = smesh.CreateMeshesFromMED(r'part.med') +Mesh_2.TranslateObject( Mesh_2, [ 9, 0, 0 ], 0 ) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (mesh) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + +import libSALOME_Swig +gui = libSALOME_Swig.SALOMEGUI_Swig() +gui.AddIObject( salome.ObjectToID( Mesh_1.GetMesh() )) +gui.AddIObject( salome.ObjectToID( Mesh_2.GetMesh() )) diff --git a/doc/user/images/partition_with_layer.png b/doc/user/images/partition_with_layer.png new file mode 100644 index 0000000000000000000000000000000000000000..5bb02b3a9965ffa8086c21468fb4c8265f6d4655 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^X+Uhv!2~4P)@H~6Ddu7)&kzm{j@u9Y9{{2-%*d=H*9sIo>gnPbQZeW4bwjR04gwB=;YI(o*B@` zS*&pXFUEiVCvSZGV|r}$PRs3VcANgr=HKw2efmA4Ff?dpbvl$?m`6ufO + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + + +from MEDCoupling import * +from MEDLoader import ReadMeshFromFile, WriteMesh + +coordsArr=DataArrayDouble(range(8)) +m=MEDCouplingCMesh("mesh") +m.setCoords(coordsArr,coordsArr) +m = m.buildUnstructured() +#m.rotate([3.5,3.5],math.pi/4.) + +#WriteMesh("mesh1.med",m,True) + +from MEDCoupling import MEDCouplingSkyLineArray +import MEDPartitioner +a,b=m.computeNeighborsOfCells() +sk=MEDCouplingSkyLineArray(b,a) +g=MEDPartitioner.MEDPartitioner.Graph(sk) +g.partGraph(4) +procIdOnCells=g.getPartition().getValuesArray() +p0=procIdOnCells.findIdsEqual(0) +part0=m[p0] + +WriteMesh("part.med",part0,True) + +boundary_nodes_part0=part0.findBoundaryNodes() +boundary_cells_part0=p0[part0.getCellIdsLyingOnNodes(boundary_nodes_part0,False)] +# starting from knowledge of neighborhood it s possible to know the neighbors of boundary_cells_part0 +neighbors_boundary_cells_part0=MEDCouplingUMesh.ExtractFromIndexedArrays(boundary_cells_part0,a,b)[0] +neighbors_boundary_cells_part0.sort() +neighbors_boundary_cells_part0=neighbors_boundary_cells_part0.buildUnique() +# +layer_of_part0=neighbors_boundary_cells_part0.buildSubstraction(p0) +# +whole_part_with_layer=DataArrayInt.Aggregate([p0,layer_of_part0]) +whole_part_with_layer.sort() +part0_with_layer=m[whole_part_with_layer] +part0_with_layer.setName("part0_with_layer") + +WriteMesh("part.med",part0_with_layer,False) + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +#([Mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([Mesh_2,Mesh_2_WL], status) = smesh.CreateMeshesFromMED(r'part.med') +#Mesh_2.TranslateObject( Mesh_2, [ 9, 0, 0 ], 0 ) +Mesh_2_WL.TranslateObject( Mesh_2_WL, [ 5, 0, 0 ], 0 ) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (mesh) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + +import libSALOME_Swig +gui = libSALOME_Swig.SALOMEGUI_Swig() +gui.AddIObject( salome.ObjectToID( Mesh_2.GetMesh() )) +gui.AddIObject( salome.ObjectToID( Mesh_2_WL.GetMesh() )) diff --git a/doc/user/images/pointe_fieldnodeint.png b/doc/user/images/pointe_fieldnodeint.png new file mode 100644 index 0000000000000000000000000000000000000000..9e0a4a8c2ccef66c3038b39027b39451bdc0253e GIT binary patch literal 14601 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 literal 0 HcmV?d00001 diff --git a/doc/user/images/pointe_fieldnodeint.py b/doc/user/images/pointe_fieldnodeint.py new file mode 100644 index 000000000..025deb3bc --- /dev/null +++ b/doc/user/images/pointe_fieldnodeint.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "ParaView_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003b5000000040000000100000001000000080000001800500061007200610056006900650077005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "ParaViS") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 1") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "ParaView_1") +# fill list ParaView_1 +ipar.append("ParaView_1", "ParaView scene:2 - viewer:1") +ipar.append("ParaView_1", "empty") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "ParaViS") + + +### +### PARAVIS component +### + +import pvsimple +pvsimple.ShowParaviewView() +#### import the simple module from the paraview +from pvsimple import * +#### disable automatic camera reset on 'Show' +pvsimple._DisableFirstRenderCameraReset() + +# create a new 'MED Reader' +medfile = os.path.join( os.getenv("MEDCOUPLING_ROOT_DIR"),"share","resources","med", "pointe.med") +pointemed = MEDReader(FileName=medfile) + +# Properties modified on pointemed +pointemed.AllArrays = ['TS0/maa1/ComSup0/fieldnodeint@@][@@P1'] + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') +# uncomment following to set a specific view size +# renderView1.ViewSize = [935, 561] + +# show data in view +pointemedDisplay = Show(pointemed, renderView1) + +# trace defaults for the display properties. +pointemedDisplay.Representation = 'Surface' + +# reset view to fit data +renderView1.ResetCamera() + +# update the view to ensure updated data information +renderView1.Update() + +# set scalar coloring +ColorBy(pointemedDisplay, ('POINTS', 'fieldnodeint', 'comp1')) + +# rescale color and/or opacity maps used to include current data range +pointemedDisplay.RescaleTransferFunctionToDataRange(True, False) + +# show color bar/color legend +pointemedDisplay.SetScalarBarVisibility(renderView1, True) + +# get color transfer function/color map for 'fieldnodeint' +fieldnodeintLUT = GetColorTransferFunction('fieldnodeint') + +#### saving camera placements for all active views + +# current camera placement for renderView1 +renderView1.CameraPosition = [9.22339478264647, 20.564112667735554, 4.873867168433736] +renderView1.CameraFocalPoint = [3.2873912814202906, 7.329436317878308, 3.34609088265869] +renderView1.CameraViewUp = [0.08023261286174106, -0.14974521444076697, 0.9854639001939477] +renderView1.CameraParallelScale = 3.774917217635375 + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/projection_P0P1_dual.png b/doc/user/images/projection_P0P1_dual.png new file mode 100644 index 0000000000000000000000000000000000000000..18396da044bf3425e731a454d241ffabe161dbe1 GIT binary patch literal 642 zcmeAS@N?(olHy`uVBq!ia0vp^Yk@e7g9%6)&1gIaq?n7HJVQ7*IBq}me*oli7I;J! z1C?8WFe9^)Tq^?uld7kSV@SoEw|Arc4jTx#J-pwcyXlnPC7TF`1(}bezuhQ4XS~Yk z`RT2lLPI;p_@O=6bU$RGga6EHLM*T{R=yG(Dk)2Ri0_H+W*6CGTfw+AU+j;OMs7 zn!zzH8c3A=wqkJfoDC!rt${@4ZA%8n&}tx&D-9%^cLNniM+1rC*FeSnPUni(Jv2=4 z{I~r_;dk+Uwok2g{Fgf(USxleZOZO1S$(JP)eAHw@$etr^YzD{|Mp%*8*Fz(NM0)` zm=oD!s{G{MlKZ+Z9#p<^6%i=7mc7*G^+1-VwuOeR>MM2}tHfA*|t;2k;1RR!Yt>%+>e#6IVg5ArWqSOTflPge*9s^D-%@Nd5YrFWK5I}1Vo$37#zKMcHg=?Ps14`OwF${em1_m z=dY7KOTw#*D(pPxBaCHATpE`9@!H#Yu(#RXD;MaO_sHcfzmWgc^jFE*SvPmoIcz@6 z=xMP)1Rft6t;~}O95iJrUjF)|jUhUrh1u(2gNjT57rV;Ch9C2 z?%E5=ry2XZ*W7!{HTi3t+%3C4epoDPeC2f8b%1x5!v4F!RK(!v>gTe~DWM4fQRw~t literal 0 HcmV?d00001 diff --git a/doc/user/images/projection_P0P1_dual.py b/doc/user/images/projection_P0P1_dual.py new file mode 100644 index 000000000..59500cc75 --- /dev/null +++ b/doc/user/images/projection_P0P1_dual.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000000000000080000001a00560054004b005600690065007700650072005f0030005f00300000000002") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:2 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +srcCoo=DataArrayDouble([(0,0),(1,0),(3,0),(0,1),(1,1),(3,1)]) +src=MEDCouplingUMesh("src",2) +src.setCoords(srcCoo) +src.allocateCells() +src.insertNextCell(NORM_QUAD4,[0,3,4,1]) +src.insertNextCell(NORM_QUAD4,[1,4,5,2]) + +trgCoo=DataArrayDouble([(0.5,0.5),(1.5,0.5),(1.5,1.5)]) +trg=MEDCouplingUMesh("trg",2) +trg.setCoords(trgCoo) +trg.allocateCells() +trg.insertNextCell(NORM_TRI3,[0,2,1]) + +m2 = MEDCoupling1SGTUMesh( trg ) +dual = m2.computeDualMesh() + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",src,True) +WriteMesh("mesh2.med",dual,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([mesh_2], status) = smesh.CreateMeshesFromMED(r'mesh2.med') + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (src) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (trg) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:1:0:0:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + diff --git a/doc/user/images/projection_P0P1_meshes.png b/doc/user/images/projection_P0P1_meshes.png new file mode 100644 index 0000000000000000000000000000000000000000..0701b62961d9286d48c8e04058dd1c80a71a8160 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^Yk@e7g9%6)&1gIaq?n7HJVQ7*IBq}me*oli7I;J! z1C?8WFe9^)Tq^?u;|ot0$B>FSZ|^z=wHOGvJ+z+|{$)~?M@&g%mZg(~$F9qN?^TIu z{@~zoZrheSdqs`@J>~@h4;xfuCbTk7D)w|{#8~C2j6=EiTSTA84fOv+skfXxZ9JV$$e_!0h0~Uy`Pyl`m`P}u*jwY zwd@PBW^gR8lx=w6;|U~EB!NWDOPPiTD~o`dH>(ygG;yaEGBjl`EnsLmz4ko=OZkVg{Y|GDc@=i6^MyuJFpk$lGYgow|- z796mfeW!`f!C=8vnT7-(Z=lf|t^rM*sQZY4r8)W_BgZjupeL4z+-BrR6TQL6p(b{f zk>i=zC7_u2c}5N!u4fN;nilMDTOX;yeuky4wUB}7dXfc0WBI-F${*uR4U0+-mWQbP(h7IK&uf zp}@(W0tww_t+)5 + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +srcCoo=DataArrayDouble([(0,0),(1,0),(3,0),(0,1),(1,1),(3,1)]) +src=MEDCouplingUMesh("src",2) +src.setCoords(srcCoo) +src.allocateCells() +src.insertNextCell(NORM_QUAD4,[0,3,4,1]) +src.insertNextCell(NORM_QUAD4,[1,4,5,2]) + +trgCoo=DataArrayDouble([(0.5,0.5),(1.5,0.5),(1.5,1.5)]) +trg=MEDCouplingUMesh("trg",2) +trg.setCoords(trgCoo) +trg.allocateCells() +trg.insertNextCell(NORM_TRI3,[0,2,1]) + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",src,True) +WriteMesh("mesh2.med",trg,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([mesh_2], status) = smesh.CreateMeshesFromMED(r'mesh2.med') + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (src) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (trg) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:1:0:0:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + diff --git a/doc/user/images/projection_P1P0_dual.png b/doc/user/images/projection_P1P0_dual.png new file mode 100644 index 0000000000000000000000000000000000000000..71fc2f93760f9ac52b67082e5cc7255928431abf GIT binary patch literal 890 zcmV-=1BLvFP)0pub$KtynW_TT^!!NG5(SU&^H;DCs- zBOo{+A}WQ_e|S#s00@XEy8|HjDX{|}sLJX92>zDR0T7(Z=Ku(v_0ReVD7K#@0D@sR|p3{Fx~nNfPkaYa-VDYQg|k^ZSQx#k=s+NgZnu)J|5qn>U!k@P-f}X z@KvurutGqJ>jCFBa(A&ata*Ikbq)87;5t1AY%>A^fmT}&fIucC2Rvf}0j4m0B;{ama6n*`$Z_J}Klb}W5b~qJ)0iF9gX`Ok+#skCKQ@G-YhZJ59@h5W zOu-sK`6Bw<=*8=uK?8$>ivitJu=~Gij{E(c#n>9A9JCDOih}wwa9;C!i>hJJLDwLj zQ_w;%|Jt96r=i=y*v20zNFq3VT9JF5Y7L?fq)>;0N&deS1Q1B<^o>0pZt3Nr)d9=7 zly3^e_I(HC^V`$*VgCgROTSrY-^ar8*ZeQVt~9hPmIl`!bevZ>C|Gwa77MhtK5FE01kT8ezjo%j>PDDDNn~dWF)qEl#TL*53 zB9!Ot#d@HWX9Q&E!1-Kw^S`lJ55)72fUF!WF&dUu*;1?rf~|spOdKpUotf6!OsoeY zt%ZQP?qgvr!?$9%+QwUyO%B$gjn3VoY`UKbg%8IEhzJhQ9vmPdI6!;<0T*n}<#Q*>R literal 0 HcmV?d00001 diff --git a/doc/user/images/projection_P1P0_dual.py b/doc/user/images/projection_P1P0_dual.py new file mode 100644 index 000000000..4d925b927 --- /dev/null +++ b/doc/user/images/projection_P1P0_dual.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000000000000080000001a00560054004b005600690065007700650072005f0030005f00300000000002") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:2 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +srcCoo=DataArrayDouble([(0,0),(1,0),(3,0),(0,1),(1,1),(3,1)]) +src=MEDCouplingUMesh("src",2) +src.setCoords(srcCoo) +src.allocateCells() +src.insertNextCell(NORM_QUAD4,[0,3,4,1]) +src.insertNextCell(NORM_QUAD4,[1,4,5,2]) +src.simplexize(0) + +m2 = MEDCoupling1SGTUMesh( src ) +dual = m2.computeDualMesh() + +trgCoo=DataArrayDouble([(0.5,0.5),(1.5,0.5),(1.5,1.5)]) +trg=MEDCouplingUMesh("trg",2) +trg.setCoords(trgCoo) +trg.allocateCells() +trg.insertNextCell(NORM_TRI3,[0,2,1]) + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",dual,True) +WriteMesh("mesh2.med",trg,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([mesh_2], status) = smesh.CreateMeshesFromMED(r'mesh2.med') + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (src) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (trg) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:1:0:0:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + diff --git a/doc/user/images/projection_bnd_box.png b/doc/user/images/projection_bnd_box.png new file mode 100644 index 0000000000000000000000000000000000000000..61220ab0f652582298516cafb8a8cd63b4033a46 GIT binary patch literal 1988 zcmV;#2RrzQP)z0ssI2{uuyb00003b3#c}2nYz< z;ZNWI000SaNLh0L01Y|-01Y|;10o)U000MPNklr67QHO64qY?g zu`Kh$QS=pwAQaHGb$X3vGYyKM&=G(Fx;C9+&g!ri#v*iWmN+@9z+M<#(Y2A*o;dT0 zy)drOwE-B->|ie(5?$+uoJnIZ> z8ORw7VhlV+*AB4Lgd6cLiO{v57|jrzi@h*iODT~vpo-PKaO|#;GhmLnd*OIpbA94$ zd-;Lj`LNJ)`9pgZzA#;LJ(_*z?CsC)FHtvmuzM5fJ>I((HD}-6{v_%KY2~ZfW7k~o zG*f2Io=`VvXvt_e&Qe3mUOm(;5ja@Tdlk!ejhr?5 zdS%8pEHi8sOLfiliL)PX(HNJrS8Pr()09=L&^1Q038))}n!Ab(ca5CQN8QlZqE&3H zYp!>i$!yM^aA5(BRu3gMy0-c#47KdUStBkipopcRWNFueh#yV#uKgvnLBqH87( zL@$1F_Jq3Ok?mDHt812K)b3PwniZ&9WIC&OaMx@{y^-6|>=JbgMQ|05>6+ky$QL(f zPq=LAoAN5|+BM|^afzJm>}K*L1er6#|_&YscnPm%CM5+cg(aKf-8MkGcu* zyNV0D=J!A(a@G-bv&{7>{*=)*cQfiEcA5imVZjd9tN7J%*IY-P(QFhqk7kTXN5+c@EKcGvIyYjdCHobeSnab_5G z>m}HUvrLQb=P@XPw;Q9G5-u!MV>COp9sV$Fo6sTq_b-3ZA0d3!yniI>c8;7qImnca z`%2b&n$Ai#x9Rr&QSgO`-~?<=cd^qfr#G)HIdPUBK?>Lhvm2vXj)P3ebWP>N8Dn5i z0qaK2is*K2JGyS59|gw1EMG^-bKuBX9o?=SIqcml{U|U7rsQsX#1X7Vux=AU{qd;>uoqHCps=B$GKF|gN#h472Q9J-c6 zey3^2SL~jCz*fFJu>Hb9$VFkA%lj1d!f4jt*O7d>?@&=wI=?-TC&+{mx@+WYhTm_g zHYNGLzhVreZjMFl8aZ2_p>8><$G~knJ{1F5QM$&7GZO~aEfXR0h!T?z}e6s83cC!J$qrEL7k2_8d8r5`A9lZ`)EzB?%;g%_f|B z<8HcUF|UpCa<}`UpKJEQttPzd?ek?b|FLHbT#c?Z==2~W_QHMGc~5WtS7!_ygRYfZ z_guA6*M&V5&`#ZQ3_2TF`pWLmwLF5)RSP`^YSk?hmqfDBwNo)3dF%G=fssFt6?-pC z*Y?E7SslH-FrUXd=W#Dg*B+3w-fZoKU2aY%6WI%g@0#F=GneM=g{j*#>-NG?yT)jy ztXBl7n-#ssz+hb?XYr6Nw~oKFF}g<10Cgp+*l*W3aR#WXUB&LY#%KnpYhJ}(x<<|b zb^TVca@W{t0_w)BV!^I4ngQwtuVS69kuyNutW|8jYvc@2H+>bG>>4M|0Ch`Ov8Apt zngQx;tYQOQvvD8*)HAk<7j=!DCZNvnDxTXlV^IfCOkovI>6*fU0B}ZX6_4zi)PVr7 zLvt1P?wa8(H-IeqtGH9wG@}mSo1<0S)-^{50tm|EDlYGu{)`Gl=Y16)ckOmd+xGqc z>@n&(QPI5KApBxmN)HAGcC29h)L=o)Z^kg55#`Y!+gozXP_-q1Aw-q1Aw-uw@A W${%c*9Vf*A0000muIuf|NPAK>0Zc?L0|6pg3RB7?uCpLbjyy< zqI)3&1Z}zFv*`Xv*Fn!O^@cKV_dN#P(fV3QbZmr;?mY)R>=D^D z+3q)A&|%O_@(A*~Up}(yCullGvWj8WwE3Xv7;{JGOv6EQL`IUmYxaU>l98N`!A#I} zjHDn2?V#xxbH(ROy`VWFBaz#+=0P*bNGin8Drh=JQZt6iLDMmkCNb0rnvOBo@Onu) zXfE}TXzZF$&`dHC)fmcxreh>FVz?BvjhhZDES)n?25sr4Lz&54%M04%O@|KKG3*9y z`=+BQCo#MUnxh30S24T_Iz6Gq#uL+_!^tGC>>fF6JTVw0!pRuw<_igkt$t(7P&Q$pYc)HbT$BEmZGhKV{h@JlooOaNA$4T!&=SzRm z`)?ZL>!>qK#|c57Y_YKZZfjUd0%1+_SMk&@QpfPs_V33EH2jX6E@Nf_5gx82lw&~lNnddVI+61;)3PJ1JtC@K| ziJ+CS&9Vqu(?QM5^LYfVhMH?2XdRq1Dj{eE$2Bw0R}pk;Y;#ov-Bec1%yR*PZij7d zfS?=6t(kc)L(na-&CL*Wbth_Oo{JH5U2Jn>1YOa&nwe(_1YHX?t03qqIB94hXnCh= zW}f8`v@o_=7ePz9Qgit{^RAmS1TBVbwt%2zT&$VXvowMhz&6`K(50@|%sf{>&_&p0 zYY6(fqMDiKItcnAYPN}>ui&I%7D1m@S~K%p6G5NDHXBFKCkWKcJXc20x!7hGHbL`~ zF0aVc%skh}LLXzB9UNtey32HG$ns!PvX#JYMf5L2!V~k;X z>+g@x`+I=1*50TEt@})>>ErFO$M;|V_<)PJ$*cPL@tzb?U-3x?e53W zBIvrqEOJCHSAOkS(*5=qNA13P&=qU0aYQcE;M#Hf1z#RHM&0|mL074{&{t}9dZ{Oi9~8-#X8X;z zNG#}cHTQ9;C(iq|V?9S5Co(~wsJY8aJ#idGCfOY)0zqfhJi?`(xRD3@%@O%fY0w8X zb3_&~&S0OP<;c-|P>HESY?}r{25IcbNVygcvls|NROkvo;xYCb|#z z3wO1nPR{GSx8*tLO!@zR_xP>IyeDeArnk11z*S%XjHCd{oco6cThbExUL1=yX*aIh@$8eRDx%)b($)9U_q00000NkvXXu0mjf0PH*h literal 0 HcmV?d00001 diff --git a/doc/user/images/projection_setMaxDistance3DSurfIntersect.py b/doc/user/images/projection_setMaxDistance3DSurfIntersect.py new file mode 100644 index 000000000..8667a125a --- /dev/null +++ b/doc/user/images/projection_setMaxDistance3DSurfIntersect.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import sys +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "OCCViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "000000010000000000000002010000000100000426000000040000000100000000000000080000001a004f00430043005600690065007700650072005f0030005f00300000000002") +ipar.setProperty("AP_ACTIVE_MODULE", "Geometry") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "OCCViewer_1") +# fill list OCCViewer_1 +ipar.append("OCCViewer_1", "OCC scene:1 - viewer:1") +ipar.append("OCCViewer_1", "0|-1|scale=3.038454936077e+2*projX=3.770939318974e-1*projY=-9.130971176097e-1*projZ=1.550929409712e-1*twist=1.217715934833e-2*atX=1.974005557226e-1*atY=3.431618372916e-1*atZ=1.477143755166e-1*eyeX=2.351099494743e-1*eyeY=2.518521241700e-1*eyeZ=1.632236698449e-1*scaleX=1.000000000000e+0*scaleY=1.000000000000e+0*scaleZ=1.000000000000e+0*isVisible=0*size=1.10*gtIsVisible=0*gtDrawNameX=1*gtDrawNameY=1*gtDrawNameZ=1*gtNameX=X*gtNameY=Z*gtNameZ=Z*gtNameColorRX=255*gtNameColorGX=0*gtNameColorBX=0*gtNameColorRY=0*gtNameColorGY=255*gtNameColorBY=0*gtNameColorRZ=0*gtNameColorGZ=0*gtNameColorBZ=255*gtDrawValuesX=1*gtDrawValuesY=1*gtDrawValuesZ=1*gtNbValuesX=3*gtNbValuesY=3*gtNbValuesZ=3*gtOffsetX=2*gtOffsetY=2*gtOffsetZ=2*gtColorRX=255*gtColorGX=0*gtColorBX=0*gtColorRY=0*gtColorGY=255*gtColorBY=0*gtColorRZ=0*gtColorGZ=0*gtColorBZ=255*gtDrawTickmarksX=1*gtDrawTickmarksY=1*gtDrawTickmarksZ=1*gtTickmarkLengthX=5*gtTickmarkLengthY=5*gtTickmarkLengthZ=5*lightSource=lightType~1;lightX~0;lightY~0;lightZ~-1;lightColorR~1;lightColorG~1;lightColorB~1;lightHeadlight~1;*background=bt$1;fn$;tm$0;ts$false;c1$#ffffff;c2$#698fff;gt$1;gr$") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Geometry") + +### +### GEOM component +### + +import GEOM +from salome.geom import geomBuilder +import math +import SALOMEDS + + +geompy = geomBuilder.New(theStudy) + +O = geompy.MakeVertex(0, 0, 0) +OX = geompy.MakeVectorDXDYDZ(1, 0, 0) +OY = geompy.MakeVectorDXDYDZ(0, 1, 0) +OZ = geompy.MakeVectorDXDYDZ(0, 0, 1) +sk = geompy.Sketcher2D() +sk.addPoint(0.000000, 0.000000) +sk.addSegmentAbsolute(1.000000, 0.000000) +sk.addSegmentAbsolute(0.000000, 1.000000) +sk.close() +geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0) +Sketch_1 = sk.wire(geomObj_1) +Triangle_src = geompy.MakeFaceWires([Sketch_1], 1) + +Triangle_tgt = geompy.MakeRotation( Triangle_src, OY, -math.pi/4. ) +geompy.TranslateDXDYDZ(Triangle_tgt, 0, 0, 0.01) + +Bnd_box = geompy.MakeBoundingBox(Triangle_tgt) +geompy.Scale( Bnd_box, geompy.MakeCDG( Bnd_box ), 1.1 ) + +Bnd_box.SetColor(SALOMEDS.Color(1,0,0)) +Triangle_src.SetColor(SALOMEDS.Color(0,0.333333,1)) +Triangle_tgt.SetColor(SALOMEDS.Color(0,1,0.498039)) + +geompy.addToStudy( Triangle_src, 'Triangle_src' ) +geompy.addToStudy( Triangle_tgt, 'Triangle_tgt' ) +geompy.addToStudy( Bnd_box, 'Bnd_box' ) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "GEOM", 1)) + +#Set up entries: +# set up entry GEOM_6 (Triangle_src) parameters +objId = geompy.getObjectID(Triangle_src) +ipar.setParameter(objId, "OCCViewer_0_Visibility", "On") +ipar.setParameter(objId, "OCCViewer_0_DisplayMode", "2") +ipar.setParameter(objId, "OCCViewer_0_Color", "0:0.333333:1") +ipar.setParameter(objId, "OCCViewer_0_Transparency", "0") +ipar.setParameter(objId, "OCCViewer_0_TopLevelFlag", "false") +ipar.setParameter(objId, "OCCViewer_0_Isos", "0:0") +ipar.setParameter(objId, "OCCViewer_0_VectorMode", "false") +ipar.setParameter(objId, "OCCViewer_0_VerticesMode", "false") +ipar.setParameter(objId, "OCCViewer_0_NameMode", "false") +ipar.setParameter(objId, "OCCViewer_0_DeflectionCoeff", "0.001") +ipar.setParameter(objId, "OCCViewer_0_MarkerType", "7:3") +ipar.setParameter(objId, "OCCViewer_0_Material", "Physical=0:FrontShininess=0.13:BackShininess=0.13:Transparency=0:Ambient=1:AmbientColor=#333333:FrontAmbientCoefficient=0.3:BackAmbientCoefficient=0.25:Diffuse=1:DiffuseColor=#000000:FrontDiffuseCoefficient=0.5:BackDiffuseCoefficient=0.4:Specular=1:SpecularColor=#ffffff:FrontSpecularCoefficient=0.3:BackSpecularCoefficient=0.3:Emissive=0:EmissiveColor=#000000:FrontEmissiveCoefficient=0:BackEmissiveCoefficient=0") +ipar.setParameter(objId, "OCCViewer_0_EdgeWidth", "1") +ipar.setParameter(objId, "OCCViewer_0_IsosWidth", "1") +# set up entry GEOM_7 (Triangle_tgt) parameters +objId = geompy.getObjectID(Triangle_tgt) +ipar.setParameter(objId, "OCCViewer_0_Visibility", "On") +ipar.setParameter(objId, "OCCViewer_0_DisplayMode", "2") +ipar.setParameter(objId, "OCCViewer_0_Color", "0:1:0.498039") +ipar.setParameter(objId, "OCCViewer_0_Transparency", "0") +ipar.setParameter(objId, "OCCViewer_0_TopLevelFlag", "false") +ipar.setParameter(objId, "OCCViewer_0_Isos", "0:0") +ipar.setParameter(objId, "OCCViewer_0_VectorMode", "false") +ipar.setParameter(objId, "OCCViewer_0_VerticesMode", "false") +ipar.setParameter(objId, "OCCViewer_0_NameMode", "false") +ipar.setParameter(objId, "OCCViewer_0_DeflectionCoeff", "0.001") +ipar.setParameter(objId, "OCCViewer_0_MarkerType", "7:3") +ipar.setParameter(objId, "OCCViewer_0_Material", "Physical=0:FrontShininess=0.13:BackShininess=0.13:Transparency=0:Ambient=1:AmbientColor=#333333:FrontAmbientCoefficient=0.3:BackAmbientCoefficient=0.25:Diffuse=1:DiffuseColor=#000000:FrontDiffuseCoefficient=0.5:BackDiffuseCoefficient=0.4:Specular=1:SpecularColor=#ffffff:FrontSpecularCoefficient=0.3:BackSpecularCoefficient=0.3:Emissive=0:EmissiveColor=#000000:FrontEmissiveCoefficient=0:BackEmissiveCoefficient=0") +ipar.setParameter(objId, "OCCViewer_0_EdgeWidth", "1") +ipar.setParameter(objId, "OCCViewer_0_IsosWidth", "1") +# set up entry GEOM_9 (Bnd_box) parameters +objId = geompy.getObjectID(Bnd_box) +ipar.setParameter(objId, "OCCViewer_0_Visibility", "On") +ipar.setParameter(objId, "OCCViewer_0_DisplayMode", "0") +ipar.setParameter(objId, "OCCViewer_0_Color", "1:0:0") +ipar.setParameter(objId, "OCCViewer_0_Transparency", "0") +ipar.setParameter(objId, "OCCViewer_0_TopLevelFlag", "false") +ipar.setParameter(objId, "OCCViewer_0_Isos", "0:0") +ipar.setParameter(objId, "OCCViewer_0_VectorMode", "false") +ipar.setParameter(objId, "OCCViewer_0_VerticesMode", "false") +ipar.setParameter(objId, "OCCViewer_0_NameMode", "false") +ipar.setParameter(objId, "OCCViewer_0_DeflectionCoeff", "0.001") +ipar.setParameter(objId, "OCCViewer_0_MarkerType", "7:3") +ipar.setParameter(objId, "OCCViewer_0_Material", "Physical=0:FrontShininess=0.13:BackShininess=0.13:Transparency=0:Ambient=1:AmbientColor=#333333:FrontAmbientCoefficient=0.3:BackAmbientCoefficient=0.25:Diffuse=1:DiffuseColor=#000000:FrontDiffuseCoefficient=0.5:BackDiffuseCoefficient=0.4:Specular=1:SpecularColor=#ffffff:FrontSpecularCoefficient=0.3:BackSpecularCoefficient=0.3:Emissive=0:EmissiveColor=#000000:FrontEmissiveCoefficient=0:BackEmissiveCoefficient=0") +ipar.setParameter(objId, "OCCViewer_0_EdgeWidth", "1") +ipar.setParameter(objId, "OCCViewer_0_IsosWidth", "1") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/renumber_nodes.png b/doc/user/images/renumber_nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..c05b88b3650f256450f93f59aee59c818f26313d GIT binary patch literal 1265 zcmeAS@N?(olHy`uVBq!ia0vp^jX-S6!2~2(PtD~7Qq09po*^6@9Je3(KLBz$3p^r= zfy%8wn2}jYu9bm-Ws0YZV@SoEx3hgciXtVB|KIMWtnq@|C@MpMHCLr3+w_u}%r6zA zGdj1nd3M~{QlJ>PyNQFRxk*8Du|SjE4DqHg$3Q{BwMvT?dG~FTJe*f*`~HyHGu_w6 zc%IL*KJ)XTlj|S*^FQwvukY%2;9zXmlw8C8pnzRUVQ=%=wQG0n+VuzolBS&%CXjY%8zevr5pC{wLKdC&v=gC z^WUqwy1F!u?iJ!;W9;eey~r1&a@J13b>sg1|9}0m`nqAy9+?K6(^L4E_TR7nD_&e& zyfVG7zhCoc<^+@LPv*{*-G4tmGV*2FZhwD&b2Bp?vF@Wu3qu?o9S^?#yJ(RTLu+fR zs;cUgM{$a`eolP$_u7Qio3Fpl@>#YD1ho2(3-`KRy*V{IJDb62p}<>(-FNehW->_h zx-Gx#Y5lI4<!QzeEsjAoxOeh#;yD^Hy8vIR&+57GTpj$E9j!As3?Qd zM2@AU6IE7j-dvoQr}x!BTl;i^LBJ^?S3_lG=Z&Vi779N^H%91)#zsZ0y8Ke8lVxdX zrR%h(D_5?ZGiQ#2f`k6kH*b74n&w(;*gK`Lpnze)=FOAuEm|^T{`~8&zuvrgQ(0O0 zW5t{@nV(xsc`YkyYSye=si~{GckkY%yX9IuCY2NyCvU&a7!n?CZ)+Ra`+JY+T8oOh zx_2*L7|ir}{``5!^vAqgmcQjt>{^@o__w2w-}2Az-sP2-Z(p+}r?AjahA+4)sPfjk zhYuY$Zax2;pJVB%I<>aiH_zYl^YG~C>oZ40L=;%aOgVIA&Ng6D($&>nq@lHCT3Pu4 zwgY@K7#Q3Rcz%xA@@e0%&Q4CRbT-rFZ^Od&UAeVeQh;IQ$Jy^+ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + + +from MEDCoupling import * +from MEDLoader import WriteMesh + +coordsArr=DataArrayDouble(range(2)) +m=MEDCouplingCMesh("m1") +m.setCoords(coordsArr,coordsArr ) +m=m.buildUnstructured() +WriteMesh("mesh1.med",m,True) + +m.setName( "m2" ) +m.renumberNodes([ 2,1,0,-1 ], 3) +WriteMesh("mesh1.med",m,False) + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(theStudy) +([Mesh_1, Mesh_2], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +Mesh_2.TranslateObject( Mesh_2, [ 2, 0, 0 ], 0 ) + + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (m1) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (m2) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:0:f:0:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) diff --git a/doc/user/images/simplexize.png b/doc/user/images/simplexize.png new file mode 100644 index 0000000000000000000000000000000000000000..53f88b69939a2021b8d7da3786733a1549aae525 GIT binary patch literal 7000 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 p1l@Mk26P5fN + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(3)) +mesh1=MEDCouplingCMesh("mesh") +mesh1.setCoords(coordsArr,coordsArr,coordsArr) + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",mesh1,True) + +mesh2 = mesh1.buildUnstructured() +mesh2.simplexize(PLANAR_FACE_5) +WriteMesh("part.med",mesh2,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([mesh_2], status) = smesh.CreateMeshesFromMED(r'part.med') + +mesh_2.TranslateObject( mesh_2, [3,0,0], False ) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (mesh) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:1:f:1:v:1:0d:1:b:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + +import libSALOME_Swig +gui = libSALOME_Swig.SALOMEGUI_Swig() +gui.AddIObject( salome.ObjectToID( mesh_1.GetMesh() )) +gui.AddIObject( salome.ObjectToID( mesh_2.GetMesh() )) diff --git a/doc/user/images/skin.png b/doc/user/images/skin.png new file mode 100644 index 0000000000000000000000000000000000000000..2bb8070f1fb46a7e86a38ea5f02318558c4f83de GIT binary patch literal 460 zcmeAS@N?(olHy`uVBq!ia0vp^mw-5yg9%8+%dVFIQq09po*^6@9Je3(KLBz$3p^r= zfy%8wn2}jYu9bm-G2he0F{EP7+glei4;zR$1g=imme%AmlXKG3E387|IjgwOTFy6f zVvAQc$UkFg9`Sm09fRG(HykJW8lXf>*}LA?5#MCi{*3q~o_QzyUD&Mc*ROxybbDKF zwOp0_{l^au8E2o@iFtST_YeQFeR}OWj5h@*$Pz&`-e1A52hHux8q%Oax)@tj2nx^}6{+W!CcU=?nQK qzfavg_1W96U-!Ow(2vcr2l!8?TMDPPygUSq4+c+HKbLh*2~7Z!I + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * + +coordsArr=DataArrayDouble(range(5)) +mesh1=MEDCouplingCMesh("mesh") +mesh1.setCoords(coordsArr,coordsArr) +mesh1 = mesh1.buildUnstructured() + +from MEDLoader import WriteMesh +WriteMesh("mesh1.med",mesh1,True) + +m2=mesh1.computeSkin() +WriteMesh("mesh2.med",m2,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') +([mesh_2], status) = smesh.CreateMeshesFromMED(r'mesh2.med') + +mesh_2.TranslateObject( mesh_2, [6,0,0], False ) + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") +# set up entry SMESH_4 (mesh) parameters +ipar.setParameter("SMESH_4", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_4", "VTKViewer_0_Representation", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Entities", "e:1:f:0:v:0:0d:0:b:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_4", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_4", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_4", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_4", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + diff --git a/doc/user/images/zones.png b/doc/user/images/zones.png new file mode 100644 index 0000000000000000000000000000000000000000..d68867fa8df6aeb62b5da717bcce76f1009efc7a GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^`9Lhs!2~4JT3NmUDdu7)&kzm{j@u9Y9{{2-%*d=H*9sJ@_H=O!$!L6g%aH4^fdGT!=^y{&_lf8+YaV&jFjJFNz0Y;&wKFm< z=j!!8Xk|^iqO&qGX!DY^m%r?yvY#)SdG=s++3mx(|HWOs4VCdcJ871xsW(C?l7Q}h fVW)d(Z~;42AwJ7JT_0Wmox$Mg>gTe~DWM4fa-2^^ literal 0 HcmV?d00001 diff --git a/doc/user/images/zones.py b/doc/user/images/zones.py new file mode 100644 index 000000000..73afd5a17 --- /dev/null +++ b/doc/user/images/zones.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- + +### +### This script is intended to be launched in a new SALOME study +### + +import os +import salome + +salome.salome_init() +theStudy = salome.myStudy + +import iparameters +ipar = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1), True) + +#Set up visual properties: +ipar.setProperty("AP_ACTIVE_VIEW", "VTKViewer_0_0") +ipar.setProperty("AP_WORKSTACK_INFO", "0000000100000000000000020100000001000003a0000000040000000100000001000000080000001a00560054004b005600690065007700650072005f0030005f00300000000102") +ipar.setProperty("AP_ACTIVE_MODULE", "Mesh") +ipar.setProperty("AP_SAVEPOINT_NAME", "GUI state: 2") +#Set up lists: +# fill list AP_VIEWERS_LIST +ipar.append("AP_VIEWERS_LIST", "VTKViewer_1") +# fill list VTKViewer_1 +ipar.append("VTKViewer_1", "VTK scene:2 - viewer:1") +ipar.append("VTKViewer_1", """ + + + + + + + + + <Color R="1" G="0" B="0"/> + + + + + + + + + <Color R="0" G="1" B="0"/> + + + + + + + + + <Color R="0" G="0" B="1"/> + + + + + + + + + +""") +# fill list AP_MODULES_LIST +ipar.append("AP_MODULES_LIST", "Mesh") + + +from MEDCoupling import * +from MEDLoader import WriteMesh + +coords=DataArrayDouble(range(6)) +cmesh=MEDCouplingCMesh("cmesh") +cmesh.setCoords(coords,coords[:2]) +# make a mesh with two zones +zmesh=cmesh.buildUnstructured()[0,1,3,4] +WriteMesh("mesh1.med",zmesh,True) + +### +### SMESH component +### + +import SMESH, SALOMEDS +from salome.smesh import smeshBuilder + +smesh = smeshBuilder.New(salome.myStudy) +([mesh_1], status) = smesh.CreateMeshesFromMED(r'mesh1.med') + +### Store presentation parameters of displayed objects +import iparameters +ipar = iparameters.IParameters(theStudy.GetModuleParameters("Interface Applicative", "SMESH", 1)) + +#Set up entries: +# set up entry SMESH_3 (mesh) parameters +ipar.setParameter("SMESH_3", "VTKViewer_0_Visibility", "On") +ipar.setParameter("SMESH_3", "VTKViewer_0_Representation", "2") +ipar.setParameter("SMESH_3", "VTKViewer_0_IsShrunk", "0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Entities", "e:0:f:1:v:0:0d:0:b:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_Colors", "surface:0:0.666667:1:backsurface:100:volume:1:0:0.666667:-100:edge:0:0.666667:1:node:1:0:0:outline:0:0.27451:0:elem0d:0:1:0:ball:0:0.333333:1:orientation:1:1:1") +ipar.setParameter("SMESH_3", "VTKViewer_0_Sizes", "line:1:outline:1:elem0d:5:ball:10:1:shrink:0.75:orientation:0.1:0") +ipar.setParameter("SMESH_3", "VTKViewer_0_PointMarker", "std:1:9") +ipar.setParameter("SMESH_3", "VTKViewer_0_Opacity", "1") +ipar.setParameter("SMESH_3", "VTKViewer_0_ClippingPlane", "Off") + +if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(True) + iparameters.getSession().restoreVisualState(1) + diff --git a/doc/user/input/basic_concepts.rst b/doc/user/input/basic_concepts.rst new file mode 100644 index 000000000..e55f53f03 --- /dev/null +++ b/doc/user/input/basic_concepts.rst @@ -0,0 +1,89 @@ +Basic concepts +============== + +Your're invited to start here. + +This section explains in a concise way fundamental concepts +(incarnated by classes) for a better understanding of examples in FAQ_. + +.. _FAQ: ../../developer/faq.html + +The objects presented in this section are objects dedicated to data manipulation. + +Later in advanced section, other objects will be presented to more complex data, as composite of objects presented here. + +medcoupling Fields +------------------ +The most fundamental object is field. Fields are incarnated by MEDCouplingFieldDouble_. + +.. _MEDCouplingFieldDouble: ../../developer/classMEDCoupling_1_1MEDCouplingFieldDouble.html + +A field is an object able to give a value on every points geometrically covered by its support. The field support is a :ref:`mesh `. + +Depending on the physics relative to the field, medcoupling fields proposes different spatial discretizations : cells, nodes, Gauss points. + +The spatial discretization defines an algorithm giving the value of field on point given the position of a point inside the domain covered by the :ref:`mesh ` and an :ref:`array ` of float, integers located on specific location of mesh. + +.. A tiny image of field + +.. image:: ../images/pointe_fieldnodeint.png + + +.. _medcoupling_Meshes: + +medcoupling Meshes +------------------ + +Meshes are incarnated by MEDCouplingMesh_ (and their subclasses). +A mesh contains cells and nodes (indifferently called points). A +cell has a geometric type (TRI3, QUAD4, TETRA4). + +.. _MEDCouplingMesh: ../../developer/classMEDCoupling_1_1MEDCouplingUMesh.html + +All cells contained in a medcoupling mesh must have the same +dimension. This dimension is called meshdimension. + +The set of points of a medcoupling mesh are stored into coordinates +:ref:`array `. The number of components of coordinates of coordinates +array is called the space dimension. + +The space dimension is always greater or equal to mesh dimension. + +.. _medcoupling_Arrays: + +medcoupling Arrays +------------------ + +One of the challenges faced by medcoupling is the reduction of memory +footprints. In medcoupling, memory expensive attributes are arrays +or composite of arrays. + +To do so, medcoupling arrays represent contiguous arrays in the most +compact way to guaranty at most locality. + +The type of elements contained in arrays is fix. Today int32, +float32 and float64 arrays are available. Elements in arrays are +grouped into fixed size packets called tuple. + +This size of every tuple is called number of components. + +Consequently number of elements in an array is equal to number of +tuples times number of components. + +A typical usage of medcoupling array is for coordinates of points +storage. Number of components will be equal to space dimension and +number of tuples will be equal to number of points. + +A medcoupling array has a name. And each component of array has also +a name. The component name use the following convention to put an +optional unity ("X cote [mm]"). + +If you are already a fan of `numpy `_ (you're right +it's an amazing/wonderful standard package), medcoupling arrays +behaves just like numpy arrays and anyway there are zero copy +gateways between medcoupling arrays and numpy. + +medcoupling arrays implement different algorithms like reordering, +cloud comparisons, arithmetic, geometry helpers in addition to algorithms +proposed by numpy. + diff --git a/doc/user/input/data_analysis.rst b/doc/user/input/data_analysis.rst new file mode 100644 index 000000000..ed6753fae --- /dev/null +++ b/doc/user/input/data_analysis.rst @@ -0,0 +1,561 @@ +Data analysis +============= + +Object size in memory +--------------------- + +medcoupling provides information on memory occupied by every object: mesh, field, array etc.: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_4 + :end-before: UG_MEDCouplingFieldDouble_4 + +Extract data +------------ + +.. _extract_for_meshes: + +Extract for meshes +~~~~~~~~~~~~~~~~~~ + +If *m* is a mesh (MEDCouplingUMesh) and *Ids* a list of cell ids, you can extract the mesh ids by simply doing : + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_0 + :end-before: UG_ExtractForMeshes_0 + +.. figure:: ../images/extract_mesh_ids.png + :align: center + + *m* (to the left) and *part* extracted by calling m[1,2,4,5,7,8] (to the right) + +.. note:: in medcoupling ids count from zero unlike SMESH where they count from one. + +*part* is also a MEDCouplingUMesh with same coordinates than *m*. Reason is that medcoupling tries to reduce memory effort. + +But it's highly likely that some nodes in part will be not fetched by part. + +It can be interesting to locate the fetched nodes. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_1 + :end-before: UG_ExtractForMeshes_1 + +.. figure:: ../images/extract_mesh_fetched_nodes.png + :align: center + + part.computeFetchedNodeIds() returns [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]. Ids 0 and 17 are not fetched + +To extract coordinates, simply invoke + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_2 + :end-before: UG_ExtractForMeshes_2 + +It can be interesting to reduce set of points *part* is lying on. Simply by doing. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_3 + :end-before: UG_ExtractForMeshes_3 + +Or it can be interesting for further data handling to have both reduction and array. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_4 + :end-before: UG_ExtractForMeshes_4 + +To have more information about *o2n* read renumbering_ section. + +.. _renumbering: ../../developer/numbering.html + +Extraction in meshes often leads to locate cells/nodes regarding their neighborhood. + +Let's consider *m2* 3D mesh. To locate nodes on boundaries simply invoke : + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_5 + :end-before: UG_ExtractForMeshes_5 + +And now to extract cells lying on boundary nodes simply call : + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_6 + :end-before: UG_ExtractForMeshes_6 + +False means if a cell has at least one node in *bn*, take it. True means if all nodes of cell are in *bn*, take it. + +If a mesh consists of several contiguous zones of cells, it is possible to retrieve cell ids of each zone: + +.. figure:: ../images/zones.png + :align: center + + A mesh with two zones + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_20 + :end-before: UG_ExtractForMeshes_20 + +Zones returned by partitionBySpreadZone are:: + + [[0, 1], [2, 3]] + +Extract for arrays +~~~~~~~~~~~~~~~~~~ + +Arrays are the common entry point to selection. If *arr* is a 2 component DataArrayDouble you can locate tuple ids by finding those whose first component is in [a,b): + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForArrays_0 + :end-before: UG_ExtractForArrays_0 + +Or you can find tuples whose magnitude is in [c,d): + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForArrays_1 + :end-before: UG_ExtractForArrays_1 + +To find which of *tupleIds* are missing from *tupleIds1*, call + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForArrays_2 + :end-before: UG_ExtractForArrays_2 + + +Extract for fields +~~~~~~~~~~~~~~~~~~ + +If *field4* is a MEDCouplingFieldDouble, you can extract a sub-part of *field4* on a specified cell ids *ids4* by doing + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForFields_0 + :end-before: UG_ExtractForFields_0 + +.. note:: It works whatever the spatial discretization of *field4* + +.. figure:: ../images/extract_fields.png + :align: center + + A field on nodes (to the left) and its sub-field on a half of nodes (to the right) + +You can extract a field on plane by cutting *field5* like this: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForFields_1 + :end-before: UG_ExtractForFields_1 + +The plane is defined by its *origin* and its normal vector *normvec*. The last argument is a half-thickness of the plane. + +.. note:: It works for fields on cells only + +.. figure:: ../images/extractSlice3D.png + :align: center + + A field on cells (to the left) and a sub-field on a plane (to the right) + + + + +Geometric handling of unstructured meshes +----------------------------------------- + +Consider *m2* as a 3D MEDCouplingUMesh instance. You can translate it by simply + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_7 + :end-before: UG_ExtractForMeshes_7 + +Which is equivalent to + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_8 + :end-before: UG_ExtractForMeshes_8 + +Samely you can simply rotate it around the point [1,2,1] along Y axis with an angle of pi/3 by doing + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_9 + :end-before: UG_ExtractForMeshes_9 + +Which is equivalent to + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_10 + :end-before: UG_ExtractForMeshes_10 + +To scale *m2* relative to point [1,2,4] by a factor of 6, call + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_17 + :end-before: UG_ExtractForMeshes_17 + +It can also interesting to retrieve volume of cells in m2 (resp area, length in 2D, 1D): + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_11 + :end-before: UG_ExtractForMeshes_11 + +*volPerCell* is a field on cell (MEDCouplingFieldDouble). *True* means I don't care of cell orientation. *False* tells I care of cell orientation using signed values. + +.. figure:: ../images/measure_field.png + :align: center + + Area field of a cartesian mesh + +You can compute total volume covered by mesh by doing + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_12 + :end-before: UG_ExtractForMeshes_12 + +You also can locate cells (using *cellIds*) having volume greater than a threshold *t1*: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_13 + :end-before: UG_ExtractForMeshes_13 + +In this case it is easy to :ref:`build a sub-mesh` containing cells having a volume higher than *t1*: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_14 + :end-before: UG_ExtractForMeshes_14 + +There are other common geometric methods on meshes: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_15 + :end-before: UG_ExtractForMeshes_15 + +*centers* will be a DataArrayDouble giving for each cell of *m2* its center of mass. + +It's possible to compute a DataArrayDouble giving the center of mass of *m2* simply by doing + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_16 + :end-before: UG_ExtractForMeshes_16 + +Iso barycenter of nodes constituting each cell can be computed by calling + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_19 + :end-before: UG_ExtractForMeshes_19 + +*ibc* will be a DataArrayDouble. + +You can retrieve a field (MEDCouplingFieldDouble) of unitary vectors normal to cells: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_18 + :end-before: UG_ExtractForMeshes_18 + +.. figure:: ../images/ortho_field.png + :align: center + + A skin mesh with a normal field on it computed by buildOrthogonalField method + +You also have a set of methods to caracterize mesh quality: getEdgeRatioField, getAspectRatioField, getWarpField, getSkewField, computeDiameterField. + + +medcoupling provides methods to intersect 2D meshes in 2D space. MEDCouplingUMesh.Intersect2DMeshWith1DLine partitions a 2D and a 1D mesh: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_21 + :end-before: UG_ExtractForMeshes_21 + +The last argument is a precision used to perform intersections and localization operations. + +.. figure:: ../images/intersect_2d1d.png + :align: center + + 2D and 1D meshes before and after intersection + +Intersect2DMeshWith1DLine returns new 2D and 1D meshes and two arrays. *a2d* gives for each cell in *m2d* the id in *mesh2d* it comes from. *a1d* is an array of pair that gives for each cell id i in *m1d* the cell in *md2* on the left for the 1st component and the cell in *m2d* on the right for the 2nd component. -1 means no cell. + +For the example in the picture above *a2d* is:: + + [0, 4, 1, 1, 2, 2, 3, 3] + +and *a1d* is:: + + [-1, -1, -1, -1, 2, 3, 4, 5, 4, 5, 6, 7, 6, 7, -1, -1, -1, -1] + +There also a method to partition a 2D mesh by another 2D mesh: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_22 + :end-before: UG_ExtractForMeshes_22 + +.. figure:: ../images/intersect_2d2d.png + :align: center + + Two 2D meshes before partitioning (to the left) and a result mesh after partitioning (to the right) + +Intersect2DMeshes returns a new 2D mesh and two arrays. *a1* gives for each result cell an id of the cell of *mesh1* it comes from. *a2* for each result cell gives an id of the cell of *mesh2* it comes from. + +You can compute distance from a set of points to cells of a mesh by calling + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_ExtractForMeshes_23 + :end-before: UG_ExtractForMeshes_23 + +This method returns distance and a closest cell id for each of given *points*. *points* is a DataArrayDouble with 3 components. Returned *dist* is a DataArrayDouble and *cells* is a DataArrayInt. + +Mesh comparison +--------------- + +It is a common question. You have two meshes *m1* and *m2* coming from 2 different sources (2 files) and expected to be more or less equivalent. + +medcoupling proposes some methods to help to caracterize equivalence of these 2 meshes. + +The first, the strongest, is informatical equality: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MeshComparison_0 + :end-before: UG_MeshComparison_0 + +*eps* is the tolerance in coordinates. + +If true is returned, you are lucky. + +Sometimes only names (and or component names or units) are not the same: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MeshComparison_1 + :end-before: UG_MeshComparison_1 + +But sometime the last call also returns False. It may mean that there is a permutation of nodes and or cells. + +If you know by construction that *m1* and *m2* share the same coords object: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MeshComparison_2 + :end-before: UG_MeshComparison_2 + +checkGeoEquivalWith returns 2 elements. The first one is relative to cells and the second one is relative to nodes. + +If the mapping between *m1* and *m2* is impossible regarding the specified code an exception is thrown. +Code meaning: + + - 20=2*10+0. 2 tells I know that coords are the same. 0 tells two cells are equal if and only if their connectivity is exactly the same. + - 21=2*10+1. 2 tells I know that coords are the same. 1 tells two cells are equal if and only if their connectivity is equal within a circular permutation. + - 22=2*10+2 . 2 tells I know that coords are the same. 2 tells two cells are equal if and only if nodes set is the same independently from :ref:`order `. + +If you expect that two meshes are geometrically the same without knowing if there is any cell/node permutation use code 12: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MeshComparison_3 + :end-before: UG_MeshComparison_3 + +Code meaning: 12=1*10+2. 1 tells coords can be different. 2 tells two cells are equal if and only if nodes set is the same independently from order. + +.. admonition:: Remark + + *a* and/or *b* may be *None*. It's not a bug it only means that renumbering is equal to identity, meaning that no associated permutation is needed. + +Common handling mesh +-------------------- + +*field1* is a node field containing non simplex cells. simplexize on field1.getMesh() can help to +overpass this limitation. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_0 + :end-before: UG_CommonHandlingMesh_0 + +.. figure:: ../images/simplexize.png + :align: center + + Initial mesh (to the left) and its simplexization (to the right) + +.. admonition:: Remark + + The mesh has been modified by simplexize. This method of simplexization is fast but leads to non conform mesh that can be a problem in some context + +tetrahedrize method is dedicated to simplexization of 3D meshes only. It can create a conform mesh. Unlike simplexize method, tetrahedrize method can add new points to the result mesh. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_15 + :end-before: UG_CommonHandlingMesh_15 + +The argument specifies how to split hexahedral cells. it must be in (PLANAR_FACE_5, PLANAR_FACE_6, GENERAL_24, GENERAL_48). +*n2ocells* is a DataArrayInt holding, for each new cell, an id of old cell producing it. +*np* is a number of new points. + +Using medcoupling you can create a 3D extruded mesh. To do that you need a 2D mesh and a 1D mesh, which defines the vector of extrusion and the number of steps. The both meshes must be in 3D space. To extrude a 2D mesh *m2* along a 1D mesh *m1*, call + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_1 + :end-before: UG_CommonHandlingMesh_1 + +The last argument is a policy defining the type of extrusion: + +* 0 means "translation only": the cells of the 1D mesh represent the vectors along which the 2D mesh will be repeated to build each level. +* 1 means "translation and rotation": the translation is done as above. For each level, an arc of circle is fitted on the 3 preceding points of the 1D mesh. The center of the arc is the center of rotation for each level, the rotation is done along an axis normal to the plane containing the arc, and finally the angle of rotation is defined by the first two points on the arc. + + +.. figure:: ../images/extrusion.png + :align: center + + A 2D mesh and an 1D mesh (to the left), an extrusion mesh built with policy=0 (in the middle) and with policy=1 (to the right) + + +In order to aggregate several meshes of the same dimension into one mesh, call + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_2 + :end-before: UG_CommonHandlingMesh_2 + +To transform a linear mesh into a quadratic one, call + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_3 + :end-before: UG_CommonHandlingMesh_3 + +A parameter of convertLinearCellsToQuadratic provides type of conversion: + +* 0 creates cells of simple quadratic types, e.g. NORM_TRI6 and NORM_QUAD8 +* 1 creates cells of complex quadratic types, e.g. NORM_TRI7 and NORM_QUAD9 + +.. figure:: ../images/convert2quadratic.png + :align: center + + Result quadratic 2D meshes converted with typeOfConversion=0 (to the left) and typeOfConversion=1 (to the right) + +It's common to deduce skin of a mesh *m1*: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_4 + :end-before: UG_CommonHandlingMesh_4 + +*skin* and *m1* share the same coordinate array. + +.. figure:: ../images/skin.png + :align: center + + A 2D mesh (to the left) and its skin (to the right) + +.. _explodeIntoEdges: + +In order to get a 1D mesh from a given 2D or 3D mesh, call + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_6 + :end-before: UG_CommonHandlingMesh_6 + +In addition to *mesh1d*, explodeIntoEdges method returns four arrays describing descending connectivity and reverse descending connectivity in indirect-indexing_ format. *d* and *di* describe the descending connectivity, i.e. enumerate cells of *mesh1d* bounding each cell of *mesh3d*. *r* and *ri* describe the reverse descending connectivity, i.e. enumerate cells of *mesh3d* bounded by each cell of *mesh1d*. + +.. _indirect-indexing: ../../developer/numbering.html#numbering-indirect + +.. figure:: ../images/explodeIntoEdges.png + :align: center + + A 2D mesh (to the left) and a 1D mesh returned by explodeIntoEdges (to the right) + +There is also a method similar to explodeIntoEdges_ which returns a mesh of one less dimensions than a given mesh, i.e. 3D->2D or 2D->1D: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_7 + :end-before: UG_CommonHandlingMesh_7 + +If a mesh is non-conformal, medcoupling can make it conformal. conformize2D method is to conformize a 2D mesh in 2D space, conformize3D is to conformize a 3D mesh in 3D space: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_8 + :end-before: UG_CommonHandlingMesh_8 + +*changedCells* is an array of ids of changed cells. The changed cells become polygons in 2D and polyhedrons in 3D. *eps* is the relative error to detect merged edges. + +You can duplicate some nodes in a mesh by calling + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_9 + :end-before: UG_CommonHandlingMesh_9 + +This will create new nodes at locations of nodes #3 and #4, the new nodes will replace nodes #3 and #4 within cells so that the nodes #3 and #4 will become orphan. + +Inversly it is possible to merges nodes equal within a given precision: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_16 + :end-before: UG_CommonHandlingMesh_16 + +If your 2D mesh in 3D space includes incorrectly oriented cells, you can fix their orientation by calling: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_11 + :end-before: UG_CommonHandlingMesh_11 + +The last argument if True, only polygons are checked, else, all cells are checked. + +.. figure:: ../images/orient_2d.png + :align: center + + A mesh before applying orientCorrectly2DCells (to the left) and after (to the right) + +If your mesh includes incorrectly oriented polyhedra, the following method can help to fix your mesh: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_12 + :end-before: UG_CommonHandlingMesh_12 + +If *m1d* is a 1D line mesh, you can ensure consecutive order of its segments by calling + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_10 + :end-before: UG_CommonHandlingMesh_10 + +.. figure:: ../images/orderConsecutiveCells1D.png + :align: center + + 1D mesh before and after renumbering + +orderConsecutiveCells1D method returns a permutation map in new-to-old_ mode but renumberCells method requires the map in old-to-new_ mode, hence we use invertArrayN2O2O2N method to fit to that requirement. + +.. _new-to-old: ../../developer/numbering.html#MEDCouplingArrayRenumberingN2O + +.. _old-to-new: ../../developer/numbering.html#MEDCouplingArrayRenumberingO2N + +.. _renumber_for_MED: + +To arrange cells to comply with MED format requirement you can call either of the following methods: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_13 + :end-before: UG_CommonHandlingMesh_13 + + +It is also possible to rearrange, and even remove, nodes by calling renumberNodes: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_CommonHandlingMesh_14 + :end-before: UG_CommonHandlingMesh_14 + +The code above rearranges a mesh with 4 nodes so that old node #0 becomes #2, old node #1 remains #1, old node #2 becomes #0, old node #3 is removed. The last argument 3 means that number of nodes becomes 3. + +.. figure:: ../images/renumber_nodes.png + :align: center + + The mesh before renumberNodes (to the left) and after (to the right). Shown Ids are a unit more than Ids in medcoupling + +Operations on fields +-------------------- + +Integral of a *field* can be computed by calling + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_9 + :end-before: UG_MEDCouplingFieldDouble_9 + +The first call returns a list of integrals of all components. The second, returns integral of 0-th component. True means that abs is applied to support size used for computing the integral. + +deviator method returns the stress deviator tensor field of a stress tensor *field* (with 6 components): + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_10 + :end-before: UG_MEDCouplingFieldDouble_10 + +To get value of a *field* at certain *points* call + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_8 + :end-before: UG_MEDCouplingFieldDouble_8 + diff --git a/doc/user/input/data_conversion.rst b/doc/user/input/data_conversion.rst new file mode 100644 index 000000000..d3c49c6a5 --- /dev/null +++ b/doc/user/input/data_conversion.rst @@ -0,0 +1,246 @@ +Data conversion +=============== + +medcoupling includes MEDCouplingRemapper object that allows given a +source field and a target mesh to produce a field lying on target +mesh. + +MEDCouplingRemapper goal is to compute a projection by minimizing +diffusive effects and conserve at most the magnitude of key +variables. + +The MEDCouplingRemapper object computes a remap function that allows +to transform source field into target field. + +The function is represented using sparse matrix given: + + - a source mesh + - a target mesh + - a source spatial discretization ("P0" means ON_CELLS and "P1" means ON_NODES) + - a target spatial discretization + +Apply a projection is then equivalent to apply matrix vector +multiply. + +As projection requires mathematically to compute for every cell in +target mesh, the contribution relative to each of cell in source +mesh. So projection is computation-intensive task. + +To optimize time spent by MEDCouplingRemapper, it implements a fast +algorithm that select coarsely the pairs of cells that have a chance +to be in interaction each other. +It allows to drop from O(n^2) to O(n) the complexity of algorithm. +The algorithm is based on rectilinear bounding boxes of cells along +axis. 2 cells in interaction have their respective bounding boxes in +interaction. + +Unfortunately it works well mathematically but in the real life +projections especially when spacedim and meshdim are not the same it +can be harder to set. + +.. _projection_P0P0: + +Projection cells/cells with meshes having same mesh dimension/space dimension +----------------------------------------------------------------------------- + +Let us create meshes for sample projection: a source mesh consisting of two quadrangles and a target mesh consisting of a triangle: + +.. figure:: ../images/projection_P0P1_meshes.png + :align: center + + Two source quadrangles in blue and a target triangle in red + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_0 + :end-before: UG_Projection_0 + +Now perform projection: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_1 + :end-before: UG_Projection_1 + +Here "P0P0" specifies spatial discretization of both source and target field. "P0" is for cell discretization (ON_CELLS). "P1" is for node discretization (ON_NODES). For example, "P0P1" means from a source cell field (lying on a source mesh) to a target node field (lying on a target mesh). + +Remapper *rem* has just performed intersection of *src* and *tgt* meshes. Result of intersection is stored in a matrix which is returned by getCrudeMatrix method. Each element of the matrix is size of intersection of two cells i and j of the source and target meshes correspondingly. + +Generally the matrix is sparse. To reduce memory usage, the space matrix is represented by an array whose i-th element is a map storing indices and intersection sizes of source cells intersecting i-th target cell. + +Here is a sample sparse matrix: + +.. math:: + + \begin{bmatrix} + 11 & 0 & 0 & 0 \\ + 0 & 0 & 32 & 0 \\ + 0 & 0 & 33 & 43 \\ + 14 & 24 & 0 & 0 \\ + 0 & 25 & 0 & 45 + \end{bmatrix} + +and a corresponding array, which stores only non-zero matrix elements: + +:: + + [{0: 11, 3: 14}, {3: 24, 4: 25}, {1: 32, 2: 33}, {2: 43, 4: 45}] + +Now we create a field on all cells of *src* mesh and call rem.transferField() to transfer the field to the cells of *tgt* mesh + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_2 + :end-before: UG_Projection_2 + +The last argument -1 is a default value that will be assigned in *trgF* to each entity of *tgt* mesh that is not intercepted by any entity of *src* mesh. + +It is crucial to setNature() of the field by which an adequate interpolation formula is chosen. The field nature is expressed by one of the following values: ExtensiveMaximum, IntensiveMaximum, ExtensiveConservation, IntensiveConservation. + +The field is represented by a vector with a discrete value on each cell. This value can represent either + +* an average value of the field in the cell (average density, velocity or temperature in the cell) in which case the representation is said to be **intensive**, +* an integrated value over the cell (total mass, power of the cell) in which case the representation is said to be **extensive**. + +In the case where the source and target meshes are not fully overlapping, it is important to make a correct choice between Maximum and Conservation. + +* **Conservation** means that the interpolation algorithm preserves the integral of the field over a domain. +* **Maximum** means that the field values resulting from the interpolation remain between the upper and lower bounds of the original field. + +Projection cells/nodes nodes/cells nodes/nodes with meshes having same mesh dimension/space dimension +----------------------------------------------------------------------------------------------------- + +Suppose we have the same source and target meshes as in the :ref:`previous chapter `. I.e. the source mesh consists of two quadrangles and the target mesh consists of a triangle. + +.. figure:: ../images/projection_P0P1_meshes.png + :align: center + + Two source quadrangles in blue and a target triangle in red + +The source field is also on cells but the target field is on **nodes** of target mesh. In such a case we do the following: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_3 + :end-before: UG_Projection_3 + +Here "P0P1" specifies support of the source (P0=ON_CELLS) and the target (P1=ON_NODES) fields. The computed martix is:: + + [{0: 0.125, 1: 0.04166666666666663}, {1:0.16666666666666669}, {1: 0.041666666666666685}] + +The result matrix contains values for each of the three nodes of the target mesh. In order to be able to compute these values by means of intersection of cells, an algorithm constructs an auxiliary target mesh. This auxiliary mesh is a dual mesh of the actual target mesh, hence it includes cells corresponding to each actual target node. + +.. figure:: ../images/projection_P0P1_dual.png + :align: center + + The target mesh used for projection is a dual one of the actual target mesh + +If the case is reverse, i.e. the source field is on nodes and the target one should be on cells, we change "P0P1" to "P1P0": + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_4 + :end-before: UG_Projection_4 + +The computed martix is:: + + [{1: 0.07291666666666663, 4: 0.375}] + +In the same way as in "P0P1" case, an auxiliary dual mesh is internally constructed for a mesh supporting a field on nodes (the source field in our case). But since the source cells are not simplexes, simplexization of quadrangles is perfrormed on the fly to be able to construct the dual mesh. Cell #0 (0,3,4,1) is split into (0,3,4) and (0,4,1) + +.. figure:: ../images/projection_P1P0_dual.png + :align: center + + The source mesh used for projection is a dual one of simplexized actual source mesh + +.. |br| raw:: html + +
+ +.. note:: in present implementation of Remapper, the projection of fields on nodes lying on quadratic meshes is not available. If you are in this case you have 2 choices :|br| + 1) you accept to lose precision by converting your mesh (MEDCouplingUMesh.convertLinearCellsToQuadratic) |br| + 2) you subdivide your mesh. + +Projection cell/cell when meshdim != spacedim +--------------------------------------------- + +When meshdim is not equal to spacedim some additional important parameters should be considered. + +Consider a simple case with spacedim=3 and meshdim=2 where : + + - source mesh contains one triangle cell [0.,0.,0.], [1,0,0], [0,1,0] + - target mesh also contains one triange cell [0.,0.,0.], [1,0,0], [0,1,0], which coincides with the source triangle. + +Only "P0P0" projection (ON_CELLS->ON_CELLS) will be considered here but all elements presented here are applicable for other spatial discretizations projections. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_5 + :end-before: UG_Projection_5 + +A remapper returns the following correct matrix:: + + [{0: 0.5}] + +where 0.5 is equal to area of the source (or target) triangle. + +Let us see what the remapper will return if the meshes are not overlapping. To this end we translate the source mesh along its normal by a small distance (1e-3): + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_6 + :end-before: UG_Projection_6 + +The remapper returns the following matrix, which means that it have not found any intersection of the meshes:: + + [{}] + +This happens because bounding boxes of cells used to detect possibly intersecting cells do not intersect. In order to get a correct result of intersection we can increase those bounding boxes. The remapper provides two ways to do that: + +- rem.setBoundingBoxAdjustmentAbs( *thickness* ) expands a bounding box by *thickness*. +- rem.setBoundingBoxAdjustment( *factor* ) expands a bounding box by thickness computed by multiplying a maximal bounding box size by *factor*. + +.. figure:: ../images/projection_bnd_box.png + :align: center + + If source and target meshes do not overlap we can increase their bounding boxes to help remapper to detect intersecting cells + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_7 + :end-before: UG_Projection_7 + +With bounding box tuning we obtain the correct result matrix:: + + [{0: 0.5}] + +The bounding box tuning has a disadvantage in the case where a cell has large angle with either of planes OXY, OYZ or OXZ. In such a case cells that are rather far one from another can be detected as possibly intersecting since their bounding boxes are too large. setMaxDistance3DSurfIntersect method helps avoiding excess intersections. If a distance between fast barycenter of target cell and medium source plane is more than the value specified via setMaxDistance3DSurfIntersect then cell intersection is not performed. + +.. figure:: ../images/projection_setMaxDistance3DSurfIntersect.png + :align: center + + If the tuned bounding box is too large we can use setMaxDistance3DSurfIntersect to exclude unnecessary intersections + +Let us rotate the source mesh by pi/4 angle around Y axis. The result matrix is + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_8 + :end-before: UG_Projection_8 + +:: + + [{0: 0.46155716207961217}] + +If we use setMaxDistance3DSurfIntersect, the result matrix shows that no intersection found: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_9 + :end-before: UG_Projection_9 + +:: + + [{}] + +Another function useful to avoid unnecessary intersection is setMinDotBtwPlane3DSurfIntersect. It tells the remapper not to intersect cells whose normals are too much different. setMinDotBtwPlane3DSurfIntersect specifies minimal dot product of unitary normal vectors of a source and target cells. + +Let us switch off setMaxDistance3DSurfIntersect by passing a negative value. And use setMinDotBtwPlane3DSurfIntersect to avoid intersecting cells that has 45 degrees angle between their normals in our case. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Projection_10 + :end-before: UG_Projection_10 + +Result matrix is:: + + [{}] diff --git a/doc/user/input/data_movement.rst b/doc/user/input/data_movement.rst new file mode 100644 index 000000000..a168d47a9 --- /dev/null +++ b/doc/user/input/data_movement.rst @@ -0,0 +1,502 @@ +Data movement (mesh/field construction) +======================================= + +Read Mesh from file +------------------- + +To read a mesh from a MED file simply invoke + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_1 + :end-before: UG_ReadMeshFromFile_1 + +If the file contains more than one mesh, the previous call will +return the first one. + +You can access to a precise mesh by doing + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_2 + :end-before: UG_ReadMeshFromFile_2 + +Read field from file +-------------------- + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadField_1 + :end-before: UG_ReadField_1 + +This command will succeed if there is exactly one field in +"file.med" and only one time step attached to it. + +If there are more than one field in "file.med" you are expected to +specify the field name. + +To know all fields in "file.med" either you read exception thrown or you can invoke + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadField_2 + :end-before: UG_ReadField_2 + +When you have the fieldName you can safely invoke. + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadField_3 + :end-before: UG_ReadField_3 + +This command will succeed if there are exactly one time step +attached on it. If no you are expected to specify the time step +attached on it. + +A time step is identified by two piece of information : + +- pair of integers specifying without ambiguity a key for access +- floating point (physical time step) + +To retrieve list of time step of a field invoke + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadField_4 + :end-before: UG_ReadField_4 + +This method returns a list of triplet. The first 2 elements of +triplets is pair of integers of time step and the last element in +the triplet is the physical time step. + +To read a field "Field1" at time step defined by pair "(ts0,ts1)" +you can invoke + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadField_5 + :end-before: UG_ReadField_5 + +If you do not succeed reading field in "file.med" using this method +it means that your MED file is complex and requires more information +to be extracted. :ref:`Go to advanced reading`. + +.. admonition:: Remark + + the method is concise but by calling this method several + times it leads to a several mesh loads. + + +.. _medcoupling_Write_mesh: + +Write mesh into file +-------------------- + +MED file format expects a mesh sorted by geometric type. You are +responsible to reorder, if needed, cells to match MED file format +requirements. + +This responsability is let to the end user to avoid misrenumbering effect. + +You can check this by invoking: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_3 + :end-before: UG_ReadMeshFromFile_3 + +To reorder cells you are encouraged to read :ref:`this `. + +If *m* is well numbered, you can dump it into a file by doing : + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_0 + :end-before: UG_ReadMeshFromFile_0 + +The last element specifies the behavior in case if "file2.med" would +already exist. True means, scratch it and write it from scratch. +False means do not scratch try to append it. + + +Write field into file +--------------------- + +You are expected to have a field *f* with a mesh :ref:`correctly numbered.` + +If *f* is a valid MEDCouplingFieldDouble you can dump it into a MED file by simply : + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadField_0 + :end-before: UG_ReadField_0 + +The last element specifies the behavior in case if "file.med" would +already exist. The same meaning than for :ref:`writing mesh.` + +The typical usecase is to store a multi time step field. + +To do that, let's consider that *fs* store a list of +MEDCouplingFieldDouble with at least one element in it. + +.. WARNING:: All meshes of elements in *fs* are expected to be the same + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadField_6 + :end-before: UG_ReadField_6 + +.. admonition:: Remark + + f.getTime()[1:3] returns the pair of integer that specifies the time step. + +f.getTime()[1:3] should be different each other. If two +elements in *fs* have the same pair of integer time step key, the +second one will take the place of the first ! + +Create an array from scratch +---------------------------- + +There are several simple ways to create a medcoupling array from a Python list. + +The following call creates an array of double values consisting of 3 tuples with 2 components: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_DataArrayDouble_0 + :end-before: UG_DataArrayDouble_0 + +The next call creates an array equivalent to one create above: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_DataArrayDouble_1 + :end-before: UG_DataArrayDouble_1 + +The call below creates an array holding the same but differently arranged values: 2 tuples with 3 components: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_DataArrayDouble_2 + :end-before: UG_DataArrayDouble_2 + +You can change number of components in *d* so that it holds 3 tuples with 2 components again: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_DataArrayDouble_3 + :end-before: UG_DataArrayDouble_3 + +Arrays of different types (DataArrayInt, DataArrayFloat) can be created in the same way as DataArrayDouble: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_DataArrayDouble_4 + :end-before: UG_DataArrayDouble_4 + +A medcoupling array can be created from a numpy array and can be transformed to a numpy array: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest_numpy.py + :start-after: UG_DataArrayNumpy_0 + :end-before: UG_DataArrayNumpy_0 + + + +Create an unstructured mesh from scratch +---------------------------------------- + +MEDCouplingUMesh +^^^^^^^^^^^^^^^^ + +MEDCouplingUMesh class represents a general case unstructured mesh. Data of MEDCouplingUMesh is defined in several steps. + +Firstly define basic mesh data in full interlace mode for coordinates and nodal connectivity cell per cell. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: PySnippetUMeshStdBuild1_1 + :end-before: PySnippetUMeshStdBuild1_1 + +Then create MEDCouplingUMesh instance giving its mesh dimension (2 here) and a name. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: PySnippetUMeshStdBuild1_2 + :end-before: PySnippetUMeshStdBuild1_2 + +Then add cells to the mesh. This step includes + +- giving an upper bound of the number of cells to be inserted into the unstructured mesh. +- entering nodal connectivity of all cells, cell per cell using MEDCouplingUMesh.insertNextCell method. +- compacting connectivity arrays by calling MEDCouplingUMesh.finishInsertingCells method. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: PySnippetUMeshStdBuild1_3 + :end-before: PySnippetUMeshStdBuild1_3 + +As the connectivity of the mesh has been defined, let's set the coordinates using array *coords* defined above. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: PySnippetUMeshStdBuild1_4 + :end-before: PySnippetUMeshStdBuild1_4 + +Now the mesh is usable. To assure this, call + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: PySnippetUMeshStdBuild1_5 + :end-before: PySnippetUMeshStdBuild1_5 + +MEDCoupling1SGTUMesh +^^^^^^^^^^^^^^^^^^^^ + +MEDCoupling1SGTUMesh class represents an unstructured mesh composed of cells of same geometric type. It is more optimal due to this simplicity. + +Basically a MEDCoupling1SGTUMesh is defined in the same way as MEDCouplingUMesh. A difference is that the geometric type of cells is specified at construction, and not specified later e.g. in insertNextCell method: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: GU_MEDCoupling1SGTUMesh_0 + :end-before: GU_MEDCoupling1SGTUMesh_0 + +MEDCoupling1DGTUMesh +^^^^^^^^^^^^^^^^^^^^ + +MEDCoupling1DGTUMesh also represents an unstructured mesh composed of cells of same geometric type but it is specialized for cell of "dynamic" geometric type only: NORM_POLYHED and NORM_POLYG. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: GU_MEDCoupling1SGTUMesh_1 + :end-before: GU_MEDCoupling1SGTUMesh_1 + +When connectivity of a polyhedron is defined, facets are separated one from another by -1. + +Create a cartesian mesh from scratch +------------------------------------ + +We are going to build a 2D cartesian mesh, constituted from 9 nodes along X axis, and 7 nodes along Y axis. + +Firstly define for each direction the discretization and build a DataArrayDouble on the corresponding direction. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: PySnippetCMeshStdBuild1_1 + :end-before: PySnippetCMeshStdBuild1_1 + +Then create MEDCoupling.MEDCouplingCMesh instance giving the 2 instances of DataArrayDouble defined above. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: PySnippetCMeshStdBuild1_2 + :end-before: PySnippetCMeshStdBuild1_2 + +The mesh is now usable. + +.. figure:: ../images/cartesian.png + :align: center + + A cartesian mesh created by the code above + +Create a curvelinear mesh from scratch +-------------------------------------- + +First we create a curvelinear mesh and define its structure, for instance a 2-dimensional mesh with 2 nodes in one direction and 3 nodes in the other direction: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingCurveLinearMesh_0 + :end-before: UG_MEDCouplingCurveLinearMesh_0 + +Then define coordinates of 6 nodes in 2D space: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingCurveLinearMesh_1 + :end-before: UG_MEDCouplingCurveLinearMesh_1 + +The mesh is now usable. It's a good habit to assure this: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingCurveLinearMesh_2 + :end-before: UG_MEDCouplingCurveLinearMesh_2 + +.. figure:: ../images/curvelinear.png + :align: center + + A curvelinear mesh created by the code above + +.. _MEDCouplingFieldDoubleOnCells: + +Create a field on cell from scratch +----------------------------------- + +Assume we already have a mesh. We create a field on all cells of the mesh. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_0 + :end-before: UG_MEDCouplingFieldDouble_0 + +ONE_TIME indicates that the field data relates to a single time step. Now define this time moment. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_1 + :end-before: UG_MEDCouplingFieldDouble_1 + +Then define field values: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_2 + :end-before: UG_MEDCouplingFieldDouble_2 + + +Create a field on node from scratch +----------------------------------- + +Assume we already have a mesh. We create a field on all nodes of the mesh. The procedure is same as for a :ref:`field on cells ` except two points: + +- Spatial discretization in the field constructor is ON_NODES +- Number of tuples in an array of values is equal to mesh.getNumberOfNodes() + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_3 + :end-before: UG_MEDCouplingFieldDouble_3 + + +Create a field on Gauss points from scratch +------------------------------------------- + +Assume we already have a 2D mesh consisting of triangle and quadrangle cells. We create a field on Gauss points. First, a field is constructed with use of ON_GAUSS_PT and its basic attributes are set: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingGaussPointField_0 + :end-before: UG_MEDCouplingGaussPointField_0 + +Now define localization of Gauss points on cells. In this example, we define two Gauss points on triangle cells and four Gauss points on quadrangle cells. Localization of Gauss points is defined by three lists of float values: + +#. Coordinates of nodes of the reference cell. +#. Coordinates of Gauss points on the reference cell. +#. Weights of Gauss points. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingGaussPointField_1 + :end-before: UG_MEDCouplingGaussPointField_1 + +Finally set field values: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingGaussPointField_2 + :end-before: UG_MEDCouplingGaussPointField_2 + +Modify field values +------------------- + +applyFunc method modifies all tuples of a field at once. It changes both values and number of components, only number of tuples remains the same. + +To set value *val* to all tuples of the field *f* and to make it have *nbComp* components, call: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_5 + :end-before: UG_MEDCouplingFieldDouble_5 + +It is also possible to compute new values basing on current values. To do so you can specify a function by which a new value will be computed. For more info on supported expressions that can be used in the function, see `expressions supported`_. + +.. _`expressions supported`: ../../developer/arrays.html#MEDCouplingArrayApplyFuncExpr + +You can use some letters, for example "x", "y", "z" etc., to refer to current component values. For example, to transform a 3D vector field to its magnitude, call: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_6 + :end-before: UG_MEDCouplingFieldDouble_6 + +This way a value resulting from the function evaluation is assigned to all components. + +But you can have its own expression for each component within one function. For this purpose, there are predefined variable names (IVec, JVec, KVec, LVec etc) each dedicated to a certain component (IVec, to the component #0 etc). A factor of such a variable is added to the corresponding component only. + +Using this feature, you can set a magnitude of a 3D vector as the fourth component and swap X and Y components by calling: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_MEDCouplingFieldDouble_7 + :end-before: UG_MEDCouplingFieldDouble_7 + +Define groups and write mesh using advanced API +----------------------------------------------- + +To get access to full power of MED file, for example to define groups of cells, it is +necessary to use the advanced medcoupling API, namely class MEDFileUMesh_. + +.. _MEDFileUMesh: ../../developer/classMEDCoupling_1_1MEDFileUMesh.html + +First of all we populate a MEDFileUMesh with meshes (MEDCouplingUMesh) of different dimensions, if present: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_4 + :end-before: UG_ReadMeshFromFile_4 + +Level must be 0 for a mesh of highest dimension, -1 for a mesh of dimension a unit less than highest dimension etc. + +If cells are not yet sorted by geometric type, we can pass True as the third argument of setMeshAtLevel to make them sorted: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_9 + :end-before: UG_ReadMeshFromFile_9 + +.. WARNING:: meshes of different dimension must share the same point coordinate array and have the same name + +We can change point coordinates as soon as all meshes are added: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_5 + :end-before: UG_ReadMeshFromFile_5 + +To define groups we call, for example: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_6 + :end-before: UG_ReadMeshFromFile_6 + +The first argument of addGroup defines a type of group. 1 stands for nodes. 0,-1,-2 and -3 have the same meaning as the level in setMeshAtLevel method. Note that a name of DataArrayInt defines a group name. + +It is possible to change name of a group or a family by calling: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_7 + :end-before: UG_ReadMeshFromFile_7 + +Finally we write all data added to *mm* to a file: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_ReadMeshFromFile_8 + :end-before: UG_ReadMeshFromFile_8 + +The last argument defines behavior if a file exists. 2 means remove. 1 means append; if data with same ID present, an exception is thrown. 0 means overwrite data with same ID; that can lead to a file corruption. + +.. _medcoupling_AdvancedReading: + +Read/write fields using advanced API +------------------------------------ + +Having *field* on *mesh* we can write it using MEDFileField1TS_ class, which is a part of advanced medcoupling API, as following: + +.. _MEDFileField1TS: ../../developer/classMEDCoupling_1_1MEDFileField1TS.html + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_RWFieldAdv_0 + :end-before: UG_RWFieldAdv_0 + +The last argument of write method defines behavior if a file exists. 2 means remove. 1 means append; if data with same ID present, an exception is thrown. 0 means overwrite data with same ID; that can lead to a file corruption. + +If there is a need to write a field lying only on a part of a mesh, the following code gives an example of this: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_RWFieldAdv_1 + :end-before: UG_RWFieldAdv_1 + +*profile* defines entities on which *fieldPartial* lies. *level* defines entities the field lies on: 1 stands for nodes, 0 is for entities of dimension equal to the mesh dimension, -1 is for entities of dimension a unit less than the mesh dimension etc. + +MEDFileField1TS also can be used to read a field: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_RWFieldAdv_2 + :end-before: UG_RWFieldAdv_2 + +* field method can be used if field support is simple: one spatial discretization and one *level*. +* getFieldAtLevel method allows to choose spatial discretization and *level*. +* getFieldOnMeshAtLevel method allows to specify spatial discretization, *level* and mesh. + +*level* of a field, if unknown, can be defined by calling: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_RWFieldAdv_3 + :end-before: UG_RWFieldAdv_3 + +*maxDim* is the maximal absolute dimension of entities the field lies on. *maxRelDims* is a sequence returning the dimensions relative to the maximal absolute one. + +To read/write fields including several time steps medcoupling provides MEDFileFieldMultiTS_ class. To write all time steps it is necessary just to append them to MEDFileFieldMultiTS: + +.. _MEDFileFieldMultiTS: ../../developer/classMEDCoupling_1_1MEDFileFieldMultiTS.html + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_RWFieldAdv_4 + :end-before: UG_RWFieldAdv_4 + +To read a time step with a known *iteration* and *order* MEDFileField1TS can be used as shown above. To iterate through all time steps, use MEDFileFieldMultiTS as following: + +.. literalinclude:: ../../../src/MEDLoader/Swig/UsersGuideExamplesTest.py + :start-after: UG_RWFieldAdv_5 + :end-before: UG_RWFieldAdv_5 + diff --git a/doc/user/input/data_optimization.rst b/doc/user/input/data_optimization.rst new file mode 100644 index 000000000..2a570b332 --- /dev/null +++ b/doc/user/input/data_optimization.rst @@ -0,0 +1,49 @@ +Data optimization for numerical codes +===================================== + +.. _renumbering: + +Renumbering to improve locality +------------------------------- + +A mesher (like SMESH) often generates a scattered cell distribution in output unstructured mesh. +So a common task for simulation codes is the reordering for a better locality. + +medcoupling can do that simply by doing + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Optimization_0 + :end-before: UG_Optimization_0 + +.. figure:: ../images/medrenumber.png + :align: center + + Numbering by MEFISTO mesher (to the left) and the same mesh after renumbering (to the right) + +RenumberingFactory method creates a renumbering algorithm of a specified type: either "Boost" or "Metis". + +Partitionning for multi procs +----------------------------- + +For simulation codes following the SPMD paradigm, the partitionning is a key step. +medcoupling can perform this partition. Here is an example of partitioning mesh *m* into 4 parts and retrieving the first part: + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Optimization_1 + :end-before: UG_Optimization_1 + +.. figure:: ../images/partition.png + :align: center + + A whole mesh *m* (to the left) and one fourth of it *part0* (to the right) got using the above code + +It's then possible to add a layer or more of cells. + +.. literalinclude:: ../../../src/MEDCoupling_Swig/UsersGuideExamplesTest.py + :start-after: UG_Optimization_2 + :end-before: UG_Optimization_2 + +.. figure:: ../images/partition_with_layer.png + :align: center + + *part0* (to the left) and *part0_with_layer* (to the right) diff --git a/doc/user/input/index.rst b/doc/user/input/index.rst new file mode 100644 index 000000000..11ee3eb20 --- /dev/null +++ b/doc/user/input/index.rst @@ -0,0 +1,30 @@ +.. Code Integration and Code Coupling documentation master file, created by sphinx-quickstart on Tue Apr 28 14:31:38 2009. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +medcoupling user's manual +========================= + +medcoupling gathers several powerful functionalities around the input and output data of field-physics-oriented simulation codes. Data manipulated by medcoupling are objects relative to fields for simulation codes. + +medcoupling functionalities are accessible through python modules. + +medcoupling functionalities can be split into 4 categories: + #. :doc:`Data movement `: read/write from/to file, reduce, extract, duplicate, aggregate, compare, exchange data memory to memory across process (image of multifile to file) + #. :doc:`Data analysis `: extract/gather information in data to transform it in a condensate workable data (not necessarely field linked) for further use. + #. :doc:`Data conversion `: interpolate, project, repare, decimate, format convertion to make discuss simulation codes each other + #. :doc:`Data optimization ` for simulation code : renumbering, partition for multiprocessor codes + +First, this documentation introduces :doc:`fundamental concepts/objects ` of medcoupling for a better understanding of examples. + +.. toctree:: + :maxdepth: 2 + :numbered: + :hidden: + + basic_concepts + data_movement + data_analysis + data_conversion + data_optimization + diff --git a/doc/user/locale/fr/LC_MESSAGES/basic_concepts.po b/doc/user/locale/fr/LC_MESSAGES/basic_concepts.po new file mode 100644 index 000000000..1224d9f15 --- /dev/null +++ b/doc/user/locale/fr/LC_MESSAGES/basic_concepts.po @@ -0,0 +1,202 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2015-2017, Geay, Bruneton +# This file is distributed under the same license as the MEDCoupling User's +# Guide package. +# FIRST AUTHOR , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: MEDCoupling User's Guide 8.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-14 14:40+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.0\n" + +# cfbfaa23fcb74920ad39b2a002dabf91 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:2 +msgid "Basic concepts" +msgstr "" + +# 517aa380d10f4b3690dd3b749f16287c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:4 +msgid "Your're invited to start here." +msgstr "" + +# 251cf1ab37e046c3b8fa04be4295a22e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:6 +msgid "" +"This section explains in a concise way fundamental concepts (incarnated " +"by classes) for a better understanding of examples in FAQ_." +msgstr "" + +# df5965e7cb4147859327c5afcefd15c8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:11 +msgid "" +"The objects presented in this section are objects dedicated to data " +"manipulation." +msgstr "" + +# 9bf426c44d3b4d4c88a71ac13872b7ba +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:13 +msgid "" +"Later in advanced section, other objects will be presented to more " +"complex data, as composite of objects presented here." +msgstr "" + +# 23aae352230044ee94f7a9e43f3012fb +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:16 +msgid "medcoupling Fields" +msgstr "" + +# 18e55a020e54424dbbfc0c93f26ba867 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:17 +msgid "" +"The most fundamental object is field. Fields are incarnated by " +"MEDCouplingFieldDouble_." +msgstr "" + +# 5f9fd793f91d4f5e821603ef61f7977d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:21 +msgid "" +"A field is an object able to give a value on every points geometrically " +"covered by its support. The field support is a :ref:`mesh " +"`." +msgstr "" + +# 8c7b87a517864e20a52dbbaffad8172b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:23 +msgid "" +"Depending on the physics relative to the field, medcoupling fields " +"proposes different spatial discretizations : cells, nodes, Gauss points." +msgstr "" + +# 2482663f8b264b60b6d897f68d7599dd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:25 +msgid "" +"The spatial discretization defines an algorithm giving the value of field" +" on point given the position of a point inside the domain covered by the " +":ref:`mesh ` and an :ref:`array `" +" of float, integers located on specific location of mesh." +msgstr "" + +# e4f8d9093bad410082e7494d203348cb +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:35 +msgid "medcoupling Meshes" +msgstr "" + +# aa9618d4b3174993a3e1ab47e975a3ba +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:37 +msgid "" +"Meshes are incarnated by MEDCouplingMesh_ (and their subclasses). A mesh " +"contains cells and nodes (indifferently called points). A cell has a " +"geometric type (TRI3, QUAD4, TETRA4)." +msgstr "" + +# f5172584eb9543bd86b2323b70acb064 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:43 +msgid "" +"All cells contained in a medcoupling mesh must have the same dimension. " +"This dimension is called meshdimension." +msgstr "" + +# e95bedddd27a43edb5ae12d469a26270 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:46 +msgid "" +"The set of points of a medcoupling mesh are stored into coordinates " +":ref:`array `. The number of components of " +"coordinates of coordinates array is called the space dimension." +msgstr "" + +# cfcd9a42cb9944f0a0183f7ff5c682f9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:50 +msgid "The space dimension is always greater or equal to mesh dimension." +msgstr "" + +# abcf69c8e43b4bc6aee65dd6791ff004 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:55 +msgid "medcoupling Arrays" +msgstr "" + +# 56f65c32b87f40dc8189cbf6c0ba91aa +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:57 +msgid "" +"One of the challenges faced by medcoupling is the reduction of memory " +"footprints. In medcoupling, memory expensive attributes are arrays or " +"composite of arrays." +msgstr "" + +# 3cd78be9383d4e10924d580e1579673a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:61 +msgid "" +"To do so, medcoupling arrays represent contiguous arrays in the most " +"compact way to guaranty at most locality." +msgstr "" + +# f7f85726bd9a458a87919b26eff18d89 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:64 +msgid "" +"The type of elements contained in arrays is fix. Today int32, float32 and" +" float64 arrays are available. Elements in arrays are grouped into fixed " +"size packets called tuple." +msgstr "" + +# f5dc316a0137438f84241b77ef6ad4b4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:68 +msgid "This size of every tuple is called number of components." +msgstr "" + +# c88aefb15985489a9ea3324ec02d2340 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:70 +msgid "" +"Consequently number of elements in an array is equal to number of tuples " +"times number of components." +msgstr "" + +# 2305b7d811364b75a5df79724e19c34a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:73 +msgid "" +"A typical usage of medcoupling array is for coordinates of points " +"storage. Number of components will be equal to space dimension and number" +" of tuples will be equal to number of points." +msgstr "" + +# daa1bc42632a47d2a76e850b671ed8c6 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:77 +msgid "" +"A medcoupling array has a name. And each component of array has also a " +"name. The component name use the following convention to put an optional " +"unity (\"X cote [mm]\")." +msgstr "" + +# f87aeadedf314281a857c8ec7b0cc732 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:81 +msgid "" +"If you are already a fan of `numpy `_ (you're" +" right it's an amazing/wonderful standard package), medcoupling arrays " +"behaves just like numpy arrays and anyway there are zero copy gateways " +"between medcoupling arrays and numpy." +msgstr "" + +# 2e8e2c32c72543f69a342507118ced99 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/basic_concepts.rst:86 +msgid "" +"medcoupling arrays implement different algorithms like reordering, cloud " +"comparisons, arithmetic, geometry helpers in addition to algorithms " +"proposed by numpy." +msgstr "" + +# aa9618d4b3174993a3e1ab47e975a3ba +#~ msgid "" +#~ "Meshes are incarnated by MEDCouplingMesh " +#~ "(and their subclasses). A mesh contains" +#~ " cells and nodes (indifferently called " +#~ "points). A cell has a geometric " +#~ "type (TRI3, QUAD4, TETRA4)." +#~ msgstr "" + diff --git a/doc/user/locale/fr/LC_MESSAGES/data_analysis.po b/doc/user/locale/fr/LC_MESSAGES/data_analysis.po new file mode 100644 index 000000000..ff1429033 --- /dev/null +++ b/doc/user/locale/fr/LC_MESSAGES/data_analysis.po @@ -0,0 +1,842 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2015-2017, Geay, Bruneton +# This file is distributed under the same license as the MEDCoupling User's +# Guide package. +# FIRST AUTHOR , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: MEDCoupling User's Guide 8.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-14 14:14+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.0\n" + +# ccc0f4502971404bb98ef4ff2f7901f4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:2 +msgid "Data analysis" +msgstr "" + +# 48552fbfd5ea49b78aea30fa83d9a9f2 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:5 +msgid "Object size in memory" +msgstr "" + +# a47ff2b84ce24947b5f909bcb8d884a2 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:7 +msgid "" +"medcoupling provides information on memory occupied by every object: " +"mesh, field, array etc.:" +msgstr "" + +# 8824315c08944d6bb207964f13d518cd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:14 +msgid "Extract data" +msgstr "" + +# 358bb088780342e6a5d2542e6a5dffee +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:19 +msgid "Extract for meshes" +msgstr "" + +# aff67f901cae4028ad0c1859dfd1b334 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:21 +msgid "" +"If *m* is a mesh (MEDCouplingUMesh) and *Ids* a list of cell ids, you can" +" extract the mesh ids by simply doing :" +msgstr "" + +# cff3cbd7d4fc4abb9c7cc2724c87c290 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:30 +msgid "" +"*m* (to the left) and *part* extracted by calling m[1,2,4,5,7,8] (to the " +"right)" +msgstr "" + +# e0b1ec21292b43c0a8155200cae7bb00 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:32 +msgid "in medcoupling ids count from zero unlike SMESH where they count from one." +msgstr "" + +# 4ce9bac3df0c4908be951ec654317ffe +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:34 +msgid "" +"*part* is also a MEDCouplingUMesh with same coordinates than *m*. Reason " +"is that medcoupling tries to reduce memory effort." +msgstr "" + +# 819727e2481b4868981c0abc8c083284 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:36 +msgid "" +"But it's highly likely that some nodes in part will be not fetched by " +"part." +msgstr "" + +# 4eba3e39bfae4854b2ea36c8d3be6ad1 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:38 +msgid "It can be interesting to locate the fetched nodes." +msgstr "" + +# a058f4f2a5d1425b98ae4785cd743561 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:47 +msgid "" +"part.computeFetchedNodeIds() returns [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, " +"12, 13, 14, 15, 16]. Ids 0 and 17 are not fetched" +msgstr "" + +# cfa0842d7650425e989358c11032c5b8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:49 +msgid "To extract coordinates, simply invoke" +msgstr "" + +# df1b4205d6e14d39b8676331153baa1a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:55 +msgid "" +"It can be interesting to reduce set of points *part* is lying on. Simply " +"by doing." +msgstr "" + +# 2385a00c95e44f1d88b3aa7ae88e8373 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:61 +msgid "" +"Or it can be interesting for further data handling to have both reduction" +" and array." +msgstr "" + +# 8bf3c07be8ac48bbafb0ed4848fb647c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:67 +msgid "To have more information about *o2n* read renumbering_ section." +msgstr "" + +# 9184686efb5c4dcfa24ad90f20641649 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:71 +msgid "" +"Extraction in meshes often leads to locate cells/nodes regarding their " +"neighborhood." +msgstr "" + +# 92332ed062ac4fe8ba1be6ae5eb2e5de +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:73 +msgid "Let's consider *m2* 3D mesh. To locate nodes on boundaries simply invoke :" +msgstr "" + +# facd3e1c4cff4cc49b606ce00cc1029a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:79 +msgid "And now to extract cells lying on boundary nodes simply call :" +msgstr "" + +# 6e5940d6180e4737896b080686d44304 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:85 +msgid "" +"False means if a cell has at least one node in *bn*, take it. True means " +"if all nodes of cell are in *bn*, take it." +msgstr "" + +# 5942293262a1405da7ae131187372966 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:87 +msgid "" +"If a mesh consists of several contiguous zones of cells, it is possible " +"to retrieve cell ids of each zone:" +msgstr "" + +# 192b40a09d6e4f089ff1684f967af715 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:92 +msgid "A mesh with two zones" +msgstr "" + +# 2beed69cf53d46589263f237228926ee +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:98 +msgid "Zones returned by partitionBySpreadZone are::" +msgstr "" + +# 457ad15813134b65840368d746309b2b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:103 +msgid "Extract for arrays" +msgstr "" + +# f609934b9fec46df8d194e6526d52888 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:105 +msgid "" +"Arrays are the common entry point to selection. If *arr* is a 2 component" +" DataArrayDouble you can locate tuple ids by finding those whose first " +"component is in [a,b):" +msgstr "" + +# e7393446b08347febd75786cbcce74bb +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:111 +msgid "Or you can find tuples whose magnitude is in [c,d):" +msgstr "" + +# e44ff0cf176547a994d679ccd0d6d763 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:117 +msgid "To find which of *tupleIds* are missing from *tupleIds1*, call" +msgstr "" + +# b1c2e151b0714c178f903a90d5a475da +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:125 +msgid "Extract for fields" +msgstr "" + +# 0c6debe20e13486daa6e13354b67ccde +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:127 +msgid "" +"If *field4* is a MEDCouplingFieldDouble, you can extract a sub-part of " +"*field4* on a specified cell ids *ids4* by doing" +msgstr "" + +# c24189fc03e649989f6f791a8c89e48b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:133 +msgid "It works whatever the spatial discretization of *field4*" +msgstr "" + +# 35cbd297f40d4be4a3803e421735b9c8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:138 +msgid "" +"A field on nodes (to the left) and its sub-field on a half of nodes (to " +"the right)" +msgstr "" + +# bbe4aa2431e14578970b9404d5698f99 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:140 +msgid "You can extract a field on plane by cutting *field5* like this:" +msgstr "" + +# 632193d8ffea4b73a52bba73a4391516 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:146 +msgid "" +"The plane is defined by its *origin* and its normal vector *normvec*. The" +" last argument is a half-thickness of the plane." +msgstr "" + +# 6db3a5fbf32c4e989362e222b35dc3cd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:148 +msgid "It works for fields on cells only" +msgstr "" + +# edc2927c5ee2479594c2437be7421716 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:153 +msgid "A field on cells (to the left) and a sub-field on a plane (to the right)" +msgstr "" + +# 9831255d19864f77b5f223c3462a85cb +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:159 +msgid "Geometric handling of unstructured meshes" +msgstr "" + +# 5e2faf5cfdd14b1788772f03a399dacd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:161 +msgid "" +"Consider *m2* as a 3D MEDCouplingUMesh instance. You can translate it by " +"simply" +msgstr "" + +# cf0c3af4895849299a1700292a6f33c8 +# 9ac56283057e4ab1a0c041de99ed465e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:167 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:179 +msgid "Which is equivalent to" +msgstr "" + +# 2936437cde6341e59cd47aa99d7843cf +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:173 +msgid "" +"Samely you can simply rotate it around the point [1,2,1] along Y axis " +"with an angle of pi/3 by doing" +msgstr "" + +# d1c1cacf9a9d4163b77f7786fbdea457 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:185 +msgid "To scale *m2* relative to point [1,2,4] by a factor of 6, call" +msgstr "" + +# 5744c0eec4a6487c92e18c3acd7701e6 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:191 +msgid "" +"It can also interesting to retrieve volume of cells in m2 (resp area, " +"length in 2D, 1D):" +msgstr "" + +# 91a5f984e9474f29b80fd7a8a57a2557 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:197 +msgid "" +"*volPerCell* is a field on cell (MEDCouplingFieldDouble). *True* means I " +"don't care of cell orientation. *False* tells I care of cell orientation " +"using signed values." +msgstr "" + +# 06fc9120bd4b4fba9416271ba5be33f5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:202 +msgid "Area field of a cartesian mesh" +msgstr "" + +# 62e7fe979c3a4ee88ef1a6b434ea1d51 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:204 +msgid "You can compute total volume covered by mesh by doing" +msgstr "" + +# 9bdd0a1e57714495b2f7c3eae95d5e0d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:210 +msgid "" +"You also can locate cells (using *cellIds*) having volume greater than a " +"threshold *t1*:" +msgstr "" + +# 1294aa862e81419b9ebd476cb496499c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:216 +msgid "" +"In this case it is easy to :ref:`build a sub-mesh` " +"containing cells having a volume higher than *t1*:" +msgstr "" + +# 4eaf169e0eb6407493f5232d0e303203 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:222 +msgid "There are other common geometric methods on meshes:" +msgstr "" + +# f2a89143b81b428f86be275a6b178b91 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:228 +msgid "" +"*centers* will be a DataArrayDouble giving for each cell of *m2* its " +"center of mass." +msgstr "" + +# 2040297dab7f434aaf8d5a50adabdbab +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:230 +msgid "" +"It's possible to compute a DataArrayDouble giving the center of mass of " +"*m2* simply by doing" +msgstr "" + +# d35aee9d090349929fe0f06b3d884734 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:236 +msgid "Iso barycenter of nodes constituting each cell can be computed by calling" +msgstr "" + +# cc9cb665bce14af49a2f43a011a2d49f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:242 +msgid "*ibc* will be a DataArrayDouble." +msgstr "" + +# 525e5b78edbb4371abe23f10dc01ec93 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:244 +msgid "" +"You can retrieve a field (MEDCouplingFieldDouble) of unitary vectors " +"normal to cells:" +msgstr "" + +# c3e083095f174584933fd5ca8d9b3c6d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:253 +msgid "" +"A skin mesh with a normal field on it computed by buildOrthogonalField " +"method" +msgstr "" + +# b46f8b1f9059453ea7fdeec97022d9ed +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:255 +msgid "" +"You also have a set of methods to caracterize mesh quality: " +"getEdgeRatioField, getAspectRatioField, getWarpField, getSkewField, " +"computeDiameterField." +msgstr "" + +# 53047aa31028496cbcc6be12565fa692 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:258 +msgid "" +"medcoupling provides methods to intersect 2D meshes in 2D space. " +"MEDCouplingUMesh.Intersect2DMeshWith1DLine partitions a 2D and a 1D mesh:" +msgstr "" + +# 942fde1e54ca4299ac545024ffd19e91 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:264 +msgid "" +"The last argument is a precision used to perform intersections and " +"localization operations." +msgstr "" + +# 0b09a0881fbd4513b67c0747d8fdfe80 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:269 +msgid "2D and 1D meshes before and after intersection" +msgstr "" + +# 81ad5cfdbc8641dcbb670c243d1d6bbb +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:271 +msgid "" +"Intersect2DMeshWith1DLine returns new 2D and 1D meshes and two arrays. " +"*a2d* gives for each cell in *m2d* the id in *mesh2d* it comes from. " +"*a1d* is an array of pair that gives for each cell id i in *m1d* the cell" +" in *md2* on the left for the 1st component and the cell in *m2d* on the " +"right for the 2nd component. -1 means no cell." +msgstr "" + +# 967d6c9dc64f42a1a5946e41c9c7bd7b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:273 +msgid "For the example in the picture above *a2d* is::" +msgstr "" + +# 7014ddb55ea249a688e2d85eedc2d298 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:277 +msgid "and *a1d* is::" +msgstr "" + +# ae51d6687aa04888b29987eef1f2b135 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:281 +msgid "There also a method to partition a 2D mesh by another 2D mesh:" +msgstr "" + +# fa4718067f704d5e9e65ba9c2753c6ab +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:290 +msgid "" +"Two 2D meshes before partitioning (to the left) and a result mesh after " +"partitioning (to the right)" +msgstr "" + +# 625a1767d1704712af9a6883503ba150 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:292 +msgid "" +"Intersect2DMeshes returns a new 2D mesh and two arrays. *a1* gives for " +"each result cell an id of the cell of *mesh1* it comes from. *a2* for " +"each result cell gives an id of the cell of *mesh2* it comes from." +msgstr "" + +# db5ca252adf54438b222a1e8bd76ed8a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:294 +msgid "" +"You can compute distance from a set of points to cells of a mesh by " +"calling" +msgstr "" + +# f5a657b58eae45549766808f8aaa4a78 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:300 +msgid "" +"This method returns distance and a closest cell id for each of given " +"*points*. *points* is a DataArrayDouble with 3 components. Returned " +"*dist* is a DataArrayDouble and *cells* is a DataArrayInt." +msgstr "" + +# 6ca71e019ada4e3d9e867ea016754e69 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:303 +msgid "Mesh comparison" +msgstr "" + +# 219cbe7a55bf4a8e8d4ea2a3fe76805a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:305 +msgid "" +"It is a common question. You have two meshes *m1* and *m2* coming from 2 " +"different sources (2 files) and expected to be more or less equivalent." +msgstr "" + +# e01c6ae4e7dc466f82e5b61b43a37ffc +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:307 +msgid "" +"medcoupling proposes some methods to help to caracterize equivalence of " +"these 2 meshes." +msgstr "" + +# 9ad14ff7da9c42728f14369025b553f0 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:309 +msgid "The first, the strongest, is informatical equality:" +msgstr "" + +# 0cac768b3c0c4068980bf1289df5fd3d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:315 +msgid "*eps* is the tolerance in coordinates." +msgstr "" + +# 2e94e699afbf4254a0af799517f5e3d4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:317 +msgid "If true is returned, you are lucky." +msgstr "" + +# 12a398bbc2a243158f9243b2945dfea0 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:319 +msgid "Sometimes only names (and or component names or units) are not the same:" +msgstr "" + +# bff6d14773744daaa1f037cc5f234c3d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:325 +msgid "" +"But sometime the last call also returns False. It may mean that there is " +"a permutation of nodes and or cells." +msgstr "" + +# f01d328afb914c4e8feecb25e3599ff8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:327 +msgid "" +"If you know by construction that *m1* and *m2* share the same coords " +"object:" +msgstr "" + +# e7e7df8dfebd4e76b797661493c4fea3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:333 +msgid "" +"checkGeoEquivalWith returns 2 elements. The first one is relative to " +"cells and the second one is relative to nodes." +msgstr "" + +# 081cdffbfe0a4a79a9712a0fae92e01f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:335 +msgid "" +"If the mapping between *m1* and *m2* is impossible regarding the " +"specified code an exception is thrown. Code meaning:" +msgstr "" + +# c3323332ab6b42a4b62f3bf6b490a9b9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:338 +msgid "" +"20=2*10+0. 2 tells I know that coords are the same. 0 tells two cells are" +" equal if and only if their connectivity is exactly the same." +msgstr "" + +# d19fb1e351d74b61a1f78a7dd51641a6 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:339 +msgid "" +"21=2*10+1. 2 tells I know that coords are the same. 1 tells two cells are" +" equal if and only if their connectivity is equal within a circular " +"permutation." +msgstr "" + +# 00a3c108006e431ba8484bfea37c4ea0 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:340 +msgid "" +"22=2*10+2 . 2 tells I know that coords are the same. 2 tells two cells " +"are equal if and only if nodes set is the same independently from " +":ref:`order `." +msgstr "" + +# 028a6030afb94053b1a36bb667b6b4e4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:342 +msgid "" +"If you expect that two meshes are geometrically the same without knowing " +"if there is any cell/node permutation use code 12:" +msgstr "" + +# 70e30890cc2b4ea58f979e56484d58dd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:348 +msgid "" +"Code meaning: 12=1*10+2. 1 tells coords can be different. 2 tells two " +"cells are equal if and only if nodes set is the same independently from " +"order." +msgstr "" + +# 31d650961eb04249b76864746e75f644 +# de9c3317cf72475e8ccc61e2619b8331 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:350 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:369 +msgid "Remark" +msgstr "" + +# db4203bc3df24c7db4b77e513cad9d25 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:352 +msgid "" +"*a* and/or *b* may be *None*. It's not a bug it only means that " +"renumbering is equal to identity, meaning that no associated permutation " +"is needed." +msgstr "" + +# ce729fd6a7af43b3a3c3d37ab2898ffa +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:355 +msgid "Common handling mesh" +msgstr "" + +# eb7ac9dea5494b3f93654d58e926e46a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:357 +msgid "" +"*field1* is a node field containing non simplex cells. simplexize on " +"field1.getMesh() can help to overpass this limitation." +msgstr "" + +# 9e4f6908d5634bf4866da2e95184933c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:367 +msgid "Initial mesh (to the left) and its simplexization (to the right)" +msgstr "" + +# b879d71bdf444e6795cc5e133a089d2a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:371 +msgid "" +"The mesh has been modified by simplexize. This method of simplexization " +"is fast but leads to non conform mesh that can be a problem in some " +"context" +msgstr "" + +# 71404e6d56fb40d2bbb40016f2ebf82d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:373 +msgid "" +"tetrahedrize method is dedicated to simplexization of 3D meshes only. It " +"can create a conform mesh. Unlike simplexize method, tetrahedrize method " +"can add new points to the result mesh." +msgstr "" + +# f35b4cbdaf8a458c834cc3f9968b3f12 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:379 +msgid "" +"The argument specifies how to split hexahedral cells. it must be in " +"(PLANAR_FACE_5, PLANAR_FACE_6, GENERAL_24, GENERAL_48). *n2ocells* is a " +"DataArrayInt holding, for each new cell, an id of old cell producing it. " +"*np* is a number of new points." +msgstr "" + +# 4c4252426c0241cd9dd7f1e0fccafb89 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:383 +msgid "" +"Using medcoupling you can create a 3D extruded mesh. To do that you need " +"a 2D mesh and a 1D mesh, which defines the vector of extrusion and the " +"number of steps. The both meshes must be in 3D space. To extrude a 2D " +"mesh *m2* along a 1D mesh *m1*, call" +msgstr "" + +# 4f1da84836374e3aa73a2187ab679566 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:389 +msgid "The last argument is a policy defining the type of extrusion:" +msgstr "" + +# e8a4d82d1c734e328efb9471525fd10f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:391 +msgid "" +"0 means \"translation only\": the cells of the 1D mesh represent the " +"vectors along which the 2D mesh will be repeated to build each level." +msgstr "" + +# 2bfacb219712433ebc79f4e1c17c78eb +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:392 +msgid "" +"1 means \"translation and rotation\": the translation is done as above. " +"For each level, an arc of circle is fitted on the 3 preceding points of " +"the 1D mesh. The center of the arc is the center of rotation for each " +"level, the rotation is done along an axis normal to the plane containing " +"the arc, and finally the angle of rotation is defined by the first two " +"points on the arc." +msgstr "" + +# 37bf817efcb04ffb8fd98354b7d6a3f3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:398 +msgid "" +"A 2D mesh and an 1D mesh (to the left), an extrusion mesh built with " +"policy=0 (in the middle) and with policy=1 (to the right)" +msgstr "" + +# 408fcfdb7c4040c6941eb2e6655f82ef +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:401 +msgid "" +"In order to aggregate several meshes of the same dimension into one mesh," +" call" +msgstr "" + +# 76f1412967b84d72a5eb1d609b446c05 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:407 +msgid "To transform a linear mesh into a quadratic one, call" +msgstr "" + +# be7ff7ac30bd42c5a089720cff825303 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:413 +msgid "A parameter of convertLinearCellsToQuadratic provides type of conversion:" +msgstr "" + +# 62e7b1ee31e7420b8b3595188e08af71 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:415 +msgid "0 creates cells of simple quadratic types, e.g. NORM_TRI6 and NORM_QUAD8" +msgstr "" + +# ce879de72e6b443b92ca65ed6ed33094 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:416 +msgid "1 creates cells of complex quadratic types, e.g. NORM_TRI7 and NORM_QUAD9" +msgstr "" + +# bad055d04747446a87eb3f23a849ea6f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:421 +msgid "" +"Result quadratic 2D meshes converted with typeOfConversion=0 (to the " +"left) and typeOfConversion=1 (to the right)" +msgstr "" + +# db113d3d38e54939b557d6cf56e674f5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:423 +msgid "It's common to deduce skin of a mesh *m1*:" +msgstr "" + +# 3d4ec07a1ed44ba9946e6dd6a365a88f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:429 +msgid "*skin* and *m1* share the same coordinate array." +msgstr "" + +# fa0441823ce3400283377bc1142eb982 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:434 +msgid "A 2D mesh (to the left) and its skin (to the right)" +msgstr "" + +# 936f7ba80493444fb116740386d10873 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:438 +msgid "In order to get a 1D mesh from a given 2D or 3D mesh, call" +msgstr "" + +# e66ce51e7a494f28bb576511d07a0c1d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:444 +msgid "" +"In addition to *mesh1d*, explodeIntoEdges method returns four arrays " +"describing descending connectivity and reverse descending connectivity in" +" indirect-indexing_ format. *d* and *di* describe the descending " +"connectivity, i.e. enumerate cells of *mesh1d* bounding each cell of " +"*mesh3d*. *r* and *ri* describe the reverse descending connectivity, i.e." +" enumerate cells of *mesh3d* bounded by each cell of *mesh1d*." +msgstr "" + +# 114011e35261476b81abc3b7b5133de7 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:451 +msgid "" +"A 2D mesh (to the left) and a 1D mesh returned by explodeIntoEdges (to " +"the right)" +msgstr "" + +# 3cbd0097f88540c88ee0a3509715b185 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:453 +msgid "" +"There is also a method similar to explodeIntoEdges_ which returns a mesh " +"of one less dimensions than a given mesh, i.e. 3D->2D or 2D->1D:" +msgstr "" + +# cec04dc5eb174a27b2d5b1387e425121 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:459 +msgid "" +"If a mesh is non-conformal, medcoupling can make it conformal. " +"conformize2D method is to conformize a 2D mesh in 2D space, conformize3D " +"is to conformize a 3D mesh in 3D space:" +msgstr "" + +# 7540d0c02b1c4ae19e93f5c1f74cc0ac +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:465 +msgid "" +"*changedCells* is an array of ids of changed cells. The changed cells " +"become polygons in 2D and polyhedrons in 3D. *eps* is the relative error " +"to detect merged edges." +msgstr "" + +# ae9c14efacaa422ba1678fec271fce3f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:467 +msgid "You can duplicate some nodes in a mesh by calling" +msgstr "" + +# fba2db54d418445587cd81be1df9d1b8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:473 +msgid "" +"This will create new nodes at locations of nodes #3 and #4, the new nodes" +" will replace nodes #3 and #4 within cells so that the nodes #3 and #4 " +"will become orphan." +msgstr "" + +# 8c9fee34bea74ad3a18d33f92085bc1a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:475 +msgid "Inversly it is possible to merges nodes equal within a given precision:" +msgstr "" + +# 1204d037405e4dc8b910cc4dda1b4b50 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:481 +msgid "" +"If your 2D mesh in 3D space includes incorrectly oriented cells, you can " +"fix their orientation by calling:" +msgstr "" + +# 06ebadb9784a437da89a8ef36cb9cf45 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:487 +msgid "" +"The last argument if True, only polygons are checked, else, all cells are" +" checked." +msgstr "" + +# f983944be9ef41c6a35e2d220966d19b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:492 +msgid "" +"A mesh before applying orientCorrectly2DCells (to the left) and after (to" +" the right)" +msgstr "" + +# 7bfa2f0def7841078cff03023f328edd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:494 +msgid "" +"If your mesh includes incorrectly oriented polyhedra, the following " +"method can help to fix your mesh:" +msgstr "" + +# 833104bfec2b4dc49e90423cdfad3fdc +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:500 +msgid "" +"If *m1d* is a 1D line mesh, you can ensure consecutive order of its " +"segments by calling" +msgstr "" + +# 41c0d95f0ec043e189edabd63af48aa3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:509 +msgid "1D mesh before and after renumbering" +msgstr "" + +# 7c6126f3e2364deeb90321d5fcb5f368 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:511 +msgid "" +"orderConsecutiveCells1D method returns a permutation map in new-to-old_ " +"mode but renumberCells method requires the map in old-to-new_ mode, hence" +" we use invertArrayN2O2O2N method to fit to that requirement." +msgstr "" + +# dc9a64e66f73459a834f9c4e7a4dd87b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:519 +msgid "" +"To arrange cells to comply with MED format requirement you can call " +"either of the following methods:" +msgstr "" + +# ed1a5d48791742c0873ccbd0bc598c55 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:526 +msgid "" +"It is also possible to rearrange, and even remove, nodes by calling " +"renumberNodes:" +msgstr "" + +# 754edb49fbf44278abeb714d0b84b58c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:532 +msgid "" +"The code above rearranges a mesh with 4 nodes so that old node #0 " +"becomes #2, old node #1 remains #1, old node #2 becomes #0, old node #3 " +"is removed. The last argument 3 means that number of nodes becomes 3." +msgstr "" + +# d2ffd70e9a1e418bb891bc73f9f537f9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:537 +msgid "" +"The mesh before renumberNodes (to the left) and after (to the right). " +"Shown Ids are a unit more than Ids in medcoupling" +msgstr "" + +# d0f1ae55b5f14f95a2bc771ab9e1f361 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:540 +msgid "Operations on fields" +msgstr "" + +# df5f52750c4640928b649f5834a54ca5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:542 +msgid "Integral of a *field* can be computed by calling" +msgstr "" + +# 110625252a644bf7b94503e54ed48d30 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:548 +msgid "" +"The first call returns a list of integrals of all components. The second," +" returns integral of 0-th component. True means that abs is applied to " +"support size used for computing the integral." +msgstr "" + +# 223abe29aa81459783bc324283294cee +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:550 +msgid "" +"deviator method returns the stress deviator tensor field of a stress " +"tensor *field* (with 6 components):" +msgstr "" + +# fb6cd2a195b04ded862302ccd288416d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_analysis.rst:556 +msgid "To get value of a *field* at certain *points* call" +msgstr "" + diff --git a/doc/user/locale/fr/LC_MESSAGES/data_conversion.po b/doc/user/locale/fr/LC_MESSAGES/data_conversion.po new file mode 100644 index 000000000..efb06d0ed --- /dev/null +++ b/doc/user/locale/fr/LC_MESSAGES/data_conversion.po @@ -0,0 +1,476 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2015-2017, Geay, Bruneton +# This file is distributed under the same license as the MEDCoupling User's +# Guide package. +# FIRST AUTHOR , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: MEDCoupling User's Guide 8.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-14 14:14+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.0\n" + +# ec21659471944b0e9d49afe7c0ef3d3c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:2 +msgid "Data conversion" +msgstr "" + +# ed2e929565c142b7879b359b50f9189e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:4 +msgid "" +"medcoupling includes MEDCouplingRemapper object that allows given a " +"source field and a target mesh to produce a field lying on target mesh." +msgstr "" + +# 9712a29c4da7401caa4e08467813f8f5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:8 +msgid "" +"MEDCouplingRemapper goal is to compute a projection by minimizing " +"diffusive effects and conserve at most the magnitude of key variables." +msgstr "" + +# c88d0a7d25c4451a85bbfe148faf1b7f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:12 +msgid "" +"The MEDCouplingRemapper object computes a remap function that allows to " +"transform source field into target field." +msgstr "" + +# 75f649f765a740d782aa12f2be1a387d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:15 +msgid "The function is represented using sparse matrix given:" +msgstr "" + +# a6f66dceae4547cdb5d56e73fb19bb99 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:17 +msgid "a source mesh" +msgstr "" + +# bdb022e70a8a475a9b7fc785053e9984 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:18 +msgid "a target mesh" +msgstr "" + +# d1ede143dd5b40adb2b037344eaf7835 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:19 +msgid "" +"a source spatial discretization (\"P0\" means ON_CELLS and \"P1\" means " +"ON_NODES)" +msgstr "" + +# 94e2aa215a6d491985a0f8549615184e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:20 +msgid "a target spatial discretization" +msgstr "" + +# 0b5a5f6f0e5c4165a75072f2311e7dd4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:22 +msgid "Apply a projection is then equivalent to apply matrix vector multiply." +msgstr "" + +# d284de6c2fae4b67bcd54d7448abc1e6 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:25 +msgid "" +"As projection requires mathematically to compute for every cell in target" +" mesh, the contribution relative to each of cell in source mesh. So " +"projection is computation-intensive task." +msgstr "" + +# e717e6336a49409da6f596c3dac59ab9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:29 +msgid "" +"To optimize time spent by MEDCouplingRemapper, it implements a fast " +"algorithm that select coarsely the pairs of cells that have a chance to " +"be in interaction each other. It allows to drop from O(n^2) to O(n) the " +"complexity of algorithm. The algorithm is based on rectilinear bounding " +"boxes of cells along axis. 2 cells in interaction have their respective " +"bounding boxes in interaction." +msgstr "" + +# f58c6a80d4c049cb821a515e102ff93f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:37 +msgid "" +"Unfortunately it works well mathematically but in the real life " +"projections especially when spacedim and meshdim are not the same it can " +"be harder to set." +msgstr "" + +# 2553d23221a04d0e8eb3c14c4df64c3d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:44 +msgid "" +"Projection cells/cells with meshes having same mesh dimension/space " +"dimension" +msgstr "" + +# 433ab94995c741a7bea716229f3b05a4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:46 +msgid "" +"Let us create meshes for sample projection: a source mesh consisting of " +"two quadrangles and a target mesh consisting of a triangle:" +msgstr "" + +# 4f5be11efd024c11977ac51631af0683 +# e6fee0a106d645aab263e5b03d068f90 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:51 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:115 +msgid "Two source quadrangles in blue and a target triangle in red" +msgstr "" + +# 1c90fbc8ccb94011a428c94e6a8205f0 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:57 +msgid "Now perform projection:" +msgstr "" + +# 17d1824812b440ff98c3456107b49b68 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:63 +msgid "" +"Here \"P0P0\" specifies spatial discretization of both source and target " +"field. \"P0\" is for cell discretization (ON_CELLS). \"P1\" is for node " +"discretization (ON_NODES). For example, \"P0P1\" means from a source cell" +" field (lying on a source mesh) to a target node field (lying on a target" +" mesh)." +msgstr "" + +# 53fbf0ca08de49039d3d01fd7e01538e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:65 +msgid "" +"Remapper *rem* has just performed intersection of *src* and *tgt* meshes." +" Result of intersection is stored in a matrix which is returned by " +"getCrudeMatrix method. Each element of the matrix is size of intersection" +" of two cells i and j of the source and target meshes correspondingly." +msgstr "" + +# a2a200d8dc3a491493cffae6bed1f8ba +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:67 +msgid "" +"Generally the matrix is sparse. To reduce memory usage, the space matrix " +"is represented by an array whose i-th element is a map storing indices " +"and intersection sizes of source cells intersecting i-th target cell." +msgstr "" + +# 816b2803bec54c0db5aada90c45e28d8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:69 +msgid "Here is a sample sparse matrix:" +msgstr "" + +# 4b9459bebb64493f82b0d2a6ca4bafd5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:81 +msgid "and a corresponding array, which stores only non-zero matrix elements:" +msgstr "" + +# 4aa945440c524c0e97aa8b1c35fa2c45 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:87 +msgid "" +"Now we create a field on all cells of *src* mesh and call " +"rem.transferField() to transfer the field to the cells of *tgt* mesh" +msgstr "" + +# 61927b7c70104e97b2ffb36e9ec20b00 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:93 +msgid "" +"The last argument -1 is a default value that will be assigned in *trgF* " +"to each entity of *tgt* mesh that is not intercepted by any entity of " +"*src* mesh." +msgstr "" + +# 02bdfa1173af4fb697d93e8937a74eb3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:95 +msgid "" +"It is crucial to setNature() of the field by which an adequate " +"interpolation formula is chosen. The field nature is expressed by one of " +"the following values: ExtensiveMaximum, IntensiveMaximum, " +"ExtensiveConservation, IntensiveConservation." +msgstr "" + +# 6fb68a3e07534e89a7478d41d6b162f9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:97 +msgid "" +"The field is represented by a vector with a discrete value on each cell. " +"This value can represent either" +msgstr "" + +# 658affd5f2754c2eb1d4aa0d6eb387b3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:99 +msgid "" +"an average value of the field in the cell (average density, velocity or " +"temperature in the cell) in which case the representation is said to be " +"**intensive**," +msgstr "" + +# 0b33b21dc7fb4f8b9bd0ad9d00fc89d9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:100 +msgid "" +"an integrated value over the cell (total mass, power of the cell) in " +"which case the representation is said to be **extensive**." +msgstr "" + +# 59934de0ad7145f48ce7f8191b2c67f1 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:102 +msgid "" +"In the case where the source and target meshes are not fully overlapping," +" it is important to make a correct choice between Maximum and " +"Conservation." +msgstr "" + +# c84b543196a14f79a177991119372992 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:104 +msgid "" +"**Conservation** means that the interpolation algorithm preserves the " +"integral of the field over a domain." +msgstr "" + +# a6306bd8f1cd4a269cc41e0721ea0d93 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:105 +msgid "" +"**Maximum** means that the field values resulting from the interpolation " +"remain between the upper and lower bounds of the original field." +msgstr "" + +# 946c50ad6d5c41b39646f7319d6d7fc4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:108 +msgid "" +"Projection cells/nodes nodes/cells nodes/nodes with meshes having same " +"mesh dimension/space dimension" +msgstr "" + +# d7046415343a4c9ab79e4b83b5b6ac14 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:110 +msgid "" +"Suppose we have the same source and target meshes as in the " +":ref:`previous chapter `. I.e. the source mesh consists " +"of two quadrangles and the target mesh consists of a triangle." +msgstr "" + +# 58ce1c66df2d4d0a93b7a98862c4aa23 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:117 +msgid "" +"The source field is also on cells but the target field is on **nodes** of" +" target mesh. In such a case we do the following:" +msgstr "" + +# e58671bc77eb4b56aaf5de47cbbf21a3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:123 +msgid "" +"Here \"P0P1\" specifies support of the source (P0=ON_CELLS) and the " +"target (P1=ON_NODES) fields. The computed martix is::" +msgstr "" + +# 3406399c8f704734a0413ac0d5b05d38 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:127 +msgid "" +"The result matrix contains values for each of the three nodes of the " +"target mesh. In order to be able to compute these values by means of " +"intersection of cells, an algorithm constructs an auxiliary target mesh. " +"This auxiliary mesh is a dual mesh of the actual target mesh, hence it " +"includes cells corresponding to each actual target node." +msgstr "" + +# 5321e1a5876e4fd1a5e5ed587042c258 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:132 +msgid "" +"The target mesh used for projection is a dual one of the actual target " +"mesh" +msgstr "" + +# a1c99f08bd1b4500ad461442d4da0e7c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:134 +msgid "" +"If the case is reverse, i.e. the source field is on nodes and the target " +"one should be on cells, we change \"P0P1\" to \"P1P0\":" +msgstr "" + +# 8733c1f80be0426193c6c4c603906dc9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:140 +msgid "The computed martix is::" +msgstr "" + +# 2190f951252445a09dd3f58aa67245d4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:144 +msgid "" +"In the same way as in \"P0P1\" case, an auxiliary dual mesh is internally" +" constructed for a mesh supporting a field on nodes (the source field in " +"our case). But since the source cells are not simplexes, simplexization " +"of quadrangles is perfrormed on the fly to be able to construct the dual " +"mesh. Cell #0 (0,3,4,1) is split into (0,3,4) and (0,4,1)" +msgstr "" + +# 1db2464216be42b8806857b55695c1cc +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:149 +msgid "" +"The source mesh used for projection is a dual one of simplexized actual " +"source mesh" +msgstr "" + +# cda2159f8b074b8e9cf862e76b599722 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:155 +msgid "" +"in present implementation of Remapper, the projection of fields on nodes " +"lying on quadratic meshes is not available. If you are in this case you " +"have 2 choices :|br| 1) you accept to lose precision by converting your " +"mesh (MEDCouplingUMesh.convertLinearCellsToQuadratic) |br| 2) you " +"subdivide your mesh." +msgstr "" + +# 6e73dd503f6e4a6685870b6ebb562b19 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:160 +msgid "Projection cell/cell when meshdim != spacedim" +msgstr "" + +# 27f4c2c6fee346aa909952f1164128cd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:162 +msgid "" +"When meshdim is not equal to spacedim some additional important " +"parameters should be considered." +msgstr "" + +# 4ba851aa30a54ebf9b1a6839de105bfe +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:164 +msgid "Consider a simple case with spacedim=3 and meshdim=2 where :" +msgstr "" + +# 9a82b0079f0341278719826874f6c4fa +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:166 +msgid "source mesh contains one triangle cell [0.,0.,0.], [1,0,0], [0,1,0]" +msgstr "" + +# cc5766d4d7834f1aaef59168f5ddc0eb +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:167 +msgid "" +"target mesh also contains one triange cell [0.,0.,0.], [1,0,0], [0,1,0], " +"which coincides with the source triangle." +msgstr "" + +# ac2d70338d034f17b0dcc25790e5d315 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:169 +msgid "" +"Only \"P0P0\" projection (ON_CELLS->ON_CELLS) will be considered here but" +" all elements presented here are applicable for other spatial " +"discretizations projections." +msgstr "" + +# 5f0366eb5c574524bade568306c0ebc3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:175 +msgid "A remapper returns the following correct matrix::" +msgstr "" + +# dfe61422dfe345fb8dd20a124de466e6 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:179 +msgid "where 0.5 is equal to area of the source (or target) triangle." +msgstr "" + +# d777fb098267490ba77b702aeb8dca86 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:181 +msgid "" +"Let us see what the remapper will return if the meshes are not " +"overlapping. To this end we translate the source mesh along its normal " +"by a small distance (1e-3):" +msgstr "" + +# c9162ed4c71c457a81f2ae8ad62e8763 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:187 +msgid "" +"The remapper returns the following matrix, which means that it have not " +"found any intersection of the meshes::" +msgstr "" + +# f568cb6e2df04afdada3bc9395326b03 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:191 +msgid "" +"This happens because bounding boxes of cells used to detect possibly " +"intersecting cells do not intersect. In order to get a correct result of " +"intersection we can increase those bounding boxes. The remapper provides " +"two ways to do that:" +msgstr "" + +# 003ff0073d9d47cca9444f4f2cf39bd3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:193 +msgid "" +"rem.setBoundingBoxAdjustmentAbs( *thickness* ) expands a bounding box by " +"*thickness*." +msgstr "" + +# 878448da6eea484193da5b41895b7b87 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:194 +msgid "" +"rem.setBoundingBoxAdjustment( *factor* ) expands a bounding box by " +"thickness computed by multiplying a maximal bounding box size by " +"*factor*." +msgstr "" + +# 2ee8d94a11a1486f9340a9a77573a669 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:199 +msgid "" +"If source and target meshes do not overlap we can increase their bounding" +" boxes to help remapper to detect intersecting cells" +msgstr "" + +# 0255d7eac2e34e20bd63677fad79745f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:205 +msgid "With bounding box tuning we obtain the correct result matrix::" +msgstr "" + +# 0d3d2f4c186248c4a33d7de79fab9f72 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:209 +msgid "" +"The bounding box tuning has a disadvantage in the case where a cell has " +"large angle with either of planes OXY, OYZ or OXZ. In such a case cells " +"that are rather far one from another can be detected as possibly " +"intersecting since their bounding boxes are too large. " +"setMaxDistance3DSurfIntersect method helps avoiding excess intersections." +" If a distance between fast barycenter of target cell and medium source " +"plane is more than the value specified via setMaxDistance3DSurfIntersect " +"then cell intersection is not performed." +msgstr "" + +# f16cf58b64ea4cdcb3570ea3dd8cf3e2 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:214 +msgid "" +"If the tuned bounding box is too large we can use " +"setMaxDistance3DSurfIntersect to exclude unnecessary intersections" +msgstr "" + +# 7f4338f23d1a45ddba3581a51f348acf +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:216 +msgid "" +"Let us rotate the source mesh by pi/4 angle around Y axis. The result " +"matrix is" +msgstr "" + +# 11af138e8ebe4fa4b31ef3eb6b4ecaa9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:226 +msgid "" +"If we use setMaxDistance3DSurfIntersect, the result matrix shows that no " +"intersection found:" +msgstr "" + +# 2407d4c239fd4385b703695cbf774dbd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:235 +msgid "" +"Another function useful to avoid unnecessary intersection is " +"setMinDotBtwPlane3DSurfIntersect. It tells the remapper not to intersect " +"cells whose normals are too much different. " +"setMinDotBtwPlane3DSurfIntersect specifies minimal dot product of unitary" +" normal vectors of a source and target cells." +msgstr "" + +# 090de9cdb96e4ac4811be5c2d31aa4d9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:237 +msgid "" +"Let us switch off setMaxDistance3DSurfIntersect by passing a negative " +"value. And use setMinDotBtwPlane3DSurfIntersect to avoid intersecting " +"cells that has 45 degrees angle between their normals in our case." +msgstr "" + +# 7347cdbff8ff4adda77b7da33f919e1d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_conversion.rst:243 +msgid "Result matrix is::" +msgstr "" + diff --git a/doc/user/locale/fr/LC_MESSAGES/data_movement.po b/doc/user/locale/fr/LC_MESSAGES/data_movement.po new file mode 100644 index 000000000..ff33d1725 --- /dev/null +++ b/doc/user/locale/fr/LC_MESSAGES/data_movement.po @@ -0,0 +1,823 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2015-2017, Geay, Bruneton +# This file is distributed under the same license as the MEDCoupling User's +# Guide package. +# FIRST AUTHOR , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: MEDCoupling User's Guide 8.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-14 15:16+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.0\n" + +# e67d9ce3cc234d94bd461f009d0af087 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:2 +msgid "Data movement (mesh/field construction)" +msgstr "" + +# 246b1381bdc74c1589489d328d3ab114 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:5 +msgid "Read Mesh from file" +msgstr "" + +# 9a15bc029c0d481d97fd0a8d21f0309e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:7 +msgid "To read a mesh from a MED file simply invoke" +msgstr "" + +# f5ffa1c362e64fa49787851152033b56 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:13 +msgid "" +"If the file contains more than one mesh, the previous call will return " +"the first one." +msgstr "" + +# 4a574d168619414db44b5a8c6fb62f76 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:16 +msgid "You can access to a precise mesh by doing" +msgstr "" + +# d3ff361801e9401ca42842a19c22eda7 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:23 +msgid "Read field from file" +msgstr "" + +# 718d2e8817264ca497b2fd916f95dcf3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:29 +msgid "" +"This command will succeed if there is exactly one field in \"file.med\" " +"and only one time step attached to it." +msgstr "" + +# 9f704e58244c4b8abe77f9226190a741 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:32 +msgid "" +"If there are more than one field in \"file.med\" you are expected to " +"specify the field name." +msgstr "" + +# 25ef114af80f4d44841d35ad571872df +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:35 +msgid "" +"To know all fields in \"file.med\" either you read exception thrown or " +"you can invoke" +msgstr "" + +# 2457598c17f4485cb2217da21603c4d5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:41 +msgid "When you have the fieldName you can safely invoke." +msgstr "" + +# ee829a4f141f4c16b74308c7b1b8fe42 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:47 +msgid "" +"This command will succeed if there are exactly one time step attached on " +"it. If no you are expected to specify the time step attached on it." +msgstr "" + +# 02fc906d66bb4dd09ffea63223b9ca7a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:51 +msgid "A time step is identified by two piece of information :" +msgstr "" + +# f6e2d1ffb7c0458cacfa85b46b16a7aa +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:53 +msgid "pair of integers specifying without ambiguity a key for access" +msgstr "" + +# 3f6c1edd91e541679523a11e69a7d8d7 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:54 +msgid "floating point (physical time step)" +msgstr "" + +# b784a46f06cb4ab8aac023fe15c9dfd8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:56 +msgid "To retrieve list of time step of a field invoke" +msgstr "" + +# 52c037c232ac460dba0967fda54b3e6b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:62 +msgid "" +"This method returns a list of triplet. The first 2 elements of triplets " +"is pair of integers of time step and the last element in the triplet is " +"the physical time step." +msgstr "" + +# c757a055cb5e45cda9734d93e651e7dd +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:66 +msgid "" +"To read a field \"Field1\" at time step defined by pair \"(ts0,ts1)\" you" +" can invoke" +msgstr "" + +# a6a36d3dc2fc4233ae67506c5ed796a6 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:73 +msgid "" +"If you do not succeed reading field in \"file.med\" using this method it " +"means that your MED file is complex and requires more information to be " +"extracted. :ref:`Go to advanced reading`." +msgstr "" + +# 01e891823a4d40f3b2c94b4cfaa243e8 +# 675e4529dc4e40a7be3851306307481b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:77 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:138 +msgid "Remark" +msgstr "" + +# e036a2180b334d45886d30a81253351d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:79 +msgid "" +"the method is concise but by calling this method several times it leads " +"to a several mesh loads." +msgstr "" + +# 31a1c35e46dd46eb8e895e973e5000ba +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:86 +msgid "Write mesh into file" +msgstr "" + +# f2e6f62f07be4adf8d86ca0f48eb8526 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:88 +msgid "" +"MED file format expects a mesh sorted by geometric type. You are " +"responsible to reorder, if needed, cells to match MED file format " +"requirements." +msgstr "" + +# f0c5a5ef4fc4423a9122ed5701189c79 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:92 +msgid "This responsability is let to the end user to avoid misrenumbering effect." +msgstr "" + +# 23f92f8c6e204fceb066853679784c4d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:94 +msgid "You can check this by invoking:" +msgstr "" + +# f9103a0494784668ba5dbd5c847d2ac2 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:100 +msgid "" +"To reorder cells you are encouraged to read :ref:`this " +"`." +msgstr "" + +# cab03f12ca224311a7ec5225f10b5647 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:102 +msgid "If *m* is well numbered, you can dump it into a file by doing :" +msgstr "" + +# 8e5d6b8ed2dd43b087a4db3f25573bf5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:108 +msgid "" +"The last element specifies the behavior in case if \"file2.med\" would " +"already exist. True means, scratch it and write it from scratch. False " +"means do not scratch try to append it." +msgstr "" + +# 78119970b7fe47d5a75bc19253a37cce +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:114 +msgid "Write field into file" +msgstr "" + +# 767fb41d2862453c821cbc3c970993eb +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:116 +msgid "" +"You are expected to have a field *f* with a mesh :ref:`correctly " +"numbered.`" +msgstr "" + +# e568773de7d94f4f9c37a8776b71f48c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:118 +msgid "" +"If *f* is a valid MEDCouplingFieldDouble you can dump it into a MED file " +"by simply :" +msgstr "" + +# 306adfa291374198964e06b048cb4a82 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:124 +msgid "" +"The last element specifies the behavior in case if \"file.med\" would " +"already exist. The same meaning than for :ref:`writing " +"mesh.`" +msgstr "" + +# 0a6711f916a6461fa9ed128e83c9da82 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:127 +msgid "The typical usecase is to store a multi time step field." +msgstr "" + +# 02ecd9a8bf154daeb156ae7154e6ddbe +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:129 +msgid "" +"To do that, let's consider that *fs* store a list of " +"MEDCouplingFieldDouble with at least one element in it." +msgstr "" + +# 33c0295741c74641a3a49060589f4651 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:132 +msgid "All meshes of elements in *fs* are expected to be the same" +msgstr "" + +# 554f89cecad4468c8e3f6eef6b512d3b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:140 +msgid "f.getTime()[1:3] returns the pair of integer that specifies the time step." +msgstr "" + +# a3fe816f844e4c369a117ded08e291e9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:142 +msgid "" +"f.getTime()[1:3] should be different each other. If two elements in *fs* " +"have the same pair of integer time step key, the second one will take the" +" place of the first !" +msgstr "" + +# 55d609e9ae3847f48610ffc4f94a5d0f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:147 +msgid "Create an array from scratch" +msgstr "" + +# e3c5d7efc65b4d48a2ec82a70b271b19 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:149 +msgid "" +"There are several simple ways to create a medcoupling array from a Python" +" list." +msgstr "" + +# 025a57241b3a4c38a61b40e830245023 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:151 +msgid "" +"The following call creates an array of double values consisting of 3 " +"tuples with 2 components:" +msgstr "" + +# be02aa243f90479292ef9bd302eccfdc +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:157 +msgid "The next call creates an array equivalent to one create above:" +msgstr "" + +# 73d3fe22f0824607af7f91fec683da6e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:163 +msgid "" +"The call below creates an array holding the same but differently arranged" +" values: 2 tuples with 3 components:" +msgstr "" + +# 11e34a21bd1747e3857c372c35b237ca +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:169 +msgid "" +"You can change number of components in *d* so that it holds 3 tuples with" +" 2 components again:" +msgstr "" + +# fa02e23c375e488d86d35aaaa3cecb57 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:175 +msgid "" +"Arrays of different types (DataArrayInt, DataArrayFloat) can be created " +"in the same way as DataArrayDouble:" +msgstr "" + +# 207899b627574f3e9e7d943501f0cd8d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:181 +msgid "" +"A medcoupling array can be created from a numpy array and can be " +"transformed to a numpy array:" +msgstr "" + +# 443ed2d9b51a4678ad1960f4c9fe800a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:190 +msgid "Create an unstructured mesh from scratch" +msgstr "" + +# 1ce78fc586044bfc97257484d6c9b46d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:193 +msgid "MEDCouplingUMesh" +msgstr "" + +# b61ac138c6a642709e6c29b98a76f155 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:195 +msgid "" +"MEDCouplingUMesh class represents a general case unstructured mesh. Data " +"of MEDCouplingUMesh is defined in several steps." +msgstr "" + +# 7dcfe12d791a4c8899e76a216a049002 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:197 +msgid "" +"Firstly define basic mesh data in full interlace mode for coordinates and" +" nodal connectivity cell per cell." +msgstr "" + +# eb9e63f3834640af8b37923607838ca1 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:203 +msgid "" +"Then create MEDCouplingUMesh instance giving its mesh dimension (2 here) " +"and a name." +msgstr "" + +# 532968ee9b9547f6a294c062feab3189 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:209 +msgid "Then add cells to the mesh. This step includes" +msgstr "" + +# 81309f2dbe124a53a5124f59ee8cc27a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:211 +msgid "" +"giving an upper bound of the number of cells to be inserted into the " +"unstructured mesh." +msgstr "" + +# fbed0fdd23e7464a9e9aa51433f1c24b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:212 +msgid "" +"entering nodal connectivity of all cells, cell per cell using " +"MEDCouplingUMesh.insertNextCell method." +msgstr "" + +# df2e3d1dac1449f4b3a2bfd3a85947c0 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:213 +msgid "" +"compacting connectivity arrays by calling " +"MEDCouplingUMesh.finishInsertingCells method." +msgstr "" + +# 7cb26b02e4784fe388cef5ff77193a89 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:219 +msgid "" +"As the connectivity of the mesh has been defined, let's set the " +"coordinates using array *coords* defined above." +msgstr "" + +# 8992e272bd524909a73dfdbcb3e7e49d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:225 +msgid "Now the mesh is usable. To assure this, call" +msgstr "" + +# b897f62298b84881add9b74270f74a8d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:232 +msgid "MEDCoupling1SGTUMesh" +msgstr "" + +# 2ef0d99a6cae408bbbcf9f7559142a34 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:234 +msgid "" +"MEDCoupling1SGTUMesh class represents an unstructured mesh composed of " +"cells of same geometric type. It is more optimal due to this simplicity." +msgstr "" + +# b61bfdac872240639deca3fb8b96c06f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:236 +msgid "" +"Basically a MEDCoupling1SGTUMesh is defined in the same way as " +"MEDCouplingUMesh. A difference is that the geometric type of cells is " +"specified at construction, and not specified later e.g. in insertNextCell" +" method:" +msgstr "" + +# 29eb44ba9ddc4303aeac0a94e201d3b5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:243 +msgid "MEDCoupling1DGTUMesh" +msgstr "" + +# a7d82f09f4524d6ea9b600b27d662ea2 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:245 +msgid "" +"MEDCoupling1DGTUMesh also represents an unstructured mesh composed of " +"cells of same geometric type but it is specialized for cell of " +"\"dynamic\" geometric type only: NORM_POLYHED and NORM_POLYG." +msgstr "" + +# f0474e64bf8f4ba5b1e281574a7629e4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:251 +msgid "" +"When connectivity of a polyhedron is defined, facets are separated one " +"from another by -1." +msgstr "" + +# 2b433ca7fdd344d1a9f71c3f777229db +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:254 +msgid "Create a cartesian mesh from scratch" +msgstr "" + +# bc7bb0da009449ed8d2eb44d757ae017 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:256 +msgid "" +"We are going to build a 2D cartesian mesh, constituted from 9 nodes along" +" X axis, and 7 nodes along Y axis." +msgstr "" + +# 55bb3330e0524684b808fcc8cba94be3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:258 +msgid "" +"Firstly define for each direction the discretization and build a " +"DataArrayDouble on the corresponding direction." +msgstr "" + +# 73f083039c6e4d36850c69c0851e9905 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:264 +msgid "" +"Then create MEDCoupling.MEDCouplingCMesh instance giving the 2 instances " +"of DataArrayDouble defined above." +msgstr "" + +# 65bbb71b96d342dab722a134b31ec48c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:270 +msgid "The mesh is now usable." +msgstr "" + +# 0d3227bbd7b3472fa946abb75fcc2cc5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:275 +msgid "A cartesian mesh created by the code above" +msgstr "" + +# 45976ca6e83848519e2d9114f984f6c0 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:278 +msgid "Create a curvelinear mesh from scratch" +msgstr "" + +# 704877cdb2a74695b035ea75fb585974 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:280 +msgid "" +"First we create a curvelinear mesh and define its structure, for instance" +" a 2-dimensional mesh with 2 nodes in one direction and 3 nodes in the " +"other direction:" +msgstr "" + +# 243bc72ac9574d9b9a72d5e629fcfdb9 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:286 +msgid "Then define coordinates of 6 nodes in 2D space:" +msgstr "" + +# f063b4553e6a4736ba992d7c439a2d2d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:292 +msgid "The mesh is now usable. It's a good habit to assure this:" +msgstr "" + +# 85bcab7c30f54290a482b80d23ca078f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:301 +msgid "A curvelinear mesh created by the code above" +msgstr "" + +# 47997d79fac342f3bfc9c89322f16d86 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:306 +msgid "Create a field on cell from scratch" +msgstr "" + +# 972be5585f304182bdc25607e9d0494d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:308 +msgid "Assume we already have a mesh. We create a field on all cells of the mesh." +msgstr "" + +# d6a7e2c29eb9495693cfd614d380c02c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:314 +msgid "" +"ONE_TIME indicates that the field data relates to a single time step. Now" +" define this time moment." +msgstr "" + +# 969154aa76ba47d992b16d0dbc9ec04a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:320 +msgid "Then define field values:" +msgstr "" + +# df16450afc23486b8f17e7c73092da38 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:328 +msgid "Create a field on node from scratch" +msgstr "" + +# 2c125d2673414ce1a82940ad478b7874 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:330 +msgid "" +"Assume we already have a mesh. We create a field on all nodes of the " +"mesh. The procedure is same as for a :ref:`field on cells " +"` except two points:" +msgstr "" + +# f0efbf433429419894c7eba379b4330e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:332 +msgid "Spatial discretization in the field constructor is ON_NODES" +msgstr "" + +# aed2f45d675e435a8b1db3da914a6c36 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:333 +msgid "Number of tuples in an array of values is equal to mesh.getNumberOfNodes()" +msgstr "" + +# 000eb0a00f564cbe97af514a2875bb24 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:341 +msgid "Create a field on Gauss points from scratch" +msgstr "" + +# 63e1b2defbf14395878f64f154102b1b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:343 +msgid "" +"Assume we already have a 2D mesh consisting of triangle and quadrangle " +"cells. We create a field on Gauss points. First, a field is constructed " +"with use of ON_GAUSS_PT and its basic attributes are set:" +msgstr "" + +# e30d7037b93f43a68f910cd38421bc4c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:349 +msgid "" +"Now define localization of Gauss points on cells. In this example, we " +"define two Gauss points on triangle cells and four Gauss points on " +"quadrangle cells. Localization of Gauss points is defined by three lists " +"of float values:" +msgstr "" + +# 461a616a577d4e34b53747d6071e685a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:351 +msgid "Coordinates of nodes of the reference cell." +msgstr "" + +# f822f729a50f435d90cb96ac6e2b8577 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:352 +msgid "Coordinates of Gauss points on the reference cell." +msgstr "" + +# a2b0c36419b14585b82c04cef8a0cf1f +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:353 +msgid "Weights of Gauss points." +msgstr "" + +# 81e839a5effc4993962af0f4d96e7e64 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:359 +msgid "Finally set field values:" +msgstr "" + +# a8c1e116229f4a5f8b8fed19e7adfec8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:366 +msgid "Modify field values" +msgstr "" + +# c27903629cf64a6fbc449c4de31baa7d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:368 +msgid "" +"applyFunc method modifies all tuples of a field at once. It changes both " +"values and number of components, only number of tuples remains the same." +msgstr "" + +# 98bb6f5261034a2896e919c7fe145767 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:370 +msgid "" +"To set value *val* to all tuples of the field *f* and to make it have " +"*nbComp* components, call:" +msgstr "" + +# 6a45b2d83f5e4d558463348c111474d6 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:376 +msgid "" +"It is also possible to compute new values basing on current values. To do" +" so you can specify a function by which a new value will be computed. For" +" more info on supported expressions that can be used in the function, see" +" `expressions supported`_." +msgstr "" + +# 38a8b80a8a29499ca5dae45728856e44 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:380 +msgid "" +"You can use some letters, for example \"x\", \"y\", \"z\" etc., to refer " +"to current component values. For example, to transform a 3D vector field " +"to its magnitude, call:" +msgstr "" + +# 4c2fd1542b3a4c9a9b697ec3566ec9f8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:386 +msgid "" +"This way a value resulting from the function evaluation is assigned to " +"all components." +msgstr "" + +# 5e9ec40bfec34bcdad67c77fb9db2673 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:388 +msgid "" +"But you can have its own expression for each component within one " +"function. For this purpose, there are predefined variable names (IVec, " +"JVec, KVec, LVec etc) each dedicated to a certain component (IVec, to the" +" component #0 etc). A factor of such a variable is added to the " +"corresponding component only." +msgstr "" + +# b9e6c5a3a98a4eb4b93a9c7ef9930942 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:390 +msgid "" +"Using this feature, you can set a magnitude of a 3D vector as the fourth " +"component and swap X and Y components by calling:" +msgstr "" + +# 9ce2da073b674bf2a2be50e54d7aa1ad +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:397 +msgid "Define groups and write mesh using advanced API" +msgstr "" + +# 0e48dc2e04b74ad99b48aca15457b965 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:399 +msgid "" +"To get access to full power of MED file, for example to define groups of " +"cells, it is necessary to use the advanced medcoupling API, namely class " +"MEDFileUMesh_." +msgstr "" + +# 191a7256f4954e3589d812be357e9daf +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:404 +msgid "" +"First of all we populate a MEDFileUMesh with meshes (MEDCouplingUMesh) of" +" different dimensions, if present:" +msgstr "" + +# e010d9d7026849d8bbe6ebd1206717db +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:410 +msgid "" +"Level must be 0 for a mesh of highest dimension, -1 for a mesh of " +"dimension a unit less than highest dimension etc." +msgstr "" + +# a6b6131acf5b42b6bc76a7f59aab758b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:412 +msgid "" +"If cells are not yet sorted by geometric type, we can pass True as the " +"third argument of setMeshAtLevel to make them sorted:" +msgstr "" + +# d6e3a7b83dce4187a312d571f5d48ebe +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:418 +msgid "" +"meshes of different dimension must share the same point coordinate array " +"and have the same name" +msgstr "" + +# 8fa3cd0a641c47f1a83f97ae773b6707 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:420 +msgid "We can change point coordinates as soon as all meshes are added:" +msgstr "" + +# b50b810715f545978ee184d4a1aa7915 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:426 +msgid "To define groups we call, for example:" +msgstr "" + +# 31a7efbc167745c3857fd93b8b4faf77 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:432 +msgid "" +"The first argument of addGroup defines a type of group. 1 stands for " +"nodes. 0,-1,-2 and -3 have the same meaning as the level in " +"setMeshAtLevel method. Note that a name of DataArrayInt defines a group " +"name." +msgstr "" + +# e1e8c2c5448d46e797dd602e7caa9378 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:434 +msgid "It is possible to change name of a group or a family by calling:" +msgstr "" + +# 95f15e21ada1419898b129bdacdd4876 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:440 +msgid "Finally we write all data added to *mm* to a file:" +msgstr "" + +# dc6358ee4c7645f298c82f7973bcf33a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:446 +msgid "" +"The last argument defines behavior if a file exists. 2 means remove. 1 " +"means append; if data with same ID present, an exception is thrown. 0 " +"means overwrite data with same ID; that can lead to a file corruption." +msgstr "" + +# d066000d61554077b0efb67d96339e6a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:451 +msgid "Read/write fields using advanced API" +msgstr "" + +# 1076773b668d4033bc6b04bc321b1391 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:453 +msgid "" +"Having *field* on *mesh* we can write it using MEDFileField1TS_ class, " +"which is a part of advanced medcoupling API, as following:" +msgstr "" + +# dd2c654fce8c4aa3a411dbc410a4bcb4 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:461 +msgid "" +"The last argument of write method defines behavior if a file exists. 2 " +"means remove. 1 means append; if data with same ID present, an exception " +"is thrown. 0 means overwrite data with same ID; that can lead to a file " +"corruption." +msgstr "" + +# 8cebc9ef0a124b8dbd9565b02c312936 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:463 +msgid "" +"If there is a need to write a field lying only on a part of a mesh, the " +"following code gives an example of this:" +msgstr "" + +# 0d38542aea844ae8b1a2ad549f1652be +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:469 +msgid "" +"*profile* defines entities on which *fieldPartial* lies. *level* defines " +"entities the field lies on: 1 stands for nodes, 0 is for entities of " +"dimension equal to the mesh dimension, -1 is for entities of dimension a " +"unit less than the mesh dimension etc." +msgstr "" + +# 65202750b0e24cb68f8a656c29b7feed +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:471 +msgid "MEDFileField1TS also can be used to read a field:" +msgstr "" + +# 3d0b0fbfad73448e96e8b138e9af490b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:477 +msgid "" +"field method can be used if field support is simple: one spatial " +"discretization and one *level*." +msgstr "" + +# 9fb494d8a74d4e6aae22f4c3a0b4167b +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:478 +msgid "" +"getFieldAtLevel method allows to choose spatial discretization and " +"*level*." +msgstr "" + +# 7717ca9ada944decb537036d716a4444 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:479 +msgid "" +"getFieldOnMeshAtLevel method allows to specify spatial discretization, " +"*level* and mesh." +msgstr "" + +# eaf9f44c913f45c68483b2f769dbb14d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:481 +msgid "*level* of a field, if unknown, can be defined by calling:" +msgstr "" + +# e1d1d64e6e8e4159b00bead9c116b797 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:487 +msgid "" +"*maxDim* is the maximal absolute dimension of entities the field lies on." +" *maxRelDims* is a sequence returning the dimensions relative to the " +"maximal absolute one." +msgstr "" + +# 0dc17f012fd74505a297b3c0f4b3974a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:489 +msgid "" +"To read/write fields including several time steps medcoupling provides " +"MEDFileFieldMultiTS_ class. To write all time steps it is necessary just " +"to append them to MEDFileFieldMultiTS:" +msgstr "" + +# 06c612fe69ff4f86abd4620ac21a2732 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_movement.rst:497 +msgid "" +"To read a time step with a known *iteration* and *order* MEDFileField1TS " +"can be used as shown above. To iterate through all time steps, use " +"MEDFileFieldMultiTS as following:" +msgstr "" + +# b61ac138c6a642709e6c29b98a76f155 +#~ msgid "" +#~ msgstr "" + +# b61ac138c6a642709e6c29b98a76f155 +#~ msgid "" +#~ "MEDCouplingUMesh_ class represents a general" +#~ " case unstructured mesh. Data of " +#~ "MEDCouplingUMesh is defined in several " +#~ "steps." +#~ msgstr "" + +# 0e48dc2e04b74ad99b48aca15457b965 +#~ msgid "" +#~ "To get access to full power of " +#~ "MED file, for example to define " +#~ "groups of cells, it is necessary " +#~ "to use the advanced medcoupling API, " +#~ "namely class MEDFileUMesh." +#~ msgstr "" + +# 1076773b668d4033bc6b04bc321b1391 +#~ msgid "" +#~ "Having *field* on *mesh* we can " +#~ "write it using MEDFileField1TS class, " +#~ "which is a part of advanced " +#~ "medcoupling API, as following:" +#~ msgstr "" + +# 0dc17f012fd74505a297b3c0f4b3974a +#~ msgid "" +#~ "To read/write fields including several " +#~ "time steps medcoupling provides " +#~ "MEDFileFieldMultiTS class. To write all " +#~ "time steps it is necessary just to" +#~ " append them to MEDFileFieldMultiTS:" +#~ msgstr "" + diff --git a/doc/user/locale/fr/LC_MESSAGES/data_optimization.po b/doc/user/locale/fr/LC_MESSAGES/data_optimization.po new file mode 100644 index 000000000..1f36355c5 --- /dev/null +++ b/doc/user/locale/fr/LC_MESSAGES/data_optimization.po @@ -0,0 +1,94 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2015-2017, Geay, Bruneton +# This file is distributed under the same license as the MEDCoupling User's +# Guide package. +# FIRST AUTHOR , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: MEDCoupling User's Guide 8.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-14 18:39+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.0\n" + +# 3d45553b7a9f40fdb450a39e729da240 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:2 +msgid "Data optimization for numerical codes" +msgstr "" + +# 4f02edff745949ce87a74a871528f90c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:7 +msgid "Renumbering to improve locality" +msgstr "" + +# 04d6971564954432bbdb709e798ae9ae +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:9 +msgid "" +"A mesher (like SMESH) often generates a scattered cell distribution in " +"output unstructured mesh. So a common task for simulation codes is the " +"reordering for a better locality." +msgstr "" + +# 23a9adae715e4927ba607baeee4e9bd8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:12 +msgid "medcoupling can do that simply by doing" +msgstr "" + +# 08624425429c47838b823e56be5654d5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:21 +msgid "" +"Numbering by MEFISTO mesher (to the left) and the same mesh after " +"renumbering (to the right)" +msgstr "" + +# 252654c1033f4c7d84871817dfd303f8 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:23 +msgid "" +"RenumberingFactory method creates a renumbering algorithm of a specified " +"type: either \"Boost\" or \"Metis\"." +msgstr "" + +# 3fd45665c486463fb673adf2960ab93c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:26 +msgid "Partitionning for multi procs" +msgstr "" + +# 19047110285f45c0850349ca56a3b89a +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:28 +msgid "" +"For simulation codes following the SPMD paradigm, the partitionning is a " +"key step. medcoupling can perform this partition. Here is an example of " +"partitioning mesh *m* into 4 parts and retrieving the first part:" +msgstr "" + +# de69e5f7020f4018ba02c0750e22e1f5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:38 +msgid "" +"A whole mesh *m* (to the left) and one fourth of it *part0* (to the " +"right) got using the above code" +msgstr "" + +# 1880202f2f36423783e4985b9ee5f3a5 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:40 +msgid "It's then possible to add a layer or more of cells." +msgstr "" + +# d857084c15fa4a249a2d30a064924b61 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/data_optimization.rst:49 +msgid "*part0* (to the left) and *part0_with_layer* (to the right)" +msgstr "" + +# 252654c1033f4c7d84871817dfd303f8 +#~ msgid "" +#~ "RenumberingFactory method creates a " +#~ "renumbering algorithm of a specified " +#~ "type, either \"Boost\" or \"Metis\"." +#~ msgstr "" + diff --git a/doc/user/locale/fr/LC_MESSAGES/index.po b/doc/user/locale/fr/LC_MESSAGES/index.po new file mode 100644 index 000000000..b5d58c28b --- /dev/null +++ b/doc/user/locale/fr/LC_MESSAGES/index.po @@ -0,0 +1,80 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2015-2017, Geay, Bruneton +# This file is distributed under the same license as the MEDCoupling User's +# Guide package. +# FIRST AUTHOR , 2018. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: MEDCoupling User's Guide 8.4.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-05-14 14:14+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.0\n" + +# d5fd546e5eed4ca6b9ae64e0bc6f82ae +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:6 +msgid "medcoupling user's manual" +msgstr "" + +# d7e07c0e3e2c4ad8946fc5f5e9b6076c +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:8 +msgid "" +"medcoupling gathers several powerful functionalities around the input and" +" output data of field-physics-oriented simulation codes. Data manipulated" +" by medcoupling are objects relative to fields for simulation codes." +msgstr "" + +# e2b0b08deb9140f5aec2281f5a92406e +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:10 +msgid "medcoupling functionalities are accessible through python modules." +msgstr "" + +# a5d7fa06dcc54e7cba06044177d32d31 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:16 +msgid "medcoupling functionalities can be split into 4 categories:" +msgstr "" + +# f7ecb5f67bcd4e7d81d3bf38908470db +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:13 +msgid "" +":doc:`Data movement `: read/write from/to file, reduce, " +"extract, duplicate, aggregate, compare, exchange data memory to memory " +"across process (image of multifile to file)" +msgstr "" + +# e70dacb1f9c34b239f4299dae290d659 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:14 +msgid "" +":doc:`Data analysis `: extract/gather information in data " +"to transform it in a condensate workable data (not necessarely field " +"linked) for further use." +msgstr "" + +# 812aefee67c649e1a01e529c27d913d3 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:15 +msgid "" +":doc:`Data conversion `: interpolate, project, repare, " +"decimate, format convertion to make discuss simulation codes each other" +msgstr "" + +# 9e2f1999a5a34f94ad6da630d258b134 +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:16 +msgid "" +":doc:`Data optimization ` for simulation code : " +"renumbering, partition for multiprocessor codes" +msgstr "" + +# d7e99791163646238a89c6829f62817d +#: ../../../../MEDCOUPLING_SRC/doc/user/input/index.rst:18 +msgid "" +"First, this documentation introduces :doc:`fundamental concepts/objects " +"` of medcoupling for a better understanding of examples." +msgstr "" + diff --git a/doc/user/static/switchers.js.in b/doc/user/static/switchers.js.in new file mode 100644 index 000000000..b4c53e1ec --- /dev/null +++ b/doc/user/static/switchers.js.in @@ -0,0 +1,72 @@ +(function() { + 'use strict'; + + // Parses versions in URL segments like: + + var all_languages = { + 'en': 'English', + 'fr': 'French', + }; + + function build_language_select(current_language) { + var buf = [''); + return buf.join(''); + } + + function on_language_switch() { + var selected_language = $(this).children('option:selected').attr('value') + '/'; + var url = window.location.href; + + var current_language = language_segment_from_url(url); + var current_suffix = ""; + if (current_language != "") { + current_suffix = "_"; + } else { + current_language = "/"; + } + + var selected_suffix = "_"; + if (selected_language == 'en/') { // Special 'default' case for english. + selected_language = ''; + selected_suffix = "/"; + } + + var new_url = url.replace('/user/html' + current_suffix + current_language, + '/user/html' + selected_suffix + selected_language); + if (new_url != url) { + window.location.href = new_url; + } + } + + // Returns the path segment of the language as a string, like 'fr/' + // or '' if not found. + function language_segment_from_url(url) { + var language_regexp = '\/user/html_([a-z]{2}(?:-[a-z]{2})?/)'; + var match = url.match(language_regexp); + if (match !== null) + return match[1]; + return ''; + } + + $(document).ready(function() { + if(@BUILD_LANGUAGE_SWITCHER@) { + var release = DOCUMENTATION_OPTIONS.VERSION; + var language_segment = language_segment_from_url(window.location.href); + var current_language = language_segment.replace(/\/+$/g, '') || 'English'; + + var language_select = build_language_select(current_language); + + $('.language_switcher_placeholder').html(language_select); + $('.language_switcher_placeholder select').bind('change', on_language_switch); + } + }); +})(); diff --git a/doc/user/templates/layout.html b/doc/user/templates/layout.html new file mode 100644 index 000000000..94d467b51 --- /dev/null +++ b/doc/user/templates/layout.html @@ -0,0 +1,30 @@ +{% extends "!layout.html" %} + +{% block rootrellink %} + {{ language or 'English' }} + {{ super() }} +{% endblock %} + +{% block extrahead %} + +{{ super() }} +{% endblock %} + +{%- block sidebarlogo %} +{{ super() }} +{%- +include "searchbox.html" +%} +

+{%- endblock %} +{%- block sidebarsearch %} +{%- endblock %} + +{%- block footer %} +

+ {{ super() }} +{%- endblock %} diff --git a/src/MEDCoupling/MEDCouplingFieldDouble.cxx b/src/MEDCoupling/MEDCouplingFieldDouble.cxx index d88b627f2..a1966c945 100644 --- a/src/MEDCoupling/MEDCouplingFieldDouble.cxx +++ b/src/MEDCoupling/MEDCouplingFieldDouble.cxx @@ -1283,7 +1283,7 @@ void MEDCouplingFieldDouble::applyFunc(int nbOfComp, double val) * - "2*x + z" produces (5.,5.,5.,5.) * - "2*x + 0*y + z" produces (9.,9.,9.,9.) * - "2*x*IVec + (x+z)*LVec" produces (2.,0.,0.,4.) - * - "2*y*IVec + z*KVec + x" produces (7.,1.,1.,4.) + * - "2*y*IVec + z*KVec + x" produces (7.,1.,8.,1.) * * \param [in] nbOfComp - the number of components for \a this field to have. * \param [in] func - the function used to compute values of \a this field. @@ -1323,7 +1323,7 @@ void MEDCouplingFieldDouble::applyFunc(int nbOfComp, const std::string& func) * - "2*x + z" produces (5.,5.,5.,5.) * - "2*x + 0*y + z" produces (9.,9.,9.,9.) * - "2*x*IVec + (x+z)*LVec" produces (2.,0.,0.,4.) - * - "2*y*IVec + z*KVec + x" produces (7.,1.,1.,4.) + * - "2*y*IVec + z*KVec + x" produces (7.,1.,8.,1.) * * \param [in] nbOfComp - the number of components for \a this field to have. * \param [in] func - the function used to compute values of \a this field. diff --git a/src/MEDCoupling_Swig/MEDCouplingExamplesTest.py b/src/MEDCoupling_Swig/MEDCouplingExamplesTest.py index b5e41a09f..fb60d96a8 100644 --- a/src/MEDCoupling_Swig/MEDCouplingExamplesTest.py +++ b/src/MEDCoupling_Swig/MEDCouplingExamplesTest.py @@ -2115,20 +2115,22 @@ class MEDCouplingBasicsTest(unittest.TestCase): # ! [PySnippetUMeshStdBuild1_2] # ! [PySnippetUMeshStdBuild1_3] mesh.allocateCells(5)#You can put more than 5 if you want but not less. + # adding cells mesh.insertNextCell(NORM_QUAD4,nodalConnPerCell[:4]) mesh.insertNextCell(NORM_TRI3,nodalConnPerCell[4:7]) mesh.insertNextCell(NORM_TRI3,nodalConnPerCell[7:10]) mesh.insertNextCell(NORM_QUAD4,nodalConnPerCell[10:14]) mesh.insertNextCell(NORM_QUAD4,nodalConnPerCell[14:]) + # compacting mesh.finishInsertingCells() # ! [PySnippetUMeshStdBuild1_3] # ! [PySnippetUMeshStdBuild1_4] coordsArr=DataArrayDouble(coords,9,3)#here coordsArr are declared to have 3 components, mesh will deduce that its spaceDim==3. mesh.setCoords(coordsArr)#coordsArr contains 9 tuples, that is to say mesh contains 9 nodes. # ! [PySnippetUMeshStdBuild1_4] -# ! [PySnippetUMeshStdBuild1_5] # ! [PySnippetUMeshStdBuild1_5] mesh.checkConsistencyLight() +# ! [PySnippetUMeshStdBuild1_5] return def testExampleCMeshStdBuild1(self): diff --git a/src/MEDCoupling_Swig/UsersGuideExamplesTest.py b/src/MEDCoupling_Swig/UsersGuideExamplesTest.py new file mode 100644 index 000000000..c6fb501f9 --- /dev/null +++ b/src/MEDCoupling_Swig/UsersGuideExamplesTest.py @@ -0,0 +1,616 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2016 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from MEDCoupling import * +from math import pi, sqrt + +# ! [PySnippetUMeshStdBuild1_1] +coords=[-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., + 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0. ] +nodalConnPerCell=[0,3,4,1, 1,4,2, 4,5,2, 6,7,4,3, 7,8,5,4] +# ! [PySnippetUMeshStdBuild1_1] +# ! [PySnippetUMeshStdBuild1_2] +mesh=MEDCouplingUMesh("My2DMesh",2) +# ! [PySnippetUMeshStdBuild1_2] +# ! [PySnippetUMeshStdBuild1_3] +mesh.allocateCells(5)#You can put more than 5 if you want but not less. +# adding cells +mesh.insertNextCell(NORM_QUAD4,nodalConnPerCell[:4]) +mesh.insertNextCell(NORM_TRI3,nodalConnPerCell[4:7]) +mesh.insertNextCell(NORM_TRI3,nodalConnPerCell[7:10]) +mesh.insertNextCell(NORM_QUAD4,nodalConnPerCell[10:14]) +mesh.insertNextCell(NORM_QUAD4,nodalConnPerCell[14:]) +# compacting +mesh.finishInsertingCells() +# ! [PySnippetUMeshStdBuild1_3] +# ! [PySnippetUMeshStdBuild1_4] +coordsArr=DataArrayDouble(coords,9,3)#here coordsArr are declared to have 3 components, mesh will deduce that its spaceDim==3. +mesh.setCoords(coordsArr)#coordsArr contains 9 tuples, that is to say mesh contains 9 nodes. +# ! [PySnippetUMeshStdBuild1_4] +# ! [PySnippetUMeshStdBuild1_5] +mesh.checkConsistencyLight() +# ! [PySnippetUMeshStdBuild1_5] + +# ! [PySnippetCMeshStdBuild1_1] +XCoords=[-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22] # 9 values along X +YCoords=[0.,0.1,0.37,0.45,0.47,0.49,1.007] # 7 values along Y +arrX=DataArrayDouble(XCoords) +arrX.setInfoOnComponent(0,"X [m]") +arrY=DataArrayDouble(YCoords) +arrY.setInfoOnComponent(0,"Y [m]") +# ! [PySnippetCMeshStdBuild1_1] +# ! [PySnippetCMeshStdBuild1_2] +mesh=MEDCouplingCMesh("My2D_CMesh") +mesh.setCoords(arrX,arrY) +# ! [PySnippetCMeshStdBuild1_2] + +nodalConnPerCell=range(4*4) +# ! [GU_MEDCoupling1SGTUMesh_0] +mesh=MEDCoupling1SGTUMesh("myQuadMesh",NORM_QUAD4) +mesh.allocateCells(3) +mesh.insertNextCell(nodalConnPerCell[:4]) +mesh.insertNextCell(nodalConnPerCell[4:8]) +mesh.insertNextCell(nodalConnPerCell[8:12]) +# ! [GU_MEDCoupling1SGTUMesh_0] + +# ! [GU_MEDCoupling1SGTUMesh_1] +polymesh=MEDCoupling1DGTUMesh("myPolyhedra",NORM_POLYHED) +polymesh.allocateCells(1) +polymesh.insertNextCell([0,1,2,3,-1,7,6,5,4,-1,0,4,5,1,-1,1,5,6,2,-1,3,2,6,7,-1,0,3,7,4]) +# ! [GU_MEDCoupling1SGTUMesh_1] + +#! [UG_DataArrayDouble_0] +d=DataArrayDouble([1,2,3,4,5,6],3,2) +#! [UG_DataArrayDouble_0] +#! [UG_DataArrayDouble_1] +d=DataArrayDouble([(1,2),(3,4),(5,6)]) +#! [UG_DataArrayDouble_1] +#! [UG_DataArrayDouble_2] +d=DataArrayDouble([(1,2,3),(4,5,6)]) +#! [UG_DataArrayDouble_2] +#! [UG_DataArrayDouble_3] +d.rearrange(2) +#! [UG_DataArrayDouble_3] +#! [UG_DataArrayDouble_4] +i=DataArrayInt([(1,2,3),(4,5,6)]) +f=DataArrayFloat([(1,2,3),(4,5,6)]) +#! [UG_DataArrayDouble_4] + +#! [UG_MEDCouplingCurveLinearMesh_0] +m=MEDCouplingCurveLinearMesh("myCurveLinearMesh") +m.setNodeGridStructure([2,3]) +#! [UG_MEDCouplingCurveLinearMesh_0] +#! [UG_MEDCouplingCurveLinearMesh_1] +coords=DataArrayDouble([0.,0., 2.,0., 0.,1., 1.9,1.1, 0.3,1.9, 2.2,2.1],6,2) +coords.setInfoOnComponents(["X [m]","Y [m]"]) +m.setCoords(coords) +#! [UG_MEDCouplingCurveLinearMesh_1] +#! [UG_MEDCouplingCurveLinearMesh_2] +m.checkConsistencyLight() +#! [UG_MEDCouplingCurveLinearMesh_2] + +XCoords=[-0.3,0.,0.1,0.3,0.45,0.47,0.49,1.,1.22]; arrX=DataArrayDouble(XCoords) +YCoords=[0.,0.1,0.37,0.45,0.47,0.49,1.007]; arrY=DataArrayDouble(YCoords) +mesh=MEDCouplingCMesh("My2D_CMesh") +mesh.setCoords(arrX,arrY) +#! [UG_MEDCouplingFieldDouble_0] +fieldOnCells=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) +fieldOnCells.setName("MyTensorFieldOnCellOneTime") +fieldOnCells.setMesh(mesh) +#! [UG_MEDCouplingFieldDouble_0] +#! [UG_MEDCouplingFieldDouble_1] +fieldOnCells.setTimeUnit("ms") # Time unit is ms. +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 +#! [UG_MEDCouplingFieldDouble_1] +#! [UG_MEDCouplingFieldDouble_2] +array=DataArrayDouble() +array.alloc(fieldOnCells.getMesh().getNumberOfCells(),2) # Implicitly fieldOnCells will be a 2 components field. +array.fillWithValue(7.) +fieldOnCells.setArray(array) +fieldOnCells.checkConsistencyLight() +# fieldOnCells is now usable +# ... +#! [UG_MEDCouplingFieldDouble_2] +# +#! [UG_MEDCouplingFieldDouble_3] +fieldOnNodes=MEDCouplingFieldDouble(ON_NODES,ONE_TIME) +fieldOnNodes.setName("MyScalarFieldOnNodeOneTime") +fieldOnNodes.setMesh(mesh) +fieldOnNodes.setTimeUnit("ms") # Time unit is ms. +fieldOnNodes.setTime(4.22,2,-1) # Time attached is 4.22 ms, iteration id is 2 and order id (or sub iteration id) is -1 +array=DataArrayDouble() +array.alloc(fieldOnNodes.getMesh().getNumberOfNodes(),1) # Implicitly fieldOnNodes will be a 1 component field. +array.fillWithValue(7.) +fieldOnNodes.setArray(array) +fieldOnNodes.checkConsistencyLight() +# fieldOnNodes is now usable +# ... +#! [UG_MEDCouplingFieldDouble_3] +field=fieldOnCells +#! [UG_MEDCouplingFieldDouble_4] +print(mesh.getHeapMemorySizeStr()) +print(field.getHeapMemorySizeStr()) +print(array.getHeapMemorySizeStr()) +#! [UG_MEDCouplingFieldDouble_4] + +f=fieldOnCells +nbComp=3 +val=5. +#! [UG_MEDCouplingFieldDouble_5] +f.applyFunc(nbComp,val) +#! [UG_MEDCouplingFieldDouble_5] +#! [UG_MEDCouplingFieldDouble_6] +f.applyFunc(1,"sqrt(X*X+Y*Y+Z*Z)") +#! [UG_MEDCouplingFieldDouble_6] +f.applyFunc(nbComp,val) +#! [UG_MEDCouplingFieldDouble_7] +f.applyFunc(4,"IVec*y+JVec*x+KVec*z+LVec*sqrt(x*x+y*y+z*z)") +#! [UG_MEDCouplingFieldDouble_7] + +field=fieldOnCells +#! [UG_MEDCouplingFieldDouble_8] +points=DataArrayDouble([(0.,0.),(1,1)]) +values=field.getValueOnMulti(points) +#! [UG_MEDCouplingFieldDouble_8] +#! [UG_MEDCouplingFieldDouble_9] +field.integral(True) +field.integral(0,True) +#! [UG_MEDCouplingFieldDouble_9] +field.applyFunc(6,1.) +#! [UG_MEDCouplingFieldDouble_10] +assert(field.getNumberOfComponents()==6) +diviatorfield=field.deviator() +#! [UG_MEDCouplingFieldDouble_10] + + +from MEDCouplingDataForTest import MEDCouplingDataForTest +mesh=MEDCouplingDataForTest.build2DTargetMesh_1(); +#! [UG_MEDCouplingGaussPointField_0] +fieldGauss=MEDCouplingFieldDouble.New(ON_GAUSS_PT,ONE_TIME); +fieldGauss.setMesh(mesh); +fieldGauss.setName("MyFirstFieldOnGaussPoint"); +fieldGauss.setTimeUnit("ms") # Time unit is ms. +fieldGauss.setTime(4.22,2,-1) # Time attached is 4.22 ms, iteration id is 2 and order id (or sub iteration id) is -1 +#! [UG_MEDCouplingGaussPointField_0] +#! [UG_MEDCouplingGaussPointField_1] +tria3CooRef=[ 0.0, 0.0, 1.0 , 0.0, 0.0, 1.0 ] +tria3CooGauss=[ 0.1, 0.8, 0.2, 0.7 ] +wg3=[0.3,0.3]; +fieldGauss.setGaussLocalizationOnType(NORM_TRI3,tria3CooRef,tria3CooGauss,wg3); +# +quad4CooRef=[-1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0] +quad4CooGauss=[ 0.3, 0.2, 0.2, 0.1, 0.2, 0.4, 0.15, 0.27 ] +wg4=[0.3,0.3,0.3,0.3]; +fieldGauss.setGaussLocalizationOnType(NORM_QUAD4,quad4CooRef,quad4CooGauss,wg4); +#! [UG_MEDCouplingGaussPointField_1] +#! [UG_MEDCouplingGaussPointField_2] +nbTuples=mesh.getNumberOfCellsWithType(NORM_TRI3)*len(wg3)+mesh.getNumberOfCellsWithType(NORM_QUAD4)*len(wg4) +array=DataArrayDouble.New(); +values=[float(i+1) for i in range(nbTuples)] +array.setValues(values,nbTuples,1); +fieldGauss.setArray(array); +fieldGauss.checkConsistencyLight(); +#! [UG_MEDCouplingGaussPointField_2] + +from MEDCouplingDataForTest import MEDCouplingDataForTest +m=MEDCouplingDataForTest.build2DTargetMesh_1(); +Ids=range(1,3) +#! [UG_ExtractForMeshes_0] +part=m[Ids] +#! [UG_ExtractForMeshes_0] +#! [UG_ExtractForMeshes_1] +subNodeIds=part.computeFetchedNodeIds() +#! [UG_ExtractForMeshes_1] +#! [UG_ExtractForMeshes_2] +m.getCoords()[subNodeIds] +#! [UG_ExtractForMeshes_2] +#! [UG_ExtractForMeshes_3] +part.zipCoords() +#! [UG_ExtractForMeshes_3] +#! [UG_ExtractForMeshes_4] +o2n=part.zipCoordsTraducer() +#! [UG_ExtractForMeshes_4] + +m2=MEDCouplingDataForTest.build3DExtrudedUMesh_1()[0] +#! [UG_ExtractForMeshes_5] +bn = m2.findBoundaryNodes() +#! [UG_ExtractForMeshes_5] +#! [UG_ExtractForMeshes_6] +bc = m2.getCellIdsLyingOnNodes(bn,False) +#! [UG_ExtractForMeshes_6] + +#! [UG_ExtractForMeshes_7] +m2.translate([1.,2.,3.]) +#! [UG_ExtractForMeshes_7] +#! [UG_ExtractForMeshes_8] +m2.getCoords()[:]+=DataArrayDouble([1.,2.,3.],1,3) +#! [UG_ExtractForMeshes_8] +import math +#! [UG_ExtractForMeshes_9] +m2.rotate([1,2,1],[0,1,0],math.pi/3) +#! [UG_ExtractForMeshes_9] +#! [UG_ExtractForMeshes_10] +MEDCouplingPointSet.Rotate3DAlg([1,2,1],[0,1,0],math.pi/3,m2.getCoords()) +#! [UG_ExtractForMeshes_10] + +#! [UG_ExtractForMeshes_11] +volPerCell=m2.getMeasureField(True) +#! [UG_ExtractForMeshes_11] +#! [UG_ExtractForMeshes_12] +volPerCell.getArray().accumulate() +#! [UG_ExtractForMeshes_12] +t1=-1 +#! [UG_ExtractForMeshes_13] +part=volPerCell.getArray().findIdsGreaterOrEqualTo(t1) +#! [UG_ExtractForMeshes_13] +#! [UG_ExtractForMeshes_14] +m2[part] +#! [UG_ExtractForMeshes_14] +#! [UG_ExtractForMeshes_15] +centers=m2.computeCellCenterOfMass() +#! [UG_ExtractForMeshes_15] +#! [UG_ExtractForMeshes_16] +(centers*volPerCell.getArray()).accumulate()/DataArrayDouble(volPerCell.accumulate()) +#! [UG_ExtractForMeshes_16] + +#! [UG_ExtractForMeshes_17] +m2.scale( [1,2,4], 6. ) +#! [UG_ExtractForMeshes_17] + +#! [UG_ExtractForMeshes_18] +ortho_field=m.buildOrthogonalField() +#! [UG_ExtractForMeshes_18] + +#! [UG_ExtractForMeshes_19] +ibc=m2.computeIsoBarycenterOfNodesPerCell() +#! [UG_ExtractForMeshes_19] + +#! [UG_ExtractForMeshes_20] +# make a structured mesh 1x5 +coords=DataArrayDouble(range(6)) +cmesh=MEDCouplingCMesh("cmesh") +cmesh.setCoords(coords,coords[:2]) + +# make a mesh with two zones +zmesh=cmesh.buildUnstructured()[0,1,3,4] + +# get cells ids of zones +zoneArrays=zmesh.partitionBySpreadZone() +print([ ids.getValues() for ids in zoneArrays]) +#! [UG_ExtractForMeshes_20] + +coordsArr=DataArrayDouble(range(6)) +mesh2d=MEDCouplingCMesh("mesh2d") +mesh2d.setCoords(coordsArr,coordsArr[:2]) +mesh2d=mesh2d.buildUnstructured() +mesh1d=MEDCouplingCMesh("mesh1d") +mesh1d.setCoords(coordsArr,coordsArr[:1]) +mesh1d=mesh1d.buildUnstructured() +mesh1d.rotate( [2.3,0], math.radians( 25 )) +mesh1d.translate( [0.2,0.4] ) +#! [UG_ExtractForMeshes_21] +m2d,m1d,a2d,a1d=MEDCouplingUMesh.Intersect2DMeshWith1DLine( mesh2d, mesh1d, 1e-12 ) +#! [UG_ExtractForMeshes_21] +#print ("a2d",a2d.getValues()) +#print (a1d.getValues()) + +mesh1=mesh2d.deepCopy() +mesh1.rotate( [2.3,0], math.radians( 25 )) +mesh2=mesh2d +#! [UG_ExtractForMeshes_22] +m,a1,a2=MEDCouplingUMesh.Intersect2DMeshes( mesh1, mesh2, 1e-12 ) +#! [UG_ExtractForMeshes_22] + + +points=DataArrayDouble([(0,0,0)]) +mesh=m2.computeSkin() +#! [UG_ExtractForMeshes_23] +dist,cells=mesh.distanceToPoints(points) +#! [UG_ExtractForMeshes_23] + +arr=DataArrayDouble([1,2,3,4,5,6],3,2) +a,b=2,5 +#! [UG_ExtractForArrays_0] +tupleIds = arr[:,0].findIdsInRange(a,b) +#! [UG_ExtractForArrays_0] +c,d=0,7 +#! [UG_ExtractForArrays_1] +tupleIds1 = arr.magnitude().findIdsInRange(c,d) +#! [UG_ExtractForArrays_1] +#! [UG_ExtractForArrays_2] +tupleIds2 = DataArrayInt.buildSubstraction(tupleIds,tupleIds1) +#! [UG_ExtractForArrays_2] + +valsArr1=DataArrayDouble(range(9*2),9,2) +field4 = MEDCouplingFieldDouble(ON_NODES) +field4.setArray(valsArr1) +mesh=MEDCouplingCMesh("My2D_CMesh") +coo=DataArrayDouble([0,1,2]) +mesh.setCoords(coo,coo) +field4.setMesh(mesh) +ids4=[1,2] +#! [UG_ExtractForFields_0] +subField = field4[ids4] +#! [UG_ExtractForFields_0] + +m4=MEDCouplingCMesh("box") +coo=DataArrayDouble(range(7)) +m4.setCoords(coo[:5],coo[:5],coo) +m4=m4.buildUnstructured() +valsArr1=m4.computeCellCenterOfMass() +valsArr1.applyFunc(1,"sqrt(X*X+Y*Y+Z*Z)") +field5 = MEDCouplingFieldDouble(ON_CELLS) +field5.setArray(valsArr1) +field5.setMesh(m4) +#! [UG_ExtractForFields_1] +origin=[0,0,2] +normvec=[-1,-1,6] +slice5=field5.extractSlice3D(origin,normvec,1e-10) +#! [UG_ExtractForFields_1] + +from MEDCouplingDataForTest import MEDCouplingDataForTest +m1=MEDCouplingDataForTest.build2DTargetMesh_1(); +m2=m1 +eps=1e-12 +#! [UG_MeshComparison_0] +m1.isEqual(m2,eps) +#! [UG_MeshComparison_0] +#! [UG_MeshComparison_1] +m1.isEqualWithoutConsideringStr(m2,eps) +#! [UG_MeshComparison_1] + +arr=DataArrayDouble(5) ; arr.iota() +m=MEDCouplingCMesh() ; m.setCoords(arr,arr) +m=m.buildUnstructured() +m1=m.deepCopy() +arr=DataArrayInt([0,3,1,4,2]) +m2=m1[arr] +#! [UG_MeshComparison_2] +a,_=m1.checkGeoEquivalWith(m2,20,1e-12) +assert(m1[a].isEqualWithoutConsideringStr(m2,1e-12)) +#! [UG_MeshComparison_2] +m3=m1 +m3.translate([100.,0]) +m1=MEDCouplingUMesh.MergeUMeshes([m3,m]) +m2=MEDCouplingUMesh.MergeUMeshes([m,m3]) +#! [UG_MeshComparison_3] +a,b=m1.checkGeoEquivalWith(m2,12,1e-12) +m2.renumberNodes(b,len(b)) +assert(m1[a].isEqualWithoutConsideringStr(m2,1e-12)) +#! [UG_MeshComparison_3] + + +coords = [0.,2.,4.] +coordsArr=DataArrayDouble(coords,3,1) +m4=MEDCouplingCMesh() +m4.setCoords(coordsArr,coordsArr,coordsArr) +m4=m4.buildUnstructured() +field1 = m4.fillFromAnalytic(ON_NODES,1,"x+y") +pts = [0.5,0.5,0.5,1.,1,1.] +#! [UG_CommonHandlingMesh_0] +assert(field1.getTypeOfField()==ON_NODES) +field1.getMesh().simplexize(PLANAR_FACE_5) +field1.getValueOnMulti(pts) +#! [UG_CommonHandlingMesh_0] + +from MEDCouplingDataForTest import MEDCouplingDataForTest +m2=MEDCouplingDataForTest.build2DTargetMesh_1(); +m2.changeSpaceDimension(3); +m1=MEDCouplingDataForTest.buildCU1DMesh_U(); +m1.changeSpaceDimension(3); +center=[0.,0.,0.] +vector=[0.,1.,0.] +m1.rotate(center,vector,-pi/2.); +#! [UG_CommonHandlingMesh_1] +m3=m2.buildExtrudedMesh(m1,0); +#! [UG_CommonHandlingMesh_1] + +#! [UG_CommonHandlingMesh_2] +m5=MEDCouplingUMesh.MergeUMeshes([m3,m4]) +#! [UG_CommonHandlingMesh_2] + +#! [UG_CommonHandlingMesh_3] +m1.convertLinearCellsToQuadratic(0) +#! [UG_CommonHandlingMesh_3] + +#! [UG_CommonHandlingMesh_4] +skin = m1.computeSkin() +#! [UG_CommonHandlingMesh_4] +#! [UG_CommonHandlingMesh_5] +#bc = m1.getCellIdsLyingOnNodes(bn,False) +#! [UG_CommonHandlingMesh_5] + +mesh3d=m3 +#! [UG_CommonHandlingMesh_6] +mesh1d,d,di,r,ri=mesh3d.explodeIntoEdges() +#! [UG_CommonHandlingMesh_6] +#! [UG_CommonHandlingMesh_7] +mesh2d,d,di,r,ri=mesh3d.buildDescendingConnectivity() +#! [UG_CommonHandlingMesh_7] + +mesh2d=MEDCouplingCMesh() +mesh2d.setCoords(coordsArr,coordsArr) +mesh2d=mesh2d.buildUnstructured() +eps=1e-12 +#! [UG_CommonHandlingMesh_8] +changedCells=mesh2d.conformize2D(eps) +#! [UG_CommonHandlingMesh_8] + +#! [UG_CommonHandlingMesh_9] +mesh2d.duplicateNodes([3,4]) +#! [UG_CommonHandlingMesh_9] + +m1d=MEDCouplingCMesh() +m1d.setCoords(coordsArr) +m1d=m1d.buildUnstructured() +#! [UG_CommonHandlingMesh_10] +m1d.renumberCells(m1d.orderConsecutiveCells1D().invertArrayN2O2O2N(m1d.getNumberOfCells())) +#! [UG_CommonHandlingMesh_10] + +skin=m3.computeSkin() +#! [UG_CommonHandlingMesh_11] +vec=[0,0,-1] +skin.orientCorrectly2DCells(vec,False) +#! [UG_CommonHandlingMesh_11] + +#! [UG_CommonHandlingMesh_12] +m3.orientCorrectlyPolyhedrons() +#! [UG_CommonHandlingMesh_12] + +#! [UG_CommonHandlingMesh_13] +m3.renumberCells(m3.rearrange2ConsecutiveCellTypes()) +m3.sortCellsInMEDFileFrmt() +#! [UG_CommonHandlingMesh_13] + +m=MEDCouplingCMesh() +m.setCoords(coordsArr[:2],coordsArr[:2]) +m=m.buildUnstructured() +#! [UG_CommonHandlingMesh_14] +m.renumberNodes([2,1,0,-1],3) +#! [UG_CommonHandlingMesh_14] + +#! [UG_CommonHandlingMesh_15] +mtet,n2ocells,np=m3.tetrahedrize(PLANAR_FACE_5) +#! [UG_CommonHandlingMesh_15] +#! [UG_CommonHandlingMesh_16] +m.mergeNodes(1e-12) +#! [UG_CommonHandlingMesh_16] + + +#! [UG_Projection_0] +srcCoo=DataArrayDouble([(0,0),(1,0),(3,0),(0,1),(1,1),(3,1)]) +src=MEDCouplingUMesh("src",2) +src.setCoords(srcCoo) +src.allocateCells() +src.insertNextCell(NORM_QUAD4,[0,3,4,1]) +src.insertNextCell(NORM_QUAD4,[1,4,5,2]) +# +trgCoo=DataArrayDouble([(0.5,0.5),(1.5,0.5),(1.5,1.5)]) +trg=MEDCouplingUMesh("trg",2) +trg.setCoords(trgCoo) +trg.allocateCells() +trg.insertNextCell(NORM_TRI3,[0,2,1]) +#! [UG_Projection_0] +from MEDCouplingRemapper import MEDCouplingRemapper +#! [UG_Projection_1] +rem=MEDCouplingRemapper() +rem.prepare(src,trg,"P0P0") +print(rem.getCrudeMatrix()) +#! [UG_Projection_1] +#! [UG_Projection_2] +srcF=MEDCouplingFieldDouble(ON_CELLS) +srcF.setMesh(src) +srcF.setArray(DataArrayDouble([3,4])) +srcF.setNature(IntensiveMaximum) +# +trgF=rem.transferField(srcF,-1) +#! [UG_Projection_2] +#! [UG_Projection_3] +rem=MEDCouplingRemapper() +rem.prepare(src,trg,"P0P1") +print(rem.getCrudeMatrix()) +#! [UG_Projection_3] +#! [UG_Projection_4] +rem=MEDCouplingRemapper() +rem.prepare(src,trg,"P1P0") +print(rem.getCrudeMatrix()) +#! [UG_Projection_4] + + +#! [UG_Projection_5] +coo=DataArrayDouble([(0.,0.,0.), (1,0,0), (0,1,0)]) +src=MEDCouplingUMesh("src",2) +src.setCoords(coo) +src.allocateCells(1) +src.insertNextCell(NORM_TRI3,[0,1,2]) +tgt = src.deepCopy() +rem=MEDCouplingRemapper() +rem.prepare(src,tgt,"P0P0") +print(rem.getCrudeMatrix()) +#! [UG_Projection_5] +#! [UG_Projection_6] +src.translate([0,0,1e-3]) +rem.prepare(src,tgt,"P0P0") +print(rem.getCrudeMatrix()) +#! [UG_Projection_6] +#! [UG_Projection_7] +rem.setBoundingBoxAdjustmentAbs( 1e-3 ) +rem.prepare(src,tgt,"P0P0") +print(rem.getCrudeMatrix()) +#! [UG_Projection_7] + +import math +#! [UG_Projection_8] +src.rotate([0,0,0],[0,1,0],math.pi/4) +rem.prepare(src,tgt,"P0P0") +print(rem.getCrudeMatrix()) +#! [UG_Projection_8] +#! [UG_Projection_9] +rem.setMaxDistance3DSurfIntersect( 0.1 ) +rem.prepare(src,tgt,"P0P0") +print(rem.getCrudeMatrix()) +#! [UG_Projection_9] + +#! [UG_Projection_10] +rem.setMaxDistance3DSurfIntersect( -1 ) # switch it off +rem.setMinDotBtwPlane3DSurfIntersect( 0.8 ) +rem.prepare(src,tgt,"P0P0") +print(rem.getCrudeMatrix()) +#! [UG_Projection_10] + +from MEDCouplingDataForTest import MEDCouplingDataForTest +m=MEDCouplingDataForTest.build2DTargetMesh_1(); +#! [UG_Optimization_0] +from MEDRenumber import RenumberingFactory +ren=RenumberingFactory("BOOST") +a,b=m.computeNeighborsOfCells() +n2o,_=ren.renumber(a,b) +mrenum=m[n2o] +#! [UG_Optimization_0] + +#! [UG_Optimization_1] +from MEDCoupling import MEDCouplingSkyLineArray +import MEDPartitioner +# prepare a MEDPartitioner +a,b=m.computeNeighborsOfCells() +sk=MEDCouplingSkyLineArray(b,a) +g=MEDPartitioner.MEDPartitioner.Graph(sk) +# compute partitioning into 4 parts +g.partGraph(4) +# get the 1st of parts of m +procIdOnCells=g.getPartition().getValuesArray() +p0=procIdOnCells.findIdsEqual(0) +part0=m[p0] +#! [UG_Optimization_1] +#! [UG_Optimization_2] +boundary_nodes_part0=part0.findBoundaryNodes() +boundary_cells_part0=p0[part0.getCellIdsLyingOnNodes(boundary_nodes_part0,False)] +# starting from knowledge of neighborhood it s possible to know the neighbors of boundary_cells_part0 +neighbors_boundary_cells_part0=MEDCouplingUMesh.ExtractFromIndexedArrays(boundary_cells_part0,a,b)[0] +neighbors_boundary_cells_part0.sort() +neighbors_boundary_cells_part0=neighbors_boundary_cells_part0.buildUnique() +# +layer_of_part0=neighbors_boundary_cells_part0.buildSubstraction(p0) +# +whole_part_with_layer=DataArrayInt.Aggregate([p0,layer_of_part0]) +whole_part_with_layer.sort() +part0_with_layer=m[whole_part_with_layer] +#! [UG_Optimization_2] + diff --git a/src/MEDCoupling_Swig/UsersGuideExamplesTest_numpy.py b/src/MEDCoupling_Swig/UsersGuideExamplesTest_numpy.py new file mode 100644 index 000000000..ad566904a --- /dev/null +++ b/src/MEDCoupling_Swig/UsersGuideExamplesTest_numpy.py @@ -0,0 +1,33 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2016 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from MEDCoupling import * +from math import pi, sqrt + +import numpy +import MEDCoupling +#! [UG_DataArrayNumpy_0] +# NumPy is an optional pre-requisite! +assert(MEDCoupling.MEDCouplingHasNumPyBindings()) +a=numpy.arange(20,dtype=numpy.int32) +d=DataArrayInt(a) # d owns data of a +e=DataArrayInt(a) # a not owned -> e only an access to chunk of a +a1=d.toNumPyArray() +#! [UG_DataArrayNumpy_0] diff --git a/src/MEDCoupling_Swig/tests.set b/src/MEDCoupling_Swig/tests.set index 4382ef42e..b7c02db0c 100644 --- a/src/MEDCoupling_Swig/tests.set +++ b/src/MEDCoupling_Swig/tests.set @@ -27,12 +27,14 @@ SET(BASE_TESTS MEDCouplingIntersectTest.py MEDCouplingExamplesTest.py MEDCouplingRemapperTest.py + UsersGuideExamplesTest.py ) # if numpy is used SET(NUMPY_TESTS MEDCouplingNumPyTest.py MEDCouplingPickleTest.py + UsersGuideExamplesTest_numpy.py ) SET(ALL_TESTS ${BASE_TESTS} ${NUMPY_TESTS}) diff --git a/src/MEDLoader/Swig/UsersGuideExamplesTest.py b/src/MEDLoader/Swig/UsersGuideExamplesTest.py new file mode 100644 index 000000000..d49a20222 --- /dev/null +++ b/src/MEDLoader/Swig/UsersGuideExamplesTest.py @@ -0,0 +1,186 @@ +# -*- coding: iso-8859-1 -*- +# Copyright (C) 2007-2016 CEA/DEN, EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# + +from MEDLoader import * +import os + +from MEDLoaderDataForTest import MEDLoaderDataForTest +m = MEDLoaderDataForTest.build1DMesh_1() +m.setName("mesh2") +#! [UG_ReadMeshFromFile_3] +m.checkConsecutiveCellTypesForMEDFileFrmt() +#! [UG_ReadMeshFromFile_3] +#! [UG_ReadMeshFromFile_0] +from MEDLoader import WriteMesh +WriteMesh("file2.med",m,True) +#! [UG_ReadMeshFromFile_0] +#! [UG_ReadMeshFromFile_1] +from MEDLoader import ReadMeshFromFile +m=ReadMeshFromFile("file2.med") +#! [UG_ReadMeshFromFile_1] +#! [UG_ReadMeshFromFile_2] +m=ReadMeshFromFile("file2.med","mesh2") +assert(m.getName()=="mesh2") +#! [UG_ReadMeshFromFile_2] + +mesh3D=MEDLoaderDataForTest.build3DMesh_1() +mesh2D=mesh3D.computeSkin() +mesh1D=mesh2D.computeSkin() +#! [UG_ReadMeshFromFile_4] +from MEDLoader import MEDFileUMesh +mm=MEDFileUMesh.New() +mm.setMeshAtLevel(0,mesh3D) +mm.setMeshAtLevel(-1,mesh2D) +#! [UG_ReadMeshFromFile_4] +otherCoordArray=mesh3D.getCoords() +#! [UG_ReadMeshFromFile_5] +mm.setCoords(otherCoordArray) +#! [UG_ReadMeshFromFile_5] +#! [UG_ReadMeshFromFile_6] +groupNodes=DataArrayInt([1,3,4,5]); groupNodes.setName("myNodes") +groupFaces=DataArrayInt([12,13,15]); groupFaces.setName("myFaces") +mm.addGroup(1,groupNodes) +mm.addGroup(-1,groupFaces) +#! [UG_ReadMeshFromFile_6] +oldName,newName="myNodes","myNodes2" +oldFamName,newFamName="Family_2","Family_3" +#! [UG_ReadMeshFromFile_7] +mm.changeGroupName(oldName,newName) +mm.changeFamilyName(oldFamName,newFamName) +#! [UG_ReadMeshFromFile_7] +#! [UG_ReadMeshFromFile_8] +mm.write("file.med",2) +#! [UG_ReadMeshFromFile_8] +mm=MEDFileUMesh.New() +#! [UG_ReadMeshFromFile_9] +mm.setMeshAtLevel(0,mesh3D,True) +#! [UG_ReadMeshFromFile_9] +pass + +from MEDLoaderDataForTest import MEDLoaderDataForTest +f=MEDLoaderDataForTest.buildVecFieldOnGauss_1(); +f.setName("Field1") +#! [UG_ReadField_0] +from MEDLoader import WriteField +WriteField("file.med",f,True) +#! [UG_ReadField_0] +#! [UG_ReadField_1] +from MEDLoader import ReadField +f=ReadField("file.med") +#! [UG_ReadField_1] +#! [UG_ReadField_2] +from MEDLoader import GetAllFieldNames +print(GetAllFieldNames("file.med")) +#! [UG_ReadField_2] +#! [UG_ReadField_3] +f=ReadField("file.med","Field1") +#! [UG_ReadField_3] +#! [UG_ReadField_4] +from MEDLoader import GetAllFieldIterations +print(GetAllFieldIterations("file.med","Field1")) +#! [UG_ReadField_4] +#! [UG_ReadField_5] +ts0,ts1=1,5 +f=ReadField("file.med","Field1",ts0,ts1) +#! [UG_ReadField_5] +fs = [ f ] +#! [UG_ReadField_6] +m=fs[0].getMesh() +WriteMesh("file5.med",m,True) +for f in fs: + assert(f.getMesh().getHiddenCppPointer()==m.getHiddenCppPointer()) + # extra line to insist on the fact that + WriteFieldUsingAlreadyWrittenMesh("file5.med",f) +#! [UG_ReadField_6] + +from MEDLoaderDataForTest import MEDLoaderDataForTest +fname="PyExamples1.med" +meshName="mesh" +fieldName="FieldOnAll" +iteration=3 +order=4 +m=MEDLoaderDataForTest.build2DMesh_3() +m.setName(meshName) +f=m.getMeasureField(False) +f=f.buildNewTimeReprFromThis(ONE_TIME,False) +f.setTime(5.5,iteration,order) +f.setName(fieldName) +mesh=m +field=f +level=0 +#! [UG_RWFieldAdv_0] +from MEDLoader import MEDFileUMesh, MEDFileField1TS +mm=MEDFileUMesh.New() +mm.setMeshAtLevel(0,mesh) +ff=MEDFileField1TS.New() +ff.setFieldNoProfileSBT(field) +mm.write(fname,2) +ff.write(fname,0) +#! [UG_RWFieldAdv_0] +#! [UG_RWFieldAdv_1] +profile=DataArrayInt([1,3,7]); profile.setName("pfl137") +fieldPartial=field[profile] +fieldPartial.setName("fieldPartial") +ff.setFieldProfile(fieldPartial,mm,level,profile) +ff.write(fname,0) +#! [UG_RWFieldAdv_1] +#! [UG_RWFieldAdv_2] +ff=MEDFileField1TS.New(fname,fieldName,iteration,order) +mm=MEDFileMesh.New(fname) +# you can choose an appropriate method +field=ff.field(mm) +field=ff.getFieldAtLevel(ON_CELLS,level) +field=ff.getFieldOnMeshAtLevel(ON_CELLS,level,mm) +#! [UG_RWFieldAdv_2] +#! [UG_RWFieldAdv_3] +maxDim,maxRelDims=ff.getNonEmptyLevels() +#! [UG_RWFieldAdv_3] + +fieldTS1 = f +fieldTS2 = f.deepCopy() +fieldTS2.setTime(4.5,iteration+1,order) +fieldPartialTS1 = fieldPartial +fieldPartialTS2 = fieldPartial.deepCopy() +fieldPartialTS1.setTime(4.0,iteration+2,order) +fieldPartialTS2.setTime(3.5,iteration+3,order) +fieldPartialTS1.setName( fieldTS1.getName() ) +fieldPartialTS2.setName( fieldTS1.getName() ) +fname="PyExamples2.med" +mm.write(fname,2) +#mm=MEDFileMesh.New(fname) +#! [UG_RWFieldAdv_4] +ff=MEDFileFieldMultiTS.New() +ff.appendFieldNoProfileSBT(fieldTS1) +ff.appendFieldNoProfileSBT(fieldTS2) +ff.appendFieldProfile(fieldPartialTS1,mm,level,profile) +ff.appendFieldProfile(fieldPartialTS2,mm,level,profile) +ff.write(fname,0) +#! [UG_RWFieldAdv_4] + +#! [UG_RWFieldAdv_5] +mm=MEDFileMesh.New(fname) +ff=MEDFileFieldMultiTS.New(fname,fieldName) +for ff1TS in ff: + iteration,order,time=ff1TS.getTime() + # you can choose an appropriate method + field=ff1TS.field(mm) + field=ff1TS.getFieldAtLevel(ON_CELLS,level) + field=ff1TS.getFieldOnMeshAtLevel(ON_CELLS,level,mm) +#! [UG_RWFieldAdv_5] diff --git a/src/MEDLoader/Swig/tests.set b/src/MEDLoader/Swig/tests.set index 7ff9acac6..07ebe51e8 100644 --- a/src/MEDLoader/Swig/tests.set +++ b/src/MEDLoader/Swig/tests.set @@ -22,6 +22,7 @@ SET(BASE_TESTS MEDLoaderTest4.py MEDLoaderExamplesTest.py SauvLoaderTest.py + UsersGuideExamplesTest.py ) # if numpy is used -- 2.39.2