27 FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT::FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT(
MG_GESTIONNAIRE *gesttmp,
MG_GEOMETRIE* geotmp,
double dg,
int fechantillon,
int nnx,
int nny,
int nnz,
char *nomsolution,std::vector<double> lst,
double gradient):
FCT_TAILLE_FEM_SOLUTION_GENERATEUR_ISOTROPE(gesttmp,geotmp,dg,fechantillon,nnx,nny,nnz,nomsolution),gradientmax(gradient),lstraffine(lst)
32 FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT::FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT(
MG_GESTIONNAIRE *gesttmp,
MG_GEOMETRIE* geotmp,
FCT_TAILLE* carte,
int fechantillon,
int nnx,
int nny,
int nnz,
char *nomsolution,std::vector<double> lst,
double gradient):
FCT_TAILLE_FEM_SOLUTION_GENERATEUR_ISOTROPE(gesttmp,geotmp,carte,fechantillon,nnx,nny,nnz,nomsolution),gradientmax(gradient),lstraffine(lst)
37 FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT::FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT(
MG_GESTIONNAIRE *gesttmp,
MG_MAILLAGE* maitmp,
double dg,
int fechantillon,
int nnx,
int nny,
int nnz,
char *nomsolution,std::vector<double> lst,
double gradient):
FCT_TAILLE_FEM_SOLUTION_GENERATEUR_ISOTROPE(gesttmp,maitmp,dg,fechantillon,nnx,nny,nnz,nomsolution),gradientmax(gradient),lstraffine(lst)
42 FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT::FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT(
MG_GESTIONNAIRE *gesttmp,
MG_MAILLAGE* maitmp,
FCT_TAILLE* carte,
int fechantillon,
int nnx,
int nny,
int nnz,
char *nomsolution,std::vector<double> lst,
double gradient):
FCT_TAILLE_FEM_SOLUTION_GENERATEUR_ISOTROPE(gesttmp,maitmp,carte,fechantillon,nnx,nny,nnz,nomsolution),gradientmax(gradient),lstraffine(lst)
66 affiche((
char*)
" Points a raffiner");
70 affiche((
char*)
" Extrapolation aux noeuds");
76 LISTE_FEM_ELEMENT3::iterator it_ele3;
82 ele3->get_boite_3D().get_centre(xyz);
85 double ecart=1./
sqrt(tab[0]);
86 ele3->change_solution(ecart);
89 for (
int i=0;i<nb/4;i=i+1)
101 std::pair<FEM_ELEMENT3*,FEM_ELEMENT3*> tmp(ele3,ele3);
107 std::map<FEM_ELEMENT3*,FEM_ELEMENT3*>::iterator it_map_ele3;
112 std::pair<double,FEM_ELEMENT3*> tmp(val,ele3);
136 for(
int i=0;i<26;i++)tab_cell[i]=NULL;
166 for(
int i=0;i<26;i++)
168 if(tab_cell[i]!=NULL)
169 if(tab_cell[i]->get_nb_entite()==1)
173 double centrevoisin[3];
177 if(valvoisinmax<valvoisin)
180 std::map<double,FEM_ELEMENT3*>::iterator j=
m_map_fem_classe.lower_bound(valvoisin);
185 if ((*j).first>valvoisin) ok=1;
189 std::pair<double,FEM_ELEMENT3*> tmp(valvoisinmax,ele3_voisin);
201 LISTE_FEM_NOEUD::iterator it_fem_nd;
204 double ecart_nodal_noeud=0.0;
206 liste_fem_element3 = femnd->get_lien_element3();
207 for(
int i=0;i<liste_fem_element3->
get_nb();i++)
209 ecart_nodal_noeud+=liste_fem_element3->
get(i)->get_solution(0);
211 ecart_nodal_noeud=ecart_nodal_noeud/liste_fem_element3->
get_nb();
221 sol->
ecrire(1.0/ecart_nodal_noeud/ecart_nodal_noeud,i,0,0);
225 sol->
ecrire(1./ecart_nodal_noeud/ecart_nodal_noeud,i,0,4);
229 sol->
ecrire(1./ecart_nodal_noeud/ecart_nodal_noeud,i,0,8);
251 LISTE_FEM_ELEMENT3::iterator it_ele3;
255 ele3->get_boite_3D().get_centre(centre);
void get_centre(double *coo)
std::multimap< double, FEM_ELEMENT3 * > m_map_fem_classe
virtual ~FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT()
TPL_GRILLE< FEM_ELEMENT3 * > m_grille_ele3
virtual void extrapoler_solution_noeud(void)
virtual void construit_particulier(void)
FCT_TAILLE_FEM_SOLUTION_GENERATEUR_GRADIENT(MG_GESTIONNAIRE *gesttmp, MG_GEOMETRIE *geotmp, double dg, int fechantillon, int nnx, int nny, int nnz, char *nomsolution, std::vector< double > lst, double gradient=0.25)
virtual int echantillonnage(void)
virtual void lisser_solution(void)
std::vector< double > lstraffine
virtual void cree_grille(void)
std::map< FEM_ELEMENT3 *, FEM_ELEMENT3 * > m_map_fem_ele3
BOITE_3D boite_englobante
virtual void evaluer(double *param, double *resultat)=0
void affiche(char *message)
virtual BOITE_3D & get_boite_3D(void)=0
virtual double get_solution(int num=0)
virtual void change_solution(double val, int num=0)
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
void ecrire(double val, int i, int j, int coord=0, int num_no=0)
virtual double get_longueur(void) const
TPL_LISTE_ENTITE< A > lst_entite_A
virtual TPL_CELLULE_GRILLE< A > * get_cellule(int num)
virtual void initialiser(double xmin, double ymin, double zmin, double xmax, double ymax, double zmax, int nb_pasx, int nb_pasy, int nb_pasz)
virtual void ajouter(X x)
double2 sqrt(double2 &val)