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; }
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 MEDsubdomainCorrespondenceWr(const med_idt fid, const char * const localmeshname, const char * const jointname, const med_int numdt, const med_int numit, const med_entity_type localentitype, const med_geometry_type localgeotype, const med_entity_type remoteentitype, const med_geometry_type remotegeotype, const med_int nentity, const med_int * const correspondence) { med_access_mode _MED_ACCESS_MODE; med_idt _root=0,_jntid=0,_meshid=0,_cstpid=0,_datagroup2=0; med_idt _dataset=0; med_err _ret=-1; char _path[MED_TAILLE_JNT+2*MED_NAME_SIZE+2]=MED_JNT; char _computationstepname[2*MED_MAX_PARA+1]=""; char _datagroupname2[4*MED_TAILLE_NOM_ENTITE+4]=""; char _localgeotypename [MED_TAILLE_NOM_ENTITE+1]=""; char _remotegeotypename [MED_TAILLE_NOM_ENTITE+1]=""; med_sorting_type _sortingtype=0; med_filter _filter = MED_FILTER_INIT; med_int _localgeotype = MED_NONE; med_int _localentitype = localentitype; med_int _remotegeotype = MED_NONE; med_int _remoteentitype = remoteentitype; if ( localentitype == MED_NODE_ELEMENT ) _localgeotype=MED_NODE ; if ( localentitype != MED_NODE ) _localgeotype = localgeotype ; if ( remoteentitype != MED_NODE ) _remotegeotype = remotegeotype ; /* * 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; } /* * Ouverture du dataGroup /JNT/ */ if ((_root = _MEDdatagroupOuvrir(fid,_path)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,_path); goto ERROR; } /* * Ouverture du dataGroup <meshname> */ if ((_meshid = _MEDdatagroupOuvrir(_root,localmeshname)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,localmeshname); SSCRUTE(_path);goto ERROR; } strcat(_path,localmeshname); /* * Ouverture du data Group "/JNT/<localmeshname>/<jointname>" */ if ((_jntid = _MEDdatagroupOuvrir(_meshid,jointname)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATAGROUP,jointname); SSCRUTE(_path);goto ERROR; } strcat(_path,"/"); strcat(_path,jointname); if ( MEDmeshSortingTypeRd(fid,localmeshname,&_sortingtype) < 0 ) { MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API," MEDmeshSortingTypeRd"); SSCRUTE(localmeshname);ISCRUTE_int(_sortingtype);goto ERROR; } _MEDgetComputationStepName(_sortingtype,numdt,numit,_computationstepname); if ((_cstpid = _MEDdatagroupOuvrir(_jntid,_computationstepname)) < 0) if ((_cstpid = _MEDdatagroupCreer(_jntid,_computationstepname)) < 0 ) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_computationstepname); SSCRUTE(_path);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_NDT pour �criture */ if ( _MEDattributeIntWr(_cstpid,MED_NOM_NDT,&numdt) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_NOR pour �criture */ if ( _MEDattributeIntWr(_cstpid,MED_NOM_NOR,&numit) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } /* * Creation/Ouverture du datagroup de niveau * <localentitype>[.<localgeotype>].<remoteentitype>[.<remotegeotype>] */ if (_MEDgetEntityTypeName(_datagroupname2,localentitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(localentitype);SSCRUTE(jointname);goto ERROR; } if ( localentitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(_localgeotypename,localgeotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(localgeotype);SSCRUTE(jointname);goto ERROR; } strcat(_datagroupname2,"."); strcat(_datagroupname2,_localgeotypename); } strcat(_datagroupname2,"."); if (_MEDgetEntityTypeName(&_datagroupname2[strlen(_datagroupname2)],remoteentitype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_ENTITY,MED_ERR_VALUE_MSG); ISCRUTE_int(remoteentitype);SSCRUTE(jointname);goto ERROR; } if ( remoteentitype != MED_NODE ) { if ( _MEDgetInternalGeometryTypeName(_remotegeotypename,remotegeotype) < 0) { MED_ERR_(_ret,MED_ERR_INVALID,MED_ERR_GEOMETRIC,MED_ERR_VALUE_MSG); ISCRUTE_int(remotegeotype);SSCRUTE(jointname);goto ERROR; } strcat(_datagroupname2,"."); strcat(_datagroupname2,_remotegeotypename); } if ( (_datagroup2 = _MEDdatagroupOuvrir(_cstpid,_datagroupname2)) < 0) if ((_datagroup2 = _MEDdatagroupCreer(_cstpid,_datagroupname2)) < 0) { MED_ERR_(_ret,MED_ERR_CREATE,MED_ERR_DATAGROUP,_datagroupname2); SSCRUTE(_path);SSCRUTE(jointname);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_ENT pour �criture */ if (_MEDattributeIntWr(_datagroup2,MED_NOM_ENT,&_localentitype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_ENT); ISCRUTE(_localentitype);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_GEO pour �criture */ if (_MEDattributeIntWr(_datagroup2,MED_NOM_GEO,&_localgeotype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_GEO); ISCRUTE(_localgeotype);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_END pour �criture */ if (_MEDattributeIntWr(_datagroup2,MED_NOM_END,&_remoteentitype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_END); ISCRUTE(_remoteentitype);goto ERROR; } /*Cree ou ouvre l'attribut MED_NOM_GED pour �criture */ if (_MEDattributeIntWr(_datagroup2,MED_NOM_GED,&_remotegeotype) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_NOM_GED); ISCRUTE(_remotegeotype);goto ERROR; } if ( MEDfilterEntityCr(fid, nentity, 1, 2, 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(_datagroup2,MED_NOM_COR,MED_INTERNAL_INT,&_filter, correspondence) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } if ( MEDfilterClose(&_filter) < 0 ) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_FILTER,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); goto ERROR; } if ((_dataset = _MEDdatasetOuvrir(_datagroup2,MED_NOM_COR)) < 0) { MED_ERR_(_ret,MED_ERR_OPEN,MED_ERR_DATASET,MED_NOM_COR); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);SSCRUTE(_datagroupname2); goto ERROR; } if ( _MEDattributeIntWr(_dataset,MED_NOM_NBR,&nentity) < 0) { MED_ERR_(_ret,MED_ERR_WRITE,MED_ERR_ATTRIBUTE,MED_ERR_SUBDOMAINJOINT_MSG); SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit);SSCRUTE(_datagroupname2); SSCRUTE(MED_NOM_NBR);ISCRUTE(nentity);goto ERROR; } _ret=0; ERROR: if (_dataset>0) if (_MEDdatasetFermer(_dataset) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATASET,MED_NOM_COR); ISCRUTE_id(_dataset); } if (_datagroup2>0) if (_MEDdatagroupFermer(_datagroup2) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_datagroupname2); ISCRUTE_id(_datagroup2);SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); } if (_cstpid>0) if (_MEDdatagroupFermer(_cstpid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,_computationstepname); ISCRUTE_id(_cstpid);SSCRUTE(_path);ISCRUTE(numdt);ISCRUTE(numit); } if (_jntid>0) if (_MEDdatagroupFermer(_jntid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,jointname); ISCRUTE_id(_jntid);SSCRUTE(_path); } if (_meshid>0) if (_MEDdatagroupFermer(_meshid) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,localmeshname); ISCRUTE_id(_meshid); } if (_root>0) if (_MEDdatagroupFermer(_root) < 0) { MED_ERR_(_ret,MED_ERR_CLOSE,MED_ERR_DATAGROUP,MED_JNT); ISCRUTE_id(_root); } return _ret; }