TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
OpConvCentre2IJK.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 OpConvCentre2IJK_included
17#define OpConvCentre2IJK_included
18
19#include <Operateur_IJK_faces_conv_base.h>
20#include <Boundary_Conditions.h>
21#include <Boundary_Conditions_Thermique.h>
22
24{
25 Declare_instanciable(OpConvCentre2IJK_double);
26public:
27 inline void set_bc(const Boundary_Conditions& bc) override { ref_bc_ = bc; };
28 inline void set_bc_thermique(const Boundary_Conditions_Thermique& bc_th) override { ref_bc_Thermique_ = bc_th; };
29 void initialize(const Domaine_IJK& splitting) override;
30 void calculer(const IJK_Field_double& inputx, const IJK_Field_double& inputy, const IJK_Field_double& inputz,
31 const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz,
32 IJK_Field_double& dvx, IJK_Field_double& dvy, IJK_Field_double& dvz);
33 void ajouter(const IJK_Field_double& inputx, const IJK_Field_double& inputy, const IJK_Field_double& inputz,
34 const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz,
35 IJK_Field_double& dvx, IJK_Field_double& dvy, IJK_Field_double& dvz);
36
37 void calculer_avec_u_div_rhou(const IJK_Field_double& rhovx, const IJK_Field_double& rhovy, const IJK_Field_double& rhovz,
38 const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz,
39 IJK_Field_double& dvx, IJK_Field_double& dvy, IJK_Field_double& dvz,
40 IJK_Field_double& div_rho_u) override;
41 void ajouter_avec_u_div_rhou(const IJK_Field_double& rhovx, const IJK_Field_double& rhovy, const IJK_Field_double& rhovz,
42 const IJK_Field_double& vx, const IJK_Field_double& vy, const IJK_Field_double& vz,
43 IJK_Field_double& dvx, IJK_Field_double& dvy, IJK_Field_double& dvz,
44 IJK_Field_double& div_rho_u) override;
45protected:
46 inline void compute_flux_x_vx(IJK_Field_local_double& resu, const int k_layer) override
47 {
48 compute_flux_<DIRECTION::X,DIRECTION::X>(resu,k_layer);
49 }
50 inline void compute_flux_x_vy(IJK_Field_local_double& resu, const int k_layer) override
51 {
52 compute_flux_<DIRECTION::X,DIRECTION::Y>(resu,k_layer);
53 }
54 inline void compute_flux_x_vz(IJK_Field_local_double& resu, const int k_layer) override
55 {
56 compute_flux_<DIRECTION::X,DIRECTION::Z>(resu,k_layer);
57 }
58 inline void compute_flux_y_vx(IJK_Field_local_double& resu, const int k_layer) override
59 {
60 compute_flux_<DIRECTION::Y,DIRECTION::X>(resu,k_layer);
61 }
62 inline void compute_flux_y_vy(IJK_Field_local_double& resu, const int k_layer) override
63 {
64 compute_flux_<DIRECTION::Y,DIRECTION::Y>(resu,k_layer);
65 }
66 inline void compute_flux_y_vz(IJK_Field_local_double& resu, const int k_layer) override
67 {
68 compute_flux_<DIRECTION::Y,DIRECTION::Z>(resu,k_layer);
69 }
70 inline void compute_flux_z_vx(IJK_Field_local_double& resu, const int k_layer) override
71 {
72 compute_flux_<DIRECTION::Z,DIRECTION::X>(resu,k_layer);
73 }
74 inline void compute_flux_z_vy(IJK_Field_local_double& resu, const int k_layer) override
75 {
76 compute_flux_<DIRECTION::Z,DIRECTION::Y>(resu,k_layer);
77 }
78 inline void compute_flux_z_vz(IJK_Field_local_double& resu, const int k_layer) override
79 {
80 compute_flux_<DIRECTION::Z,DIRECTION::Z>(resu,k_layer);
81 }
82 inline void exec_after_divergence_flux_x(IJK_Field_double& resu, const int k_layer) override
83 {
84 exec_after_divergence_flux_<DIRECTION::X>(resu, k_layer);
85 }
86 inline void exec_after_divergence_flux_y(IJK_Field_double& resu, const int k_layer) override
87 {
88 exec_after_divergence_flux_<DIRECTION::Y>(resu, k_layer);
89 }
90 inline void exec_after_divergence_flux_z(IJK_Field_double& resu, const int k_layer) override
91 {
92 exec_after_divergence_flux_<DIRECTION::Z>(resu, k_layer);
93 }
94 // First layer of non zero fluxes (eg, not in the walls)
95 // (specific for wall boundary conditions at zmin and zmax)
96
97 double get_g(int k_layer, int compo, int dir, int g_index) const
98 {
99 if (dir != 2)
100 {
101 Process::exit(); // error: non uniform mesh in i or j not coded
102 }
103 if (compo != 2)
104 return g_compo_xy_dir_z_(k_layer, g_index);
105 else
106 return g_compo_z_dir_z_(k_layer, g_index);
107 }
108
109 void calcul_g(const double& dxam, const double& dx, const double& dxav, double& g1, double& g2, double& g3, double& g4);
110 void fill_g_compo(DoubleTab& g, int nb_values, int offset, int istart, int iend, const ArrOfDouble_with_ghost& delta_z, bool is_z_component, bool is_z_periodic);
111
112 // order 4 filtering coefficients for direction z fluxes
113 // (when non uniform mesh in z).
116
117 // Pointer to div_rho_u, filled by operator if ajouter_avec_u_div_rhou() is called
118 IJK_Field_double *div_rho_u_;
122private:
123 void calculer_div_rhou(const IJK_Field_double& rhovx, const IJK_Field_double& rhovy, const IJK_Field_double& rhovz,
124 IJK_Field_double& resu, int k_layer, const Operateur_IJK_data_channel& channel);
125 template <DIRECTION _DIR_, DIRECTION _VCOMPO_>
126 void compute_flux_(IJK_Field_local_double& resu, const int k_layer);
127 template <DIRECTION _DIR_>
128 void exec_after_divergence_flux_(IJK_Field_double& resu, const int k_layer);
129
130};
131
132#include <OpConvCentre2IJK.tpp>
133#endif
: class Boundary_Conditions_Thermique
This class encapsulates all the information related to the eulerian mesh for TrioIJK.
Definition Domaine_IJK.h:47
void compute_flux_x_vz(IJK_Field_local_double &resu, const int k_layer) override
void set_bc_thermique(const Boundary_Conditions_Thermique &bc_th) override
void calculer_avec_u_div_rhou(const IJK_Field_double &rhovx, const IJK_Field_double &rhovy, const IJK_Field_double &rhovz, const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, IJK_Field_double &dvx, IJK_Field_double &dvy, IJK_Field_double &dvz, IJK_Field_double &div_rho_u) override
void exec_after_divergence_flux_z(IJK_Field_double &resu, const int k_layer) override
void fill_g_compo(DoubleTab &g, int nb_values, int offset, int istart, int iend, const ArrOfDouble_with_ghost &delta_z, bool is_z_component, bool is_z_periodic)
void compute_flux_x_vx(IJK_Field_local_double &resu, const int k_layer) override
void ajouter(const IJK_Field_double &inputx, const IJK_Field_double &inputy, const IJK_Field_double &inputz, const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, IJK_Field_double &dvx, IJK_Field_double &dvy, IJK_Field_double &dvz)
void initialize(const Domaine_IJK &splitting) override
OBS_PTR(Boundary_Conditions_Thermique) ref_bc_Thermique_
void calculer(const IJK_Field_double &inputx, const IJK_Field_double &inputy, const IJK_Field_double &inputz, const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, IJK_Field_double &dvx, IJK_Field_double &dvy, IJK_Field_double &dvz)
void ajouter_avec_u_div_rhou(const IJK_Field_double &rhovx, const IJK_Field_double &rhovy, const IJK_Field_double &rhovz, const IJK_Field_double &vx, const IJK_Field_double &vy, const IJK_Field_double &vz, IJK_Field_double &dvx, IJK_Field_double &dvy, IJK_Field_double &dvz, IJK_Field_double &div_rho_u) override
void calcul_g(const double &dxam, const double &dx, const double &dxav, double &g1, double &g2, double &g3, double &g4)
void exec_after_divergence_flux_y(IJK_Field_double &resu, const int k_layer) override
void exec_after_divergence_flux_x(IJK_Field_double &resu, const int k_layer) override
void compute_flux_z_vx(IJK_Field_local_double &resu, const int k_layer) override
void set_bc(const Boundary_Conditions &bc) override
void compute_flux_y_vx(IJK_Field_local_double &resu, const int k_layer) override
void compute_flux_z_vy(IJK_Field_local_double &resu, const int k_layer) override
IJK_Field_double * div_rho_u_
void compute_flux_x_vy(IJK_Field_local_double &resu, const int k_layer) override
void compute_flux_z_vz(IJK_Field_local_double &resu, const int k_layer) override
double get_g(int k_layer, int compo, int dir, int g_index) const
void compute_flux_y_vz(IJK_Field_local_double &resu, const int k_layer) override
OBS_PTR(Boundary_Conditions) ref_bc_
void compute_flux_y_vy(IJK_Field_local_double &resu, const int k_layer) override
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455