MAJ_236_300_equivalence.c

Aller à la documentation de ce fichier.
00001 /*  This file is part of MED.
00002  *
00003  *  COPYRIGHT (C) 1999 - 2011  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 #ifndef MESGERR
00020 #define MESGERR 1
00021 #endif
00022 
00023 #include "med_config.h"
00024 #include "med_outils.h"
00025 #include "med_versioned.h"
00026 #include <string.h>
00027 
00028 
00029 #include "MAJ_236_300.h"
00030 #include "MAJ_version.h"
00031 
00032 
00033 med_err MAJ_236_300_equivalence(med_idt fid,const char * const maa)
00034 {
00035   med_err ret = 0;
00036   med_int nequ=0,ncor=0,nstep=0,nocstpncor=0;
00037   med_int *cor;
00038   char equ[MED_NAME_SIZE+1]   ="";
00039   char des[MED_COMMENT_SIZE+1]="";
00040 
00041   int i,j,k;
00042 
00043   med_geometry_type *typmai = MED_GET_CELL_GEOMETRY_TYPE;
00044   med_geometry_type *typfac = MED_GET_FACE_GEOMETRY_TYPE;
00045   med_geometry_type *typare = MED_GET_EDGE_GEOMETRY_TYPE;
00046 
00047   MAJ_version_num(fid,2,3,6);
00048 
00049   /* Lecture du nombre d'equivalence */
00050   if ((nequ = MEDnEquivalence(fid,maa)) < 0) {
00051     MESSAGE("Erreur a la lecture du nombre d'equivalence");
00052     return -1;
00053   }
00054 /*   printf("Nombre d'equivalences : "IFORMAT" \n",nequ); */
00055 
00056   /* Lecture de toutes les equivalences du maillage */
00057   for (i = 0;i<nequ;i++) {
00058 /*     printf("Equivalence numero : %d \n",i+1); */
00059 
00060 
00061     /* Lecture des infos sur l'equivalence */
00062     if (MEDequivalenceInfo(fid,maa,i+1,equ,des,&nstep,&nocstpncor) < 0) {
00063       MESSAGE("Erreur a la lecture de l'equivalence d'indice");
00064       ISCRUTE_int(i+1);
00065       return -1;
00066     }
00067     fprintf(stdout,"  >>> Normalisation de l'équivalence [%s] du maillage [%s] \n",
00068             equ,maa);
00069 
00070 /*     printf("Nom de l'equivalence: |%s| \n",equ); */
00071 /*     printf("Description de l'equivalence : |%s| \n",des); */
00072 /*     printf("Nombre d'étapes de calcul : %d \n",nstep); */
00073 /*     printf("Nombre de correspondances pour l'étape de calcul MED_NO_DT,MED_NO_IT : %d \n",nocstpncor); */
00074 
00075     MAJ_version(fid);
00076     /* Creation de l'equivalence */
00077     if (MEDequivalenceCr(fid,maa,equ,des) < 0) {
00078       MESSAGE("Erreur a la creation de l'equivalence");
00079       return -1;
00080     }
00081     MAJ_version_num(fid,2,3,6);
00082 
00083     /* Lecture des correspondances sur les differents types d'entites */
00084 
00085     /* Les noeuds */
00086     if ( MEDequivalenceCorrespondenceSize(fid,maa,equ,MED_NO_DT,MED_NO_IT,MED_NODE,MED_NONE,&ncor) < 0) {
00087       MESSAGE("Erreur a la lecture du nombre de correspondance sur les noeuds");
00088       return -1;
00089     }
00090 /*     printf("Il y a "IFORMAT" correspondances sur les noeuds \n",ncor); */
00091     if (ncor > 0) {
00092       cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
00093       if (MEDequivalenceCorrespondenceRd(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00094                                          MED_NODE,MED_NONE,cor) < 0) {
00095         MESSAGE("Erreur a la lecture des correspondances sur les noeuds");
00096         ret = -1;
00097       }
00098       if (ret == 0) {
00099 /*      for (j=0;j<ncor;j++) */
00100 /*        printf("Correspondance %d : "IFORMAT" et "IFORMAT" \n",j+1,*(cor+2*j), */
00101 /*               *(cor+2*j+1)); */
00102 
00103         /* Ecriture des equivalences sur les noeuds */
00104         MAJ_version(fid);
00105         if (MEDequivalenceCorrespondenceWr(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00106                                            MED_NODE,MED_NONE,ncor,cor) < 0) {
00107           MESSAGE("Erreur a l'ecriture du tableau des correspondances");
00108           ret = -1;
00109         }
00110         MAJ_version_num(fid,2,3,6);
00111       }
00112       free(cor);
00113     }
00114 
00115     /* Les mailles : on ne prend pas en compte les mailles 3D */
00116     if (ret == 0)
00117       for (j=1;j<=MED_N_CELL_FIXED_GEO;j++) {
00118 
00119         if ( MEDequivalenceCorrespondenceSize(fid,maa,equ,MED_NO_DT,MED_NO_IT,MED_CELL,typmai[j],&ncor) < 0) {
00120           MESSAGE("Erreur a la lecture du nombre de correspondance sur les mailles : ");
00121           SSCRUTE(MED_GET_CELL_GEOMETRY_TYPENAME[j]);
00122           return -1;
00123         }
00124 /*      printf("Il y a "IFORMAT" correspondances sur les mailles %s \n",ncor, */
00125 /*             MED_GET_CELL_GEOMETRY_TYPENAME[j]); */
00126         if (ncor > 0) {
00127           cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
00128           if (MEDequivalenceCorrespondenceRd(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00129                                              MED_CELL,typmai[j],cor) < 0) {
00130             MESSAGE("Erreur a la lecture des correspondances sur les mailles : ");
00131             SSCRUTE(MED_GET_CELL_GEOMETRY_TYPENAME[j]);
00132             ret = -1;
00133           }
00134           if (ret == 0) {
00135 /*          for (k=0;k<ncor;k++) */
00136 /*            printf("Correspondance %d : "IFORMAT" et "IFORMAT" \n",k+1,*(cor+2*k), */
00137 /*                   *(cor+2*k+1)); */
00138             /* Ecriture des equivalences sur les mailles */
00139             MAJ_version(fid);
00140             if (MEDequivalenceCorrespondenceWr(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00141                                                MED_CELL,typmai[j],ncor,cor) < 0) {
00142               MESSAGE("Erreur a l'ecriture du tableau des correspondances");
00143               ret = -1;
00144             }
00145             MAJ_version_num(fid,2,3,6);
00146           }
00147           free(cor);
00148         }
00149       }
00150 
00151     /* Les faces */
00152     if (ret == 0)
00153       for (j=1;j<=MED_N_FACE_FIXED_GEO;j++) {
00154         if ( MEDequivalenceCorrespondenceSize(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00155                                               MED_DESCENDING_FACE,typfac[j],&ncor) < 0) {
00156           MESSAGE("Erreur a la lecture du nombre de correspondance sur les faces : ");
00157           SSCRUTE(MED_GET_FACE_GEOMETRY_TYPENAME[j]);
00158           return -1;
00159         }
00160 /*      printf("Il y a %d correspondances sur les faces %s \n",ncor, */
00161 /*             MED_GET_FACE_GEOMETRY_TYPENAME[j]); */
00162         if (ncor > 0) {
00163           cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
00164           if (MEDequivalenceCorrespondenceRd(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00165                                              MED_DESCENDING_FACE,typfac[j],cor) < 0) {
00166             MESSAGE("Erreur a la lecture des correspondances sur les faces : ");
00167             SSCRUTE(MED_GET_FACE_GEOMETRY_TYPENAME[j]);
00168             ret = -1;
00169           }
00170           if (ret == 0) {
00171             for (k=0;k<ncor;k++)
00172 /*            printf("Correspondance %d : "IFORMAT" et "IFORMAT" \n",k+1,*(cor+2*k), */
00173 /*                   *(cor+2*k+1)); */
00174 
00175             /* Ecriture des equivalences sur les mailles */
00176             MAJ_version(fid);
00177             if (MEDequivalenceCorrespondenceWr(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00178                                                MED_DESCENDING_FACE,typfac[j],ncor,cor) < 0) {
00179               MESSAGE("Erreur a l'ecriture du tableau des correspondances");
00180               ret = -1;
00181             }
00182             MAJ_version_num(fid,2,3,6);
00183           }
00184           free(cor);
00185         }
00186       }
00187 
00188     /*  Les aretes */
00189     if (ret == 0)
00190       for (j=1;j<=MED_N_EDGE_FIXED_GEO;j++) {
00191         if ( MEDequivalenceCorrespondenceSize(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00192                                               MED_DESCENDING_EDGE,typare[j],&ncor) < 0) {
00193           MESSAGE("Erreur a la lecture du nombre de correspondance sur les aretes : ");
00194           SSCRUTE(MED_GET_EDGE_GEOMETRY_TYPENAME[j]);
00195           return -1;
00196         }
00197 /*      printf("Il y a "IFORMAT" correspondances sur les aretes %s \n",ncor, */
00198 /*             MED_GET_EDGE_GEOMETRY_TYPENAME[j]); */
00199         if (ncor > 0) {
00200           cor = (med_int*) malloc(sizeof(med_int)*ncor*2);
00201           if (MEDequivalenceCorrespondenceRd(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00202                                              MED_DESCENDING_EDGE,typare[j],cor) < 0) {
00203             MESSAGE("Erreur a la lecture des correspondances sur les faces : ");
00204             SSCRUTE(MED_GET_EDGE_GEOMETRY_TYPENAME[j]);
00205             ret = -1;
00206           }
00207           if (ret == 0) {
00208             for (k=0;k<ncor;k++)
00209 /*            printf("Correspondance %d : "IFORMAT" et "IFORMAT" \n",k+1,*(cor+2*k), */
00210 /*                   *(cor+2*k+1)); */
00211 
00212             /* Ecriture des equivalences sur les mailles */
00213             MAJ_version(fid);
00214             if (MEDequivalenceCorrespondenceWr(fid,maa,equ,MED_NO_DT,MED_NO_IT,
00215                                                MED_DESCENDING_EDGE,typare[j],ncor,cor) < 0) {
00216               MESSAGE("Erreur a l'ecriture du tableau des correspondances");
00217               ret = -1;
00218             }
00219             MAJ_version_num(fid,2,3,6);
00220           }
00221           free(cor);
00222         }
00223       }
00224 
00225   }
00226 
00227   MAJ_version(fid);
00228   return ret;
00229 }
00230 
00231 
00232 
00233 

Généré le Mon May 16 17:10:23 2011 pour MED fichier par  doxygen 1.6.1