# 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