MAJ_236_300_equivalence.c

Aller à la documentation de ce fichier.
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_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 

Généré le Thu Oct 8 14:26:16 2015 pour MED fichier par  doxygen 1.6.1