49 sprintf(chaine2,
"%s0_fm.sol",chaine);
54 for (
int i=0;i<nbpt;i++)
57 sprintf(numlevel,
"L%d",i+1);
120 parse.
decode(entite,
"&",param);
123 for (
int i=0;i<nb;i++)
125 int num=atoi(param[0].argument[i].c_str());
131 for (
int j=0;j<nbele;j++)
140 int nbnoeudinit=
lst.size();
141 if (nbnoeudinit!=2)
return false;
148 parse.
decode(entite,
"@,@,@,@,@,@",param);
149 lstdouble.push_back(atof(param[0].argument[0].c_str()));
150 lstdouble.push_back(atof(param[1].argument[0].c_str()));
151 lstdouble.push_back(atof(param[2].argument[0].c_str()));
152 lstdouble.push_back(atof(param[3].argument[0].c_str()));
153 lstdouble.push_back(atof(param[4].argument[0].c_str()));
154 lstdouble.push_back(atof(param[5].argument[0].c_str()));
169 std::vector<FEM_NOEUD*> lst2;
170 lst2.push_back(
lst[num]);
182 int nbval=lstpoints.size()/3;
183 for (
int i=0;i<nbval;i++)
185 valA=fm.
get_valeur(lstpoints[3*i+0],lstpoints[3*i+1],lstpoints[3*i+2]);
186 lstpoints.push_back(valA);
195 int nb=lstpoint.size()/3;
196 for (
int i=0;i<nb;i++)
197 for (
int j=0;j<nb;j++)
199 for (
int i=0;i<nb;i++)
201 std::vector<double>
lst=lstpoint;
202 lst.erase(
lst.begin()+3*i,
lst.begin()+3*i+3);
203 calcul_fm(i,lstpoint[3*i],lstpoint[3*i+1],lstpoint[3*i+2],
lst);
205 for (
int j=0;j<nb;j++)
208 double val=
lst[3*nb-3+ii];
214 for (
int i=0;i<nb;i++)
215 for (
int j=i+1;j<nb;j++)
220 matdist[i*nb+j]=matdist[i*nb+j]+matdist[j*nb+i]-vala-valb;
221 matdist[j*nb+i]=matdist[i*nb+j];
227 std::vector<double>
lst;
228 double xdep,ydep,zdep;
252 double longueur=valA+valB-vala-valb;
270 LISTE_FEM_NOEUD::iterator itn;
273 double val=
sol->
lire(ligne,num3);
274 no->change_solution(val,1);
276 no->change_solution(val,2);
278 no->change_solution(val,3);
283 LISTE_FEM_ELEMENT2::iterator it;
287 double val1=ele->get_fem_noeud(0)->get_solution();
288 double val2=ele->get_fem_noeud(1)->get_solution();
289 double val3=ele->get_fem_noeud(2)->get_solution();
290 if ((val1-limit)*(val2-limit)<1e-12)
292 double t=(limit-val1)/(val2-val1);
293 double val1apb=ele->get_fem_noeud(0)->get_solution(1);
294 double val2apb=ele->get_fem_noeud(1)->get_solution(1);
295 double valApB=val1apb+t*(val2apb-val1apb);
299 double val1a=ele->get_fem_noeud(0)->get_solution(2);
300 double val2a=ele->get_fem_noeud(1)->get_solution(2);
301 vala=val1a+t*(val2a-val1a);
302 double val1b=ele->get_fem_noeud(0)->get_solution(3);
303 double val2b=ele->get_fem_noeud(1)->get_solution(3);
304 valb=val1b+t*(val2b-val1b);
305 xm=ele->get_fem_noeud(0)->get_x()+t*(ele->get_fem_noeud(1)->get_x()-ele->get_fem_noeud(0)->get_x());
306 ym=ele->get_fem_noeud(0)->get_y()+t*(ele->get_fem_noeud(1)->get_y()-ele->get_fem_noeud(0)->get_y());
307 zm=ele->get_fem_noeud(0)->get_z()+t*(ele->get_fem_noeud(1)->get_z()-ele->get_fem_noeud(0)->get_z());
310 if ((val2-limit)*(val3-limit)<1e-12)
312 double t=(limit-val2)/(val3-val2);
313 double val2apb=ele->get_fem_noeud(1)->get_solution(1);
314 double val3apb=ele->get_fem_noeud(2)->get_solution(1);
315 double valApB=val2apb+t*(val3apb-val2apb);
319 double val2a=ele->get_fem_noeud(1)->get_solution(2);
320 double val3a=ele->get_fem_noeud(2)->get_solution(2);
321 vala=val2a+t*(val3a-val2a);
322 double val2b=ele->get_fem_noeud(1)->get_solution(3);
323 double val3b=ele->get_fem_noeud(2)->get_solution(3);
324 valb=val2b+t*(val3b-val2b);
325 xm=ele->get_fem_noeud(1)->get_x()+t*(ele->get_fem_noeud(2)->get_x()-ele->get_fem_noeud(1)->get_x());
326 ym=ele->get_fem_noeud(1)->get_y()+t*(ele->get_fem_noeud(2)->get_y()-ele->get_fem_noeud(1)->get_y());
327 zm=ele->get_fem_noeud(1)->get_z()+t*(ele->get_fem_noeud(2)->get_z()-ele->get_fem_noeud(1)->get_z());
330 if ((val1-limit)*(val3-limit)<1e-12)
332 double t=(limit-val1)/(val3-val1);
333 double val1apb=ele->get_fem_noeud(0)->get_solution(1);
334 double val3apb=ele->get_fem_noeud(2)->get_solution(1);
335 double valApB=val1apb+t*(val3apb-val1apb);
339 double val1a=ele->get_fem_noeud(0)->get_solution(2);
340 double val3a=ele->get_fem_noeud(2)->get_solution(2);
341 vala=val1a+t*(val3a-val1a);
342 double val1b=ele->get_fem_noeud(0)->get_solution(3);
343 double val3b=ele->get_fem_noeud(2)->get_solution(3);
344 valb=val1b+t*(val3b-val1b);
345 xm=ele->get_fem_noeud(0)->get_x()+t*(ele->get_fem_noeud(2)->get_x()-ele->get_fem_noeud(0)->get_x());
346 ym=ele->get_fem_noeud(0)->get_y()+t*(ele->get_fem_noeud(2)->get_y()-ele->get_fem_noeud(0)->get_y());
347 zm=ele->get_fem_noeud(0)->get_z()+t*(ele->get_fem_noeud(2)->get_z()-ele->get_fem_noeud(0)->get_z());
353 sprintf(mess,
" Le point milieu x=%lf, y=%lf, z=%lf la demi longueur de la LS1=%f la demi longueur de la LS2=%f ",xm,ym,zm,vala,valb) ;
void operation_champs_solution(class FEM_SOLUTION *sol1, int numchamp1, FEM_SOLUTION *sol2, int numchamp2, FEM_SOLUTION *sol3, int numchamp3, int operation)
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
FEM_NOEUD * get_fem_noeudid(unsigned long num)
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
MG_GEOMETRIE * get_mg_geometrie(void)
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
double lire(int i, int j, int coord=0, int num_no=0)
void change_legende(int num, std::string val)
void active_solution(int num)
virtual double get_valeur(double x, double y, double z)
virtual void init_coord(double x, double y, double z)
virtual void propage(double vitesse=1.0)
virtual void init_noeud(std::vector< FEM_NOEUD * > &lst)
virtual void finalise(void)
std::vector< double > lstdouble
virtual bool init_coord(char *entite)
std::vector< FEM_NOEUD * > lst
void calcul_milieux(int num1, int num2, int num3, int num4, double &vala, double &valb)
virtual double calcul(double *tab=NULL)
virtual bool init_noeud(char *entite)
MG_GEODESIC(char *fichiermagic, MG_GESTIONNAIRE *g, FEM_MAILLAGE *f, int nbpt=2)
double calcul_fm(int num, double xdep, double ydep, double zdep, std::vector< double > &lstpoints)
void calcul_reseau(std::vector< double > lstpoint, double *matdist)
fonction_affiche * affiche2
virtual void active_affichage(fonction_affiche *fonc)
virtual void affiche(char *mess)
virtual TPL_LISTE_ENTITE< FEM_ELEMENT_MAILLAGE * > * get_lien_fem_maillage(void)
MG_SOMMET * get_mg_sommetid(unsigned long num)
int ajouter_fem_solution(FEM_SOLUTION *mgsol)
FEM_SOLUTION * get_fem_solution(unsigned int num)
std::vector< std::string > argument
void decode(char *code, std::string masque, class PARS_ARGUMENT *arg)
double f(double x, long nb, double *xfonc, double *fonc, double eng, double eni, double lambda, double nor, double *fonc2)