MEDmaaCr.c
Aller à la documentation de ce fichier.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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 MEDmaaCr(med_idt fid, char *maillage, med_int dim, med_maillage type,char *desc)
00028 {
00029 med_idt maaid=0, root=0, entid=0, geoid=0 ;
00030 char chemin[MED_TAILLE_MAA+1];
00031 char nom_ent[MED_TAILLE_NOM_ENTITE+1];
00032 char nom_geo[MED_TAILLE_NOM_ENTITE+1];
00033 med_err ret=-1;
00034 med_int tmp;
00035 med_mode_acces MED_MODE_ACCES;
00036
00037
00038
00039
00040 _MEDmodeErreurVerrouiller();
00041 if (MEDcheckVersion(fid) < 0) return -1;
00042
00043
00044 if ( (MED_MODE_ACCES = _MEDmodeAcces(fid) ) == MED_UNDEF_MODE_ACCES ) {
00045 MESSAGE("Impossible de déterminer le mode d'acces au fichier.");
00046 goto ERROR;
00047 }
00048
00049 if ( MED_MODE_ACCES == MED_LECTURE ) {
00050 MESSAGE("Impossible de créer un maillage en mode MED_LECTURE.");
00051 goto ERROR;
00052 };
00053
00054
00055
00056
00057 strncpy(chemin,MED_MAA,strlen(MED_MAA)-1);
00058 chemin[MED_TAILLE_MAA-1] = '\0';
00059 if ((root = _MEDdatagroupOuvrir(fid,chemin)) < 0)
00060 if ((root = _MEDdatagroupCreer(fid,chemin)) < 0) {
00061 MESSAGE("Erreur à la création du datagroup : ");
00062 SSCRUTE(chemin);
00063 goto ERROR;
00064 }
00065
00066
00067
00068
00069 NOFINALBLANK(maillage,ERROR);
00070 if ( (maaid = _MEDdatagroupCreer(root,maillage)) < 0) {
00071 MESSAGE("Erreur à la création du maillage : ");
00072 SSCRUTE(maillage);
00073 goto ERROR;
00074 }
00075
00076
00077
00078
00079 if ((ret = _MEDattrEntierEcrire(maaid,MED_NOM_DIM,&dim)) < 0) {
00080 MESSAGE("Erreur à l'écriture de la dimension du maillage : ");
00081 ISCRUTE(dim);
00082 goto ERROR;
00083 }
00084
00085
00086
00087
00088 if ((ret = _MEDattrStringEcrire(maaid,MED_NOM_DES,MED_TAILLE_DESC,desc)) < 0) {
00089 MESSAGE("Erreur à l'écriture de la description du maillage : ");
00090 SSCRUTE(desc);
00091 goto ERROR;
00092 }
00093
00094
00095
00096
00097 tmp = (med_int) type;
00098 if ((ret = _MEDattrEntierEcrire(maaid,MED_NOM_TYP,&tmp)) < 0) {
00099 MESSAGE("Erreur à l'écriture du type de maillage : ");
00100 ISCRUTE(tmp);
00101 goto ERROR;
00102 }
00103
00104 if ( type == MED_STRUCTURE ) {
00105
00106 strcpy(nom_ent,MED_NOM_MAI);
00107 if ((entid = _MEDdatagroupCreer(maaid,nom_ent)) < 0) {
00108 MESSAGE("Impossible de Cr\351er le datagroup :");
00109 SSCRUTE(nom_ent);
00110 MESSAGE("pour le maillage structur\351 :");
00111 SSCRUTE(maillage);
00112 goto ERROR;
00113 }
00114
00115 switch ( dim ) {
00116 case 1 : strcpy(nom_geo,MED_NOM_SE2);
00117 break;
00118 case 2 : strcpy(nom_geo,MED_NOM_QU4);
00119 break;
00120 case 3 : strcpy(nom_geo,MED_NOM_HE8);
00121 break;
00122 case 0 : strcpy(nom_geo,MED_NOM_PO1);
00123 break;
00124 default :
00125 MESSAGE("La dimension doit être comprise entre 0 et 3");
00126 goto ERROR;
00127 }
00128
00129 if ((geoid = _MEDdatagroupCreer(entid,nom_geo)) < 0) {
00130 MESSAGE("Impossible de Créer le datagroup :");
00131 SSCRUTE(nom_geo);
00132 MESSAGE("pour le maillage structuré :");
00133 SSCRUTE(maillage);
00134 goto ERROR;
00135 }
00136 }
00137
00138
00139
00140
00141 ret = 0;
00142 ERROR:
00143 if (geoid>0) if (_MEDdatagroupFermer(geoid) < 0) {
00144 MESSAGE("Impossible de fermer le datagroup : ");
00145 ISCRUTE_id(geoid);ret = -1;
00146 }
00147
00148 if (entid>0) if (_MEDdatagroupFermer(entid) < 0) {
00149 MESSAGE("Impossible de fermer le datagroup : ");
00150 ISCRUTE_id(entid);ret = -1;
00151 }
00152
00153 if (maaid>0) if (_MEDdatagroupFermer(maaid) < 0) {
00154 MESSAGE("Impossible de fermer le datagroup : ");
00155 ISCRUTE_id(maaid);ret = -1;
00156 }
00157
00158 if (root>0) if (_MEDdatagroupFermer(root) < 0) {
00159 MESSAGE("Impossible de fermer le datagroup : ");
00160 ISCRUTE_id(root); ret = -1;
00161 }
00162
00163 return ret;
00164 }
00165
00166
00167