447 lines
22 KiB
Diff
447 lines
22 KiB
Diff
diff -rupN med-4.1.0/config/cmake_files/medMacros.cmake med-4.1.0-new/config/cmake_files/medMacros.cmake
|
|
--- med-4.1.0/config/cmake_files/medMacros.cmake 2021-12-03 09:35:30.675827163 +0100
|
|
+++ med-4.1.0-new/config/cmake_files/medMacros.cmake 2021-12-03 09:32:31.894994147 +0100
|
|
@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5)
|
|
##
|
|
## Requires 1.10.x version
|
|
##
|
|
- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1)
|
|
+ IF (HDF5_VERSION VERSION_LESS 1.10.2)
|
|
MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.")
|
|
ENDIF()
|
|
##
|
|
diff -rupN med-4.1.0/src/ci/MEDfileCompatibility.c med-4.1.0-new/src/ci/MEDfileCompatibility.c
|
|
--- med-4.1.0/src/ci/MEDfileCompatibility.c 2021-12-03 09:35:30.676827162 +0100
|
|
+++ med-4.1.0-new/src/ci/MEDfileCompatibility.c 2021-12-03 09:33:26.292942149 +0100
|
|
@@ -71,7 +71,7 @@ MEDfileCompatibility(const char* const f
|
|
_hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease;
|
|
/* ISCRUTE(_hversionMMR); */
|
|
/* ISCRUTE(HDF_VERSION_NUM_REF); */
|
|
- if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE;
|
|
+ if (_hversionMMR >= HDF_VERSION_NUM_REF) *hdfok = MED_TRUE;
|
|
|
|
/* TODO : Vérifier si la version mineure HDF du fichier est supérieure
|
|
à la version mineure de la bibliothèque HDF utilisée :
|
|
@@ -113,7 +113,7 @@ MEDfileCompatibility(const char* const f
|
|
#if MED_NUM_MAJEUR != 4
|
|
#error "Don't forget to update the test version here when you change the major version of the library !"
|
|
#endif
|
|
-#if H5_VERS_MINOR > 10
|
|
+#if H5_VERS_MINOR > 12
|
|
#error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !"
|
|
#error "Cf. _MEDfileCreate ..."
|
|
#endif
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDattributeNumWrByName.c med-4.1.0-new/src/hdfi/_MEDattributeNumWrByName.c
|
|
--- med-4.1.0/src/hdfi/_MEDattributeNumWrByName.c 2020-03-11 10:36:37.000000000 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDattributeNumWrByName.c 2021-12-03 09:33:08.851958696 +0100
|
|
@@ -68,7 +68,7 @@ med_err _MEDattributeNumWrByName(med_idt
|
|
|
|
if ( (_attid=H5Aopen_by_name( pid, path, attname, H5P_DEFAULT, H5P_DEFAULT )) >= 0 ) {
|
|
|
|
- if ( H5Oget_info( pid, &_oinfo ) <0) {
|
|
+ if ( H5Oget_info( pid, &_oinfo, H5O_INFO_ALL ) <0) {
|
|
MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info");
|
|
goto ERROR;
|
|
}
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDattributeNumWr.c med-4.1.0-new/src/hdfi/_MEDattributeNumWr.c
|
|
--- med-4.1.0/src/hdfi/_MEDattributeNumWr.c 2020-03-11 10:36:37.000000000 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDattributeNumWr.c 2021-12-03 09:33:11.840955852 +0100
|
|
@@ -77,7 +77,7 @@ med_err _MEDattributeNumWr(med_idt pid,
|
|
|
|
if ( (_attid=H5Aopen( pid, attname, H5P_DEFAULT )) >= 0 ) {
|
|
|
|
- if ( H5Oget_info( pid, &_oinfo ) <0) {
|
|
+ if ( H5Oget_info( pid, &_oinfo, H5O_INFO_ALL ) <0) {
|
|
MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info");
|
|
goto ERROR;
|
|
}
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDcheckAttributeStringFunc.c med-4.1.0-new/src/hdfi/_MEDcheckAttributeStringFunc.c
|
|
--- med-4.1.0/src/hdfi/_MEDcheckAttributeStringFunc.c 2020-03-11 10:36:37.000000000 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDcheckAttributeStringFunc.c 2021-12-03 09:33:14.266953546 +0100
|
|
@@ -40,7 +40,7 @@ med_err _MEDcheckAttributeStringFunc(med
|
|
oinfo.type=H5G_LINK;
|
|
break;
|
|
case H5L_TYPE_HARD:
|
|
- if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
|
|
+ if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_ALL, H5P_DEFAULT ) <0) {
|
|
MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
|
|
SSCRUTE(lname);
|
|
}
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDchecknSublinkFunc.c med-4.1.0-new/src/hdfi/_MEDchecknSublinkFunc.c
|
|
--- med-4.1.0/src/hdfi/_MEDchecknSublinkFunc.c 2020-03-11 10:36:36.000000000 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDchecknSublinkFunc.c 2021-12-03 09:33:16.487951437 +0100
|
|
@@ -41,7 +41,7 @@ med_err _MEDchecknSublinkFunc(med_idt id
|
|
oinfo.type=H5G_LINK;
|
|
break;
|
|
case H5L_TYPE_HARD:
|
|
- if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
|
|
+ if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_ALL, H5P_DEFAULT ) <0) {
|
|
MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
|
|
SSCRUTE(lname);
|
|
}
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDdatagroupExist.c med-4.1.0-new/src/hdfi/_MEDdatagroupExist.c
|
|
--- med-4.1.0/src/hdfi/_MEDdatagroupExist.c 2020-03-11 10:36:37.000000000 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDdatagroupExist.c 2021-12-03 09:33:18.742949298 +0100
|
|
@@ -45,7 +45,7 @@ med_err _MEDdatagroupExist(const med_idt
|
|
|
|
case H5L_TYPE_HARD:
|
|
*isasoftlink = MED_FALSE;
|
|
- if ( H5Oget_info_by_name( gid, datagroupname, &_oinfo, H5P_DEFAULT ) <0) {
|
|
+ if ( H5Oget_info_by_name( gid, datagroupname, &_oinfo, H5O_INFO_ALL, H5P_DEFAULT ) <0) {
|
|
MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
|
|
SSCRUTE( datagroupname);
|
|
}
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDdatasetExist.c med-4.1.0-new/src/hdfi/_MEDdatasetExist.c
|
|
--- med-4.1.0/src/hdfi/_MEDdatasetExist.c 2020-03-11 10:36:37.000000000 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDdatasetExist.c 2021-12-03 09:33:24.158944167 +0100
|
|
@@ -47,7 +47,7 @@ med_err _MEDdatasetExist(const med_idt
|
|
|
|
case H5L_TYPE_HARD:
|
|
*isasoftlink = MED_FALSE;
|
|
- if ( H5Oget_info_by_name( gid, datasetname, &_oinfo, H5P_DEFAULT ) <0) {
|
|
+ if ( H5Oget_info_by_name( gid, datasetname, &_oinfo, H5O_INFO_ALL, H5P_DEFAULT ) <0) {
|
|
MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
|
|
SSCRUTE( datasetname);
|
|
}
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDfileCreate.c med-4.1.0-new/src/hdfi/_MEDfileCreate.c
|
|
--- med-4.1.0/src/hdfi/_MEDfileCreate.c 2021-12-03 09:35:30.677827161 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDfileCreate.c 2021-12-03 09:32:31.894994147 +0100
|
|
@@ -159,7 +159,7 @@ med_idt _MEDfileCreate(const char * cons
|
|
* En HDF5-1.10.0p1 cela n'a aucun effet !
|
|
* Un test autoconf permet de fixer un intervalle de version HDF à MED.
|
|
*/
|
|
-#if H5_VERS_MINOR > 10
|
|
+#if H5_VERS_MINOR > 12
|
|
#error "Don't forget to change the compatibility version of the library !"
|
|
#endif
|
|
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDfileOpen.c med-4.1.0-new/src/hdfi/_MEDfileOpen.c
|
|
--- med-4.1.0/src/hdfi/_MEDfileOpen.c 2021-12-03 09:35:30.677827161 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDfileOpen.c 2021-12-03 09:32:31.894994147 +0100
|
|
@@ -72,7 +72,7 @@ med_idt _MEDfileOpen(const char * const
|
|
|
|
• The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order).
|
|
*/
|
|
-#if H5_VERS_MINOR > 10
|
|
+#if H5_VERS_MINOR > 12
|
|
#error "Don't forget to change the compatibility version of the library !"
|
|
#endif
|
|
/* L'avantage de bloquer le modèle interne HDF5
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDlinkObjs.c med-4.1.0-new/src/hdfi/_MEDlinkObjs.c
|
|
--- med-4.1.0/src/hdfi/_MEDlinkObjs.c 2020-03-11 10:36:37.000000000 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDlinkObjs.c 2021-12-03 09:33:21.096947067 +0100
|
|
@@ -62,7 +62,7 @@ med_err _MEDlinkobjs(med_idt id,const ch
|
|
sur un lien hard
|
|
Sur un lien soft H5O_TYPE_UNKNOWN
|
|
*/
|
|
- if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
|
|
+ if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_ALL, H5P_DEFAULT ) <0) {
|
|
MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
|
|
SSCRUTE(lname);
|
|
}
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDmemFileOpen.c med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c
|
|
--- med-4.1.0/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:35:30.678827160 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:32:31.894994147 +0100
|
|
@@ -434,7 +434,7 @@ med_idt _MEDmemFileOpen(const char * con
|
|
goto ERROR;
|
|
}
|
|
|
|
-#if H5_VERS_MINOR > 10
|
|
+#if H5_VERS_MINOR > 12
|
|
#error "Don't forget to change the compatibility version of the library !"
|
|
#endif
|
|
if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) {
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDparFileCreate.c med-4.1.0-new/src/hdfi/_MEDparFileCreate.c
|
|
--- med-4.1.0/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:35:30.678827160 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:32:31.894994147 +0100
|
|
@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * c
|
|
* En HDF5-1.10.0p1 cela n'a aucun effet !
|
|
* Un test autoconf permet de fixer un intervalle de version HDF à MED.
|
|
*/
|
|
-#if H5_VERS_MINOR > 10
|
|
+#if H5_VERS_MINOR > 12
|
|
#error "Don't forget to change the compatibility version of the library !"
|
|
#endif
|
|
|
|
diff -rupN med-4.1.0/src/hdfi/_MEDparFileOpen.c med-4.1.0-new/src/hdfi/_MEDparFileOpen.c
|
|
--- med-4.1.0/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:35:30.679827159 +0100
|
|
+++ med-4.1.0-new/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:32:31.894994147 +0100
|
|
@@ -55,7 +55,7 @@ med_idt _MEDparFileOpen(const char * con
|
|
MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG);
|
|
goto ERROR;
|
|
}
|
|
-#if H5_VERS_MINOR > 10
|
|
+#if H5_VERS_MINOR > 12
|
|
#error "Don't forget to change the compatibility version of the library !"
|
|
#endif
|
|
if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) {
|
|
diff -rupN med-4.1.0/tools/medimport/2.3.6/_MEDconvertStringDatasets.c med-4.1.0-new/tools/medimport/2.3.6/_MEDconvertStringDatasets.c
|
|
--- med-4.1.0/tools/medimport/2.3.6/_MEDconvertStringDatasets.c 2020-03-11 10:36:40.000000000 +0100
|
|
+++ med-4.1.0-new/tools/medimport/2.3.6/_MEDconvertStringDatasets.c 2021-12-03 09:34:42.715870908 +0100
|
|
@@ -52,7 +52,7 @@ med_err _MEDconvertStringDatasets(med_id
|
|
oinfo.type=(H5O_type_t) H5G_LINK;
|
|
break;
|
|
case H5L_TYPE_HARD:
|
|
- if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) {
|
|
+ if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_ALL, H5P_DEFAULT ) <0) {
|
|
MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name");
|
|
SSCRUTE(lname);
|
|
}
|
|
diff -rupN med-4.1.0/tools/medimport/4.0.0/_MEDfieldValueUpdateEntityList41.c med-4.1.0-new/tools/medimport/4.0.0/_MEDfieldValueUpdateEntityList41.c
|
|
--- med-4.1.0/tools/medimport/4.0.0/_MEDfieldValueUpdateEntityList41.c 1970-01-01 01:00:00.000000000 +0100
|
|
+++ med-4.1.0-new/tools/medimport/4.0.0/_MEDfieldValueUpdateEntityList41.c 2020-03-11 10:52:20.000000000 +0100
|
|
@@ -0,0 +1,253 @@
|
|
+/* This file is part of MED.
|
|
+ *
|
|
+ * COPYRIGHT (C) 1999 - 2020 EDF R&D, CEA/DEN
|
|
+ * MED 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 3 of the License, or
|
|
+ * (at your option) any later version.
|
|
+ *
|
|
+ * MED 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 MED. If not, see <http://www.gnu.org/licenses/>.
|
|
+ */
|
|
+
|
|
+
|
|
+#include <med.h>
|
|
+#include <med_config.h>
|
|
+#include <med_outils.h>
|
|
+#include <string.h>
|
|
+#include <stdlib.h>
|
|
+
|
|
+/* Inclus par med.h.in */
|
|
+/* #include <stdint.h> */
|
|
+
|
|
+/* #define NDEBUG */
|
|
+/* #include <assert.h> */
|
|
+
|
|
+/* const char * const _MEDgetEntityListAttributeIName(const med_entity_type entitytype) { */
|
|
+/* switch( entitytype ) { */
|
|
+/* case MED_UNDEF_ENTITY_TYPE : return MED_NOM_LEN; break; */
|
|
+/* case MED_CELL : return MED_NOM_LGC; break; */
|
|
+/* case MED_NODE : return MED_NOM_LGN; break; */
|
|
+/* case MED_DESCENDING_FACE : return MED_NOM_LGF; break; */
|
|
+/* case MED_DESCENDING_EDGE : return MED_NOM_LGE; break; */
|
|
+/* case MED_NODE_ELEMENT : return MED_NOM_LGT; break; */
|
|
+/* case MED_STRUCT_ELEMENT : return MED_NOM_LGS; break; */
|
|
+/* } */
|
|
+/* } */
|
|
+/* /\*ALL : Toutes les étapes de calcul.*\/ */
|
|
+/* const char * const _MEDgetEntityListAttributeINameAll(const med_entity_type entitytype) { */
|
|
+/* switch( entitytype ) { */
|
|
+/* case MED_UNDEF_ENTITY_TYPE : return MED_NOM_LAA; break; */
|
|
+/* case MED_CELL : return MED_NOM_LCA; break; */
|
|
+/* case MED_NODE : return MED_NOM_LNA; break; */
|
|
+/* case MED_DESCENDING_FACE : return MED_NOM_LFA; break; */
|
|
+/* case MED_DESCENDING_EDGE : return MED_NOM_LEA; break; */
|
|
+/* case MED_NODE_ELEMENT : return MED_NOM_LTA; break; */
|
|
+/* case MED_STRUCT_ELEMENT : return MED_NOM_LSA; break; */
|
|
+/* } */
|
|
+/* } */
|
|
+
|
|
+
|
|
+/*Mise à jour de la liste des types d'entités/géométriques utilisés globlalement au niveau du datagroup _gid0 et
|
|
+ Mise à jour de la liste des types d'entités/géométriques utilisés localement au niveau du datagroup _gid1
|
|
+ Les gidname sont utilisés pour générér des messages d'erreur avec des informations significatives (todo : retrouver le nom avec l'objid)
|
|
+*/
|
|
+
|
|
+med_int _MEDfieldValueUpdateEntityList(const char * const gid0name ,
|
|
+ const char * const gid1name ,
|
|
+ const med_idt gid0 ,
|
|
+ const med_idt gid1 ,
|
|
+ const med_entity_type entitytype ,
|
|
+ const med_geometry_type geotype ,
|
|
+ const med_bool forentity ) {
|
|
+
|
|
+ med_bool _attexist = MED_FALSE;
|
|
+ med_err _ret = -1;
|
|
+ uint32_t _lentitytype1 = 0;
|
|
+ uint32_t _lentitytype2 = 0;
|
|
+ uint32_t _lentitytype1sav = 0;
|
|
+ uint32_t _lentitytype2sav = 0;
|
|
+ uint32_t _lgeotype = 0;
|
|
+ med_int _nsamelentitype = 0;
|
|
+ med_int _nsamelentitypesav = 0;
|
|
+ med_idt _gid = gid0;
|
|
+ med_idt _datagroup1 = gid1;
|
|
+ const char * _attname = NULL;
|
|
+ const char * _attallname = NULL;
|
|
+ const char * fieldname = gid0name;
|
|
+ const char * _datagroupname1 = gid1name;
|
|
+ med_entity_type _entytypeforattname = MED_UNDEF_ENTITY_TYPE;
|
|
+ int _it = 0;
|
|
+
|
|
+
|
|
+ /*Si l'on met à jour la liste des types géométriques (forentity==0), il faut récupérer :
|
|
+ - le nom de l'attribut qui les stocke pour l'entitytype passé en paramètre
|
|
+ - le nom de l'attribut qui stocke le nombre d'étapes de calcul qui ont la même liste
|
|
+ Sinon, on récupère, les noms d'attributs associés à la liste des type d'entités
|
|
+ */
|
|
+ if (! forentity) _entytypeforattname = entitytype;
|
|
+ _attname = _MEDgetEntityListAttributeIName (_entytypeforattname);
|
|
+ _attallname = _MEDgetEntityListAttributeINameAll (_entytypeforattname);
|
|
+
|
|
+ /* - La fonction MEDgetEntityGeometyTypeIt(entitytype,geotype) nous permet d'obtenir un numéro d'itération de type géométrique
|
|
+ (commence à 1 et est incrémental) que l'on associe à un numéro de bit d'un entier 32bits (1 entier pour chaque type d'entité)
|
|
+ - Cet entier est stocké pour chaque étape de calcul et globalement au champ (si au moins un type géométrique existe pour ce type d'entité).
|
|
+ Cela permet de limiter la taille du stockage et d'accéder directement par type d'entité aux types géométriques présents.
|
|
+ */
|
|
+ if (forentity)
|
|
+ _it=entitytype;
|
|
+ else
|
|
+ _it=MEDgetEntityGeometryTypeIt(entitytype, geotype)-1;
|
|
+
|
|
+ /* ISCRUTE_int(entitytype);ISCRUTE_int(geotype); */
|
|
+ /* SSCRUTE(MED_GET_ENTITY_TYPENAME[MEDgetEntityTypeIt(entitytype)]); */
|
|
+ /*TODO : Etudier la possibilité de récupérer le nom avec l'id de l'objet */
|
|
+
|
|
+ /* SSCRUTE(fieldname); */
|
|
+ /* SSCRUTE(MEDgetEntityTypeName(entitytype)); SSCRUTE(MEDgetGeometryTypeName(geotype)); */
|
|
+ /* SSCRUTE(_attname); SSCRUTE(_attallname); */
|
|
+
|
|
+ /*Lire l'attribut _attname s'il exite, sinon la valeur lue est nulle */
|
|
+ _MEDattributeExist(_gid,".",_attname,&_attexist);
|
|
+ if (_attexist) {
|
|
+/* if ( forentity) */
|
|
+ if (_MEDattributeInt32Rd(_gid,_attname,&_lentitytype1sav) < 0) {
|
|
+ MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
|
|
+ SSCRUTE(fieldname);SSCRUTE(_attname);goto ERROR;
|
|
+ }
|
|
+ }
|
|
+ _lentitytype1 = _lentitytype1sav;
|
|
+
|
|
+ /* _MEDset32bits(&_lentitytype1, MEDgetEntityTypeIt(entitytype)); */
|
|
+ /* On utilise directement la valeur de l'enum pour l'entitype, ainsi on utilise le décalage de 0 (on économise 1bit) */
|
|
+ /* Mise à jour de la liste d'entités/types géométriques au niveau du champ */
|
|
+ /* */
|
|
+ /* ISCRUTE_int8(_lentitytype1sav); */
|
|
+ /* _MEDset32bits(&_lentitytype1, MEDgetEntityTypeIt(entitytype)); */
|
|
+ /* Utilise le numéro d'itération pour le type géométrique du type d'entité donné pour positionner le bit de même position (-1) */
|
|
+ _MEDset32bits(&_lentitytype1, _it);
|
|
+ /* ISCRUTE_int8(_lentitytype1); */
|
|
+
|
|
+ /* Ecriture de la liste globale des types */
|
|
+ /*REM : Si l'attribut n'existait pas _lentitytype1sav == 0 et il ne se peut pas que _lentitytype1 == 0 même si entitytype == 0
|
|
+ à cause du _MEDsetNbits() */
|
|
+ if ( _lentitytype1sav != _lentitytype1 ) {
|
|
+/* if ( forentity) */
|
|
+ if ( _MEDattributeInt32Wr(_gid,_attname,&_lentitytype1) < 0) {
|
|
+ MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
|
|
+ SSCRUTE(fieldname);SSCRUTE(_attname);goto ERROR;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * Il faut mettre à jour au niveau 2 (étape de calcul)
|
|
+ * la liste des types d'entités ou des types géométriques d'entités utilisées
|
|
+ */
|
|
+ _MEDattributeExist(_datagroup1,".",_attname,&_attexist);
|
|
+ if (_attexist) {
|
|
+ if (_MEDattributeInt32Rd(_datagroup1,_attname,&_lentitytype2sav) < 0) {
|
|
+ MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
|
|
+ SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(_attname);goto ERROR;
|
|
+ }
|
|
+ }
|
|
+ _lentitytype2 = _lentitytype2sav;
|
|
+
|
|
+ /* Mise à jour de la liste d'entités*/
|
|
+ /* ISCRUTE_int8(_lentitytype2sav); */
|
|
+ _MEDset32bits(&_lentitytype2, _it);
|
|
+ /* ISCRUTE_int8(_lentitytype2); */
|
|
+
|
|
+ if ( _lentitytype2sav != _lentitytype2 )
|
|
+ if ( _MEDattributeInt32Wr(_datagroup1,_attname,&_lentitytype2) < 0) {
|
|
+ MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
|
|
+ SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(_attname);goto ERROR;
|
|
+ }
|
|
+
|
|
+ /* GESTION DU NOMBRE D'ETAPES DE CALCUL */
|
|
+
|
|
+ /* Il faut pouvoir indiquer à l'utilisateur qu'il n'a pas besoin d'interroger toutes les étapes de calcul
|
|
+ pour connaître la liste des types d'entités utilisées si cette liste est la même pour toutes les étapes.
|
|
+ On vérifie que la liste des types d'entités utilisées à cette étape de calcul est le même que celle au niveau du champ global :
|
|
+
|
|
+ - Si la liste des types d'entités ou des types géométriques d'entité utilisés globalement
|
|
+ avant l'appel à cette fonction était identique à la notre avant m.a.j. :
|
|
+ _lentitytype1sav == _lentitytype2sav =>
|
|
+ * Si la nouvelle liste est toujours identique :
|
|
+ Ne rien faire, on le change pas le nbre d'étapes de calcul ayant la même liste
|
|
+ * Si la nouvelle liste devient différente (ajout d'un nouveau type à la liste) :
|
|
+ positionner le nombre d'étapes de calcul ayant la même liste de types d'entités à 1 (la notre)
|
|
+ - Si la liste des types d'entités utilisés avant l'appel à cette fonction était différente
|
|
+ entre celle de tous les autres étapes de calcul et celle de notre étape de calcul :
|
|
+ _lentitytype1sav != _lentitytype2sav =>
|
|
+ * Si la nouvelle liste est identique incrémenter le nombre d'étapes de calcul ayant la même liste de types d'entités
|
|
+ * Si la nouvelle liste est toujours différente :
|
|
+ Si notre type d'entité n'appartenait pas à la liste globale initiale => 0 sinon Ne rien faire,
|
|
+ on le change pas le nbre d'étapes de calcul ayant la même liste.
|
|
+ */
|
|
+
|
|
+ /* Cree l'attribut _attallname s'il n'exite pas déjà au niveau 0, sinon lit sa valeur */
|
|
+ /* Nombre d'étapes de calcul partageant la même liste d'entités/types géométriques */
|
|
+ _MEDattributeExist(_gid,".",_attallname,&_attexist);
|
|
+ if (_attexist) {
|
|
+ if (_MEDattrEntierLire(_gid,_attallname,&_nsamelentitype) < 0) {
|
|
+ MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
|
|
+ SSCRUTE(fieldname);SSCRUTE(_attallname);goto ERROR;
|
|
+ }
|
|
+ } else
|
|
+ _nsamelentitype = 0;
|
|
+ _nsamelentitypesav = _nsamelentitype;
|
|
+
|
|
+ /** Il faut vérifier pour notre type d'entité indépendemment des autres déjà positionnées **/
|
|
+ /*(VERIF:) En HDF//, le mécanisme fonctionne car l'écriture d'attribut n'est pas // */
|
|
+ /* Si les listes de types d'entitées étaient identiques */
|
|
+ if ( _lentitytype1sav == _lentitytype2sav ) {
|
|
+ if ( (_lentitytype1sav != _lentitytype1 /*faux : idem _lentitytype2*/ ) || (!_lentitytype1sav) ) {
|
|
+ /*Le fait que l'on en ajoute ou en supprime un modifie le nbre d'étape de calcul ayant la meme liste */
|
|
+ /*Si on ajoute un nouveau type d'entite, il n'y a plus que notre étape en adéquation. */
|
|
+ _nsamelentitype=1;
|
|
+ /*La supression d'un type d'entité écrit en MED n'est pas possible*/
|
|
+ /* ISCRUTE(_nsamelentitype); */
|
|
+ } else {
|
|
+ /*Il n'y a rien à faire car notre liste de type est toujours la même que la globale*/
|
|
+ /* ISCRUTE(_nsamelentitype); */
|
|
+ }
|
|
+ } else {
|
|
+ /* Si les listes de types d'entitées étaient déjà différentes */
|
|
+ /*Si nos listes sont devenues les mêmes*/
|
|
+ if (_lentitytype1 == _lentitytype2) {
|
|
+ /*Les liste de types d'entités deviennent identiques, il faut alors incrémenter le nbre d'étapes utilisant
|
|
+ la même liste.*/
|
|
+ ++_nsamelentitype;
|
|
+ /* ISCRUTE(_nsamelentitype); */
|
|
+ } else {
|
|
+ /*Si nos listes ne sont pas devenues les mêmes*/
|
|
+ /*Ds ce cas de figure l'étape de calcul concernée n'utilisait pas
|
|
+ * la liste de types d'entité du champ (il n'était pas comptabilisé dans le Nb. d'étapes de même liste d'entité).
|
|
+ * La nouvelle liste d'entité utilisée par cette étape n'est toujours pas devenue la même que celle du champ.
|
|
+ * Soit parcequ'il lui manque toujours certains type d'entités, soit parcequ'il utilise un nouveau type d'entité.
|
|
+ */
|
|
+ /* Si notre type d'entité n'appartenait pas à la liste globale initiale => 0 sinon on ne fait rien */
|
|
+ if (!_MEDtest32bits(_lentitytype1sav,_it) ) _nsamelentitype=0;
|
|
+ /* ISCRUTE(_nsamelentitype); */
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if ( _nsamelentitypesav != _nsamelentitype ) {
|
|
+/* if ( forentity) */
|
|
+ if ( _MEDattributeIntWr(_gid,_attallname,&_nsamelentitype) < 0) {
|
|
+ MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG);
|
|
+ SSCRUTE(fieldname);SSCRUTE(_attallname);goto ERROR;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ _ret = 0;
|
|
+
|
|
+ ERROR:
|
|
+ return _ret;
|
|
+}
|
|
+
|