From 0826d84c663a54a563fa98be9e1cc3a4b23dbcf7 Mon Sep 17 00:00:00 2001 From: abn Date: Tue, 13 Oct 2015 11:29:15 +0200 Subject: [PATCH] More classes on the SWIG doc and more info on array numbering. --- .../doxygen/doxfiles/appendix/med-file.dox | 4 +- .../doxygen/doxfiles/examples/examples.dox | 7 +- doc/user/doxygen/doxfiles/index.dox | 7 +- .../doxfiles/reference/arrays/numbering.dox | 41 ++++++-- .../doxygen/doxfiles/start/intro-start.dox | 5 +- doc/user/doxygen/doxfiles/start/start.dox | 2 +- .../doxygen/doxfiles/start/terminology.dox | 12 ++- doc/user/doxygen/doxy2swig/doxy2swig.cmake | 1 + doc/user/doxygen/figures/IndirectIndex.jpg | Bin 0 -> 16749 bytes doc/user/doxygen/figures/fine_mesh.png | Bin 0 -> 33886 bytes doc/user/doxygen/figures/geom.png | Bin 0 -> 19218 bytes src/MEDCoupling/MEDCouplingPointSet.cxx | 13 ++- src/MEDCoupling/MEDCouplingUMesh.cxx | 95 ++++++++++++------ 13 files changed, 125 insertions(+), 62 deletions(-) create mode 100644 doc/user/doxygen/figures/IndirectIndex.jpg create mode 100644 doc/user/doxygen/figures/fine_mesh.png create mode 100644 doc/user/doxygen/figures/geom.png diff --git a/doc/user/doxygen/doxfiles/appendix/med-file.dox b/doc/user/doxygen/doxfiles/appendix/med-file.dox index a1966550b..684015da8 100644 --- a/doc/user/doxygen/doxfiles/appendix/med-file.dox +++ b/doc/user/doxygen/doxfiles/appendix/med-file.dox @@ -25,8 +25,8 @@ and authored by Eric FAYOLLE (EdF R&D). \section med-file-struct What does it look like? The picture below shows an UML-like diagram of the MED file format. -We see for example that the mesh name is the unique key linking a \ref fields field -to its supporting \ref meshes mesh. +We see for example that the mesh name is the unique key linking a \ref fields "field" +to its supporting \ref meshes "mesh". \image html med-file-uml.png "Functional diagram of the MED file format" diff --git a/doc/user/doxygen/doxfiles/examples/examples.dox b/doc/user/doxygen/doxfiles/examples/examples.dox index bca1f40a8..29f9fa9a3 100644 --- a/doc/user/doxygen/doxfiles/examples/examples.dox +++ b/doc/user/doxygen/doxfiles/examples/examples.dox @@ -2,7 +2,10 @@ \page examples Code examples -\subpage medcouplingpyexamples -\subpage medcouplingcppexamples +Several code examples are provided with the library. +Be sure to take a look at the page \ref python-api before proceeding with the Python examples. + +- \subpage medcouplingpyexamples +- \subpage medcouplingcppexamples */ \ No newline at end of file diff --git a/doc/user/doxygen/doxfiles/index.dox b/doc/user/doxygen/doxfiles/index.dox index b06727287..e737c424e 100644 --- a/doc/user/doxygen/doxfiles/index.dox +++ b/doc/user/doxygen/doxfiles/index.dox @@ -33,15 +33,12 @@ This documentation is organized as follows: - Tutorial - MEDCoupling/MEDLoader in Python - \ref gui - \ref reference - - \ref numbering - - \ref arrays - - \ref meshes - - \ref fields + - \ref medcoupling - \ref medloader - \ref interpolation - \ref cpp - \ref distrib - - \ref tools + - \ref misc \if ENABLE_EXAMPLES - \ref examples - \ref medcouplingpyexamples diff --git a/doc/user/doxygen/doxfiles/reference/arrays/numbering.dox b/doc/user/doxygen/doxfiles/reference/arrays/numbering.dox index 4963b5744..0bb506765 100644 --- a/doc/user/doxygen/doxfiles/reference/arrays/numbering.dox +++ b/doc/user/doxygen/doxfiles/reference/arrays/numbering.dox @@ -46,9 +46,9 @@ Method in old to new mode that works on surjective applications : Sometimes the format old to new for surjections can be replaced by another format with 2 arrays. Less compact in memory. The \ref ParaMEDMEM::DataArrayInt::changeSurjectiveFormat "DataArrayInt::changeSurjectiveFormat" method performs that. -\section MEDCouplingArrayRenumberingN2O New to old mode +\section MEDCouplingArrayRenumberingN2O New-to-old mode -The new to old mode is particularly recommended for strictly injective and bijective permutations. +The new-to-old mode is particularly recommended for strictly injective and bijective permutations. This is particularly useful for methods that increase the number of entities like for example \ref ParaMEDMEM::MEDCouplingUMesh::simplexize "MEDCouplingUMesh::simplexize".\n All non static methods in \ref ParaMEDMEM::DataArrayDouble "DataArrayDouble" @@ -56,7 +56,7 @@ or \ref ParaMEDMEM::DataArrayInt "DataArrayInt" having as last letter \b R (mean capital works with the mode new to old. Let's consider a call to \ref ParaMEDMEM::MEDCouplingUMesh::simplexize "simplexize" that increases the number of cell from 4 cells to 6 cells.\n -In new to old mode the array \b MyInjection that specifies this injection will have 6 tuples +In new-to-old mode the array \b MyInjection that specifies this injection will have 6 tuples and 1 component. The content of the 5*1 values will be in {0,1,2,3}.\n If \b MyInjection equals [2,0,1,1,3,0] it means that : @@ -67,18 +67,47 @@ If \b MyInjection equals [2,0,1,1,3,0] it means that : - new id #4 comes from old id 3 - new id #5 comes from old id 0 -Method in new to old mode that works on bijective applications : +Method in new-to-old mode that works on bijective applications : - \ref ParaMEDMEM::DataArrayDouble::renumberR "DataArrayDouble::renumberR" - \ref ParaMEDMEM::DataArrayDouble::renumberInPlace "DataArrayDouble::renumberInPlaceR" -Method in new to old mode that works on surjective applications : +Method in new-to-old mode that works on surjective applications : - \ref ParaMEDMEM::DataArrayDouble::selectByTupleId "DataArrayDouble::selectByTupleId" - \ref ParaMEDMEM::DataArrayDouble::selectByTupleIdSafe "DataArrayDouble::selectByTupleIdSafe" - \ref ParaMEDMEM::DataArrayDouble::selectByTupleId2 "DataArrayDouble::selectByTupleId2" - \ref ParaMEDMEM::DataArrayDouble::selectByTupleRanges "DataArrayDouble::selectByTupleRanges" - +\section numbering-indirect Indirect indexing + +The indirect indexing format is made of two \ref arrays "arrays of int (DataArrayInt)" and +is used to describe a set of groups (a group being here understood as a simple pack of int identifiers). +Each group of identifier can for example represent a set of coincident nodes, or a set of nodes belonging +to the same cell, etc ... + +\image html IndirectIndex.jpg "Indirect indexing principle" + +Denoting \c tab and \c tabI the two arrays of the indirect indexing format, +we see at the top in the picture above the \c tab array, which contains n packs of identifiers +(first pack is 3,1,4,6, second pack is 4,3,2,6,5, etc ...), and below the array \c tabI +which provides the necessary offsets to extract a given pack from \c tab. + +This format is widely used internally (this is how the connectivity of +\ref MEDCouplingUMeshPage "unstructured cells" is stored for example), and is also returned by +many functions, e.g.: +- \ref ParaMEDMEM::MEDCouplingPointSet::findCommonCells "MEDCouplingPointSet::findCommonCells" +- \ref ParaMEDMEM::MEDCouplingPointSet::findCommonNodes "MEDCouplingPointSet::findCommonNodes" +- \ref ParaMEDMEM::MEDCouplingPointSet::getNodeIdsNearPoints "MEDCouplingPointSet::getNodeIdsNearPoints" +- \ref ParaMEDMEM::MEDCouplingUMesh::buildDescendingConnectivity "MEDCouplingUMesh::buildDescendingConnectivity" +- \ref ParaMEDMEM::MEDCouplingUMesh::computeNeighborsOfNodes "MEDCouplingUMesh::computeNeighborsOfNodes" +- \ref ParaMEDMEM::MEDCouplingUMesh::convertNodalConnectivityToDynamicGeoTypeMesh "MEDCouplingUMesh::convertNodalConnectivityToDynamicGeoTypeMesh" +- \ref ParaMEDMEM::MEDCouplingUMesh::setConnectivity "MEDCouplingUMesh::setConnectivity" +- \ref ParaMEDMEM::MEDCouplingUMesh::split2DCells "MEDCouplingUMesh::split2DCells" + +Some functions in the API to manipulate this format: +- \ref ParaMEDMEM::DataArrayInt::changeSurjectiveFormat "DataArrayInt::changeSurjectiveFormat" +- \ref ParaMEDMEM::MEDCouplingUMesh::ExtractFromIndexedArrays "(static) MEDCouplingUMesh::ExtractFromIndexedArrays" +- \ref ParaMEDMEM::MEDCouplingUMesh::ExtractFromIndexedArrays2 "(static) MEDCouplingUMesh::ExtractFromIndexedArrays2" */ \ No newline at end of file diff --git a/doc/user/doxygen/doxfiles/start/intro-start.dox b/doc/user/doxygen/doxfiles/start/intro-start.dox index d65830c32..51c6ca63f 100644 --- a/doc/user/doxygen/doxfiles/start/intro-start.dox +++ b/doc/user/doxygen/doxfiles/start/intro-start.dox @@ -8,11 +8,10 @@ of codes), or even for results post-processing. Corresponding computer codes can be viewed as software components accessing input \ref meshes "meshes" and \ref fields "fields" (with specific constraints) along with parameters -(datasets), and producing result \ref meshes "meshes" and \ref fields "fields". Each code presents by +(datasets), and producing output \ref meshes "meshes" and \ref fields "fields". Each code presents by construction the specificities of its discipline. -The \ref library "MED module" aims at pooling operations on \ref meshes "meshes" and -\ref fields "fields", facilitating +The \ref library "MED module" aims at pooling operations on those items, facilitating their use by various codes involved in a simulation process. This includes making codes communicate while preserving as much as possible the integrity of their content. diff --git a/doc/user/doxygen/doxfiles/start/start.dox b/doc/user/doxygen/doxfiles/start/start.dox index ae42ed88f..9780907b8 100644 --- a/doc/user/doxygen/doxfiles/start/start.dox +++ b/doc/user/doxygen/doxfiles/start/start.dox @@ -2,7 +2,7 @@ \page start Getting started If you are completly new to MED, this page will help you grasp the main concepts -used overall in the MED world, and have an idea of what you can achieve with MED. +used overall in the \ref library "MED world", and have an idea of what you can achieve with MED. The tutorial is also a good way to start. diff --git a/doc/user/doxygen/doxfiles/start/terminology.dox b/doc/user/doxygen/doxfiles/start/terminology.dox index cc7adc111..8d05a9f23 100644 --- a/doc/user/doxygen/doxfiles/start/terminology.dox +++ b/doc/user/doxygen/doxfiles/start/terminology.dox @@ -12,11 +12,17 @@ This domain can be anything from the representation of a building to the descrip molecular network found in a small piece of concrete. The geometrical domain is provided to the machine as a CAO modelisation (what you can build with the -GEOM module of SALOME for example). The numerical codes (e.g. FEM-based codes) +GEOM module of SALOME for example). + +\image html geom.png "Example geometry (CAO) of a cylinder" + +The numerical codes (e.g. FEM-based codes) are usually unable to work directly with such a format, and a spatial discretization of the domain has to be performed: the **meshing**. A **mesh** can hence roughly be seen as a discrete version of a continuous input geometry. The module SMESH in SALOME is typically dedicated to performing this task. +\image html fine_mesh.png "Example meshing of the above geometry" + A mesh is made of **cells** (the elementary spatial unit), which are typically simple polygons or polyhedrons. On this support, the code can read/store values in form of a **field**. A **field** is hence an @@ -35,8 +41,8 @@ More on this subject: When working with different codes, or when coupling codes, it is often the case that the initial problem has been modelised in two different ways. For example a thermic code might use a mesh made of tetrahedron -and a CFD code might use a mesh made of hexaedrons. The **interpolation mechanisms** provided in the MED library -allow the user to easily **"transfer"** field data from one representation to the other. +and a CFD code might use a mesh made of hexaedrons. The interpolation mechanisms provided in the MED library +allow the user to easily \b transfer field data from one representation to the other. In all its generality it is a complex task, covering many different use cases (do the two meshes overlap? do we want to conserve the total amount represented by the field?, etc...), justifying a dedicated section in diff --git a/doc/user/doxygen/doxy2swig/doxy2swig.cmake b/doc/user/doxygen/doxy2swig/doxy2swig.cmake index fd4908647..1e3ed568a 100644 --- a/doc/user/doxygen/doxy2swig/doxy2swig.cmake +++ b/doc/user/doxygen/doxy2swig/doxy2swig.cmake @@ -29,6 +29,7 @@ SET(_SWIG_DOC_SUFFIX "doc_class_") # MEDCoupling classes to include # SET(_classes_MEDCoupling + ParaMEDMEM_1_1MEDCouplingPointSet ParaMEDMEM_1_1MEDCouplingUMesh ParaMEDMEM_1_1MEDCouplingCMesh ParaMEDMEM_1_1MEDCouplingRemapper diff --git a/doc/user/doxygen/figures/IndirectIndex.jpg b/doc/user/doxygen/figures/IndirectIndex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dd4aceff9ac8cb4ca8ef4e14421d8a3a567cbf76 GIT binary patch literal 16749 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 literal 0 HcmV?d00001 diff --git a/doc/user/doxygen/figures/fine_mesh.png b/doc/user/doxygen/figures/fine_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..01b64e4ef4a7447b44d569fdb480c9817a851251 GIT binary patch literal 33886 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 KBvB538~A@g$N^{o literal 0 HcmV?d00001 diff --git a/doc/user/doxygen/figures/geom.png b/doc/user/doxygen/figures/geom.png new file mode 100644 index 0000000000000000000000000000000000000000..db02a3b9387fe965e4d3f766749e57991e025bab GIT binary patch literal 19218 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 == \a commIndex->back(). The caller * is to delete this array using decrRef() as it is no more needed. * \param [out] commIndex - the array dividing all ids stored in \a comm into - * groups of (ids of) coincident nodes. Its every value is a tuple + * groups of (ids of) coincident nodes (\ref numbering-indirect). Its every value is a tuple * index where a next group of nodes begins. For example the second * group of nodes in \a comm is described by following range of indices: * [ \a commIndex[1], \a commIndex[2] ). \a commIndex->getNumberOfTuples()-1 @@ -340,11 +339,11 @@ DataArrayInt *MEDCouplingPointSet::getNodeIdsNearPoint(const double *pos, double * parameter. * \param [in] eps - the lowest distance between (using infinite norm) a point and a node at which the node is * not returned by this method. - * \param [out] c - array returning ids of nodes located closer than \a eps to the + * \param [out] c - array (\ref numbering-indirect) returning ids of nodes located closer than \a eps to the * given points. The caller * is to delete this array using decrRef() as it is no more needed. * \param [out] cI - for each i-th given point, the array specifies tuples of \a c - * holding ids of nodes close to the i-th point.
The i-th value of \a cI is an + * holding ids of nodes close to the i-th point (\ref numbering-indirect).
The i-th value of \a cI is an * index of tuple of \a c holding id of a first (if any) node close to the * i-th given point. Difference between the i-th and (i+1)-th value of \a cI * (i.e. \a cI[ i+1 ] - \a cI[ i ]) defines number of nodes close to the i-th @@ -369,8 +368,8 @@ void MEDCouplingPointSet::getNodeIdsNearPoints(const double *pos, int nbOfPoints } /*! - * @param comm in param in the same format than one returned by findCommonNodes method. - * @param commI in param in the same format than one returned by findCommonNodes method. + * @param comm in param in the same format than one returned by findCommonNodes method (\ref numbering-indirect). + * @param commI in param in the same format than one returned by findCommonNodes method (\ref numbering-indirect). * @return the old to new correspondance array. */ DataArrayInt *MEDCouplingPointSet::buildNewNumberingFromCommonNodesFormat(const DataArrayInt *comm, const DataArrayInt *commIndex, diff --git a/src/MEDCoupling/MEDCouplingUMesh.cxx b/src/MEDCoupling/MEDCouplingUMesh.cxx index 7a6eb0cc4..d50bf73c2 100644 --- a/src/MEDCoupling/MEDCouplingUMesh.cxx +++ b/src/MEDCoupling/MEDCouplingUMesh.cxx @@ -697,9 +697,9 @@ private: * Creates a new MEDCouplingUMesh containing cells, of dimension one less than \a * this->getMeshDimension(), that bound cells of \a this mesh. In addition arrays * describing correspondence between cells of \a this and the result meshes are - * returned. The arrays \a desc and \a descIndx describe the descending connectivity, + * returned. The arrays \a desc and \a descIndx (\ref numbering-indirect) describe the descending connectivity, * i.e. enumerate cells of the result mesh bounding each cell of \a this mesh. The - * arrays \a revDesc and \a revDescIndx describe the reverse descending connectivity, + * arrays \a revDesc and \a revDescIndx (\ref numbering-indirect) describe the reverse descending connectivity, * i.e. enumerate cells of \a this mesh bounded by each cell of the result mesh. * \warning For speed reasons, this method does not check if node ids in the nodal * connectivity correspond to the size of node coordinates array. @@ -761,7 +761,7 @@ MEDCouplingUMesh *MEDCouplingUMesh::explode3DMeshTo1D(DataArrayInt *desc, DataAr * Creates a new MEDCouplingUMesh containing cells, of dimension one less than \a * this->getMeshDimension(), that bound cells of \a this mesh. In * addition arrays describing correspondence between cells of \a this and the result - * meshes are returned. The arrays \a desc and \a descIndx describe the descending + * meshes are returned. The arrays \a desc and \a descIndx (\ref numbering-indirect) describe the descending * connectivity, i.e. enumerate cells of the result mesh bounding each cell of \a this * mesh. This method differs from buildDescendingConnectivity() in that apart * from cell ids, \a desc returns mutual orientation of cells in \a this and the @@ -769,7 +769,7 @@ MEDCouplingUMesh *MEDCouplingUMesh::explode3DMeshTo1D(DataArrayInt *desc, DataAr * of two meshes is same, and a negative id means a reverse order of nodes. Since a * cell with id #0 can't be negative, the array \a desc returns ids in FORTRAN mode, * i.e. cell ids are one-based. - * Arrays \a revDesc and \a revDescIndx describe the reverse descending connectivity, + * Arrays \a revDesc and \a revDescIndx (\ref numbering-indirect) describe the reverse descending connectivity, * i.e. enumerate cells of \a this mesh bounded by each cell of the result mesh. * \warning For speed reasons, this method does not check if node ids in the nodal * connectivity correspond to the size of node coordinates array. @@ -815,13 +815,19 @@ MEDCouplingUMesh *MEDCouplingUMesh::buildDescendingConnectivity2(DataArrayInt *d /*! * \b WARNING this method do the assumption that connectivity lies on the coordinates set. - * For speed reasons no check of this will be done. This method calls MEDCouplingUMesh::buildDescendingConnectivity to compute the result. - * This method lists cell by cell in \b this which are its neighbors. To compute the result only connectivities are considered. + * For speed reasons no check of this will be done. This method calls + * MEDCouplingUMesh::buildDescendingConnectivity to compute the result. + * This method lists cell by cell in \b this which are its neighbors. To compute the result + * only connectivities are considered. * The neighbor cells of cell having id 'cellId' are neighbors[neighborsIndx[cellId]:neighborsIndx[cellId+1]]. + * The format of return is hence \ref numbering-indirect. * - * \param [out] neighbors is an array storing all the neighbors of all cells in \b this. This array is newly allocated and should be dealt by the caller. \b neighborsIndx 2nd output - * parameter allows to select the right part in this array. The number of tuples is equal to the last values in \b neighborsIndx. - * \param [out] neighborsIndx is an array of size this->getNumberOfCells()+1 newly allocated and should be dealt by the caller. This arrays allow to use the first output parameter \b neighbors. + * \param [out] neighbors is an array storing all the neighbors of all cells in \b this. This array is newly + * allocated and should be dealt by the caller. \b neighborsIndx 2nd output + * parameter allows to select the right part in this array (\ref numbering-indirect). The number of tuples + * is equal to the last values in \b neighborsIndx. + * \param [out] neighborsIndx is an array of size this->getNumberOfCells()+1 newly allocated and should be + * dealt by the caller. This arrays allow to use the first output parameter \b neighbors (\ref numbering-indirect). */ void MEDCouplingUMesh::computeNeighborsOfCells(DataArrayInt *&neighbors, DataArrayInt *&neighborsIndx) const { @@ -835,17 +841,21 @@ void MEDCouplingUMesh::computeNeighborsOfCells(DataArrayInt *&neighbors, DataArr } /*! - * This method is called by MEDCouplingUMesh::computeNeighborsOfCells. This methods performs the algorithm of MEDCouplingUMesh::computeNeighborsOfCells. - * This method is useful for users that want to reduce along a criterion the set of neighbours cell. This is typically the case to extract a set a neighbours, + * This method is called by MEDCouplingUMesh::computeNeighborsOfCells. This methods performs the algorithm + * of MEDCouplingUMesh::computeNeighborsOfCells. + * This method is useful for users that want to reduce along a criterion the set of neighbours cell. This is + * typically the case to extract a set a neighbours, * excluding a set of meshdim-1 cells in input descending connectivity. - * Typically \b desc, \b descIndx, \b revDesc and \b revDescIndx input params are the result of MEDCouplingUMesh::buildDescendingConnectivity. - * This method lists cell by cell in \b this which are its neighbors. To compute the result only connectivities are considered. + * Typically \b desc, \b descIndx, \b revDesc and \b revDescIndx (\ref numbering-indirect) input params are + * the result of MEDCouplingUMesh::buildDescendingConnectivity. + * This method lists cell by cell in \b this which are its neighbors. To compute the result only connectivities + * are considered. * The neighbor cells of cell having id 'cellId' are neighbors[neighborsIndx[cellId]:neighborsIndx[cellId+1]]. * * \param [in] desc descending connectivity array. - * \param [in] descIndx descending connectivity index array used to walk through \b desc. + * \param [in] descIndx descending connectivity index array used to walk through \b desc (\ref numbering-indirect). * \param [in] revDesc reverse descending connectivity array. - * \param [in] revDescIndx reverse descending connectivity index array used to walk through \b revDesc. + * \param [in] revDescIndx reverse descending connectivity index array used to walk through \b revDesc (\ref numbering-indirect). * \param [out] neighbors is an array storing all the neighbors of all cells in \b this. This array is newly allocated and should be dealt by the caller. \b neighborsIndx 2nd output * parameter allows to select the right part in this array. The number of tuples is equal to the last values in \b neighborsIndx. * \param [out] neighborsIndx is an array of size this->getNumberOfCells()+1 newly allocated and should be dealt by the caller. This arrays allow to use the first output parameter \b neighbors. @@ -882,13 +892,18 @@ void MEDCouplingUMesh::ComputeNeighborsOfCellsAdv(const DataArrayInt *desc, cons /*! * \b WARNING this method do the assumption that connectivity lies on the coordinates set. - * For speed reasons no check of this will be done. This method calls MEDCouplingUMesh::buildDescendingConnectivity to compute the result. - * This method lists node by node in \b this which are its neighbors. To compute the result only connectivities are considered. + * For speed reasons no check of this will be done. This method calls + * MEDCouplingUMesh::buildDescendingConnectivity to compute the result. + * This method lists node by node in \b this which are its neighbors. To compute the result + * only connectivities are considered. * The neighbor nodes of node having id 'nodeId' are neighbors[neighborsIndx[cellId]:neighborsIndx[cellId+1]]. * - * \param [out] neighbors is an array storing all the neighbors of all nodes in \b this. This array is newly allocated and should be dealt by the caller. \b neighborsIndx 2nd output - * parameter allows to select the right part in this array. The number of tuples is equal to the last values in \b neighborsIndx. - * \param [out] neighborsIdx is an array of size this->getNumberOfCells()+1 newly allocated and should be dealt by the caller. This arrays allow to use the first output parameter \b neighbors. + * \param [out] neighbors is an array storing all the neighbors of all nodes in \b this. This array + * is newly allocated and should be dealt by the caller. \b neighborsIndx 2nd output + * parameter allows to select the right part in this array (\ref numbering-indirect). + * The number of tuples is equal to the last values in \b neighborsIndx. + * \param [out] neighborsIdx is an array of size this->getNumberOfCells()+1 newly allocated and should + * be dealt by the caller. This arrays allow to use the first output parameter \b neighbors. */ void MEDCouplingUMesh::computeNeighborsOfNodes(DataArrayInt *&neighbors, DataArrayInt *&neighborsIdx) const { @@ -1794,8 +1809,9 @@ bool MEDCouplingUMesh::AreCellsEqualInPool(const std::vector& candidates, i } /*! - * This method find cells that are cells equal (regarding \a compType) in \a this. The comparison is specified by \a compType. - * This method keeps the coordiantes of \a this. This method is time consuming and is called + * This method find cells that are equal (regarding \a compType) in \a this. The comparison is specified + * by \a compType. + * This method keeps the coordiantes of \a this. This method is time consuming. * * \param [in] compType input specifying the technique used to compare cells each other. * - 0 : exactly. A cell is detected to be the same if and only if the connectivity is exactly the same without permutation and types same too. This is the strongest policy. @@ -1804,8 +1820,8 @@ bool MEDCouplingUMesh::AreCellsEqualInPool(const std::vector& candidates, i * - 2 : nodal. cell1 and cell2 are equal if and only if cell1 and cell2 have same type and have the same nodes constituting connectivity. This is the laziest policy. This policy * can be used for users not sensitive to orientation of cell * \param [in] startCellId specifies the cellId starting from which the equality computation will be carried out. By default it is 0, which it means that all cells in \a this will be scanned. - * \param [out] commonCellsArr - * \param [out] commonCellsIArr + * \param [out] commonCellsArr common cells ids (\ref numbering-indirect) + * \param [out] commonCellsIArr common cells ids (\ref numbering-indirect) * \return the correspondance array old to new in a newly allocated array. * */ @@ -3147,7 +3163,8 @@ std::set MEDCouplingUMesh::getTypesOfPart(con } /*! - * Defines the nodal connectivity using given connectivity arrays. Optionally updates + * Defines the nodal connectivity using given connectivity arrays in \ref numbering-indirect format. + * Optionally updates * a set of types of cells constituting \a this mesh. * This method is for advanced users having prepared their connectivity before. For * more info on using this method see \ref MEDCouplingUMeshAdvBuild. @@ -7350,6 +7367,12 @@ DataArrayInt *MEDCouplingUMesh::convertNodalConnectivityToStaticGeoTypeMesh() co return connOut.retn(); } +/*! + * Convert the nodal connectivity of the mesh so that all the cells are of dynamic types (polygon or quadratic + * polygon). This returns the corresponding new nodal connectivity in \ref numbering-indirect format. + * \param nodalConn + * \param nodalConnI + */ void MEDCouplingUMesh::convertNodalConnectivityToDynamicGeoTypeMesh(DataArrayInt *&nodalConn, DataArrayInt *&nodalConnIndex) const { static const char msg0[]="MEDCouplingUMesh::convertNodalConnectivityToDynamicGeoTypeMesh : nodal connectivity in this are invalid ! Call checkCoherency2 !"; @@ -10125,10 +10148,14 @@ bool IKGeo2DInternalMapper(const INTERP_KERNEL::ComposedEdge& c, const std::map< /// @endcond /** - * This method split some of edges of 2D cells in \a this. The edges to be split are specified in \a subNodesInSeg and in \a subNodesInSegI using index storage mode. - * To do the work this method can optionally needs information about middle of subedges for quadratic cases if a minimal creation of new nodes is wanted. - * So this method try to reduce at most the number of new nodes. The only case that can lead this method to add nodes if a SEG3 is split without information of middle. - * \b WARNING : is returned value is different from 0 a call to MEDCouplingUMesh::mergeNodes is necessary to avoid to have a non conform mesh. + * This method split some of edges of 2D cells in \a this. The edges to be split are specified in \a subNodesInSeg + * and in \a subNodesInSegI using \ref numbering-indirect storage mode. + * To do the work this method can optionally needs information about middle of subedges for quadratic cases if + * a minimal creation of new nodes is wanted. + * So this method try to reduce at most the number of new nodes. The only case that can lead this method to add + * nodes if a SEG3 is split without information of middle. + * \b WARNING : is returned value is different from 0 a call to MEDCouplingUMesh::mergeNodes is necessary to + * avoid to have a non conform mesh. * * \return int - the number of new nodes created (in most of cases 0). * @@ -10806,10 +10833,11 @@ bool MEDCouplingUMesh::RemoveIdsFromIndexedArrays(const int *idsToRemoveBg, cons } /*! - * This method works on a pair input (\b arrIn, \b arrIndxIn) where \b arrIn indexes is in \b arrIndxIn. + * This method works on a pair input (\b arrIn, \b arrIndxIn) where \b arrIn indexes is in \b arrIndxIn + * (\ref numbering-indirect). * This method returns the result of the extraction ( specified by a set of ids in [\b idsOfSelectBg , \b idsOfSelectEnd ) ). * The selection of extraction is done standardly in new2old format. - * This method returns indexed arrays using 2 arrays (arrOut,arrIndexOut). + * This method returns indexed arrays (\ref numbering-indirect) using 2 arrays (arrOut,arrIndexOut). * * \param [in] idsOfSelectBg begin of set of ids of the input extraction (included) * \param [in] idsOfSelectEnd end of set of ids of the input extraction (excluded) @@ -10878,10 +10906,11 @@ void MEDCouplingUMesh::ExtractFromIndexedArrays(const int *idsOfSelectBg, const } /*! - * This method works on a pair input (\b arrIn, \b arrIndxIn) where \b arrIn indexes is in \b arrIndxIn. + * This method works on a pair input (\b arrIn, \b arrIndxIn) where \b arrIn indexes is in \b arrIndxIn + * (\ref numbering-indirect). * This method returns the result of the extraction ( specified by a set of ids with a slice given by \a idsOfSelectStart, \a idsOfSelectStop and \a idsOfSelectStep ). * The selection of extraction is done standardly in new2old format. - * This method returns indexed arrays using 2 arrays (arrOut,arrIndexOut). + * This method returns indexed arrays (\ref numbering-indirect) using 2 arrays (arrOut,arrIndexOut). * * \param [in] idsOfSelectStart begin of set of ids of the input extraction (included) * \param [in] idsOfSelectStop end of set of ids of the input extraction (excluded) -- 2.39.2