68 LISTE_FEM_NOEUD::iterator it;
81 LISTE_FEM_ELEMENT2::iterator it2;
98 double xyz[3]={x,y,z};
101 double *xyz1=ele->get_fem_noeud(i)->get_coord();
103 ele->get_fem_noeud(i)->change_solution(vec.
get_longueur());
110 sprintf(mess,
" Le point %lf, %lf, %lf n'a pas pu être initialisé",x,y,z) ;
129 double xyz[3]={x,y,z};
131 ele->get_param_element_fini_2D(xyz,uvw);
133 for (
int i=0;i<ele->get_nb_fem_noeud();i++)
134 val=val+ele->get_fonction_interpolation(i+1,uvw)*ele->get_fem_noeud(i)->get_solution();
139 sprintf(mess,
" Le point %lf, %lf, %lf n'a pas pu être lu",x,y,z) ;
155 for (
int i=0;i<nb;i++)
173 LISTE_FEM_ELEMENT2::iterator it;
176 int nb=ele->get_nb_fem_noeud();
178 for (
int i=0;i<nb;i++)
179 if (ele->get_fem_noeud(i)->get_solution()<
INFINI)
182 ele->get_fem_noeud(i)->change_numero(-1);
184 else ele->get_fem_noeud(i)->change_numero(1);
185 if ((nbsol==0)||(nbsol==1)) far.
ajouter(ele);
186 if (nbsol==2) trial.
ajouter(ele);
187 if (nbsol==3) know.
ajouter(ele);
188 ele->change_numero(nbsol);
190 std::multimap<double,FEM_NOEUD*> trialnoeud;
191 std::map<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator> trialnoeud2;
193 for (
int i=0;i<trial.
get_nb();i++)
201 std::map<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator>::iterator itf=trialnoeud2.find(no);
202 if (itf!=trialnoeud2.end())
204 trialnoeud.erase(itf->second);
205 trialnoeud2.erase(itf);
207 std::pair<double,FEM_NOEUD*> p(
res,no);
208 std::multimap<double,FEM_NOEUD*>::iterator it=trialnoeud.insert(p);
209 std::pair<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator > p2(no,it);
210 trialnoeud2.insert(p2);
214 while (trialnoeud.size()!=0)
217 if (compteur>10000000)
return;
218 bool globalerreur=
false;
219 if (next==NULL) next=trialnoeud.begin()->second;
224 std::vector<FEM_ELEMENT2*> lst;
229 for (
int i=0;i<nbele;i++)
237 if (nbnum>3) nbnum=3;
246 std::map<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator>::iterator it=trialnoeud2.find(nvno);
247 if (it!=trialnoeud2.end())
249 trialnoeud.erase(it->second);
250 trialnoeud2.erase(it);
252 std::pair<double,FEM_NOEUD*> p(T,nvno);
253 std::multimap<double,FEM_NOEUD*>::iterator it2=trialnoeud.insert(p);
254 std::pair<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator > p2(nvno,it2);
255 trialnoeud2.insert(p2);
260 if (globalerreur==
false)
262 std::map<FEM_NOEUD*,std::multimap<double,FEM_NOEUD*>::iterator>::iterator it=trialnoeud2.find(no);
263 if (it!=trialnoeud2.end())
265 trialnoeud.erase(it->second);
266 trialnoeud2.erase(it);
297 for (
int i=0;i<3;i++)
301 if (
sol<solmin) {solmin=
sol;nummin=i;}
307 double ax=noa->
get_x();
308 double ay=noa->
get_y();
309 double az=noa->
get_z();
310 double bx=nob->
get_x();
311 double by=nob->
get_y();
312 double bz=nob->
get_z();
313 double dx=noc->
get_x();
314 double dy=noc->
get_y();
315 double dz=noc->
get_z();
319 erreur=
val2d(ax,ay,az,bx,by,bz,dx,dy,dz,at,bt,v,(*
res),alpha);
void change_grosseur(double f)
virtual class FEM_NOEUD * get_fem_noeud(int num)=0
virtual int get_nb_fem_noeud(void)=0
virtual void change_numero(int num)
virtual int get_numero(void)
int projeteestdansletriangle(class XFEM_ELEMENT2 *tri, double x, double y, double z)
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
virtual double get_y(double coef=0.)
virtual BOITE_3D get_boite_3D(void)
void change_numero(int num)
virtual double get_x(double coef=0.)
virtual double get_solution(int num=0)
virtual double * get_coord(void)
virtual void change_solution(double val, int num=0)
virtual double get_z(double coef=0.)
TPL_LISTE_ENTITE< class FEM_ELEMENT2 * > * get_lien_element2(void)
MG_FAST_MARCHING2D(FEM_SOLUTION *solu, int numchamp)
virtual ~MG_FAST_MARCHING2D()
virtual double get_valeur(double x, double y, double z)
TPL_OCTREE< FEM_ELEMENT2 *, FEM_NOEUD * > oc
virtual int resoudgradTtriangle(FEM_ELEMENT2 *ele, double v, FEM_NOEUD **noupdate, double *res)
virtual void init_coord(double x, double y, double z)
virtual void propage(double vitesse=1.0)
virtual int val2d(double ax, double ay, double az, double bx, double by, double bz, double dx, double dy, double dz, double at, double bt, double v, double &dt, double &alpha)
virtual void finalise(void)
virtual void affiche(char *mess)
static int compare_etat_triangle(int etat, int valeur)
virtual double get_longueur(void) const
virtual void ajouter(X x)
virtual X get_premier(ITERATEUR &it)
virtual X get_suivant(ITERATEUR &it)
virtual void ajouter(X x)
std::map< unsigned long, X, std::less< unsigned long > >::iterator ITERATEUR
virtual void inserer(BOITE_3D &boite, A a, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)
virtual void initialiser(TPL_LISTE_ENTITE< CONDITION > *lst_entite, int nombre, double xmin, double ymin, double zmin, double xmax, double ymax, double zmax)
virtual void rechercher(BOITE_3D &boite, TPL_MAP_ENTITE< A > &liste_entite_trouve, TPL_CELLULE_OCTREE< A, CONDITION > *cellule)