/**\ingroup MEDinterp \brief \MEDinterpCrBrief \param fid \fid \param interpname \interpname \param geotype \geotype \param cellnode \cellnode \param nvariable \nvariable \param maxdegree \maxdegree \param nmaxcoef \nmaxcoef \return \error \details \MEDinterpCrDetails \see MEDinterpBaseFunctionWr \remarks \li \MEDinterpCrcellnodeCm1 \li \MEDinterpCrcellnodeCm2 */ med_err MEDinterpCr(const med_idt fid, const char* const interpname, const med_geometry_type geotype, const med_bool cellnode, const med_int nvariable, const med_int maxdegree, const med_int nmaxcoef ) { med_access_mode _MED_ACCESS_MODE; med_idt _root=0,_interpid=0; med_int _ret=-1; char _path[MED_INTERPOLATION_GRP_SIZE+MED_NAME_SIZE+1]=MED_INTERPOLATION_GRP; med_int _cellnodes = cellnode; med_int _geotype = geotype; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup /INTERP/ n'existe pas, on le cree */ if ((_root = _MEDdatagroupOpen(fid,_path)) < 0) if ((_root = _MEDdatagroupCreer(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_path); goto ERROR; } NOFINALBLANK(interpname,ERROR); /* * Si le DataGroup /INTERP/<interpname> n'existe pas, on le cree */ if ((_interpid = _MEDdatagroupOpen(_root,interpname)) < 0) if ((_interpid = _MEDdatagroupCreer(_root,interpname)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,interpname); SSCRUTE(_path);goto ERROR; } strcat(_path,interpname); /* * Creation/Ecriture de l'attribut MED_NOM_GEO */ if ( _MEDattributeIntWr(_interpid,MED_NOM_GEO,&_geotype) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_GEO);ISCRUTE(_geotype); goto ERROR; } /* * Creation/Ecriture de l'attribut MED_NOM_NBB */ /* if ( _MEDattributeIntWr(_interpid,MED_NOM_NBB,&nbasisfunc) < 0 ) { */ /* MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); */ /* SSCRUTE(MED_NOM_NBB);ISCRUTE(nbasisfunc); */ /* goto ERROR; */ /* } */ /* * Creation/Ecriture de l'attribut MED_NOM_NBV */ if ( _MEDattributeIntWr(_interpid,MED_NOM_NBV,&nvariable) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_NBV);ISCRUTE(nvariable); goto ERROR; } /* * Creation/Ecriture de l'attribut MED_NOM_MDG */ if ( _MEDattributeIntWr(_interpid,MED_NOM_MDG,&maxdegree) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_MDG);ISCRUTE(maxdegree); goto ERROR; } /* * Creation/Ecriture de l'attribut MED_NOM_MCF */ if ( _MEDattributeIntWr(_interpid,MED_NOM_MCF,&nmaxcoef) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_MCF);ISCRUTE(nmaxcoef); goto ERROR; } /* * Creation/Ecriture de l'attribut MED_NOM_FCN */ if ( _MEDattributeIntWr(_interpid,MED_NOM_FCN,&_cellnodes) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_FCN);ISCRUTE(_cellnodes); goto ERROR; } _ret = 0; ERROR: if (_interpid>0) if (_MEDdatagroupFermer(_interpid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_interpid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_INTERPOLATION_GRP); ISCRUTE_id(_root); } return _ret; }
med_err MEDlinkWr(const med_idt fid, const char * const meshname, const char * const link) { med_access_mode _MED_ACCESS_MODE; med_idt _lid=0, _root=0; med_err _ret=-1; char _path[MED_TAILLE_LIENS+MED_NAME_SIZE+1]=MED_LIENS; med_int _n=0; med_filter _filter = MED_FILTER_INIT; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup /LIENS/ n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0) if ((_root = _MEDdatagroupCreer(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_path); goto ERROR; } NOFINALBLANK(link,ERROR); /* * Si le DataGroup /LIENS/<meshname> n'existe pas, on le cree */ if ((_lid = _MEDdatagroupOuvrir(_root,meshname)) < 0) if ((_lid = _MEDdatagroupCreer(_root,meshname)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,meshname); SSCRUTE(_path);goto ERROR; } strcat(_path,meshname); /* * On stocke <n> sous forme d'attribut */ _n = strlen(link); if (_MEDattributeIntWr(_lid,MED_NOM_NBR,&_n) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_LINK_MSG); SSCRUTE(_path);SSCRUTE(MED_NOM_NBR);ISCRUTE(_n); goto ERROR; } /* * On stocke le link dans un dataset */ if ( MEDfilterEntityCr(fid,_n, 1, 1, MED_ALL_CONSTITUENT, MED_NO_INTERLACE,MED_UNDEF_STMODE, MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG); goto ERROR; } /* SSCRUTE(link); */ if ( _MEDdatasetWr(_lid,MED_NOM_LIE,MED_INTERNAL_CHAR,&_filter, link) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_LIE);SSCRUTE(_path); goto ERROR; } if ( MEDfilterClose(&_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_LINK_MSG); SSCRUTE(_path); goto ERROR; } _ret = 0; ERROR: if (_lid>0) if (_MEDdatagroupFermer(_lid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,meshname); ISCRUTE_id(_lid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_LIENS); ISCRUTE_id(_root); } return _ret; }
void _MEDfieldnProfile236(int dummy, ...) { med_int _ret=-1,_err=-1; med_idt _gid=0,_datagroup1=0; char _path[(MED_TAILLE_CHA+MED_NAME_SIZE+1)+(2*MED_MAX_PARA+1)+1]=MED_CHA; char _datagroupname1 [2*MED_TAILLE_NOM_ENTITE+2]=""; char _nomdatagroup2 [2*MED_MAX_PARA+1] =""; char _geotype [MED_TAILLE_NOM_ENTITE+1] =""; char _profilename [MED_NAME_SIZE+1] =""; char _meshname [MED_NAME_SIZE+1] =""; char _localizationname[MED_NAME_SIZE+1] =""; med_int _numdt=0, _numit=0; med_size _n=0,_ncpst=0; med_bool _checkmultiplemesh=MED_TRUE, _multiplemesh =MED_FALSE; med_bool _checkmeshname =MED_TRUE, _samedefaultmeshname=MED_FALSE; char _tmp1 [MED_TAILLE_NOM_ENTITE+1]=""; /* med_size _rank; */ MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, med_entity_type , , entitype ); MED_VARGS_DECL(const, med_geometry_type , , geotype ); MED_VARGS_DECL(, char *, const , defaultprofilename ); MED_VARGS_DECL(, char *, const , defaultlocalizationname ); MED_VARGS_DECL(, med_int * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , fieldname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, med_entity_type , , entitype ); MED_VARGS_DEF(const, med_geometry_type , , geotype ); MED_VARGS_DEF(, char *, const , defaultprofilename ); MED_VARGS_DEF(, char *, const , defaultlocalizationname ); MED_VARGS_DEF(, med_int * ,, fret ); /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); NOFINALBLANK(fieldname,ERROR); /* * Autorise la lecture du profile et de la localisation des points d'intégration * s'il n'y a qu'un même maillage sur tous les pas de temps de tous les couples * (typent,typgeo) */ #if ! defined(MED_CHECK_23FORMAT) #error "Data model objects version checking must be either activated or deactivated, hence MED_CHECK_23FORMAT macro must be defined." #error "Verify that you include med_config.h, thanks." #endif # if MED_CHECK_23FORMAT == 1 if ( _MEDfieldComputingStepCheck236(fid, fieldname, &_ncpst, _checkmultiplemesh, &_multiplemesh, _checkmeshname, &_samedefaultmeshname) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_FIELD,fieldname); goto ERROR; } # endif strcat(_path,fieldname); strcat(_path,"/"); if (_MEDnomEntite(_datagroupname1,entitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(entitype);SSCRUTE(_path);goto ERROR; }; if ((entitype != MED_NOEUD)) { if (_MEDnomGeometrie30(_tmp1,geotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(geotype);SSCRUTE(_path);goto ERROR; } strcat(_datagroupname1,"."); strcat(_datagroupname1,_tmp1); } strcat(_path,_datagroupname1); if ((_datagroup1 = _MEDdatagroupOuvrir(fid,_path)) < 0) { _ret = 0; goto ERROR; } strcat(_path,"/"); /*TODO : Vérifier IFORMAT */ sprintf(_nomdatagroup2,"%*li%*li",MED_MAX_PARA,(long ) numdt,MED_MAX_PARA,(long ) numit); strcat(_path,_nomdatagroup2); /* if ( _MEDobjectGetRank(fid, */ /* _path, */ /* _rank ) < 0 ) { */ /* MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDobjectGetRank"); */ /* goto ERROR; */ /* } */ if ((_gid = _MEDdatagroupOuvrir(fid,_path)) < 0) { _ret = 0; goto ERROR; } strcat(_path,"/"); /*Lit l'attribut MED_NOM_NDT */ if ( _MEDattrEntierLire(_gid,MED_NOM_NDT, &_numdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_NDT); ISCRUTE(_numdt);goto ERROR; } if ( _numdt != numdt) { MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);ISCRUTE(_numdt);ISCRUTE(numdt);goto ERROR; } /*Lit l'attribut MED_NOM_NOR */ if ( _MEDattrEntierLire(_gid,MED_NOM_NOR, &_numit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_NOR); ISCRUTE(_numit); goto ERROR; } if ( _numit != numit) { MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);ISCRUTE(_numit);ISCRUTE(numit);goto ERROR; } /*Pas d'info maillage local ou distant*/ if (_MEDattrStringLire(_gid,MED_NOM_MAI,MED_TAILLE_NOM,_meshname) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_MAI); SSCRUTE(_meshname); goto ERROR; }; strcat(_path,_meshname); if ( _MEDattributeStringRdByName(fid, _path, MED_NOM_GAU, MED_TAILLE_NOM, _localizationname) < 0 ) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG ); SSCRUTE(MED_NOM_GAU);SSCRUTE(_localizationname);goto ERROR; } if ( ! strcmp(_localizationname,MED_NOGAUSSi)) strcpy(defaultlocalizationname,MED_NO_LOCALIZATION); else strcpy(defaultlocalizationname,_localizationname); if ( _MEDattributeStringRdByName(fid, _path, MED_NOM_PFL, MED_TAILLE_NOM, _profilename) < 0 ) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG ); SSCRUTE(MED_NOM_PFL);SSCRUTE(_profilename);goto ERROR; } if ( strcmp(_profilename,MED_NOPFLi) && strcmp(_profilename,"") ) /* le test MED_NOPFLi pour des raisons de compatibilité */ { strcpy(defaultprofilename,_profilename); } else { strcpy(defaultprofilename, MED_NO_PROFILE); } _ret = (med_int) 1; ERROR: if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); SSCRUTE(_datagroupname1); ISCRUTE_id(_datagroup1); } if (_gid>0) if (_MEDdatagroupFermer(_gid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_gid); } va_end(params); *fret = _ret; return; }
med_err MEDequivalenceCr(const med_idt fid, const char * const meshname, const char * const equivname, const char * const description) { med_access_mode _MED_ACCESS_MODE; med_idt _root=0,_eqid=0,_meshid=0; med_err _ret=-1; char _path[MED_TAILLE_EQS+MED_NAME_SIZE+1]=MED_EQS; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup /EQS/ n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0) if ((_root = _MEDdatagroupCreer(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_path); goto ERROR; } NOFINALBLANK(meshname,ERROR); /* * Si le DataGroup /EQS/<meshname> n'existe pas, on le cree */ if ((_meshid = _MEDdatagroupOuvrir(_root,meshname)) < 0) if ((_meshid = _MEDdatagroupCreer(_root,meshname)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,meshname); SSCRUTE(_path);goto ERROR; } strcat(_path,meshname); NOFINALBLANK(equivname,ERROR); /* * Si le Data Group "/EQS/<meshname>/<equivname>" n'existe pas, on le cree */ if ((_eqid = _MEDdatagroupOuvrir(_meshid,equivname)) < 0) if ((_eqid = _MEDdatagroupCreer(_meshid,equivname)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,equivname); SSCRUTE(_path);goto ERROR; } /* if ( (_eqid = _MEDmeshAssociatedGroupCr(fid, */ /* MED_EQS_NOM, */ /* meshname, */ /* numdt, */ /* numit, */ /* -1, */ /* MED_FALSE, */ /* equivalencename ) ) < 0) { */ /* MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDmeshAssociatedGroupCr"); */ /* SSCRUTE(MED_EQS_NOM);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); */ /* SSCRUTE(equivalencename); */ /* goto ERROR; */ /* } */ /* * L'attribut "DES" */ if ((_ret = _MEDattributeStringWr(_eqid,MED_NOM_DES,MED_COMMENT_SIZE, description)) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_EQUIVALENCE_MSG); SSCRUTE(equivname);SSCRUTE(description); goto ERROR; } _ret=0; ERROR: if (_eqid>0) if (_MEDdatagroupFermer(_eqid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,equivname); ISCRUTE_id(_eqid);SSCRUTE(_path); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_eqid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_EQS); ISCRUTE_id(_eqid); } return _ret; }
void _MEDfieldCr31(int dummy, ...) { med_err _ret=-1; med_idt _root=0,_datagroup1=0; med_int _fieldtype ; char _datagroupname1[MED_NAME_SIZE+1]=""; med_access_mode _MED_ACCESS_MODE; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, med_field_type , , fieldtype ); MED_VARGS_DECL(const, med_int , , ncomponent ); MED_VARGS_DECL(const, char *, const , componentname ); MED_VARGS_DECL(const, char *, const , componentunit ); MED_VARGS_DECL(const, char *, const , dtunit ); MED_VARGS_DECL(const, char *, const , meshname ); MED_VARGS_DECL(, med_err * , , fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , fieldname ); MED_VARGS_DEF(const, med_field_type, , fieldtype ); MED_VARGS_DEF(const, med_int , , ncomponent ); MED_VARGS_DEF(const, char *, const , componentname ); MED_VARGS_DEF(const, char *, const , componentunit ); MED_VARGS_DEF(const, char *, const , dtunit ); MED_VARGS_DEF(const, char *, const , meshname ); MED_VARGS_DEF(, med_err * , , fret ); _MEDmodeErreurVerrouiller(); _fieldtype = (med_int) fieldtype; if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup MED_FIELD_GRP n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,MED_FIELD_GRP)) < 0) if ((_root = _MEDdatagroupCreer(fid,MED_FIELD_GRP)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_FIELD_GRP); goto ERROR; } NOFINALBLANK(fieldname,ERROR); /* * Si le Data Group "/CHA/<fieldname>" n'existe pas, on le cree */ if ((_datagroup1 = _MEDdatagroupOuvrir(_root,fieldname)) < 0) if ((_datagroup1 = _MEDdatagroupCrOrderCr(_root,fieldname)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_FIELD_GRP); SSCRUTE(fieldname);goto ERROR; } /* * Les infos sur les composantes du champ */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NCO,&ncomponent) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NCO); ISCRUTE(ncomponent);goto ERROR; } /* Tous les types med_field_type sont autorisés dans MEDfieldCr mais : Avant la 3.3.0 seuls les types : MED_FLOAT64,MED_INT32 et MED_INT64 étaient autorisés dans MEDfieldValueAdvancedWr et seul le type med_int et med_float64 pouvaient être utilisés en C. A l'écriture, si med_int=int les champs MED_INT32 étaient stockés en interne en HDFINT32bits A l'écriture, si med_int=long les champs MED_INT32 étaient stockés en interne en HDFINT64bits A la lecture : - si med_int=int le champ MED_INT32 est relu en en HDFINT32bit avec conversion 64->32 si necessaire - si med_int=long le champ MED_INT32 est relu en en HDFINT64bit avec conversion 32->64 si necessaire A l'écriture, si med_int=int les champs MED_INT64 étaient interdits A l'écriture, si med_int=long les champs MED_INT64 étaient stockés en interne en HDFINT64bits A la lecture : - si med_int=int le champ MED_INT64 ne pouvait pas être relu (pour prevenir la perte d'information) - si med_int=long le champ MED_INT64 est relu sans conversion Depuis la 3.3.0 en plus des types MED_FLOAT64,MED_INT32 et MED_INT64 les types MED_FLOAT32 et MED_INT sont autorisés dans MEDfieldValueAdvancedWr et aux types med_int et med_float64 utilisés en C sont ajoutés les types med_float32, med_int32 et med_int64. MED_INT32 : A l'écriture : si med_int=int les champs MED_INT32 sont toujours stockés en interne en HDFINT32bits (utiliser med_int32 ou med_int(!)) si med_int=long les champs MED_INT32 sont désormais stockés en interne en HDFINT32bits (utiliser le type med_int64) et désormais A la lecture : si med_int=int les champs MED_INT32 sont toujours relus en HDFINT32bits sans conversion (utiliser med_int32 ou med_int(!)) si med_int=long les champs MED_INT32 sont désormais relus en HDFINT32bits sans conversion (utiliser le type med_int32) MED_INT64 : A l'écriture : si med_int=int les champs MED_INT64 sont désormais autorisés et stockés en interne en HDFINT64bits (utiliser le type med_int64) si med_int=long les champs MED_INT64 sont toujours autorisés et stockés en interne en HDFINT64bits (utiliser le type med_int64 ou med_int(!)) A la lecture : si med_int=int les champs MED_INT64 sont désormais relus en HDFINT64bits sans conversion (utiliser le type med_int64) si med_int=long les champs MED_INT64 sont toujours relus en HDFINT64bits sans conversion (utiliser le type med_int64 ou med_int(!)) MED_INT : A l'écriture : si med_int=int les champs MED_INT sont désormais acceptés et stockés en interne en HDFINT32bits (utiliser med_int ou med_int32(!)) si med_int=long les champs MED_INT sont désormais acceptés et stockés en interne en HDFINT64bits (utiliser med_int ou med_int64(!)) A la lecture : si med_int=int les champs MED_INT sont désormais acceptés et relus en HDFINT32bits avec conversion/maxint si necessaire (utiliser med_int ou med_int32(!)) si med_int=long les champs MED_INT sont désormais acceptés et relus en HDFINT64bits avec conversion si necessaire (utiliser le type med_int32) Plateforme 32 bits : TODO si la plateforme est 32 bits, il faut .... ? */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_TYP,&_fieldtype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_TYP); ISCRUTE(_fieldtype);goto ERROR; } if ( _MEDattributeStringWr(_datagroup1,MED_NOM_NOM, MED_SNAME_SIZE*ncomponent,componentname) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NOM); SSCRUTE(componentname);goto ERROR; } if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNI, MED_SNAME_SIZE*ncomponent,componentunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNI); SSCRUTE(componentunit);goto ERROR; } /*MODEL : MED_NOM_UNI vient du niveau en dessous Cree ou ouvre l'attribut MED_NOM_UNI pour écriture */ if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNT,MED_SNAME_SIZE,dtunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNT); SSCRUTE(dtunit);goto ERROR; } /*MODEL : MED_NOM_MAI est écrit dans l'API de création de champ * Si c'est la première référence à un maillage, initialise l'attribut MED_MAI à ce maillage */ NOFINALBLANK(meshname,ERROR); if (_MEDattributeStringWr(_datagroup1,MED_NOM_MAI,MED_NAME_SIZE,meshname) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_MAI); SSCRUTE(meshname); MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,meshname); goto ERROR; } /* * On ferme tout */ _ret=0; ERROR: if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1); ISCRUTE_id(_datagroup1); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_FIELD_GRP); ISCRUTE_id(_root); } va_end(params); *fret = _ret; return; }
med_geometry_type MEDstructElementCr(const med_idt fid, const char* const modelname, const med_int modeldim, const char* const supportmeshname, const med_entity_type sentitytype, const med_geometry_type sgeotype ) { med_access_mode _MED_ACCESS_MODE; med_err _err=-1; med_idt _root=0,_elemid=0; med_int _ret=-1; char _path[MED_TAILLE_STRCT+MED_NAME_SIZE+1]=MED_STRCT; med_size _tmpn=0; med_geometry_type _stgeotype=0; med_int _medintstgeotype = 0; med_int _medintsgeotype = sgeotype; med_int _intentitytype = sentitytype; med_int _nnode=0,_ncell=0; med_bool _chgt=MED_FALSE,_trsf=MED_FALSE; /* char _entitytypename[MED_TAILLE_NOM_ENTITE+1]=""; */ /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup /STRUCT/ n'existe pas, on le cree */ if ((_root = _MEDdatagroupOpen(fid,_path)) < 0) if ((_root = _MEDdatagroupCrOrderCr(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_path); goto ERROR; } NOFINALBLANK(modelname,ERROR); /* * Si le DataGroup /STRUCT/<modelname> n'existe pas, on le cree */ if ((_elemid = _MEDdatagroupOpen(_root,modelname)) < 0) { if ((_elemid = _MEDdatagroupCreer(_root,modelname)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,modelname); SSCRUTE(_path);goto ERROR; } } else { /* * Lecture de l'attribut MED_NOM_NEO (num�ro de type g�om�trique associ� � un �l�ment de structure) */ if ( _MEDattrEntierLire(_elemid,MED_NOM_NEO,&_medintstgeotype) < 0 ) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_NEO);ISCRUTE(_medintstgeotype); goto ERROR; } _stgeotype = _medintstgeotype; } strcat(_path,modelname); /* * Creation/Ecriture de l'attribut MED_NOM_DIM (dimension de l'�l�ment) */ if ( _MEDattributeIntWr(_elemid,MED_NOM_DIM,&modeldim) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_DIM);ISCRUTE(modeldim); goto ERROR; } /* * Creation/Ecriture de l'attribut MED_NOM_NOM (nom du maillage support) */ if ( _MEDattributeStringWr(_elemid,MED_NOM_NOM,MED_NAME_SIZE,supportmeshname) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_NOM);SSCRUTE(supportmeshname); goto ERROR; } /* * Creation/Ecriture de l'attribut MED_NOM_ENT (type d'entit� support) */ /* if (_MEDgetEntityTypeName(_entitytypename,sentitytype) < 0) { */ /* MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); */ /* ISCRUTE_int(sentitytype);SSCRUTE(_entitytypename);SSCRUTE(_path); */ /* goto ERROR; */ /* } */ if ( _MEDattributeIntWr(_elemid,MED_NOM_ENT,&_intentitytype) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_ENT);ISCRUTE(_intentitytype); goto ERROR; } /* Lecture dans le maillages support du nombre de noeuds S'il n'y a pas de maillage support : 1 */ if (strlen(supportmeshname)) { if ( (_nnode = MEDmeshnEntity(fid,supportmeshname,MED_NO_DT,MED_NO_IT, MED_NODE,MED_NONE,MED_COORDINATE,MED_NO_CMODE, &_chgt,&_trsf) ) <= 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDmeshnEntity"); ISCRUTE(_nnode);goto ERROR; } } else { _nnode=1; } if (strlen(supportmeshname)) { if ( (_ncell = MEDmeshnEntity(fid,supportmeshname,MED_NO_DT,MED_NO_IT, MED_CELL,sgeotype,MED_CONNECTIVITY,MED_NODAL, &_chgt,&_trsf) ) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDmeshnEntity"); ISCRUTE(_ncell);goto ERROR; } } else { _ncell=0; } /* * Creation/Ecriture de l'attribut MED_NOM_GEO (type g�om�trique des mailles support) */ _medintsgeotype = sgeotype; if ( _MEDattributeIntWr(_elemid,MED_NOM_GEO,&_medintsgeotype) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_GEO);ISCRUTE(_medintsgeotype); goto ERROR; } /* * Creation/Ecriture de l'attribut MED_NOM_NAV (nombre d'attributs variables associ�s � un �l�ment de structure) */ /* if ( _MEDattributeIntWr(_elemid,MED_NOM_NAV,&nvariableattribute) < 0 ) { */ /* MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); */ /* SSCRUTE(MED_NOM_NAV);ISCRUTE(nvariableattribute); */ /* goto ERROR; */ /* } */ /* * Creation/Ecriture de l'attribut MED_NOM_NAC (nombre d'attributs constant associ�s � un �l�ment de structure) */ /* if ( _MEDattributeIntWr(_elemid,MED_NOM_NAC,&nconstattribute) < 0 ) { */ /* MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); */ /* SSCRUTE(MED_NOM_NAC);ISCRUTE(nconstattribute); */ /* goto ERROR; */ /* } */ /* * Nombre d'�l�ments de structure */ if ( !_stgeotype ) { /*Si l'�l�ment de struture ne pr�-existait pas, il a �t� cr�e en d�but de proc�dure (il y a au moins 1 �l�ment dans le groupe) */ if ((_err=_MEDnObjects(fid,MED_STRCT,&_tmpn)) <0) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_STRUCT,MED_STRCT); goto ERROR; } _stgeotype=_tmpn+MED_STRUCT_GEO_INTERNAL; _medintstgeotype=_stgeotype; /* * Ecriture de l'attribut MED_NOM_NEO (num�ro de type g�om�trique associ� � un �l�ment de structure) */ if ( _MEDattributeIntWr(_elemid,MED_NOM_NEO,&_medintstgeotype) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,_path); SSCRUTE(MED_NOM_NEO);ISCRUTE(_medintstgeotype); goto ERROR; } } _ret = _stgeotype; ERROR: if (_elemid>0) if (_MEDdatagroupFermer(_elemid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_elemid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_STRCT); ISCRUTE_id(_root); } return _ret; }
med_err MEDchampCr( med_idt fid, char * champ, med_type_champ type, char * comp, char * unit, med_int ncomp) { med_err ret=-1; med_idt root=0,gid=0; char chemin[MED_TAILLE_CHA+1]; med_size dimd[1]; med_int _type = (med_int) type; med_mode_acces MED_MODE_ACCES; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier."); goto ERROR; } if ( MED_MODE_ACCES == MED_LECTURE ) { MESSAGE("Impossible de créer un champ en mode MED_LECTURE."); goto ERROR; }; /* * Si le Data Group "/CHA/" n'existe pas, on le cree */ strncpy(chemin,MED_CHA,MED_TAILLE_CHA-1); chemin[MED_TAILLE_CHA-1] = '\0'; if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(chemin); goto ERROR; } /* * Si le Data Group cha n'existe pas, on le cree * Sinon => erreur */ NOFINALBLANK(champ,ERROR); if ((gid = _MEDdatagroupCreer(root,champ)) < 0) { MESSAGE("Erreur à la création du champ : "); SSCRUTE(champ); goto ERROR; } /* * Les infos sur les composants du champ */ if ( _MEDattrEntierEcrire(gid,MED_NOM_NCO,&ncomp) < 0 ) { MESSAGE("Erreur à l'écriture du nombre de composantes : "); ISCRUTE(ncomp); goto ERROR; } if ( _MEDattrEntierEcrire(gid,MED_NOM_TYP,&_type) < 0) { MESSAGE("Erreur à l'écriture du type du champ : "); ISCRUTE(_type); goto ERROR; } if ( _MEDattrStringEcrire(gid,MED_NOM_NOM,MED_TAILLE_PNOM*ncomp,comp) < 0) { MESSAGE("Erreur à l'écriture des noms des composantes : "); SSCRUTE(comp); goto ERROR; } if ( _MEDattrStringEcrire(gid,MED_NOM_UNI,MED_TAILLE_PNOM*ncomp,unit) < 0) { MESSAGE("Erreur à l'écriture des unités : "); SSCRUTE(unit); goto ERROR; } /* * On ferme tout */ ret=0; ERROR: if (gid>0) if (_MEDdatagroupFermer(gid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(gid);ret = -1; } if (root>0) if (_MEDdatagroupFermer(root) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root); ret = -1; } return ret; }
void _MEDmeshnEntity30(int dummy, ...) { med_access_mode _MED_ACCESS_MODE; med_int _ret=-1,_err=-1; med_idt _meshid=0, _datagroup=0,_datagroupf=0,_datagroup1=0; med_idt _datagroup2=0,_datagroup3=0,_datagroup4=0,_dataset=0; char _meshpath [MED_TAILLE_SUP_MAA+MED_NAME_SIZE+1]=""; char _datagroupname1 [2*MED_MAX_PARA+1] =""; char _datagroupname2 [MED_TAILLE_NOM_ENTITE+1]=""; char _datagroupname3 [MED_TAILLE_NOM_ENTITE+1]=""; char _datagroupname4 [MAX(MED_TAILLE_VARATR,MED_TAILLE_COOTRF)]=""; char _datasetconame [3 + 1 + 3 + 1 ] =""; char _profilename [MED_NAME_SIZE+1] =""; char _geotypename [MED_TAILLE_NOM_ENTITE+1]=""; char _datasetname [MED_TAILLE_NOM_ENTITE+1]=""; med_sorting_type _sortingtype = 0; med_int _intsortingtype = 0; med_int _profilearraysize = 0; med_int _changement=0, _changement_s=0, _transformation=0; med_bool _changement_co = MED_FALSE; med_size _n=0; med_int _intn=0; med_bool _isasupportmesh = MED_FALSE; med_bool _isasoftlink = MED_FALSE; med_bool _datasetexist = MED_FALSE; med_int _ntmpmeddatatype = 1; med_data_type _tmpmeddatatype[4] = {MED_UNDEF_DATATYPE,MED_UNDEF_DATATYPE,MED_UNDEF_DATATYPE,MED_UNDEF_DATATYPE}; med_grid_type _gridtype = MED_UNDEF_GRID_TYPE; med_int _intgridtype = 0; med_int _intmeshtype = 0; med_int _meshdim = 0; int _i = 0; med_connectivity_mode _cmode ; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , meshname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, med_entity_type , , entitytype ); MED_VARGS_DECL(const, med_geometry_type , , geotype ); MED_VARGS_DECL(const, med_data_type , , meddatatype ); MED_VARGS_DECL(const, med_connectivity_mode , , cmode ); MED_VARGS_DECL(const, med_storage_mode , , storagemode ); MED_VARGS_DECL(, char *, const , profilename ); MED_VARGS_DECL(, med_int *, const , profilesize ); MED_VARGS_DECL(, med_bool *, const , changement ); MED_VARGS_DECL(, med_bool *, const , transformation ); MED_VARGS_DECL(, med_int * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , meshname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, med_entity_type , , entitytype ); MED_VARGS_DEF(const, med_geometry_type , , geotype ); MED_VARGS_DEF(const, med_data_type , , meddatatype ); MED_VARGS_DEF(const, med_connectivity_mode , , cmode ); MED_VARGS_DEF(const, med_storage_mode , , storagemode ); MED_VARGS_DEF(, char *, const , profilename ); MED_VARGS_DEF(, med_int *, const , profilesize ); MED_VARGS_DEF(, med_bool *, const , changement ); MED_VARGS_DEF(, med_bool *, const , transformation ); MED_VARGS_DEF(, med_int * ,, fret ); _cmode = cmode; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } /* * Ouverture du datagroup de niveau 1 <_meshpath>/<meshname> */ NOFINALBLANK(meshname,ERROR); if ((_meshid=_MEDmeshDatagroupOpen(fid,meshname,_meshpath,&_isasupportmesh)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG); SSCRUTE(_meshpath); goto ERROR; } /* Lecture de la dimension du maillage */ if (_MEDattrEntierLire(_meshid,MED_NOM_DIM,&_meshdim) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_DIM);ISCRUTE(_meshdim);goto ERROR; } /* Lecture du type de maillage (attribut MED_NOM_TYP) */ if (_MEDattrEntierLire(_meshid,MED_NOM_TYP,&_intmeshtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_TYP);ISCRUTE(_intmeshtype);goto ERROR; } if ( ( (med_mesh_type) _intmeshtype ) != MED_UNSTRUCTURED_MESH ) { /* Lecture de l'attribut MED_NOM_GTY */ if (_MEDattrEntierLire(_meshid,MED_NOM_GTY,&_intgridtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_GTY);ISCRUTE(_intgridtype);goto ERROR; } _gridtype= (med_grid_type) _intgridtype; } /* * Ouverture du datagroup de niveau 2 <numdt>.<numit> */ if ( _MEDattrEntierLire(_meshid,MED_NOM_SRT,&_intsortingtype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(MED_NOM_SRT);ISCRUTE(_intsortingtype);goto ERROR; } _sortingtype = (med_sorting_type) (_intsortingtype); _MEDgetComputationStepName(_sortingtype,numdt,numit,_datagroupname1); if ( (_datagroup1 = _MEDdatagroupOuvrir(_meshid,_datagroupname1)) < 0 ) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname1);ISCRUTE_id(_datagroup1);goto ERROR; } /* * Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente) */ if ( _MEDattrEntierLire(_datagroup1,MED_NOM_CGT,&_changement) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_CGT);goto ERROR; } *changement = (med_bool) _changement; *transformation = MED_FALSE; /* * Gestion entitytype == MED_UNDEF_ENTITY_TYPE */ if ( entitytype == MED_UNDEF_ENTITY_TYPE ) { _n=0; goto SORTIE; } /* * Gestion entitytype == MED_ALL_ENTITY_TYPE */ if ( entitytype == MED_ALL_ENTITY_TYPE ) { _err=_MEDnObjects(_datagroup1,".",&_n); if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_datagroupname1); goto ERROR; } goto SORTIE; } /* * Ouverture du datagroup de niveau 3 <entitytype> */ if (_MEDgetEntityTypeName(_datagroupname2,entitytype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(entitytype);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);goto ERROR; } if ((_datagroup2 = _MEDdatagroupOuvrir(_datagroup1,_datagroupname2)) < 0) { *changement = (med_bool) MED_FALSE; _n=0;_datagroup2=0; goto SORTIE; } /* MAJ du changement pour le type d'entité <entitytype> * ( annulant eventuellement le changement global précédent concernant tous les types d'entités) * Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente) */ if ( _MEDattrEntierLire(_datagroup2,MED_NOM_CGT,&_changement) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname2);SSCRUTE(MED_NOM_CGT); goto ERROR; } *changement = (med_bool) _changement; /* * Ouverture du datagroup de niveau 4 <geotype> */ /* Pas Utilisation pour MED_NODE */ if ( geotype == MED_GEO_ALL ) { _err=_MEDnObjects(_datagroup2,".",&_n); if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_datagroupname2); goto ERROR; } /*Par construction du modèle, le tableau de coordonnées preexiste aux autres */ if ( ( entitytype == MED_NODE ) && (_n > 0) ) _n=1; goto SORTIE; } if ( entitytype != MED_NODE ) { /* Lecture du nom de type géométrique */ /*TODO : Remplacer les deux appels suivants par un seul gérant les geotype dynamiques et statiques*/ if ( entitytype == MED_STRUCT_ELEMENT ) { if ( MEDstructElementName(fid, geotype,_datagroupname3) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDstructElementName"); ISCRUTE_int(geotype);goto ERROR; } } else if ( _MEDgetInternalGeometryTypeName(_datagroupname3,geotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(geotype);SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname2);goto ERROR; } if ((_datagroup3 = _MEDdatagroupOuvrir(_datagroup2,_datagroupname3)) < 0) { _n=0; *changement = MED_FALSE; goto SORTIE; } } if (_datagroup3) _datagroup=_datagroup3; else _datagroup=_datagroup2; /* MAJ du changement pour le type géométrique d'entité <geotype> * ( annulant eventuellement le changement global précédent concernant tous les types d'entités) * Attribut CGT (un changement a eu lieu depuis l'étape de calcul précédente) * Prend en charge le cas d'un dataset vide écrit pour un typegeo donné (CHGT==1) */ if (_datagroup3) { if ( _MEDattrEntierLire(_datagroup3,MED_NOM_CGT,&_changement) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT); goto ERROR; } *changement = (med_bool) _changement; } /* * Lecture du flag de modification sur autre chose que MED_CONNECTIVITY,MED_COORDINATE,MED_COORDINATE_AXIS<i> * */ if ( _MEDattrEntierLire(_datagroup,MED_NOM_CGS,&_changement_s) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGS);goto ERROR; } /* 1) Lorsque l'utilisateur interroge un <meddatatype> qui est relatif a des coordonnées (famille,....) il faut mettre * le flag chgt à jour par rapport à des modifications potentiellement effectuées sur ces coordonnées * <=> * Si on interroge autre chose que MED_CONNECTIVITY,MED_COORDINATE * et qu'un changement est présent sur MED_CONNECTIVITY,MED_COORDINATE * le flag chgt doit être positionné à vrai * Une demande entitype==MED_NODE && (meddatatype == MED_COORDINATE_AXIS1)||(meddatatype == MED_COORDINATE_AXIS2) * ||(meddatatype === MED_COORDINATE_AXIS3) est assimilée à une demande concernant des coordonnées * <=> * Y-a-t'il une modification des datasets COO(si NOE)| NOD|DES(si !NOE) */ /* 2) * Positionne un mode de connectivité _cmode si le meddatatype demandé * est autre chose que des coordonnées ou des connectivités et que le cmode n'a pas été * spécifié par l'utilisateur. * Cette Information est necessaire pour construire le nom du dataset. */ if ( (meddatatype != MED_CONNECTIVITY) && ( meddatatype != MED_COORDINATE ) && (meddatatype != MED_COORDINATE_AXIS1) && (meddatatype != MED_COORDINATE_AXIS2) && (meddatatype != MED_COORDINATE_AXIS3) && (meddatatype != MED_INDEX_FACE) && (meddatatype != MED_INDEX_NODE)) { if (entitytype == MED_NODE) { if ( ( (med_mesh_type) _intmeshtype ) != MED_UNSTRUCTURED_MESH ) { if ( (_gridtype == MED_CARTESIAN_GRID) || (_gridtype == MED_CURVILINEAR_GRID) ) { _ntmpmeddatatype=_meshdim; _tmpmeddatatype[0] = MED_COORDINATE_AXIS1; _tmpmeddatatype[1] = MED_COORDINATE_AXIS2; _tmpmeddatatype[2] = MED_COORDINATE_AXIS3; } else if (_gridtype == MED_CURVILINEAR_GRID ) { /*Les grilles curvilinéaires utilisent MED_COORDINATE_AXISx pour stocker la structure et le tableau MED_COORDINATE pour stocker les coordonnées des noeuds */ ++_ntmpmeddatatype; _tmpmeddatatype[3] = MED_COORDINATE; } else { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_GRIDTYPE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE_int(_gridtype);goto ERROR; } } else _tmpmeddatatype[0] = MED_COORDINATE; } else { switch (geotype) { case MED_POLYHEDRON: _ntmpmeddatatype=3; _tmpmeddatatype[2] = MED_CONNECTIVITY; _tmpmeddatatype[1] = MED_INDEX_FACE; _tmpmeddatatype[0] = MED_INDEX_NODE; break; case MED_POLYGON: _ntmpmeddatatype=2; _tmpmeddatatype[1] = MED_CONNECTIVITY; _tmpmeddatatype[0] = MED_INDEX_NODE; break; default: if ( ( (med_mesh_type) _intmeshtype ) == MED_STRUCTURED_MESH ) { _ntmpmeddatatype=0; break; } _tmpmeddatatype[0] = MED_CONNECTIVITY; if ( cmode == MED_NO_CMODE ) { if ( _MEDdatasetExistByMedtype(_datagroup,MED_CONNECTIVITY,MED_NODAL, &_datasetexist, &_isasoftlink) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatasetExistByMedtype"); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);goto ERROR; } if ( _datasetexist ) _cmode= MED_NODAL; else if ( _MEDdatasetExistByMedtype(_datagroup,MED_CONNECTIVITY,MED_DESCENDING, &_datasetexist, &_isasoftlink) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDdatasetExistByMedtype"); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);goto ERROR; } else _cmode = MED_DESCENDING; } } } *changement = MED_FALSE; for (_i=0; _i < _ntmpmeddatatype ;++_i) { if ( _MEDgetDatasetChgt( _datagroup, _tmpmeddatatype[_i], _cmode, &_isasoftlink, &_changement_co ) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"getDatasetChgt"); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);goto ERROR; } *changement |= _changement_co; } } /* * Niveau de datagroup 5 supplémentaire pour les éléments de structure ou les transformations. */ if ( (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF ) ) { if (meddatatype == MED_VARIABLE_ATTRIBUTE) strcpy(_datagroupname4,MED_VARATR_NOM); else strcpy(_datagroupname4,MED_COOTRF_NOM); if ((_datagroup4 = _MEDdatagroupOuvrir(_datagroup,_datagroupname4)) < 0) { _n=0; goto SORTIE; } } if ( (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF ) ) _datagroupf=_datagroup4; else _datagroupf=_datagroup; /* * Construction du nom du dataset à lire */ if ( _MEDgetDatasetName(_datasetname,meddatatype,cmode) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDgetDatasetName"); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);goto ERROR; } /* * MAJ du champ transformation pour le (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF) */ if (_datagroup4) { if ( _MEDattrEntierLire(_datagroup4,MED_NOM_CGT,&_transformation) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4);SSCRUTE(MED_NOM_CGT); goto ERROR; } } if ( (_dataset = _MEDdatasetOuvrir(_datagroupf,_datasetname)) < 0) { _n=0;_dataset=0;*transformation = (med_bool) MED_FALSE; /* if ( (numdt != MED_NO_DT) || (numit != MED_NO_IT) ) { */ /* MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,_datasetname); */ /* SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); */ /* SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4); */ /* ISCRUTE_size(_n); */ /* goto ERROR; */ /* } */ goto SORTIE; } if (!_datagroup4) { /* * Lire l'attribut CGT pour savoir si le dataset a changé * n'a pas de sens si le dataset est en fait un lien vers le dataset précedent. * En testant si le dataset est un lien on détermine si un changement a eu lieu * depuis la séquence de calcul précédente. * Ce traitement ne doit pas être effectué pour le pas de temps initial et pour * (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF) */ if ( _MEDisasoftlink(_datagroupf, _datasetname,MED_TRUE, &_isasoftlink ) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_LINK,_datasetname); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4); ISCRUTE_size(_n);goto ERROR; } if (_isasoftlink) _transformation = MED_FALSE; else { if ( _MEDattrEntierLire(_dataset,MED_NOM_CGT,&_transformation) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3);SSCRUTE(MED_NOM_CGT); goto ERROR; } } } *transformation = (med_bool) _transformation; if ( ( meddatatype == MED_CONNECTIVITY) && ( meddatatype == MED_COORDINATE ) ) { *transformation &= (med_bool) !_changement_s; } /* * Attribut PFL (nombre de noeuds ou d'elements) * la lecture est faite sur le datagroup _datagroup et non sur _datagroupf * pour (meddatatype==MED_VARIABLE_ATTRIBUTE) || (meddatatype==MED_COORDINATE_TRSF) */ _profilearraysize = 0; profilename[0]='\0'; if ( _MEDattrStringLire(_datagroup,MED_NOM_PFL,MED_NAME_SIZE,_profilename) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_datagroupname3); SSCRUTE(MED_NOM_PFL);SSCRUTE(_profilename);goto ERROR; } if ( strcmp(_profilename,MED_NO_PROFILE_INTERNAL) ) { strncpy(profilename,_profilename,MED_NAME_SIZE+1); profilename[MED_NAME_SIZE]='\0'; if ( ( _profilearraysize = MEDprofileSizeByName( fid,_profilename) ) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt);SSCRUTE(_datagroupname2); SSCRUTE(_profilename);SSCRUTE("MEDprofileSizeByName");goto ERROR; } } *profilesize=(med_int) _profilearraysize; /* * Attribut NBR (nombre d'entité) */ if ( _MEDattrEntierLire(_dataset,MED_NOM_NBR,&_intn) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);ISCRUTE(numit);ISCRUTE(numdt); SSCRUTE(_datagroupname2);SSCRUTE(_datagroupname3);SSCRUTE(_datagroupname4); SSCRUTE(_datasetname);SSCRUTE(MED_NOM_NBR);ISCRUTE_size(_n);goto ERROR; } _n = _intn; if (_profilearraysize) switch(storagemode) { case MED_GLOBAL_PFLMODE : break; case MED_COMPACT_PFLMODE : if ( meddatatype!=MED_COORDINATE_TRSF ) _n=_profilearraysize; break; default : MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_STORAGEMODE,MED_ERR_VALUE_MSG); ISCRUTE_int(storagemode);goto ERROR; break; } SORTIE: _ret = _n; ERROR: if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COO); ISCRUTE_id(_dataset); } if (_datagroup4>0) if (_MEDdatagroupFermer(_datagroup4) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname4); ISCRUTE_id(_datagroup4); } if (_datagroup3>0) if (_MEDdatagroupFermer(_datagroup3) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname3); ISCRUTE_id(_datagroup3); } if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2); ISCRUTE_id(_datagroup2); } if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1); ISCRUTE_id(_datagroup1); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_meshpath); ISCRUTE_id(_meshid); } /* _MEDobjetsOuverts(fid); */ *fret = _ret; va_end(params); return; }
med_err MEDlienEcr(med_idt fid, char *lienval, char *maa) { med_idt gid=0, chid=0, did=0; med_size dimd[1]; med_err ret=-1; char chemin[MED_TAILLE_LIENS+1]; med_int n ; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; /* * Si le groupe "LIENS" n'existe pas, on le cree */ strncpy(chemin,MED_LIENS,MED_TAILLE_LIENS-1); chemin[MED_TAILLE_LIENS-1] = '\0'; if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((gid = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Impossible de creer le groupe MED_LIENS : "); SSCRUTE(chemin); goto ERROR; } /* * Si le groupe "maa" n'existe pas, on le cree * Sinon => erreur */ NOFINALBLANK(maa,ERROR); if ((chid = _MEDdatagroupOuvrir(gid,maa)) < 0) if ((chid = _MEDdatagroupCreer(gid,maa)) < 0) { MESSAGE("Erreur à la création du lien au maillage : "); SSCRUTE(maa); goto ERROR; } /* * On stocke "n" sous forme d'attribut */ n = strlen(lienval); if ((ret = _MEDattrEntierEcrire(chid,MED_NOM_NBR,&n)) < 0) { MESSAGE("Erreur à l'écriture de l'attribut n : "); ISCRUTE(n); goto ERROR; } /* * On stocke le lienval dans un dataset */ dimd[0] = n; if ((ret = _MEDdatasetStringEcrire(chid,MED_NOM_LIE,dimd,lienval))<0) { MESSAGE("Impossible d'ecrire le dataset lienval de taille : "); ISCRUTE(n); goto ERROR; } /* * On ferme tout */ ret =0; ERROR: if (chid>0) if (_MEDdatagroupFermer(chid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(chid);ret=-1; } if (gid>0) if (_MEDdatagroupFermer(gid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(gid);ret=-1; } return ret; }
med_err MEDparameterCr(const med_idt fid, const char * const paramname, const med_parameter_type paramtype, const char* const description, const char * const dtunit ) { med_err _ret=-1; med_idt _root=0,_datagroup1=0; med_access_mode _MED_ACCESS_MODE; char _datagroupname1 [MED_NAME_SIZE+1]=""; med_int _paramtype = (med_int) paramtype; _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup MED_NUM_DATA n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,MED_NUM_DATA)) < 0) if ((_root = _MEDdatagroupCreer(fid,MED_NUM_DATA)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_NUM_DATA); goto ERROR; } NOFINALBLANK(paramname,ERROR); /* * Si le Data Group "/NUM_DATA/<paramname>" n'existe pas, on le cree */ if ((_datagroup1 = _MEDdatagroupOuvrir(_root,paramname)) < 0) if ((_datagroup1 = _MEDdatagroupCreer(_root,paramname)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_NUM_DATA); SSCRUTE(paramname);goto ERROR; } /* * Ecriture des infos relatives au parametre : type, dtunit, description */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_TYP,&_paramtype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG); SSCRUTE(paramname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_TYP); ISCRUTE(_paramtype);goto ERROR; } if ( _MEDattributeStringWr(_datagroup1,MED_NOM_DES,MED_COMMENT_SIZE,description) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG); SSCRUTE(paramname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_DES); SSCRUTE(description);goto ERROR; } if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNT,MED_SNAME_SIZE,dtunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PARAM_MSG); SSCRUTE(paramname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNT); SSCRUTE(dtunit);goto ERROR; } _ret = 0; ERROR : if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1); ISCRUTE_id(_datagroup1); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_NUM_DATA); ISCRUTE_id(_root); } return _ret; }
med_err MEDmaaCr(med_idt fid, char *maillage, med_int dim, med_maillage type,char *desc) { med_idt maaid=0, root=0, entid=0, geoid=0 ; char chemin[MED_TAILLE_MAA+1]; char nom_ent[MED_TAILLE_NOM_ENTITE+1]; char nom_geo[MED_TAILLE_NOM_ENTITE+1]; med_err ret=-1; med_int tmp; med_mode_acces MED_MODE_ACCES; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier."); goto ERROR; } if ( MED_MODE_ACCES == MED_LECTURE ) { MESSAGE("Impossible de créer un maillage en mode MED_LECTURE."); goto ERROR; }; /* * Si la racine n'existe pas on la cree */ strncpy(chemin,MED_MAA,strlen(MED_MAA)-1); chemin[MED_TAILLE_MAA-1] = '\0'; if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(chemin); goto ERROR; } /* * Création du maillage */ NOFINALBLANK(maillage,ERROR); if ( (maaid = _MEDdatagroupCreer(root,maillage)) < 0) { MESSAGE("Erreur à la création du maillage : "); SSCRUTE(maillage); goto ERROR; } /* * Creation de l'attribut dimension */ if ((ret = _MEDattrEntierEcrire(maaid,MED_NOM_DIM,&dim)) < 0) { MESSAGE("Erreur à l'écriture de la dimension du maillage : "); ISCRUTE(dim); goto ERROR; } /* * La description associee au maillage */ if ((ret = _MEDattrStringEcrire(maaid,MED_NOM_DES,MED_TAILLE_DESC,desc)) < 0) { MESSAGE("Erreur à l'écriture de la description du maillage : "); SSCRUTE(desc); goto ERROR; } /* * Creation de l'attribut correspondant au type du maillage (MED_STRUCTURE, MED_NON_STRUCTURE) */ tmp = (med_int) type; if ((ret = _MEDattrEntierEcrire(maaid,MED_NOM_TYP,&tmp)) < 0) { MESSAGE("Erreur à l'écriture du type de maillage : "); ISCRUTE(tmp); goto ERROR; } if ( type == MED_STRUCTURE ) { strcpy(nom_ent,MED_NOM_MAI); if ((entid = _MEDdatagroupCreer(maaid,nom_ent)) < 0) { MESSAGE("Impossible de Cr\351er le datagroup :"); SSCRUTE(nom_ent); MESSAGE("pour le maillage structur\351 :"); SSCRUTE(maillage); goto ERROR; } switch ( dim ) { case 1 : strcpy(nom_geo,MED_NOM_SE2); break; case 2 : strcpy(nom_geo,MED_NOM_QU4); break; case 3 : strcpy(nom_geo,MED_NOM_HE8); break; case 0 : strcpy(nom_geo,MED_NOM_PO1); break; default : MESSAGE("La dimension doit être comprise entre 0 et 3"); goto ERROR; } if ((geoid = _MEDdatagroupCreer(entid,nom_geo)) < 0) { MESSAGE("Impossible de Créer le datagroup :"); SSCRUTE(nom_geo); MESSAGE("pour le maillage structuré :"); SSCRUTE(maillage); goto ERROR; } } /* * Nettoyages divers */ ret = 0; ERROR: if (geoid>0) if (_MEDdatagroupFermer(geoid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(geoid);ret = -1; } if (entid>0) if (_MEDdatagroupFermer(entid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(entid);ret = -1; } if (maaid>0) if (_MEDdatagroupFermer(maaid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(maaid);ret = -1; } if (root>0) if (_MEDdatagroupFermer(root) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root); ret = -1; } return ret; }
void _MEDfieldCr30(int dummy, ...) { med_err _ret=-1; med_idt _root=0,_datagroup1=0; med_int _fieldtype; char _datagroupname1[MED_NAME_SIZE+1]=""; med_access_mode _MED_ACCESS_MODE; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, med_field_type , , fieldtype ); MED_VARGS_DECL(const, med_int , , ncomponent ); MED_VARGS_DECL(const, char *, const , componentname ); MED_VARGS_DECL(const, char *, const , componentunit ); MED_VARGS_DECL(const, char *, const , dtunit ); MED_VARGS_DECL(const, char *, const , meshname ); MED_VARGS_DECL(, med_err * , , fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , fieldname ); MED_VARGS_DEF(const, med_field_type, , fieldtype ); MED_VARGS_DEF(const, med_int , , ncomponent ); MED_VARGS_DEF(const, char *, const , componentname ); MED_VARGS_DEF(const, char *, const , componentunit ); MED_VARGS_DEF(const, char *, const , dtunit ); MED_VARGS_DEF(const, char *, const , meshname ); MED_VARGS_DEF(, med_err * , , fret ); _MEDmodeErreurVerrouiller(); _fieldtype = (med_int) fieldtype; if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup MED_FIELD_GRP n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,MED_FIELD_GRP)) < 0) if ((_root = _MEDdatagroupCreer(fid,MED_FIELD_GRP)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_FIELD_GRP); goto ERROR; } NOFINALBLANK(fieldname,ERROR); /* * Si le Data Group "/CHA/<fieldname>" n'existe pas, on le cree */ if ((_datagroup1 = _MEDdatagroupOuvrir(_root,fieldname)) < 0) if ((_datagroup1 = _MEDdatagroupCreer(_root,fieldname)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,MED_FIELD_GRP); SSCRUTE(fieldname);goto ERROR; } /* * Les infos sur les composantes du champ */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NCO,&ncomponent) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NCO); ISCRUTE(ncomponent);goto ERROR; } if ( _MEDattributeIntWr(_datagroup1,MED_NOM_TYP,&_fieldtype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_TYP); ISCRUTE(_fieldtype);goto ERROR; } if ( _MEDattributeStringWr(_datagroup1,MED_NOM_NOM, MED_SNAME_SIZE*ncomponent,componentname) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NOM); SSCRUTE(componentname);goto ERROR; } if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNI, MED_SNAME_SIZE*ncomponent,componentunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNI); SSCRUTE(componentunit);goto ERROR; } /*MODEL : MED_NOM_UNI vient du niveau en dessous Cree ou ouvre l'attribut MED_NOM_UNI pour écriture */ if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNT,MED_SNAME_SIZE,dtunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNT); SSCRUTE(dtunit);goto ERROR; } /*MODEL : MED_NOM_MAI est écrit dans l'API de création de champ * Si c'est la première référence à un maillage, initialise l'attribut MED_MAI à ce maillage */ NOFINALBLANK(meshname,ERROR); if (_MEDattributeStringWr(_datagroup1,MED_NOM_MAI,MED_NAME_SIZE,meshname) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_MAI); SSCRUTE(meshname); MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,meshname); goto ERROR; } /* * On ferme tout */ _ret=0; ERROR: if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname1); ISCRUTE_id(_datagroup1); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_FIELD_GRP); ISCRUTE_id(_root); } va_end(params); *fret = _ret; return; }
void MEDfamCr232(int dummy,...) { med_idt fid; char *maa; char *famille; med_int numero; med_int *attr_ident; med_int *attr_val; char *attr_desc; med_int n_attr; char *groupe; med_int n_groupe; med_err *fret ; med_idt root=0, datagroup=0, famid=0; med_err ret=-1; med_size dimd[1]; char chemin[MED_TAILLE_MAA+MED_TAILLE_FAS+MED_TAILLE_FAS_ENTITE+MED_TAILLE_NOM+1]; char tmp[MED_TAILLE_FAS+1]; char stockage[MED_TAILLE_FAS_ENTITE+1] = "NONE"; med_mode_acces MED_MODE_ACCES; va_list params; va_start(params,dummy); fid = va_arg(params, med_idt ); maa = va_arg(params, char* ); famille = va_arg(params, char* ); numero = va_arg(params, med_int ); attr_ident = va_arg(params, med_int*); attr_val = va_arg(params, med_int*); attr_desc = va_arg(params, char* ); n_attr = va_arg(params, med_int ); groupe = va_arg(params, char* ); n_groupe = va_arg(params, med_int ); fret = va_arg(params, med_err*); /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) {*fret=-1;return;} if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier."); goto ERROR; } if ( MED_MODE_ACCES == MED_LECTURE) { MESSAGE("Impossible de créer une famille en mode MED_LECTURE."); goto ERROR; }; /* * Si le Data Group FAS n'existe pas, on le cree */ strcpy(chemin,MED_MAA); NOFINALBLANK(maa,ERROR); strcat(chemin,maa); strncpy(tmp,MED_FAS,MED_TAILLE_FAS-1); tmp[MED_TAILLE_FAS-1] = '\0'; strcat(chemin,tmp); if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(chemin); goto ERROR; } /* * Le lieu de stockage varie selon le signe du "numero" * de famille * = 0 => FAMILLE NEUTRE * > 0 => FAMILLE DE NOEUD * < 0 => FAMILLE DE MAILLE/FACE/ARETE */ if (numero != 0) { if ((ret = _MEDdatagroupFermer(root)) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root);ret = -1; goto ERROR; } if (numero > 0) strncpy(stockage,MED_FAS_NOEUD,MED_TAILLE_FAS_ENTITE-1); if (numero < 0) strncpy(stockage,MED_FAS_ELEME,MED_TAILLE_FAS_ENTITE-1); stockage[MED_TAILLE_FAS_ENTITE-1] = '\0'; strcat(chemin,stockage); if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(chemin); goto ERROR; } } /* * Si le Data Group de meme nom que famille existe => erreur * Sinon on le cree */ /* * POUR LA FAMILLE DE NUMERO 0, ON FORCE LE NOM */ if (numero == 0) { if ((famid = _MEDdatagroupCreer(root,FAMILLE_ZERO)) < 0) { MESSAGE("Erreur à la création du famille : "); SSCRUTE(famille); goto ERROR; } } else { /* * Création de la famille */ NOFINALBLANK(famille,ERROR); if ((famid = _MEDdatagroupCreer(root,famille)) < 0) { MESSAGE("Erreur à la création du famille : "); SSCRUTE(famille); goto ERROR; } } /* * L'attribut NUM */ if ((ret = _MEDattrEntierEcrire(famid,MED_NOM_NUM,&numero)) < 0) { MESSAGE("Erreur à l'écriture du numéro de famille : "); ISCRUTE(numero); goto ERROR; } /* * Le Data Group "GRO" */ if (n_groupe > 0) { /* * On cree le Data Group */ if ((datagroup = _MEDdatagroupCreer(famid,MED_NOM_GRO)) < 0) { MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(MED_NOM_GRO); goto ERROR; } /* * L'attribut "NBR" */ if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n_groupe)) < 0) { MESSAGE("Erreur à l'écriture du nombre de groupe : "); ISCRUTE(n_groupe); goto ERROR; } /* * Data Set des noms des groupes "NOM" */ dimd[0] = n_groupe*MED_TAILLE_LNOM+1; if ((ret = _MEDdatasetStringEcrire(datagroup,MED_NOM_NOM,dimd,groupe))<0) { MESSAGE("Erreur à l'écriture des noms des groupes : "); SSCRUTE(groupe); goto ERROR; } /* * On ferme le Data Group */ if ((ret = _MEDdatagroupFermer(datagroup)) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_int(datagroup); goto ERROR; } } /* * Le Data Group "ATT" */ if (n_attr > 0) { if ((datagroup = _MEDdatagroupCreer(famid,MED_NOM_ATT)) < 0) { MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(MED_NOM_ATT); goto ERROR; } /* * L'attribut "NBR" */ if ((ret = _MEDattrEntierEcrire(datagroup,MED_NOM_NBR,&n_attr)) < 0) { MESSAGE("Erreur à l'écriture du nombre d'attributs : "); ISCRUTE(n_attr); goto ERROR; } /* * Le Data Set "IDE" */ dimd[0] = n_attr; #if defined(HAVE_F77INT64) if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_IDE,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char *)attr_ident)) < 0) { MESSAGE("Erreur à l'écriture du dataset : "); SSCRUTE(MED_NOM_IDE); goto ERROR; } #else if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_IDE,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char *)attr_ident)) < 0) { MESSAGE("Erreur à l'écriture du dataset : "); SSCRUTE(MED_NOM_IDE); goto ERROR; } #endif /* * Le Data Set "VAL" */ dimd[0] = n_attr; #if defined(HAVE_F77INT64) if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_VAL,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*)attr_val)) < 0) { MESSAGE("Erreur à l'écriture du dataset : "); SSCRUTE(MED_NOM_VAL); goto ERROR; } #else if ((ret = _MEDdatasetNumEcrire(datagroup,MED_NOM_VAL,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*)attr_val)) < 0) { MESSAGE("Erreur à l'écriture du dataset : "); SSCRUTE(MED_NOM_VAL); goto ERROR; } #endif /* * Le Data Set "DES" */ dimd[0] = n_attr*MED_TAILLE_DESC+1; if ((ret = _MEDdatasetStringEcrire(datagroup,MED_NOM_DES,dimd,attr_desc)) < 0) { MESSAGE("Erreur à l'écriture du dataset : "); SSCRUTE(MED_NOM_DES); goto ERROR; } /* * On ferme le Data Group */ if ((ret = _MEDdatagroupFermer(datagroup)) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_int(datagroup); goto ERROR; } } /* * On ferme tout */ ret=0; ERROR: if (famid>0) if (_MEDdatagroupFermer(famid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(famid);ret = -1; } if (root>0) if (_MEDdatagroupFermer(root) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root); ret = -1; } va_end(params); *fret = ret; return; }
void MEDjointCr231(int dummy,...) { med_idt fid ; char * maa_lcl ; char * jn ; char * desc ; med_int dom ; char * maa_dist ; med_err * fret ; med_idt root=0,jntid=0; med_err ret=-1; char chemin[MED_TAILLE_MAA+MED_TAILLE_JNT+MED_TAILLE_NOM+1]; char tmp[MED_TAILLE_JNT+1]; med_int nbc=0; med_mode_acces MED_MODE_ACCES; va_list params; va_start(params,dummy); fid = va_arg(params,med_idt); maa_lcl = va_arg(params,char *); jn = va_arg(params,char *); desc = va_arg(params,char *); dom = va_arg(params,med_int); maa_dist = va_arg(params,char*); fret = va_arg(params,med_err *); /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) {*fret=-1;return;} if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier."); goto ERROR; } if ( MED_MODE_ACCES == MED_LECTURE ) { MESSAGE("Impossible de créer un joint en mode MED_LECTURE."); goto ERROR; }; /* * Si le Data Group "JNT" n'existe pas, on le cree */ strcpy(chemin,MED_MAA); NOFINALBLANK(maa_lcl,ERROR); strcat(chemin,maa_lcl); strncpy(tmp,MED_JNT,MED_TAILLE_JNT-1); tmp[MED_TAILLE_JNT-1] = '\0'; strcat(chemin,tmp); if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(chemin); goto ERROR; } /* * Si un joint du meme nom existe => erreur * Sinon on le cree */ NOFINALBLANK(jn,ERROR); if ((jntid = _MEDdatagroupCreer(root,jn)) < 0) { MESSAGE("Erreur à la création du joint : "); SSCRUTE(jn); goto ERROR; } /* * L'attribut "DES" */ if ((ret = _MEDattrStringEcrire(jntid,MED_NOM_DES,MED_TAILLE_DESC,desc)) < 0) { MESSAGE("Erreur à l'écriture de la description du joint : "); SSCRUTE(desc); goto ERROR; } /* * L'attribut "MAI" */ /* BUG CORRIGE EN 232 MED_TAILLE_NOM au lieu de MED_TAILLE_MAA */ /* conservé ici pour éviter de reprendre en lib2.3.2 un fichier 2.3.1 en écrivant l'attribut avec une taille plus grande que celle des fichiers 2.3.1 */ if ((ret = _MEDattrStringEcrire(jntid,MED_NOM_MAI,MED_TAILLE_MAA,maa_dist)) < 0) { MESSAGE("Erreur à l'écriture du nom du maillage distant : "); SSCRUTE(maa_dist); goto ERROR; } /* * L'attribut "DOM" */ if ((ret = _MEDattrEntierEcrire(jntid,MED_NOM_DOM,&dom)) < 0) { MESSAGE("Erreur à l'écriture du domaine : "); ISCRUTE(dom); goto ERROR; } /* * On ferme tout */ ret=0; ERROR: if (jntid>0) if (_MEDdatagroupFermer(jntid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(jntid);ret = -1; } if (root>0) if (_MEDdatagroupFermer(root) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root); ret = -1; } va_end(params); *fret = ret; return; }
med_err MEDgaussEcr(med_idt fid, med_geometrie_element type_geo, med_float *refcoo, med_mode_switch mode_coo, med_int ngauss, med_float *gscoo, med_float * wg, char * locname ) { med_idt gid=0, chid=0; med_size dimd[1]; med_err ret = -1; med_int typegeo = -1; char chemin[MED_TAILLE_GAUSS+1]=""; med_mode_acces MED_MODE_ACCES; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier "); goto ERROR; } /* * MED_GAUSS_ELNO est un mot cle reserve */ if (! strcmp(locname,MED_GAUSS_ELNO)) { MESSAGE("MED_GAUSS_ELNO est un mot cle reserve : points Gauss sur les noeuds de l'element"); goto ERROR; } /* * Si le groupe "GAUSS" n'existe pas, on le cree */ strncpy(chemin,MED_GAUSS,MED_TAILLE_GAUSS-1); chemin[MED_TAILLE_GAUSS-1] = '\0'; if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((gid = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Impossible de creer le groupe MED_GAUSS : "); SSCRUTE(chemin); goto ERROR; } /* * Si le groupe <locname> n'existe pas, on le cree * Sinon => erreur */ NOFINALBLANK(locname,ERROR); if ((chid = _MEDdatagroupOuvrir(gid,locname)) >= 0) { if ( MED_MODE_ACCES != MED_LECTURE_ECRITURE ) { MESSAGE("Le nom de localisation existe déjà : "); SSCRUTE(locname); goto ERROR; } } else if ((chid = _MEDdatagroupCreer(gid,locname)) < 0) goto ERROR; /* * On stocke <ngauss> sous forme d'attribut */ if (_MEDattrEntierEcrire(chid,MED_NOM_NBR,&ngauss) < 0) { MESSAGE("Erreur à l'écriture de l'attribut MED_NOM_NBR : "); ISCRUTE(ngauss);goto ERROR; }; /* * On stocke <type_geo> sous forme d'attribut */ typegeo = (med_int) type_geo; /* sizeof(enum) tjrs = sizeof(int) en C, or sur machines 64 bits par défaut med_int==long, du coup sur machines 64 bits _MEDattrEntierEcrire utilise le type hdf NATIVE_LONG, ce qui pose un problème qd on passe un enum. */ if (_MEDattrEntierEcrire(chid,MED_NOM_GEO,&typegeo) < 0) { MESSAGE("Erreur à l'écriture de l'attribut MED_NOM_GEO : "); ISCRUTE(type_geo);goto ERROR; }; /* * On stocke les coordonnées de référence dans un dataset */ dimd[0] = (type_geo%100)*(type_geo/100); if ( _MEDdatasetNumEcrire(chid,MED_NOM_COO,MED_FLOAT64,mode_coo,(type_geo/100),MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) refcoo) < 0 ) { MESSAGE("Impossible d'ecrire le dataset : ");SSCRUTE(MED_NOM_COO); ISCRUTE_size(dimd[0]); goto ERROR; } /* * On stocke les points d'intégration dans un dataset */ dimd[0] = ngauss*(type_geo/100); if ( _MEDdatasetNumEcrire(chid,MED_NOM_GAU,MED_FLOAT64,mode_coo,(type_geo/100),MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) gscoo) < 0 ) { MESSAGE("Impossible d'ecrire le dataset : ");SSCRUTE(MED_NOM_GAU); ISCRUTE_size(dimd[0]); goto ERROR; } /* * On stocke les poids dans un dataset */ dimd[0] = ngauss; if ( _MEDdatasetNumEcrire(chid,MED_NOM_VAL,MED_FLOAT64,mode_coo,1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) wg) < 0 ) { MESSAGE("Impossible d'ecrire le dataset : ");SSCRUTE(MED_NOM_VAL); ISCRUTE_size(dimd[0]); goto ERROR; } ret = 0; ERROR: /* * On ferme tout */ if (chid>0) if (_MEDdatagroupFermer(chid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(chid); ret = -1; } if (gid>0) if (_MEDdatagroupFermer(gid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(gid); ret = -1; } return ret; }
void _MEDfieldnValue236(int dummy, ...) { med_int _ret =-1; med_int _nprofile = 0; med_int _n = 0; med_int _profilearraysize = 0,_nvaluesperentity=0; med_int _nintegrationpoint= 0; med_bool _anyprofile = MED_FALSE; med_geometrie_element _locgeotype = 0; med_int _intlocgeotype = 0; med_int _nvaluesperentityfromloc=0; int _dummy =0; char _localizationname [MED_TAILLE_NOM+1] = ""; char _tmpprofilename [MED_NAME_SIZE+1] = "", *_profilename=0; char _path [MED_LOCALIZATION_GRP_SIZE+MED_TAILLE_NOM+1]= MED_LOCALIZATION_GRP; char _geotype [MED_TAILLE_NOM_ENTITE+1] = ""; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, med_entity_type , , entitytype ); MED_VARGS_DECL(const, med_geometry_type , , geotype ); MED_VARGS_DECL(, char *, const , profilename ); MED_VARGS_DECL(const, int , , profileit ); MED_VARGS_DECL(const, med_storage_mode , , storagemode ); MED_VARGS_DECL(, med_int *, const , profilesize ); MED_VARGS_DECL(, char *, const , localizationname ); MED_VARGS_DECL(, med_int *, const , nintegrationpoint ); MED_VARGS_DECL(, med_int * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , fieldname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, med_entity_type , , entitytype ); MED_VARGS_DEF(const, med_geometry_type , , geotype ); MED_VARGS_DEF(, char *, const , profilename ); MED_VARGS_DEF(const, int , , profileit ); MED_VARGS_DEF(const, med_storage_mode , , storagemode ); MED_VARGS_DEF(, med_int *, const , profilesize ); MED_VARGS_DEF(, char *, const , localizationname ); MED_VARGS_DEF(, med_int *, const , nintegrationpoint ); MED_VARGS_DEF(, med_int * ,, fret ); /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); NOFINALBLANK(fieldname,ERROR); if ( (profileit != 1) && (profileit != -1)) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,MED_ERR_VALUE_MSG); ISCRUTE_int(profileit);goto ERROR; } /* * Cette appel effectue l'appel à _MEDfieldComputingStepCheck236 */ _MEDfieldnProfile236(_dummy,fid,fieldname,numdt,numit,entitytype,geotype, &_tmpprofilename,&_localizationname,&_nprofile ); if ( _nprofile < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"_MEDfieldnProfile236"); goto ERROR; } /* REM: MEDnVal prend en compte le nombre de points de Gauss, ce qui n'est pas le cas de MEDfieldnValue */ if ( (_n = MEDnVal(fid, (char *) fieldname,entitytype,geotype, numdt,numit,MED_NOREF,(med_mode_profil) storagemode) ) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDnVal"); goto ERROR; } /* * Lecture de la taille du profil (eventuellement MED_ALLENTITIES_PROFILE) */ /* REM: (profileit < 0 ) signifie que l'on nous a fourni <profilename> */ if ( profileit < 0 ) { if ( !strlen(profilename)) { _profilename = MED_NOPFL; } else { if ( strcmp(_tmpprofilename,profilename) ) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,profilename); SSCRUTE(_tmpprofilename); goto ERROR; } _profilename=profilename; _anyprofile=MED_TRUE; } } else { strncpy(profilename,_tmpprofilename,MED_TAILLE_NOM+1); profilename[MED_TAILLE_NOM]='\0'; _profilename=profilename; if ( strlen(profilename)) _anyprofile=MED_TRUE; } if ( _anyprofile ) { if ( (_profilearraysize=MEDprofileSizeByName(fid, _profilename)) < 0) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,MED_ERR_FIELD_MSG); SSCRUTE(fieldname); SSCRUTE(_profilename); SSCRUTE("MEDprofileSizeByName");goto ERROR; } } /* * Lecture du nombre de points d'intégration. */ strncpy(localizationname,_localizationname,MED_TAILLE_NOM+1); localizationname[MED_TAILLE_NOM]='\0'; /* Vérification de la cohérence du nombre de valeurs pas entité */ if (entitytype == MED_NODE_ELEMENT ) { if ( strlen( _localizationname) ) { MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_PARAMETER,_localizationname); SSCRUTE(MED_NO_LOCALIZATION);ISCRUTE_int(entitytype);goto ERROR; } _nvaluesperentityfromloc = geotype % 100; } else if (! strcmp(_localizationname,MED_GAUSS_ELNO)) { /* Les points de Gauss sont d"finis sur les noeuds de l'element (mot cle) */ /* le nombre de points de Gauss est egal au nombre de noeuds de l'element */ _nvaluesperentityfromloc = geotype % 100; } else if ( strlen(_localizationname) ) { strcat(_path,_localizationname); if ( _MEDattributeNumRdByName(fid, _path, MED_NOM_NBR,MED_INTERNAL_INT,(unsigned char *) &_nvaluesperentityfromloc) < 0 ) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG ); SSCRUTE(MED_NOM_NBR);SSCRUTE(_path); ISCRUTE(_nvaluesperentityfromloc);goto ERROR; } if ( _MEDattributeNumRdByName(fid, _path, MED_NOM_GEO, MED_INTERNAL_INT,(unsigned char *) &_intlocgeotype) < 0 ) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE, MED_ERR_NAME_MSG ); SSCRUTE(MED_NOM_GEO);SSCRUTE(_path); ISCRUTE(_intlocgeotype);goto ERROR; } _locgeotype = (med_geometry_type) _intlocgeotype; if ( _locgeotype != geotype ) { MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); SSCRUTE(_localizationname);SSCRUTE(MED_NOM_GEO);ISCRUTE_int(_locgeotype);ISCRUTE_int(geotype); goto ERROR; } } else { _nvaluesperentityfromloc = 1; } /* Pour effectuer la vérification suivante (incohérence dans le fichier suite à une maj de la localisation ou du champ sans prise en compte d'un nombre de points d'intégration différent), il faudrait lire l'attribut MED_NOM_NGA sur le maillage par défaut du champ*/ /* Pour celà il faut soit developper une nouvelle routine soit utiliser MEDpasdetempsInfo mais qui est itérative*/ /* if ( _nvaluesperentityfromloc != _nvaluesperentity ) { */ /* MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_LOCALIZATION_MSG); */ /* SSCRUTE(_localizationname);SSCRUTE(MED_NOM_GEO);ISCRUTE(_nvaluesperentityfromloc); */ /* ISCRUTE(_nvaluesperentity);goto ERROR; */ /* } */ *nintegrationpoint = _nvaluesperentityfromloc; _n/=_nvaluesperentityfromloc; /*Rectification de la valeur 2.3.6 qui prend en compte le nombre de points d'intégration*/ if (_anyprofile) *profilesize=_profilearraysize; else *profilesize=_n; _ret = _n; ERROR: va_end(params); *fret = _ret; return; }
med_err MEDprofilEcr(med_idt fid,med_int *pflval,med_int n,char *profilname) { med_idt gid, chid; med_size dimd[1]; med_err ret=-1; char chemin[MED_TAILLE_PROFILS+1]; med_mode_acces MED_MODE_ACCES; /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier "); goto ERROR; } /* * Si le groupe "PROFILS" n'existe pas, on le cree */ strncpy(chemin,MED_PROFILS,MED_TAILLE_PROFILS-1); chemin[MED_TAILLE_PROFILS-1] = '\0'; if ((gid = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((gid = _MEDdatagroupCreer(fid,chemin)) < 0) { MESSAGE("Impossible de creer le groupe MED_PROFILS : "); SSCRUTE(chemin); goto ERROR; } /* * Si le groupe "profilname" n'existe pas, on le cree * Sinon => erreur */ NOFINALBLANK(profilname,ERROR); if ((chid = _MEDdatagroupOuvrir(gid,profilname)) >= 0) { if ( MED_MODE_ACCES != MED_LECTURE_ECRITURE ) { MESSAGE("Le profil existe déjà : "); SSCRUTE(profilname); goto ERROR; } } else if ((chid = _MEDdatagroupCreer(gid,profilname)) < 0) goto ERROR; /* * On stocke "n" sous forme d'attribut */ if ((ret = _MEDattrEntierEcrire(chid,MED_NOM_NBR,&n)) < 0) { MESSAGE("Erreur à l'écriture de l'attribut MED_NOM_NBR : "); ISCRUTE(n); goto ERROR; }; /* * On stocke le profil dans un dataset */ dimd[0] = n; #if defined(HAVE_F77INT64) ret = _MEDdatasetNumEcrire(chid,MED_NOM_PFL,MED_INT64,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) pflval); #else ret = _MEDdatasetNumEcrire(chid,MED_NOM_PFL,MED_INT32,MED_NO_INTERLACE,MED_DIM1,MED_ALL,MED_NOPF,MED_NO_PFLMOD,0,0,MED_NOPG,dimd, (unsigned char*) pflval); #endif if (ret < 0 ) { MESSAGE("Impossible d'ecrire le dataset pflval de taille : "); ISCRUTE(n); goto ERROR; } ret = 0; ERROR: /* * On ferme tout */ if (chid>0) if (_MEDdatagroupFermer(chid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(chid); ret = -1; } if (gid>0) if (_MEDdatagroupFermer(gid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(gid); ret = -1; } return ret; }
med_err MEDscalaireCr(med_idt fid,char *scalaire, med_type_champ type, char *desc) { med_err ret=-1; med_idt root=0,gid=0; char chemin[MED_TAILLE_NUM_DATA+1]; med_int _type = (med_int) type; med_mode_acces MED_MODE_ACCES; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (MEDcheckVersion(fid) < 0) return -1; if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { MESSAGE("Impossible de déterminer le mode d'acces au fichier."); goto ERROR; } if ( MED_MODE_ACCES == MED_LECTURE ) { MESSAGE("Impossible de créer une variable scalaire en mode MED_LECTURE."); goto ERROR; }; /* * Si le Groupe HDF "/NUM_DATA" n'existe pas, on le cree */ strncpy(chemin,MED_NUM_DATA,MED_TAILLE_NUM_DATA-1); chemin[MED_TAILLE_NUM_DATA-1] = '\0'; if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0) if ((root = _MEDdatagroupCreer(fid,chemin)) < 0){ MESSAGE("Erreur à la création du datagroup : "); SSCRUTE(chemin); goto ERROR; } /* * Si le groupe HDF "scalaire" n'existe pas, on le cree * Sinon => erreur */ NOFINALBLANK(scalaire,ERROR); if ((gid = _MEDdatagroupCreer(root,scalaire)) < 0) { MESSAGE("Erreur à la création de la variable scalaire : "); SSCRUTE(scalaire); goto ERROR; } /* * On stocke l'unite, et le type de la valeur scalaire */ if ((ret = _MEDattrEntierEcrire(gid,MED_NOM_TYP,&_type)) < 0) { MESSAGE("Erreur à l'écriture du type de la varaible scalaire : "); ISCRUTE(_type); goto ERROR; } if ((ret = _MEDattrStringEcrire(gid,MED_NOM_DES,MED_TAILLE_DESC,desc)) < 0) { MESSAGE("Erreur à l'écriture de la description de la variable scalaire : "); SSCRUTE(desc); goto ERROR; } /* * On ferme tout */ ret = 0; ERROR: if (gid>0) if (_MEDdatagroupFermer(gid) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(gid);ret=-1; } if (root>0) if (_MEDdatagroupFermer(root) < 0) { MESSAGE("Impossible de fermer le datagroup : "); ISCRUTE_id(root);ret=-1; } return ret; }
void _MEDfieldnProfile30(int dummy, ...) { med_int _ret=-1,_err=-1; med_idt _gid=0,_datagroup1=0; char _path[(MED_TAILLE_CHA+MED_NAME_SIZE+1)+(2*MED_MAX_PARA+1)+1]=MED_CHA; char _datagroupname1[2*MED_TAILLE_NOM_ENTITE+2]=""; char _geotypename [MED_TAILLE_NOM_ENTITE+1]=""; char _profilename [MED_NAME_SIZE+1]=""; med_int _numdt=0, _numit=0; med_size _n=0; MED_VARGS_DECL(const, med_idt , , fid ); MED_VARGS_DECL(const, char * , const , fieldname ); MED_VARGS_DECL(const, med_int , , numdt ); MED_VARGS_DECL(const, med_int , , numit ); MED_VARGS_DECL(const, med_entity_type , , entitype ); MED_VARGS_DECL(const, med_geometry_type , , geotype ); MED_VARGS_DECL(, char *, const , defaultprofilename ); MED_VARGS_DECL(, char *, const , defaultlocalizationname ); MED_VARGS_DECL(, med_int * ,, fret ); va_list params; va_start(params,dummy); MED_VARGS_DEF(const, med_idt , , fid ); MED_VARGS_DEF(const, char * , const , fieldname ); MED_VARGS_DEF(const, med_int , , numdt ); MED_VARGS_DEF(const, med_int , , numit ); MED_VARGS_DEF(const, med_entity_type , , entitype ); MED_VARGS_DEF(const, med_geometry_type , , geotype ); MED_VARGS_DEF(, char *, const , defaultprofilename ); MED_VARGS_DEF(, char *, const , defaultlocalizationname ); MED_VARGS_DEF(, med_int * ,, fret ); /* * On inhibe le gestionnaire d'erreur HDF 5 */ _MEDmodeErreurVerrouiller(); NOFINALBLANK(fieldname,ERROR); /* * On construit le chemin d'acc�s jusqu'aux groupes <type_ent>[.<type_geo>] */ strcat(_path,fieldname); strcat(_path,"/"); _MEDgetComputationStepName(MED_SORT_DTIT,numdt,numit,&_path[strlen(_path)]); strcat(_path,"/"); if ((_gid = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_path); goto ERROR; } /*Lit l'attribut MED_NOM_NDT */ if ( _MEDattrEntierLire(_gid,MED_NOM_NDT, &_numdt) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_NDT); ISCRUTE(_numdt);goto ERROR; } if ( _numdt != numdt) { MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);ISCRUTE(_numdt);ISCRUTE(numdt);goto ERROR; } /*Lit l'attribut MED_NOM_NOR */ if ( _MEDattrEntierLire(_gid,MED_NOM_NOR, &_numit) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_NOR); ISCRUTE(_numit); goto ERROR; } if ( _numit != numit) { MED_ERR_(_ret,MED_ERR_NOTEQUAL,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);ISCRUTE(_numit);ISCRUTE(numit);goto ERROR; } /* * Si le Data Group de niveau <type_ent>[.<type_geo>] n'existe pas retroune 0 */ if (_MEDgetEntityTypeName(_datagroupname1,entitype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ENTITY,_datagroupname1); goto ERROR; } if (entitype != MED_NODE) { if ( entitype == MED_STRUCT_ELEMENT ) { if ( MEDstructElementName(fid,geotype,_geotypename) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"MEDstructElementName"); ISCRUTE_int(geotype);goto ERROR; } } else { if (_MEDgetInternalGeometryTypeName(_geotypename,geotype) < 0) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_GEOMETRIC,_geotypename); goto ERROR; } } strcat(_datagroupname1,"."); strcat(_datagroupname1,_geotypename); } /* strcat(_path,_datagroupname1); */ /* strcat(_path,"/"); */ if ((_datagroup1 = _MEDdatagroupOuvrir(_gid,_datagroupname1)) < 0) { *defaultprofilename='\0'; *defaultlocalizationname='\0'; _ret = 0; goto ERROR; } if ((_err=_MEDnObjects(_datagroup1,".",&_n)) <0) if ( _err == (MED_ERR_COUNT + MED_ERR_DATAGROUP) ) { MED_ERR_(_ret,MED_ERR_COUNT,MED_ERR_DATAGROUP,_datagroupname1); goto ERROR; } /* Lit le nom du profil associ� s'il en existe d�j� un */ if ( _MEDattrStringLire(_datagroup1,MED_NOM_PFL,MED_NAME_SIZE,_profilename) < 0 ) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_PFL); goto ERROR; } if ( strcmp(_profilename,MED_NO_PROFILE_INTERNAL) ) { strncpy(defaultprofilename,_profilename,MED_NAME_SIZE+1); defaultprofilename[MED_NAME_SIZE]='\0'; } else { defaultprofilename[0]='\0'; } /* Lit le nom de la localization associ� s'il en existe d�j� une */ if ( _MEDattrStringLire(_datagroup1,MED_NOM_GAU,MED_NAME_SIZE,defaultlocalizationname) < 0 ) { MED_ERR_(_ret,MED_ERR_READ,MED_ERR_ATTRIBUTE,MED_ERR_FIELD_MSG); SSCRUTE(fieldname);SSCRUTE(_path);SSCRUTE(MED_NOM_GAU); goto ERROR; } _ret = (med_int) _n; ERROR: if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); SSCRUTE(_datagroupname1); ISCRUTE_id(_datagroup1); } if (_gid>0) if (_MEDdatagroupFermer(_gid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_path); ISCRUTE_id(_gid); } va_end(params); *fret = _ret; return; }
med_err MEDprofileWr(const med_idt fid, const char* const profilename, const med_int profilesize, const med_int* const profilearray) { med_access_mode _MED_ACCESS_MODE; med_idt _root=0,_pfid=0; med_err _ret=-1; char _path[MED_TAILLE_PROFILS+MED_NAME_SIZE+1]=MED_PROFILS; med_filter _filter = MED_FILTER_INIT; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } /* * Si le DataGroup /PROFILS/ n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0) if ((_root = _MEDdatagroupCreer(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_path); goto ERROR; } NOFINALBLANK(profilename,ERROR); /* * Si le DataGroup /PROFILS/<profilename> n'existe pas, on le cree */ if ((_pfid = _MEDdatagroupOuvrir(_root,profilename)) < 0) if ((_pfid = _MEDdatagroupCreer(_root,profilename)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,profilename); SSCRUTE(_path);goto ERROR; } strcat(_path,profilename); /* * On stocke "profilesize" sous forme d'attribut */ if (_MEDattributeIntWr(_pfid,MED_NOM_NBR,&profilesize) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_PROFILE_MSG); SSCRUTE(profilename);SSCRUTE(MED_NOM_NBR);ISCRUTE(profilesize); goto ERROR; } /* * On stocke le profil dans un dataset */ if ( MEDfilterEntityCr(fid, profilesize, 1, 1, MED_ALL_CONSTITUENT, MED_NO_INTERLACE,MED_UNDEF_PFLMODE, MED_NO_PROFILE, MED_UNDEF_SIZE, NULL, &_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_FILTER,MED_ERR_INTERNAL_MSG); goto ERROR; } if ( _MEDdatasetWr(_pfid,MED_NOM_PFL,MED_INTERNAL_INT,&_filter, profilearray) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_PFL);SSCRUTE(_path); goto ERROR; } if ( MEDfilterClose(&_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_PROFILE_MSG); SSCRUTE(_path); goto ERROR; } _ret = 0; ERROR: if (_pfid>0) if (_MEDdatagroupFermer(_pfid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,profilename); ISCRUTE_id(_pfid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_PROFILS); ISCRUTE_id(_root); } return _ret; }
med_err _MEDmeshCr(const med_idt fid, const char * const root, const char * const meshname, const med_int spacedim, const med_int meshdim, const med_mesh_type meshtype, const char * const description, const char * const dtunit, const med_sorting_type sortingtype, const med_axis_type axistype, const char * const axisname, const char * const axisunit) { med_access_mode _MED_ACCESS_MODE; med_err _ret=-1; med_idt _root=0,_datagroup1=0; /* _datagroup2=0,_datagroup3=0; */ med_int _intmeshtype = (med_int) meshtype; med_int _intaxistype = (med_int) axistype; char _datagroupname1[MED_NAME_SIZE+1]=""; /* char _geotypename[MED_NAME_SIZE_ENTITE+1]=""; */ med_int _lastnumdt=MED_NO_DT, _lastnumit=MED_NO_IT; med_int _intsortingtype =(med_int) MED_SORT_UNDEF; med_int _intexistingmeshtype=(med_int) MED_UNDEF_MESH_TYPE; med_mesh_type _existingmeshtype = meshtype; med_sorting_type _existingsortingtype = sortingtype; med_size _nstep=0; /* * On inhibe le gestionnaire d'erreur */ _MEDmodeErreurVerrouiller(); if (_MEDcheckVersion30(fid) < 0) goto ERROR; if ( (_MED_ACCESS_MODE = _MEDmodeAcces(fid) ) == MED_ACC_UNDEF ) { MED_ERR_(_ret,MED_ERR_UNRECOGNIZED,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); goto ERROR; } if ( _MED_ACCESS_MODE == MED_ACC_RDONLY) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ACCESSMODE,MED_ERR_FILE_MSG); ISCRUTE_int(_MED_ACCESS_MODE); goto ERROR; } if ( sortingtype == MED_SORT_UNDEF) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_PARAMETER,"sortingtype"); ISCRUTE_int(sortingtype); goto ERROR; } /* * Si le DataGroup root n'existe pas, on le cree */ if ((_root = _MEDdatagroupOuvrir(fid,root)) < 0) if ((_root = _MEDdatagroupCreer(fid,root)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,root); goto ERROR; } NOFINALBLANK(meshname,ERROR); /* * Si le Data Group "/MAA.../<meshname>" n'existe pas, on le cree */ if ((_datagroup1 = _MEDdatagroupOuvrir(_root,meshname)) < 0) if ((_datagroup1 = _MEDdatagroupCreer(_root,meshname)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,meshname); goto ERROR; } /* * Creation de l'attribut dimension du maillage */ if (meshdim > spacedim) { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_PARAMETER,"meshdim"); ISCRUTE(meshdim);ISCRUTE(spacedim); SSCRUTE(root);SSCRUTE(meshname);goto ERROR; } /* * Creation de l'attribut dimension de l'espace */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_ESP,&spacedim) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_ESP); ISCRUTE(spacedim);goto ERROR; } /* * Creation de l'attribut dimension du maillage */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_DIM,&meshdim) < 0 ) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_DIM); ISCRUTE(meshdim);goto ERROR; } /* Lecture de l'attribut MED_NOM_TYP */ if (_MEDattrEntierLire(_datagroup1,MED_NOM_TYP,&_intexistingmeshtype) >= 0) _existingmeshtype = (med_mesh_type) (_intexistingmeshtype); if ( _existingmeshtype != meshtype ) { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_WRITE,MED_ERR_ATTRIBUTE_MSG); SSCRUTE(MED_NOM_TYP);SSCRUTE(meshname);SSCRUTE(_datagroupname1); ISCRUTE_int(_existingmeshtype);ISCRUTE_int(meshtype);goto ERROR; } /* * Creation de l'attribut correspondant au type du maillage (MED_STRUCTURE, MED_NON_STRUCTURE) * L'attribut "TYP" */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_TYP,&_intmeshtype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_TYP); ISCRUTE(_intmeshtype);goto ERROR; } /* * La description associee au maillage */ if ( _MEDattributeStringWr(_datagroup1,MED_NOM_DES,MED_COMMENT_SIZE,description) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_DES); SSCRUTE(description);goto ERROR; } /* * Creation de l'attribut nom de l'unit~ des dates */ if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNT,MED_SNAME_SIZE,dtunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNT); SSCRUTE(dtunit);goto ERROR; } /* * Test de l'existence de l'attribut de tri des s~quences de calcul */ if ( _MEDattrEntierLire(_datagroup1,MED_NOM_SRT,&_intsortingtype) >= 0) { _existingsortingtype = (med_sorting_type) (_intsortingtype); /* Nombre d'~tapes de calcul existantes */ _MEDnObjects(_datagroup1,".",&_nstep); } if ( (_existingsortingtype != sortingtype) && _nstep ) { MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_COMPUTINGSTEP,MED_ERR_ATTRIBUTE_MSG); SSCRUTE(MED_NOM_SRT);SSCRUTE(meshname);SSCRUTE(_datagroupname1); ISCRUTE_int(_existingsortingtype);ISCRUTE_int(sortingtype);goto ERROR; } /* * Creation de l'attribut de tri des s~quences de calcul */ _intsortingtype = sortingtype; if ( _MEDattributeIntWr(_datagroup1,MED_NOM_SRT,&_intsortingtype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_SRT); ISCRUTE_int(sortingtype);goto ERROR; } /* * Creation de l'attribut de la derni~re it~ration cr~e */ /* if ( _MEDattributeIntWr(_datagroup1,MED_NOM_NXI,&_lastnumit) < 0) { */ /* MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); */ /* SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NXI); */ /* ISCRUTE(_lastnumit);goto ERROR; */ /* } */ /* * L'attribut "REP" */ if ( _MEDattributeIntWr(_datagroup1,MED_NOM_REP,&_intaxistype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_REP); ISCRUTE(_intaxistype);goto ERROR; } /* * Attribut "NOM" */ if ( _MEDattributeStringWr(_datagroup1,MED_NOM_NOM,spacedim*MED_SNAME_SIZE,axisname) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_NOM); SSCRUTE(axisname);goto ERROR; } /* * Attribut "UNI" */ if ( _MEDattributeStringWr(_datagroup1,MED_NOM_UNI,spacedim*MED_SNAME_SIZE,axisunit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_MESH_MSG); SSCRUTE(meshname);SSCRUTE(_datagroupname1);SSCRUTE(MED_NOM_UNI); SSCRUTE(axisunit);goto ERROR; } /* * Cr~ation du datagroup des mailles associ~es ~ un maillage structur~ * Cel~ permet d'utiliser les routines famille, num~ros/noms optionnels * de la m~me fa~on que pour les maillages non structur~s */ /* if ( meshtype == MED_STRUCTURE ) { */ /* if ((_datagroup2 = _MEDdatagroupCreer(_datagroup1,MED_NOM_MAI)) < 0) { */ /* MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,root); */ /* SSCRUTE(meshname);SSCRUTE(MED_NOM_MAI);goto ERROR; */ /* } */ /* switch ( meshdim ) { */ /* case 1 : strcpy(_geotypename,MED_NOM_SE2); */ /* break; */ /* case 2 : strcpy(_geotypename,MED_NOM_QU4); */ /* break; */ /* case 3 : strcpy(_geotypename,MED_NOM_HE8); */ /* break; */ /* case 0 : strcpy(_geotypename,MED_NOM_PO1); */ /* break; */ /* default : */ /* MED_ERR_(_ret,MED_ERR_RANGE,MED_ERR_PARAMETER,""); */ /* ISCRUTE(meshdim);SSCRUTE(root);SSCRUTE(meshname);goto ERROR; */ /* } */ /* if ((_datagroup3 = _MEDdatagroupCreer(_datagroup2,_geotypename)) < 0) { */ /* MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_geotypename); */ /* SSCRUTE(root);SSCRUTE(meshname);SSCRUTE(MED_NOM_MAI);ISCRUTE_int(_geotypename); */ /* goto ERROR; */ /* } */ /* } */ /* * Nettoyages divers */ _ret = 0; ERROR: /* if (_datagroup3>0) if (_MEDdatagroupFermer(_datagroup3) < 0) { */ /* MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_geotypename); */ /* ISCRUTE_id(_datagroup3); */ /* } */ /* if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) { */ /* MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_NOM_MAI); */ /* ISCRUTE_id(_datagroup2); */ /* } */ if (_datagroup1>0) if (_MEDdatagroupFermer(_datagroup1) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,meshname); ISCRUTE_id(_datagroup1); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,root); ISCRUTE_id(_root); } return _ret; }