25 int nb_som = le_dom_.
nb_som();
27 int nb_elem = le_dom_.
nb_elem();
30 DoubleTab& elems_solid_ref = solid_elems_->valeurs();
33 const DoubleTab& solidPointsCoords = solid_points.
valeurs();
37 DoubleTab& is_dirichlet = my_is_dirichlet_->valeurs();
41 DoubleTrav is_elem_fluide(nb_elem_tot);
42 DoubleTrav is_node_voisin_elem_fluide(is_dirichlet);
43 is_node_voisin_elem_fluide = 0.;
44 for (
int num_elem_tf = 0; num_elem_tf < nb_elem_tot; num_elem_tf++)
46 is_elem_fluide(num_elem_tf) = 1.;
48 for (
int j_tf = 0; j_tf < nb_som_elem; j_tf++)
50 int num_som_tf = elems(num_elem_tf,j_tf);
51 if ((num_som_tf < nb_som) && (is_dirichlet(num_som_tf) > 0.0)) is_elem_fluide(num_elem_tf) = 0.;
53 if (is_elem_fluide(num_elem_tf) == 1.)
55 for (
int j_tf = 0; j_tf < nb_som_elem; j_tf++)
57 int num_som_tf = elems(num_elem_tf,j_tf);
58 is_node_voisin_elem_fluide(num_som_tf) = 1.;
69 const DoubleTab& corresp_elemsref = corresp_elems.
valeurs();
71 for (
int i = 0 ; i < nb_elem_tot ; i++)
73 int int_cor_elem = (int)lrint(corresp_elemsref(i));
74 if (int_cor_elem > nb_tag_max) nb_tag_max = int_cor_elem;
76 int dimtag = nb_tag_max+1;
77 DoubleTrav elems_solid_trust(dimtag);
78 elems_solid_trust = -0.1*DMAXFLOAT;
79 for (
int i = 0 ; i < nb_elem_tot ; i++)
81 int indextag = (int)lrint(corresp_elemsref(i)) ;
82 if (indextag < dimtag && indextag >= 0)
84 elems_solid_trust(indextag) = i*1.0;
88 Cerr<<
"erreur in computeSommetsVoisins : elem corresp_elemsref(elem) = "<<i<<
" "<<corresp_elemsref(i)<<
" ; indextag = "<<indextag<<
" < 0 ou >= "<<dimtag<<finl;
92 for (
int i = 0 ; i < nb_som_tot ; i++)
94 if (elems_solid_ref(i) >= 0.0)
96 int indexr = (int)lrint(elems_solid_ref(i));
97 if (indexr < dimtag && indexr >= 0)
99 if (elems_solid_trust(indexr) >= 0.) elems_solid_ref(i) = elems_solid_trust(indexr);
106 int nb_nodes_in_list = 0;
108 for (
int num_elem = 0; num_elem < nb_elem_tot; num_elem++)
110 for (
int j = 0; j < nb_som_elem; j++)
112 int num_som = elems(num_elem,j);
113 double x1 = coordsDom(num_som,0);
114 double x2 = coordsDom(num_som,1);
115 double x3 = coordsDom(num_som,2);
116 double xp1 = solidPointsCoords(num_som,0);
117 double xp2 = solidPointsCoords(num_som,1);
118 double xp3 = solidPointsCoords(num_som,2);
120 if ((num_som < nb_som) && (is_dirichlet(num_som) > 0.0))
122 for (
int k = 0; k < nb_som_elem; k++)
126 int num_som_2 = elems(num_elem,k);
127 double xf1 = coordsDom(num_som_2,0);
128 double xf2 = coordsDom(num_som_2,1);
129 double xf3 = coordsDom(num_som_2,2);
130 double xpf1 = solidPointsCoords(num_som_2,0);
131 double xpf2 = solidPointsCoords(num_som_2,1);
132 double xpf3 = solidPointsCoords(num_som_2,2);
134 double d = (x1-xp1)*(xf1-xpf1)+(x2-xp2)*(xf2-xpf2)+(x3-xp3)*(xf3-xpf3);
135 double d1 = (xf1-xpf1)*(xf1-xpf1)+(xf2-xpf2)*(xf2-xpf2)+(xf3-xpf3)*(xf3-xpf3);
136 double d2 = (x1-xp1)*(x1-xp1)+(x2-xp2)*(x2-xp2)+(x3-xp3)*(x3-xp3);
149 if (is_dirichlet(num_som_2) < 0.0 && d > 0.0 && (3.0*d2) < d1 && is_node_voisin_elem_fluide(num_som_2) == 1.0)
152 int elems_xpf = (int)lrint(elems_solid_ref(num_som_2));
153 bool flag_xpf =
true;
159 if ((elems_xpf != elem_found) && (elem_found != -1))
161 Cerr << __FILE__ << (int)__LINE__ <<
"Interpolation_IBM_mean_gradient_proto::computeSommetsVoisins : WARNING : elem solid prepro " << elems_xpf <<
" != elem solid Trust " << elem_found << finl;
168 if (elems_xpf == -1.e+50)
172 else if (elem_found != -1)
174 Cerr<<
"node_fluide = "<<num_som_2<<
" we use chercher_elements(xpf,ypf,zpf) = "<<elem_found<<
" to replace values from SALOME = "<<elems_xpf<<finl;
175 Cerr<<
"coords_point(node_fluide) : xf yf zf = "<<xf1<<
" "<<xf2<<
" "<<xf3<<finl;
176 Cerr<<
"solid_points(node_fluide) : xpf ypf zpf = "<<xpf1<<
" "<<xpf2<<
" "<<xpf3<<finl;
177 elems_xpf = elem_found ;
183 Cerr << __FILE__ << (int)__LINE__ <<
"Interpolation_IBM_mean_gradient_proto::computeSommetsVoisins : ERROR : joint width too low?" << finl;
184 Cerr<<
"Nb elem; Nb elem tot = "<<nb_elem<<
" "<<nb_elem_tot<<finl;
185 Cerr<<
"Nb som; Nb som tot = "<<nb_som<<
" "<<nb_som_tot<<finl;
186 Cerr<<
"element; node_Dirichlet = "<<num_elem<<
" "<<num_som<<finl;
187 Cerr<<
"coords_point(node_Dirichlet) : x y z = "<<x1<<
" "<<x2<<
" "<<x3<<finl;
188 Cerr<<
"solid_points(node_Dirichlet) : xp yp zp = "<<xp1<<
" "<<xp2<<
" "<<xp3<<finl;
189 Cerr<<
"node_fluide elems_solid_ref(node_fluide) elems_xpf = "<<num_som_2<<
" "<<elems_solid_ref(num_som_2)<<
" "<<elems_xpf<<finl;
190 Cerr<<
"coords_point(node_fluide) : xf yf zf = "<<xf1<<
" "<<xf2<<
" "<<xf3<<finl;
191 Cerr<<
"solid_points(node_fluide) : xpf ypf zpf = "<<xpf1<<
" "<<xpf2<<
" "<<xpf3<<finl;
192 Cerr<<
"chercher_elements(xpf,ypf,zpf) = "<<elem_found<<finl;
223 for (
int kxpf = 0; kxpf < nb_som_elem; kxpf++)
225 int num_som_2xpf = elems(elems_xpf,kxpf);
226 if (is_dirichlet(num_som_2xpf) < 0.0) flag_xpf =
false;
231 nb_nodes_in_list += 1;
240 Cerr << __FILE__ << (int)__LINE__ <<
"Interpolation_IBM_mean_gradient_proto::computeSommetsVoisins : nb nodes for interpolation = " <<nb_nodes_in_list<<finl;
int nb_som_elem() const
Renvoie le nombre de sommets des elements geometriques constituants le domaine.
SmallArrOfTID_t & chercher_elements(const DoubleTab &pos, SmallArrOfTID_t &elem, int reel=0) const
Recherche des elements contenant les points dont les coordonnees sont specifiees.
const DoubleTab_t & coord_sommets() const
classe Domaine_dis_base Cette classe est la base de la hierarchie des domaines discretisees.