63 dis.
discretiser_champ(
"champ_sommets",le_dom_dis,
"fluid_elems",
"none",1,0., fluid_elems_);
69 DoubleTab& the_values = ref_cast_non_const(DoubleTab, my_prep->get_champ_fluid_elems());
70 fluid_elems_->valeurs() = the_values;
75 if (fluid_elems_lu_) fluid_elems_->affecter(fluid_elems_lu_);
80 dis.
discretiser_champ(
"champ_sommets",le_dom_dis,vectoriel,c_nam,units,nb_comp,0.,fluid_points_);
86 DoubleTab& the_values = ref_cast_non_const(DoubleTab, my_prep->get_champ_fluid_points());
87 fluid_points_->valeurs() = the_values;
92 if (fluid_points_lu_) fluid_points_->affecter(fluid_points_lu_);
100 int nb_som = le_dom_dis.
nb_som();
102 int nb_elem = le_dom_dis.
nb_elem();
107 DoubleTab& elems_fluid_ref = fluid_elems_->valeurs();
108 DoubleTab& fluid_points_ref = fluid_points_->valeurs();
109 DoubleTab& solid_points_ref = solid_points_->valeurs();
117 DoubleTab& corresp_elems_ref = corresp_elems_->valeurs();
119 for (
int i = 0 ; i < nb_elem_tot ; i++)
121 int int_cor_elem = (int)lrint(corresp_elems_ref(i));
122 if (int_cor_elem > nb_tag_max) nb_tag_max = int_cor_elem;
124 int dimtag = nb_tag_max+1;
125 DoubleTrav elems_fluid_trust(dimtag);
126 elems_fluid_trust = -1.e+10;
127 for (
int i = 0 ; i < nb_elem_tot ; i++)
129 int indextag = (int)lrint(corresp_elems_ref(i)) ;
132 if (indextag < dimtag && indextag >= 0)
134 elems_fluid_trust(indextag) = i*1.0;
138 Cerr<<
"erreur in computeFluidElems : elem corresp_elems_ref(elem) = "<<i<<
" "<<corresp_elems_ref(i)<<
" ; indextag = "<<indextag<<
" < 0 ou >= "<<dimtag<<finl;
142 for (
int i = 0 ; i < nb_som ; i++)
144 if (elems_fluid_ref(i) >= 0.0)
146 int indexr = (int)lrint(elems_fluid_ref(i));
147 if (indexr < dimtag && indexr >= 0)
149 if (elems_fluid_trust(indexr) >= 0.)
151 elems_fluid_ref(i) = elems_fluid_trust(indexr);
155 double x = fluid_points_ref(i,0);
156 double y = fluid_points_ref(i,1);
157 double z = fluid_points_ref(i,2);
158 double xs = solid_points_ref(i,0);
159 double ys = solid_points_ref(i,1);
160 double zs = solid_points_ref(i,2);
161 double d = (x-xs)*(x-xs)+(y-ys)*(y-ys)+(z-zs)*(z-zs);
165 elems_fluid_ref(i) = elems_fluid_trust(indexr);
169 Cerr << __FILE__ << (int)__LINE__ <<
"Interpolation_IBM_elem_fluid::computeFluidElems : ERROR : joint width too low?" << finl;
170 Cerr<<
"node elems_fluid_ref(node) index = "<<i<<
" "<<elems_fluid_ref(i)<<
" "<<indexr<<finl;
171 Cerr<<
"elems_fluid_trust(index) < 0. = "<<elems_fluid_trust(indexr)<<finl;
172 Cerr<<
"nb som som_tot elem elem_tot = "<<nb_som<<
" "<<nb_som_tot<<
" "<<nb_elem<<
" "<<nb_elem_tot<<finl;
173 Cerr<<
"coords_point(node) : x y z = "<<coordsDom(i,0)<<
" "<<coordsDom(i,1)<<
" "<<coordsDom(i,2)<<finl;
174 Cerr<<
"fluid_points(node) : xf yf zf = "<<x<<
" "<<y<<
" "<<z<<finl;
175 Cerr<<
"solid_points(node) : xs ys zs = "<<xs<<
" "<<ys<<
" "<<zs<<finl;
177 Cerr<<
"chercher_elements(xf,yf,zf) = "<<elem_found<<finl;
178 if (elem_found != -1)
179 elems_fluid_ref(i) = elem_found;
187 Cerr << __FILE__ << (int)__LINE__ <<
"Interpolation_IBM_elem_fluid::computeFluidElems : ERROR : joint width too low?" << finl;
188 Cerr<<
"node elems_fluid_ref(node) = "<<i<<
" "<<elems_fluid_ref(i)<<finl;
189 Cerr<<
"index = "<<indexr<<
" < 0 ou >= "<<dimtag<<finl;
void discretiser_champ(const Motcle &directive, const Domaine_dis_base &z, const Nom &nom, const Nom &unite, int nb_comp, int nb_pas_dt, double temps, OWN_PTR(Champ_Inc_base)&champ, const Nom &sous_type=NOM_VIDE) const
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.
const Domaine & domaine() const
void ajouter(const char *keyword, const int *value, Param::Nature nat=Param::OPTIONAL)
Register an integer parameter.