TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Statistiques_dns_ijk.h
1/****************************************************************************
2* Copyright (c) 2015 - 2016, CEA
3* All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6* 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8* 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9*
10* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
11* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
12* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13*
14*****************************************************************************/
15
16#ifndef Statistiques_dns_ijk_included
17#define Statistiques_dns_ijk_included
18#include <IJK_Field_vector.h>
19#include <IJK_Field.h>
20
21#include <Objet_U.h>
22#include <TRUSTArrays.h>
23#include <Noms.h>
24#include <Param.h>
25#include <Champs_compris_IJK.h>
26#include <Champs_compris_IJK_interface.h>
27
28//
29class Domaine_IJK;
32{
33 Declare_instanciable(Statistiques_dns_ijk);
34public:
35 virtual Sortie& completer_print(Sortie& os) const
36 {
37 // porte d'entree pour completer dans la classe fille
38 return os;
39 };
40 virtual void completer_read(Param& param)
41 {
42 Cerr << "Mot lu nom compris par " << que_suis_je() <<finl;
44 };
45 void postraiter(Sortie&, int flag_valeur_instantanee = 0) const;
46 void postraiter_k(Sortie&, int flag_valeur_instantanee = 0) const; //modif AT 20/06/2013
47 void update_stat(const IJK_Field_vector3_double& vitesse,
48 const IJK_Field_double& pression,
49 const IJK_Field_double& temperature,
50 const IJK_Field_double& masse_vol,
51 const IJK_Field_double& champ_mu,
52 const IJK_Field_double& champ_lambda,
53 const ArrOfDouble_with_ghost& delta_z_local_pour_delta,
54 const bool flag_nu_anisotropic,
55 const int flag_turbulent_viscosity,
56 const IJK_Field_double& champ_turbulent_mu_xx,
57 const IJK_Field_double& champ_turbulent_mu_xy,
58 const IJK_Field_double& champ_turbulent_mu_xz,
59 const IJK_Field_double& champ_turbulent_mu_yy,
60 const IJK_Field_double& champ_turbulent_mu_yz,
61 const IJK_Field_double& champ_turbulent_mu_zz,
62 const bool flag_kappa_anisotropic,
63 const int flag_turbulent_diffusivity,
64 const IJK_Field_double& champ_turbulent_kappa_x,
65 const IJK_Field_double& champ_turbulent_kappa_y,
66 const IJK_Field_double& champ_turbulent_kappa_z,
67 const int flag_structural_uu,
68 const FixedVector<IJK_Field_double, 6>& structural_uu_tensor,
69 const int flag_structural_uscalar,
70 const IJK_Field_vector3_double& structural_uscalar_vector,
71 const int flag_formulation_favre,
72 const int flag_formulation_velocity,
73 const double cp_gaz,
74 const double pression_thermodynamique,
75 double dt);
76 //modif AT 20/06/2013
77 void update_stat_k(const IJK_Field_vector3_double& vitesse,
78 const IJK_Field_double& pression,
79 const IJK_Field_double& masse_vol,
80 const IJK_Field_double& champ_mu,
81 const double pression_thermodynamique,
82 const double terme_source_acceleration,
83 double dt);
84
85 int lire_motcle_non_standard(const Motcle& mot, Entree& is) override;
86 virtual void initialize(const Domaine_IJK&)
87 {
88 Cerr << "On est pas suppose pouvoir etre ici : Statistiques_dns_ijk::initialize(const Domaine_IJK &)" << finl;
90 }
91 virtual void initialize(const Domaine_IJK& ,const double T_KMAX, const double T_KMIN, const double constante_specifique_gaz);
92
93 // Interface Champs_compris_IJK_interface
94 bool has_champ(const Motcle& nom) const override { return champs_compris_.has_champ(nom); }
95 bool has_champ_vectoriel(const Motcle& nom) const override { return champs_compris_.has_champ_vectoriel(nom); }
96 const IJK_Field_vector3_double& get_IJK_field_vector(const Motcle& nom) override;
97 const IJK_Field_double& get_IJK_field(const Motcle& nom) override;
98
99 void associer_domaine(Domaine_IJK& dom_ijk);
100 bool is_stats_plans_activated() const;
101 bool is_post_required(const Motcle& nom) const;
102 static void Fill_postprocessable_fields(std::vector<FieldInfo_t>& chps);
103 void get_noms_champs_postraitables(Noms& noms,Option opt=NONE) const;
104
105
106 const double& t_integration() const
107 {
108 return t_integration_;
109 }
110 double t_integration_k() const
111 {
112 return t_integration_k_;//modif AT 20/06/2013
113 }
114 int check_converge() const
115 {
116 return check_converge_;//modif AT 20/06/2013
117 }
118 // accesseur pour recuperer dans un autre
119 inline VECT(ArrOfDouble) vitesse_moyenne() const
120 {
121 return vit_moy_;
122 }
123 inline ArrOfDouble masse_volumique_moyenne() const // DD 16/10/2015
124 {
125 return rho_moy_;
126 }
127 inline ArrOfDouble viscosite_cinematique_moyenne() const // DD 16/10/2015
128 {
129 return nu_moy_;
130 }
131 inline int is_converge() const
132 {
133 return check_converge_;
134 }
135 void compute_and_store_gradU_cell(const IJK_Field_double& vitesse_i,
136 const IJK_Field_double& vitesse_j,
137 const IJK_Field_double& vitesse_k);
138
139 void cell_to_cell_gradient(const int i, const int j, const int k,
140 const IJK_Field_double& dudx, const IJK_Field_double& dvdy, const IJK_Field_double& dwdx,
141 const IJK_Field_double& dudz, const IJK_Field_double& dvdz, const IJK_Field_double& dwdz,
142 /* Et les outputs en ref aussi!! */
143 double& ddudxy, double& ddudxz, double& ddudyz,
144 double& ddvdxy, double& ddvdxz, double& ddvdyz,
145 double& ddwdxy, double& ddwdxz, double& ddwdyz) const ;
146
147 double face_to_cell_gradient(const IJK_Field_double& vitesse_i,
148 const IJK_Field_double& vitesse_j,
149 const IJK_Field_double& vitesse_k,
150 const int i, const int j, const int k,
151 const double dz,
152 double& duidx,
153 double& dujdx,
154 double& dukdx,
155 double& duidy,
156 double& dujdy,
157 double& dukdy,
158 double& duidz,
159 double& dujdz,
160 double& dukdz,
161 const bool on_the_first_cell,
162 const bool on_the_last_cell,
163 const int bc_type) const;
164 // Calcul le gradient et la derivee seconde de la vitesse :
165 double calculer_gradients_vitesse(const IJK_Field_double& vitesse_i,
166 const IJK_Field_double& vitesse_j,
167 const IJK_Field_double& vitesse_k,
168 const int i, const int j, const int k,
169 const double dz,
170 double& duidx, double& dujdx, double& dukdx,
171 double& duidy, double& dujdy, double& dukdy,
172 double& duidz, double& dujdz, double& dukdz,
173 double& dduidxx, double& ddujdxx, double& ddukdxx,
174 double& dduidyy, double& ddujdyy, double& ddukdyy,
175 double& dduidzz, double& ddujdzz, double& ddukdzz,
176 const bool on_the_first_cell,
177 const bool on_the_last_cell) const;
178 double calculer_vraie_dissipation(const double& pseudo_dissip,
179 const double& duidx, const double& duidy, const double& duidz,
180 const double& dujdx, const double& dujdy, const double& dujdz,
181 const double& dukdx, const double& dukdy, const double& dukdz) const;
182
183 double calculer_produit_scalaire_faces_to_center(const IJK_Field_double& ui,
184 const IJK_Field_double& uj,
185 const IJK_Field_double& uk,
186 const IJK_Field_double& vi,
187 const IJK_Field_double& vj,
188 const IJK_Field_double& vk,
189 const int i,
190 const int j,
191 const int k
192 );
194 const IJK_Field_double& v1_i,
195 const IJK_Field_double& v1_j,
196 const IJK_Field_double& v1_k,
197 const IJK_Field_double& v2_i,
198 const IJK_Field_double& v2_j,
199 const IJK_Field_double& v2_k);
200 void compute_vecA_minus_vecB_in_vecA(IJK_Field_vector3_double& vecA, const IJK_Field_vector3_double& vecB);
201protected:
202 // Z coordinates of statistics points
203 ArrOfDouble elem_coord_;
204 //taille des mailles;
205 double dx_;//modif AT 20/06/2013
206 double dy_;//modif AT 20/06/2013
207 // double dz_;//modif AT 20/06/2013
208 ArrOfDouble tab_dz_;//modif AT 20/06/2013
210 OBS_PTR(Domaine_IJK) domaine_ijk_;
211
212 // Last instantaneous value of the space average (only on processor 0)
213 VECT(ArrOfDouble) moyenne_spatiale_instantanee_;
214 VECT(ArrOfDouble) moyenne_spatiale_ec_; // FA 17/03/2014 pour spatiales de Ec
215 // Temporal integral of statistics variables
216 VECT(ArrOfDouble) integrale_temporelle_;
217 // Integration time
218 double t_integration_ = 0.0;
219 VECT(Nom) noms_moyennes_;
220 VECT(Nom) noms_k_;
221 int nval_;
222 int kval_;
223 double t_integration_k_ = 0.0;//modif AT 20/06/2013
224 bool check_converge_ = false;//modif AT 20/06/2013
225 VECT(ArrOfDouble) integrale_k_;//modif AT 20/06/2013
226 VECT(ArrOfDouble) vit_moy_;//modif AT 20/06/2013
227 ArrOfDouble rho_moy_;// DD 16/10/2015
228 ArrOfDouble nu_moy_;// DD 16/10/2015
229 // F.A CL pour derivee
230 double TCL_kmax_;
231 double TCL_kmin_;
233
234 // Storage of all the extra fields created for post processing:
235 std::map<Motcle, IJK_Field_double> scalar_post_fields_;
236 std::map<Motcle, IJK_Field_vector3_double> vect_post_fields_;
237 Champs_compris_IJK champs_compris_; ///< the actual fields registered and managed by the post-processing part (=all the extra fields, not the main unknowns)
238};
239#endif
Similar to Champs_compris_interface but for IJK scalar and vector fields.
Same as Champs_compris, but specialised for IJK fields and also supports quering for vectorial fields...
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
Une chaine de caractere (Nom) en majuscules.
Definition Motcle.h:26
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
friend class Sortie
Definition Objet_U.h:75
const Nom & que_suis_je() const
renvoie la chaine identifiant la classe.
Definition Objet_U.cpp:104
Objet_U()
Constructeur par defaut : attribue un numero d'identifiant unique a l'objet (object_id_),...
Definition Objet_U.cpp:55
Helper class to factorize the readOn method of Objet_U classes.
Definition Param.h:112
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
Classe de base des flux de sortie.
Definition Sortie.h:52
VECT(ArrOfDouble) moyenne_spatiale_ec_
VECT(Nom) noms_moyennes_
VECT(ArrOfDouble) moyenne_spatiale_instantanee_
bool is_post_required(const Motcle &nom) const
IJK_Field_double compute_and_store_scalar_product_face_to_face(const IJK_Field_double &v1_i, const IJK_Field_double &v1_j, const IJK_Field_double &v1_k, const IJK_Field_double &v2_i, const IJK_Field_double &v2_j, const IJK_Field_double &v2_k)
ArrOfDouble masse_volumique_moyenne() const
void get_noms_champs_postraitables(Noms &noms, Option opt=NONE) const
std::map< Motcle, IJK_Field_double > scalar_post_fields_
void update_stat(const IJK_Field_vector3_double &vitesse, const IJK_Field_double &pression, const IJK_Field_double &temperature, const IJK_Field_double &masse_vol, const IJK_Field_double &champ_mu, const IJK_Field_double &champ_lambda, const ArrOfDouble_with_ghost &delta_z_local_pour_delta, const bool flag_nu_anisotropic, const int flag_turbulent_viscosity, const IJK_Field_double &champ_turbulent_mu_xx, const IJK_Field_double &champ_turbulent_mu_xy, const IJK_Field_double &champ_turbulent_mu_xz, const IJK_Field_double &champ_turbulent_mu_yy, const IJK_Field_double &champ_turbulent_mu_yz, const IJK_Field_double &champ_turbulent_mu_zz, const bool flag_kappa_anisotropic, const int flag_turbulent_diffusivity, const IJK_Field_double &champ_turbulent_kappa_x, const IJK_Field_double &champ_turbulent_kappa_y, const IJK_Field_double &champ_turbulent_kappa_z, const int flag_structural_uu, const FixedVector< IJK_Field_double, 6 > &structural_uu_tensor, const int flag_structural_uscalar, const IJK_Field_vector3_double &structural_uscalar_vector, const int flag_formulation_favre, const int flag_formulation_velocity, const double cp_gaz, const double pression_thermodynamique, double dt)
VECT(ArrOfDouble) integrale_k_
double calculer_vraie_dissipation(const double &pseudo_dissip, const double &duidx, const double &duidy, const double &duidz, const double &dujdx, const double &dujdy, const double &dujdz, const double &dukdx, const double &dukdy, const double &dukdz) const
bool has_champ_vectoriel(const Motcle &nom) const override
const double & t_integration() const
bool has_champ(const Motcle &nom) const override
void compute_vecA_minus_vecB_in_vecA(IJK_Field_vector3_double &vecA, const IJK_Field_vector3_double &vecB)
void postraiter(Sortie &, int flag_valeur_instantanee=0) const
double face_to_cell_gradient(const IJK_Field_double &vitesse_i, const IJK_Field_double &vitesse_j, const IJK_Field_double &vitesse_k, const int i, const int j, const int k, const double dz, double &duidx, double &dujdx, double &dukdx, double &duidy, double &dujdy, double &dukdy, double &duidz, double &dujdz, double &dukdz, const bool on_the_first_cell, const bool on_the_last_cell, const int bc_type) const
double calculer_produit_scalaire_faces_to_center(const IJK_Field_double &ui, const IJK_Field_double &uj, const IJK_Field_double &uk, const IJK_Field_double &vi, const IJK_Field_double &vj, const IJK_Field_double &vk, const int i, const int j, const int k)
void update_stat_k(const IJK_Field_vector3_double &vitesse, const IJK_Field_double &pression, const IJK_Field_double &masse_vol, const IJK_Field_double &champ_mu, const double pression_thermodynamique, const double terme_source_acceleration, double dt)
virtual void initialize(const Domaine_IJK &)
ArrOfDouble viscosite_cinematique_moyenne() const
const IJK_Field_double & get_IJK_field(const Motcle &nom) override
std::map< Motcle, IJK_Field_vector3_double > vect_post_fields_
double calculer_gradients_vitesse(const IJK_Field_double &vitesse_i, const IJK_Field_double &vitesse_j, const IJK_Field_double &vitesse_k, const int i, const int j, const int k, const double dz, double &duidx, double &dujdx, double &dukdx, double &duidy, double &dujdy, double &dukdy, double &duidz, double &dujdz, double &dukdz, double &dduidxx, double &ddujdxx, double &ddukdxx, double &dduidyy, double &ddujdyy, double &ddukdyy, double &dduidzz, double &ddujdzz, double &ddukdzz, const bool on_the_first_cell, const bool on_the_last_cell) const
VECT(ArrOfDouble) integrale_temporelle_
int lire_motcle_non_standard(const Motcle &mot, Entree &is) override
Lecture des parametres de type non simple d'un objet_U a partir d'un flot d'entree.
const IJK_Field_vector3_double & get_IJK_field_vector(const Motcle &nom) override
virtual void completer_read(Param &param)
VECT(ArrOfDouble) vitesse_moyenne() const
OBS_PTR(Probleme_FTD_IJK_base) ref_ijk_ft_
Champs_compris_IJK champs_compris_
the actual fields registered and managed by the post-processing part (=all the extra fields,...
void compute_and_store_gradU_cell(const IJK_Field_double &vitesse_i, const IJK_Field_double &vitesse_j, const IJK_Field_double &vitesse_k)
VECT(ArrOfDouble) vit_moy_
static void Fill_postprocessable_fields(std::vector< FieldInfo_t > &chps)
void associer_domaine(Domaine_IJK &dom_ijk)
void cell_to_cell_gradient(const int i, const int j, const int k, const IJK_Field_double &dudx, const IJK_Field_double &dvdy, const IJK_Field_double &dwdx, const IJK_Field_double &dudz, const IJK_Field_double &dvdz, const IJK_Field_double &dwdz, double &ddudxy, double &ddudxz, double &ddudyz, double &ddvdxy, double &ddvdxz, double &ddvdyz, double &ddwdxy, double &ddwdxz, double &ddwdyz) const
OBS_PTR(Domaine_IJK) domaine_ijk_
void postraiter_k(Sortie &, int flag_valeur_instantanee=0) const
virtual Sortie & completer_print(Sortie &os) const