00001 /* This file is part of MED. 00002 * 00003 * COPYRIGHT (C) 1999 - 2015 EDF R&D, CEA/DEN 00004 * MED is free software: you can redistribute it and/or modify 00005 * it under the terms of the GNU Lesser General Public License as published by 00006 * the Free Software Foundation, either version 3 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * MED is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU Lesser General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU Lesser General Public License 00015 * along with MED. If not, see <http://www.gnu.org/licenses/>. 00016 */ 00017 00018 00019 #include <med.h> 00020 #include <med_config.h> 00021 #include <med_outils.h> 00022 00023 #include <string.h> 00024 #include <stdlib.h> 00025 00026 med_err 00027 MEDdimEspaceCr(med_idt fid, char *maillage, med_int dim) 00028 { 00029 med_idt maaid=0; 00030 med_err ret=-1; 00031 char chemin[MED_TAILLE_MAA+MED_TAILLE_NOM+1]; 00032 med_int maadim; 00033 med_mode_acces MED_MODE_ACCES; 00034 00035 /* 00036 * On inhibe le gestionnaire d'erreur 00037 */ 00038 _MEDmodeErreurVerrouiller(); 00039 if (MEDcheckVersion(fid) < 0) return -1; 00040 00041 00042 if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) { 00043 MESSAGE("Impossible de déterminer le mode d'acces au fichier."); 00044 goto ERROR; 00045 } 00046 00047 if ( MED_MODE_ACCES == MED_LECTURE ) { 00048 MESSAGE("Impossible de créer un maillage en mode MED_LECTURE."); 00049 goto ERROR; 00050 }; 00051 00052 /* 00053 * On regarde si le groupe existe => erreur si non 00054 */ 00055 strcpy(chemin,MED_MAA); 00056 strcat(chemin,maillage); 00057 if ((maaid = _MEDdatagroupOuvrir(fid,chemin)) < 0) { 00058 MESSAGE("Erreur à l'ouverture du maillage : "); 00059 SSCRUTE(chemin); 00060 goto ERROR; 00061 } 00062 00063 /* 00064 * On va lire l'attribut dimension du maillage et on controle 00065 * la coherence 00066 */ 00067 if ((ret = _MEDattrEntierLire(maaid,MED_NOM_DIM,&maadim)) < 0) { 00068 MESSAGE("Erreur à la lecture de la dimension du maillage : "); 00069 ISCRUTE(maadim); 00070 goto ERROR; 00071 } 00072 00073 if (maadim > dim) { 00074 MESSAGE("La dimension de l'espace : "); 00075 ISCRUTE(dim); 00076 MESSAGE("doit être supérieur à la dimension du maillage : "); 00077 ISCRUTE(maadim); 00078 goto ERROR; 00079 } 00080 00081 /* 00082 * On ecrit la dimension de l'espace 00083 */ 00084 if ((ret = _MEDattrEntierEcrire(maaid,MED_NOM_ESP,&dim)) < 0) { 00085 MESSAGE("Erreur à l'écriture de la dimension de l'espace : "); 00086 ISCRUTE(dim); 00087 goto ERROR; 00088 } 00089 00090 /* 00091 * Fermetures des objets HDF 00092 */ 00093 ret = 0; 00094 ERROR: 00095 if (maaid>0) if (_MEDdatagroupFermer(maaid) < 0) { 00096 MESSAGE("Impossible de fermer le datagroup : "); 00097 ISCRUTE_id(maaid);ret = -1; 00098 } 00099 00100 return ret; 00101 00102 }