# MAJ_236_300_equivalence.c

Aller à la documentation de ce fichier.

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