4 #define MED_NOPG 1 /* -> pas de point de Gauss */
5 #define MED_NOPFL "" /* -> pas de profils utilisateur */
6 #define MED_NOPFLi " " /* Variable Interne */
7 #define MED_NOPF 0 /* -> pas de profils pour _MEDdataseNnumEcrire */
8 #define MED_NOPDT -1 /* rem: pas de pas de temps negatifs */
9 #define MED_NONOR -1 /* rem: pas de n°ordre negatif */
10 #define MED_DIM1 1 /* PAS */
14 /*****************************************************************************************************/
16 void affiche_noeuds(med_float * nodes,int nnpl)
18 int nbr_nodes=nnpl*nnpl*nnpl;
21 for (i=0;i<nbr_nodes;i++) printf("Noeud %d : ( %4.5f ; %4.5f ; %4.5f )\n",i,nodes[3*i],nodes[3*i+1],nodes[3*i+2]);
26 void cree_nodes(med_float * coord_nodes,int nnpl, int flag)
29 int nbr_nodes=nnpl*nnpl*nnpl;
31 int diviseur=nnpl-1+flag;
33 /*coord_nodes=(med_float *) malloc(3*nbr_nodes*sizeof(med_float));*/
35 for (i=0;i<nnpl;i++) for (j=0;j<nnpl;j++) for (k=0;k<nnpl;k++)
37 num_noeud=i+nnpl*j+nnpl*nnpl*k;
39 if (3*num_noeud >=3*nbr_nodes) {printf("%d : OUT OF RANGE REQUEST\n",num_noeud);exit(-1);}
40 if (3*num_noeud+1>=3*nbr_nodes) {printf("%d : OUT OF RANGE REQUEST\n",num_noeud);exit(-1);}
41 if (3*num_noeud+2>=3*nbr_nodes) {printf("%d : OUT OF RANGE REQUEST\n",num_noeud);exit(-1);}
43 coord_nodes[3*num_noeud ]= (double) (i+flag)/diviseur;
44 coord_nodes[3*num_noeud+1]= (double) (j+flag)/diviseur;
45 coord_nodes[3*num_noeud+2]= (double) (k+flag)/diviseur;
48 affiche_noeuds(coord_nodes,nnpl);
51 void cree_num_nodes(med_int * num_nodes,int nnpl)
53 int nbr_nodes=nnpl*nnpl*nnpl;
55 /*num_nodes=(med_int *) malloc(nbr_nodes*sizeof(med_int));*/
56 for (i=0;i<nbr_nodes;i++) num_nodes[i]=i+1;//nbr_nodes+i;
58 void cree_Hexa8(med_int * conn_hexa8, int nnpl,med_int * num_nodes)
61 int i0,j0,k0,i1,j1,k1;
62 int nbr_nodes=nnpl*nnpl*nnpl;
63 int nbr_hexa8=(nnpl-1)*(nnpl-1)*(nnpl-1);
66 /*conn_hexa8=(med_int *) malloc(8*nbr_hexa8*sizeof(med_int));*/
68 for (i=0;i<nnpl-1;i++) for (j=0;j<nnpl-1;j++) for (k=0;k<nnpl-1;k++)
73 num_hexa8=i+(nnpl-1)*j+(nnpl-1)*(nnpl-1)*k;
75 if (8*num_hexa8 >=8*nbr_hexa8) {printf("%d : OUT OF RANGE REQUEST\n",num_hexa8);exit(-1);}
76 if (8*num_hexa8+1>=8*nbr_hexa8) {printf("%d : OUT OF RANGE REQUEST\n",num_hexa8);exit(-1);}
77 if (8*num_hexa8+2>=8*nbr_hexa8) {printf("%d : OUT OF RANGE REQUEST\n",num_hexa8);exit(-1);}
78 if (8*num_hexa8+3>=8*nbr_hexa8) {printf("%d : OUT OF RANGE REQUEST\n",num_hexa8);exit(-1);}
79 if (8*num_hexa8+4>=8*nbr_hexa8) {printf("%d : OUT OF RANGE REQUEST\n",num_hexa8);exit(-1);}
80 if (8*num_hexa8+5>=8*nbr_hexa8) {printf("%d : OUT OF RANGE REQUEST\n",num_hexa8);exit(-1);}
81 if (8*num_hexa8+6>=8*nbr_hexa8) {printf("%d : OUT OF RANGE REQUEST\n",num_hexa8);exit(-1);}
82 if (8*num_hexa8+7>=8*nbr_hexa8) {printf("%d : OUT OF RANGE REQUEST\n",num_hexa8);exit(-1);}
84 conn_hexa8[8*num_hexa8 ] = num_nodes[ i0+nnpl*j1+nnpl*nnpl*k1 ];
85 conn_hexa8[8*num_hexa8+1] = num_nodes[ i0+nnpl*j0+nnpl*nnpl*k1 ];
86 conn_hexa8[8*num_hexa8+2] = num_nodes[ i1+nnpl*j0+nnpl*nnpl*k1 ];
87 conn_hexa8[8*num_hexa8+3] = num_nodes[ i1+nnpl*j1+nnpl*nnpl*k1 ];
88 conn_hexa8[8*num_hexa8+4] = num_nodes[ i0+nnpl*j1+nnpl*nnpl*k0 ];
89 conn_hexa8[8*num_hexa8+5] = num_nodes[ i0+nnpl*j0+nnpl*nnpl*k0 ];
90 conn_hexa8[8*num_hexa8+6] = num_nodes[ i1+nnpl*j0+nnpl*nnpl*k0 ];
91 conn_hexa8[8*num_hexa8+7] = num_nodes[ i1+nnpl*j1+nnpl*nnpl*k0 ];
96 for (num_hexa8=0;num_hexa8<nbr_hexa8;num_hexa8++)
98 printf("Maille numéro %4d :",num_hexa8);
99 printf("%4d ",conn_hexa8[8*num_hexa8 ]);
100 printf("%4d ",conn_hexa8[8*num_hexa8+1]);
101 printf("%4d ",conn_hexa8[8*num_hexa8+2]);
102 printf("%4d ",conn_hexa8[8*num_hexa8+3]);
103 printf("%4d ",conn_hexa8[8*num_hexa8+4]);
104 printf("%4d ",conn_hexa8[8*num_hexa8+5]);
105 printf("%4d ",conn_hexa8[8*num_hexa8+6]);
106 printf("%4d ",conn_hexa8[8*num_hexa8+7]);
110 void cree_noms_mailles(char * noms, int nnpl)
112 int nbr_hexa8=(nnpl-1)*(nnpl-1)*(nnpl-1);
114 char pnom[MED_TAILLE_PNOM+1]="hexa ";
116 /*noms=(char *) malloc((nbr_hexa8*MED_TAILLE_PNOM+1)*sizeof(char));*/
118 for (i=0;i<nbr_hexa8;i++) strncpy(&noms[i*MED_TAILLE_PNOM],pnom,MED_TAILLE_PNOM);
120 noms[nbr_hexa8*MED_TAILLE_PNOM]='\n';
123 void cree_num_mailles(med_int * num_mailles,int nnpl)
125 int nbr_hexa8=(nnpl-1)*(nnpl-1)*(nnpl-1);
128 /*num_mailles=(med_int *) malloc(nbr_hexa8*sizeof(med_int));*/
130 for (i=0;i<nbr_hexa8;i++) num_mailles[i]=i+1;
132 void cree_fam_nodes(med_int * fam,int nnpl)
134 int nbr_nodes=nnpl*nnpl*nnpl;
137 /*fam=(med_int *) malloc(nbr_nodes*sizeof(med_int));*/
139 for (i=0;i<nbr_nodes;i++) fam[i]=0;
141 void cree_fam_mailles(med_int * fam,int nnpl)
143 int nbr_hexa8=(nnpl-1)*(nnpl-1)*(nnpl-1);
146 /*fam=(med_int *) malloc(nbr_hexa8*sizeof(med_int));*/
148 for (i=0;i<nbr_hexa8;i++) fam[i]=0;
150 void cree_valeurs_champ_node(med_float * val,int nnpl)
153 int nbr_nodes=nnpl*nnpl*nnpl;
155 int diviseur=3*(nnpl-1);
157 /*val=(med_float *) malloc(nbr_nodes*sizeof(med_float));*/
159 for (i=0;i<nnpl;i++) for (j=0;j<nnpl;j++) for (k=0;k<nnpl;k++)
161 num_noeud=i+nnpl*j+nnpl*nnpl*k;
162 val[num_noeud] = (med_float) (i+j+k)/diviseur;
164 for (num_noeud=0;num_noeud<nbr_nodes;num_noeud++) printf("Valeur Scalaire noeud %5d : %4.5f\n",num_noeud,val[num_noeud]);
166 void cree_valeurs_champ_vector_node(med_float * val,int nnpl)
169 int nbr_nodes=nnpl*nnpl*nnpl;
172 /*val=(med_float *) malloc(nbr_nodes*sizeof(med_float));*/
174 for (i=0;i<nnpl;i++) for (j=0;j<nnpl;j++) for (k=0;k<nnpl;k++)
176 num_noeud=i+nnpl*j+nnpl*nnpl*k;
177 val[3*num_noeud ] = (med_float) 0;
178 val[3*num_noeud+1] = (med_float) 1;
179 val[3*num_noeud+2] = (med_float) 2;
181 for (num_noeud=0;num_noeud<nbr_nodes;num_noeud++) printf("Valeur Vectorielle noeud %5d : %4.5f %4.5f %4.5f \n ",num_noeud,val[3*num_noeud],val[3*num_noeud+1],val[3*num_noeud+2]);
183 void cree_valeurs_champ_cell(med_float * val,int nnpl)
186 int nbr_cells=(nnpl-1)*(nnpl-1)*(nnpl-1);
189 med_float diviseur=3*(nnpl-2);
191 /*val=(med_float *) malloc(3*nbr_cells*sizeof(med_float));*/
193 for (i=0;i<nnpl-1;i++) for (j=0;j<nnpl-1;j++) for (k=0;k<nnpl-1;k++)
195 num_cell=i+(nnpl-1)*j+(nnpl-1)*(nnpl-1)*k;
196 val[num_cell ] = (med_float) (i+j+k)/diviseur;
198 for (num_cell=0;num_cell<nbr_cells;num_cell++) printf("Valeur scalaire maille %5d : %4.5f\n ",num_cell,val[num_cell]);
200 void cree_valeurs_champ_vector_cell(med_float * val,int nnpl)
203 int nbr_cells=(nnpl-1)*(nnpl-1)*(nnpl-1);
206 /*val=(med_float *) malloc(3*nbr_cells*sizeof(med_float));*/
208 for (i=0;i<nnpl-1;i++) for (j=0;j<nnpl-1;j++) for (k=0;k<nnpl-1;k++)
210 num_cell=i+(nnpl-1)*j+(nnpl-1)*(nnpl-1)*k;
211 val[3*num_cell ] = (med_float) 0;
212 val[3*num_cell+1] = (med_float) 1;
213 val[3*num_cell+2] = (med_float) 2;
215 for (num_cell=0;num_cell<nbr_cells;num_cell++) printf("Valeur Vectorielle maille %5d : %4.5f %4.5f %4.5f \n ",num_cell,val[3*num_cell],val[3*num_cell+1],val[3*num_cell+2]);
219 /*****************************************************************************************************/
221 int main (int argc, char **argv)
228 int nbr_nodes, nbr_hexa8;
233 char frommaa[MED_TAILLE_NOM+1] = "fromMesh";
234 char tomaa[MED_TAILLE_NOM+1] = "toMesh";
235 const med_int mdim = 3;
242 char nomcoo[3*MED_TAILLE_PNOM+1] = "x y z ";
243 char unicoo[3*MED_TAILLE_PNOM+1] = "cm cm cm ";
245 char * nomnoe = NULL ;
247 med_int * fromnumnoe;
248 med_int * fromnufano;
261 med_int * fromnumhexa8;
262 med_int * fromnufahexa8;
265 med_int * tonumhexa8;
266 med_int * tonufahexa8;
268 /*****************************************************************************************************/
270 char nomfam[MED_TAILLE_NOM+1];
272 char attdes[MED_TAILLE_DESC+1];
277 char gro[MED_TAILLE_LNOM+1];
278 char gro2[MED_TAILLE_LNOM*2+1];
279 char gro3[MED_TAILLE_LNOM*3+1];
283 /*****************************************************************************************************/
285 /* Some fields : one on nodes : double , one on cells : double */
287 char champnode[MED_TAILLE_NOM+1]="fieldnodedouble" ;
288 char champnode_comp[MED_TAILLE_PNOM+1]="X+Y+Z " ;
289 char champnode_unit[MED_TAILLE_PNOM+1]="X+Y+Z " ;
290 med_float * fieldnodedouble;
292 char champnodevector[MED_TAILLE_NOM+1]="fieldnodedoublevector" ;
293 char champnodevector_comp[MED_TAILLE_PNOM*3+1]="0 1 2 " ;
294 char champnodevector_unit[MED_TAILLE_PNOM*3+1]="O 1 2 " ;
295 med_float * fieldnodedoublevector;
297 char champcellscalar[MED_TAILLE_NOM+1]="fieldcelldouble" ;
298 char champcellscalar_comp[MED_TAILLE_PNOM+1]="X+Y+Z " ;
299 char champcellscalar_unit[MED_TAILLE_PNOM+1]="X+Y+Z " ;
300 med_float * fieldcelldouble;
302 char champcell[MED_TAILLE_NOM+1]="fieldcelldoublevector" ;
303 char champcell_comp[MED_TAILLE_PNOM*3+1]="0 1 2 " ;
304 char champcell_unit[MED_TAILLE_PNOM*3+1]="0 1 2 " ;
305 med_float * fieldcelldoublevector;
307 /*****************************************************************************************************/
312 printf("Il manque un paramètre : le nombre de point par ligne\n");
316 sscanf(argv[1],"%d",&nnpl);
318 printf("VERSION 2.0\n");
319 printf("Traitement avec %d noeuds par ligne\n",nnpl);
321 fromnnoe = nnpl*nnpl*nnpl ;
322 fromnhexa8 = (nnpl-1)*(nnpl-1)*(nnpl-1) ;
323 tonnoe = (nnpl-1)*(nnpl-1)*(nnpl-1) ;
324 tonhexa8 = (nnpl-2)*(nnpl-2)*(nnpl-2) ;
328 nbr_nodes=nnpl*nnpl*nnpl;
329 nbr_hexa8=(nnpl-1)*(nnpl-1)*(nnpl-1);
331 fromcoo = (med_float *) malloc(3*nbr_nodes*sizeof(med_float)); cree_nodes ( fromcoo , nnpl, 0 );
332 fromnumnoe = (med_int *) malloc(nbr_nodes*sizeof(med_int)); cree_num_nodes ( fromnumnoe , nnpl );
333 fromnufano = (med_int *) malloc(nbr_nodes*sizeof(med_int)); cree_fam_nodes ( fromnufano , nnpl );
334 fromhexa8 = (med_int *) malloc(8*nbr_hexa8*sizeof(med_int)); cree_Hexa8 ( fromhexa8 , nnpl ,fromnumnoe);
335 fromnomhexa8 = (char *) malloc((nbr_hexa8*MED_TAILLE_PNOM+1)*sizeof(char)); cree_noms_mailles ( fromnomhexa8 , nnpl );
336 fromnumhexa8 = (med_int *) malloc(nbr_hexa8*sizeof(med_int)); cree_num_mailles ( fromnumhexa8 , nnpl );
337 fromnufahexa8 = (med_int *) malloc(nbr_hexa8*sizeof(med_int)); cree_fam_mailles ( fromnufahexa8 , nnpl );
339 fieldnodedouble = (med_float *) malloc(nbr_nodes*sizeof(med_float)); cree_valeurs_champ_node ( fieldnodedouble , nnpl );
340 fieldnodedoublevector = (med_float *) malloc(3*nbr_nodes*sizeof(med_float)); cree_valeurs_champ_vector_node ( fieldnodedoublevector , nnpl );
341 fieldcelldouble = (med_float *) malloc(nbr_hexa8*sizeof(med_float)); cree_valeurs_champ_cell ( fieldcelldouble , nnpl );
342 fieldcelldoublevector = (med_float *) malloc(3*nbr_hexa8*sizeof(med_float)); cree_valeurs_champ_vector_cell ( fieldcelldoublevector , nnpl );
345 nbr_nodes=(nnpl-1)*(nnpl-1)*(nnpl-1);
346 nbr_hexa8=(nnpl-2)*(nnpl-2)*(nnpl-2);
348 tocoo = (med_float *) malloc(3*nbr_nodes*sizeof(med_float)); cree_nodes ( tocoo , nnpl-1, 1 );
349 tonumnoe = (med_int *) malloc(nbr_nodes*sizeof(med_int)); cree_num_nodes ( tonumnoe , nnpl-1 );
350 tonufano = (med_int *) malloc(nbr_nodes*sizeof(med_int)); cree_fam_nodes ( tonufano , nnpl-1 );
351 tohexa8 = (med_int *) malloc(8*nbr_hexa8*sizeof(med_int)); cree_Hexa8 ( tohexa8 , nnpl-1 ,tonumnoe);
352 tonomhexa8 = (char *) malloc((nbr_hexa8*MED_TAILLE_PNOM+1)*sizeof(char)); cree_noms_mailles ( tonomhexa8 , nnpl-1 );
353 tonumhexa8 = (med_int *) malloc(nbr_hexa8*sizeof(med_int)); cree_num_mailles ( tonumhexa8 , nnpl-1 );
354 tonufahexa8 = (med_int *) malloc(nbr_hexa8*sizeof(med_int)); cree_fam_mailles ( tonufahexa8 , nnpl-1 );
357 /*****************************************************************************************************/
358 fromfid = MEDouvrir("fromMesh.med",MED_REMP);
363 printf("MEDouvrir : %d\n",ret);
365 /*****************************************************************************************************/
366 tofid = MEDouvrir("toMesh.med",MED_REMP);
371 printf("MEDouvrir : %d\n",ret);
372 /*****************************************************************************************************/
374 ret = MEDmaaCr(fromfid,frommaa,mdim);
375 printf("MEDmaaCr : %d\n",ret);
377 /*****************************************************************************************************/
380 ret = MEDmaaCr(tofid,tomaa,mdim);
381 printf("MEDmaaCr : %d\n",ret);
383 /*****************************************************************************************************/
385 ret = MEDnoeudsEcr(fromfid,frommaa,mdim,fromcoo,MED_FULL_INTERLACE,MED_CART,
386 // nomcoo,unicoo,nomnoe,MED_FAUX,fromnumnoe,MED_VRAI,
387 nomcoo,unicoo,nomnoe,MED_FAUX,fromnumnoe,MED_FAUX,
388 fromnufano,fromnnoe,MED_ECRI);
389 printf("MEDnoeudsEcr : %d\n",ret);
390 /*****************************************************************************************************/
393 ret = MEDnoeudsEcr(tofid,tomaa,mdim,tocoo,MED_FULL_INTERLACE,MED_CART,
394 //nomcoo,unicoo,nomnoe,MED_FAUX,tonumnoe,MED_VRAI,
395 nomcoo,unicoo,nomnoe,MED_FAUX,tonumnoe,MED_FAUX,
396 tonufano,tonnoe,MED_ECRI);
397 printf("MEDnoeudsEcr : %d\n",ret);
400 /*****************************************************************************************************/
401 /* ecriture des mailles MED_HEXA8 :
404 - numeros (optionnel)
405 - numeros des familles */
407 ret = MEDelementsEcr(fromfid,frommaa,mdim,fromhexa8,MED_FULL_INTERLACE,
408 fromnomhexa8,MED_FAUX,fromnumhexa8,MED_VRAI,fromnufahexa8,fromnhexa8,
409 MED_MAILLE,MED_HEXA8,MED_NOD,MED_ECRI);
410 printf("MEDelementsEcr : %d \n",ret);
412 /*****************************************************************************************************/
413 /* ecriture des mailles MED_HEXA8 :
416 - numeros (optionnel)
417 - numeros des familles */
420 ret = MEDelementsEcr(tofid,tomaa,mdim,tohexa8,MED_FULL_INTERLACE,
421 tonomhexa8,MED_FAUX,tonumhexa8,MED_VRAI,tonufahexa8,tonhexa8,
422 MED_MAILLE,MED_HEXA8,MED_NOD,MED_ECRI);
423 printf("MEDelementsEcr : %d \n",ret);
425 /*****************************************************************************************************/
426 /* ecriture des familles */
428 - toujours creer une famille de numero 0 ne comportant aucun attribut
429 ni groupe (famille de reference pour les noeuds ou les elements
430 qui ne sont rattaches a aucun groupe ni attribut)
431 - les numeros de familles de noeuds sont > 0
432 - les numeros de familles des elements sont < 0
433 - rien d'imposer sur les noms de familles
439 strcpy(nomfam,"FAMILLE_0");
441 ret = MEDfamCr(fromfid,frommaa,nomfam,numfam,&attide,&attval,attdes,0,gro,0);
443 printf("MEDfamCr : %d \n",ret);
444 /*****************************************************************************************************/
448 strcpy(nomfam,"FAMILLE_0");
450 ret = MEDfamCr(tofid,tomaa,nomfam,numfam,&attide,&attval,attdes,0,gro,0);
452 printf("MEDfamCr : %d \n",ret);
454 /*****************************************************************************************************/
459 ret = MEDchampCr(fromfid,champnode,MED_REEL64,champnode_comp,champnode_unit,1);
460 printf("MEDchampCr : %d \n",ret);
463 ret = MEDchampEcr(fromfid, frommaa, champnode, (unsigned char *)fieldnodedouble,
464 MED_FULL_INTERLACE, fromnnoe,
465 MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD,
466 0, MED_NOPDT," ", 0. , MED_NONOR);
467 printf("MEDchampEcr : %d \n",ret);
473 ret = MEDchampCr(fromfid,champcell,MED_REEL64,champcell_comp,champcell_unit,3);
474 printf("MEDchampCr : %d \n",ret);
477 ret = MEDchampEcr(fromfid, frommaa, champcell, (unsigned char *)fieldcelldoublevector,
478 MED_FULL_INTERLACE, fromnhexa8,
479 MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_MAILLE,
480 MED_HEXA8, MED_NOPDT," ", 0., MED_NONOR);
481 printf("MEDchampEcr : %d \n",ret);
487 ret = MEDchampCr(fromfid,champcellscalar,MED_REEL64,champcellscalar_comp,champcellscalar_unit,1);
488 printf("MEDchampCr : %d \n",ret);
491 ret = MEDchampEcr(fromfid, frommaa, champcellscalar, (unsigned char *)fieldcelldouble,
492 MED_FULL_INTERLACE, fromnhexa8,
493 MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_MAILLE,
494 MED_HEXA8, MED_NOPDT," ", 0., MED_NONOR);
495 printf("MEDchampEcr : %d \n",ret);
501 ret = MEDchampCr(fromfid,champnodevector,MED_REEL64,champnodevector_comp,champnodevector_unit,3);
502 printf("MEDchampCr : %d \n",ret);
505 ret = MEDchampEcr(fromfid, frommaa, champnodevector, (unsigned char *)fieldnodedoublevector,
506 MED_FULL_INTERLACE, fromnnoe,
507 MED_NOPG, MED_ALL, MED_NOPFL, MED_ECRI, MED_NOEUD,
508 0, MED_NOPDT," ", 0. , MED_NONOR);
509 printf("MEDchampEcr : %d \n",ret);
514 /***************************************************************************/
515 ret = MEDfermer(fromfid);
516 printf("MEDfermer : %d\n",ret);
517 /***************************************************************************/
518 ret = MEDfermer(tofid);
519 printf("MEDfermer : %d\n",ret);