37 #define NONDETRUIT 3000
50 affiche((
char*)
" Adaptation de maillage");
52 sprintf(mess,
" Destruction des mailles ne respectant pas la carte de taille a %.2f %%",
limite*100);
54 LISTE_MG_NOEUD::iterator itnoeud;
57 LISTE_MG_SEGMENT::iterator itsegment;
60 LISTE_MG_TRIANGLE::iterator ittriangle;
63 LISTE_MG_TETRA::iterator ittetra;
72 double *xyz=noeud->get_coord();
75 double val=1./
sqrt(tenseur[0]);
76 double err=fabs((val-noeud->get_solution())/noeud->get_solution());
79 int nb_tetra=noeud->get_lien_tetra()->get_nb();
82 for (
int j=0;j<nb_tetra;j++)
83 noeud->get_lien_tetra()->get(j)->change_nouveau_numero(
DETRUIT);
85 int nb_tri=noeud->get_lien_triangle()->get_nb();
88 for (
int j=0;j<nb_tri;j++)
89 if (noeud->get_lien_triangle()->get(j)->get_lien_topologie()->get_dimension()==2)
90 noeud->get_lien_triangle()->get(j)->change_nouveau_numero(
DETRUIT);
92 int nb_seg=noeud->get_lien_segment()->get_nb();
95 for (
int j=0;j<nb_seg;j++)
96 if (noeud->get_lien_segment()->get(j)->get_lien_topologie()->get_dimension()==1)
97 noeud->get_lien_segment()->get(j)->change_nouveau_numero(
DETRUIT);
105 if (noeud->get_lien_topologie()->get_dimension()==1)
107 int nb_seg_sur_arete=0;
108 int nb_seg=noeud->get_lien_segment()->get_nb();
109 for (
int j=0;j<nb_seg;j++)
110 if ((noeud->get_lien_segment()->get(j)->get_lien_topologie()->get_dimension()==1) &&
111 (noeud->get_lien_segment()->get(j)->get_nouveau_numero()==
NONDETRUIT))
114 if (nb_seg_sur_arete==0)
116 int nb_tri=noeud->get_lien_triangle()->get_nb();
117 for (
int j=0;j<nb_tri;j++)
118 if (noeud->get_lien_triangle()->get(j)->get_lien_topologie()->get_dimension()==2)
119 noeud->get_lien_triangle()->get(j)->change_nouveau_numero(
DETRUIT);
120 int nb_tetra=noeud->get_lien_tetra()->get_nb();
121 for (
int j=0;j<nb_tetra;j++)
122 noeud->get_lien_tetra()->get(j)->change_nouveau_numero(
DETRUIT);
125 if (noeud->get_lien_topologie()->get_dimension()==2)
127 int nb_tri_sur_face=0;
128 int nb_tri=noeud->get_lien_triangle()->get_nb();
129 for (
int j=0;j<nb_tri;j++)
130 if ((noeud->get_lien_triangle()->get(j)->get_lien_topologie()->get_dimension()==2) &&
131 (noeud->get_lien_triangle()->get(j)->get_nouveau_numero()==
NONDETRUIT) )
134 if (nb_tri_sur_face==0)
136 int nb_tetra=noeud->get_lien_tetra()->get_nb();
137 for (
int j=0;j<nb_tetra;j++)
138 noeud->get_lien_tetra()->get(j)->change_nouveau_numero(
DETRUIT);
143 for (
int i=0;i<nb_sommet;i++)
147 for (
int j=0;j<nb_noeud;j++)
158 affiche((
char*)
" Adaptation maillage 0D");
161 affiche((
char*)
" Adaptation maillage 1D");
163 for (
int i=0;i<nb_arete;i++)
167 for (
int j=0;j<nb_seg;j++)
192 affiche((
char*)
" Adaptation maillage 2D");
194 for (
int i=0;i<nb_face;i++)
199 for (
int j=0;j<nb_tri;j++)
207 double *xyz1,*xyz2,*xyz3;
219 m2d.
maille(face,NULL,&lsttri);
221 for (
int j=0;j<nb_tri;j++)
235 affiche((
char*)
" Adaptation maillage 3D");
237 for (
int i=0;i<nb_vol;i++)
242 for (
int j=0;j<nb_tet;j++)
251 double *xyz1,*xyz2,*xyz3,*xyz4;
267 m3d.
maille(vol,NULL,&lsttet);
269 for (
int j=0;j<nb_tet;j++)
286 affiche((
char*)
" Fin de l'adaptation de maillage");
virtual void evaluer(double *param, double *resultat)=0
fonction_affiche * affiche2
virtual void active_affichage(fonction_affiche *fonc)
virtual void affiche(char *mess)
int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
virtual int maille(MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
virtual void active_log(char *nomfile)
void active_log(char *nomfile)
MG_MAILLAGE * nv_maillage
MG_MAILLAGE * mg_maillage
int maille(class MG_GROUPE_TOPOLOGIQUE *mggt=NULL)
MAILLEUR_ADAPTATIF(class MG_MAILLAGE *mai, class MG_MAILLAGE *nvmai, class FCT_TAILLE *carte, double coef=0.25)
void change_pas_integration(int val)
virtual int get_nouveau_numero(void)
virtual void change_element_reference(MG_ELEMENT_MAILLAGE *ele)
virtual MG_ELEMENT_MAILLAGE * get_element_reference(void)
virtual TPL_SET< MG_ELEMENT_MAILLAGE * > * get_lien_maillage(void)
unsigned int get_nb_mg_arete(void)
unsigned int get_nb_mg_face(void)
MG_SOMMET * get_mg_sommet(unsigned int num)
MG_ARETE * get_mg_arete(unsigned int num)
MG_FACE * get_mg_face(unsigned int num)
MG_VOLUME * get_mg_volume(unsigned int num)
unsigned int get_nb_mg_sommet(void)
unsigned int get_nb_mg_volume(void)
MG_GEOMETRIE * get_mg_geometrie(void)
MG_TETRA * get_premier_tetra(LISTE_MG_TETRA::iterator &it)
MG_TRIANGLE * get_mg_triangleid(unsigned long num)
MG_TETRA * get_suivant_tetra(LISTE_MG_TETRA::iterator &it)
MG_SEGMENT * get_premier_segment(LISTE_MG_SEGMENT::iterator &)
MG_TRIANGLE * get_premier_triangle(LISTE_MG_TRIANGLE::iterator &it)
MG_NOEUD * get_mg_noeudid(unsigned long num)
MG_TRIANGLE * get_suivant_triangle(LISTE_MG_TRIANGLE::iterator &it)
MG_NOEUD * get_premier_noeud(LISTE_MG_NOEUD::iterator &it)
MG_TETRA * get_mg_tetraid(unsigned long num)
MG_SEGMENT * get_suivant_segment(LISTE_MG_SEGMENT::iterator &)
MG_NOEUD * get_suivant_noeud(LISTE_MG_NOEUD::iterator &it)
class MG_SOLUTION * calculer_carte_taille_reelle(char *nomfichier)
MG_SEGMENT * get_mg_segmentid(unsigned long num)
MG_SEGMENT * ajouter_mg_segment(MG_ELEMENT_TOPOLOGIQUE *topo, class MG_NOEUD *mgnoeud1, class MG_NOEUD *mgnoeud2, int origine, double longue=0.0, unsigned long num=0)
MG_NOEUD * ajouter_mg_noeud(MG_ELEMENT_TOPOLOGIQUE *topo, double xx, double yy, double zz, int origine, unsigned long num=0)
virtual double * get_coord(void)
virtual double get_z(void)
virtual double get_y(void)
virtual double get_x(void)
virtual MG_NOEUD * get_noeud1(void)
virtual MG_NOEUD * get_noeud2(void)
void active_solution(int num)
virtual MG_NOEUD * get_noeud1(void)
virtual MG_NOEUD * get_noeud2(void)
virtual MG_NOEUD * get_noeud4(void)
virtual MG_NOEUD * get_noeud3(void)
virtual MG_NOEUD * get_noeud3(void)
virtual MG_NOEUD * get_noeud1(void)
virtual MG_NOEUD * get_noeud2(void)
virtual void supprimer(X x)
virtual void ajouter(X x)
double2 sqrt(double2 &val)