16#include <Algorithmes_Transport_FT_Disc.h>
18#include <TRUSTArray.h>
20#include <Domaine_VF.h>
55 const DoubleTab& indicatrice,
57 double& volume_phase_1,
58 ArrOfDouble& barycentre,
59 ArrOfDouble& barycentre_phase_1)
61 const DoubleTab& xp = domaine_vf.
xp();
64 assert(barycentre_phase_1.
size_array() == dim);
66 const DoubleVect& volumes = domaine_vf.
volumes();
67 const int nb_elem = indicatrice.
size();
68 assert(nb_elem == domaine_vf.
nb_elem());
72 double somme_v_x[3] = { 0., 0., 0. };
73 double somme_vI_x[3] = { 0., 0., 0. };
74 for (i = 0; i < nb_elem; i++)
76 const double I = indicatrice[i];
77 const double v = volumes[i];
78 const double vI = v * I;
82 for (j = 0; j < dim; j++)
84 const double x = xp(i, j);
85 somme_v_x[j] += v * x;
86 somme_vI_x[j] += vI * x;
89 volume_total =
mp_sum(somme_v);
90 volume_phase_1 =
mp_sum(somme_vI);
91 for (i = 0; i < dim; i++)
93 const double sv =
mp_sum(somme_v_x[i]);
94 const double svI =
mp_sum(somme_vI_x[i]);
97 if (volume_total > 0.)
98 b = sv / volume_total;
99 if (volume_phase_1 > 0.)
100 bI = svI / volume_phase_1;
102 barycentre_phase_1[i] = bI;
111void eval_vitesse(
double x,
double y,
double z,
double t,
113 double& vx,
double& vy,
double& vz)
115 int i0=0, i1=1, i2=2, i3=3;
145void integrer_vitesse_imposee(
147 double temps,
double dt,
double& x,
double& y,
double& z)
155 parser_vx,parser_vy,parser_vz,vx,vy,vz);
157 eval_vitesse(x + vx * dt * 0.5,
161 parser_vx,parser_vy,parser_vz,vx1,vy1,vz1);
163 eval_vitesse(x + vx1 * dt * 0.5,
167 parser_vx,parser_vy,parser_vz,vx2,vy2,vz2);
169 eval_vitesse(x + vx2 * dt,
173 parser_vx,parser_vy,parser_vz,vx3,vy3,vz3);
175 x += (vx + 2.*vx1 + 2.*vx2 + vx3) / 6. * dt;
176 y += (vy + 2.*vy1 + 2.*vy2 + vy3) / 6. * dt;
177 z += (vz + 2.*vz1 + 2.*vz2 + vz3) / 6. * dt;
: classe Algorithmes_Transport_FT_Disc
virtual void calculer_moments_indicatrice(const Domaine_VF &domaine_vf, const DoubleTab &indicatrice, double &volume_total, double &volume_phase_1, ArrOfDouble &barycentre, ArrOfDouble &barycentre_phase_1)
Calcul des grandeurs suivantes en fonction de l'indicatrice de phase.
double volumes(int i) const
double xp(int num_elem, int k) const
Class defining operators and methods for all reading operation in an input flow (file,...
classe Objet_U Cette classe est la classe de base des Objets de TRUST
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Representation des donnees de la classe Parser.
void setVar(const char *sv, double val)
static double mp_sum(double)
Calcule la somme de x sur tous les processeurs du groupe courant.
Classe de base des flux de sortie.
_SIZE_ size_array() const