TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
OpHessCentre2IJKScalar.cpp
1/****************************************************************************
2* Copyright (c) 2023, 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#include <OpHessCentre2IJKScalar.h>
17
18Implemente_instanciable_sans_constructeur( OpHessCentre2IJKScalar_double, "OpHessCentre2IJKScalar_double", OpDiffUniformIJKScalar_double ) ;
19
20OpHessCentre2IJKScalar_double::OpHessCentre2IJKScalar_double(): OpDiffUniformIJKScalar_double()
21{
22 is_hess_ = true;
23 set_uniform_lambda(unit_lambda_);
24}
25
27{
28 return os;
29}
30
32{
33 return is;
34}
35
36void OpHessCentre2IJKScalar_double::calculer_hess(const IJK_Field_double& field,
37 IJK_Field_vector3_double& result,
38 const IJK_Field_local_double& boundary_flux_kmin,
39 const IJK_Field_local_double& boundary_flux_kmax)
40{
41 input_field_ = &field;
42 boundary_flux_kmin_ = &boundary_flux_kmin;
43 boundary_flux_kmax_ = &boundary_flux_kmax;
44 compute_grad(result);
45 input_field_ = nullptr;
46 lambda_ = nullptr;
47 coeff_field_x_ = nullptr;
48 coeff_field_y_ = nullptr;
49 coeff_field_z_ = nullptr;
51}
52
53void OpHessCentre2IJKScalar_double::calculer_hess_xx(const IJK_Field_double& field,
54 IJK_Field_double& result,
55 const IJK_Field_local_double& boundary_flux_kmin,
56 const IJK_Field_local_double& boundary_flux_kmax)
57{
58 input_field_ = &field;
59 boundary_flux_kmin_ = &boundary_flux_kmin;
60 boundary_flux_kmax_ = &boundary_flux_kmax;
61 compute_grad_x(result);
62 input_field_ = nullptr;
63 lambda_ = nullptr;
64 coeff_field_x_ = nullptr;
65 coeff_field_y_ = nullptr;
66 coeff_field_z_ = nullptr;
68}
69
70void OpHessCentre2IJKScalar_double::calculer_hess_yy(const IJK_Field_double& field,
71 IJK_Field_double& result,
72 const IJK_Field_local_double& boundary_flux_kmin,
73 const IJK_Field_local_double& boundary_flux_kmax)
74{
75 input_field_ = &field;
76 boundary_flux_kmin_ = &boundary_flux_kmin;
77 boundary_flux_kmax_ = &boundary_flux_kmax;
78 compute_grad_y(result);
79 input_field_ = nullptr;
80 lambda_ = nullptr;
81 coeff_field_x_ = nullptr;
82 coeff_field_y_ = nullptr;
83 coeff_field_z_ = nullptr;
85}
86
87void OpHessCentre2IJKScalar_double::calculer_hess_zz(const IJK_Field_double& field,
88 IJK_Field_double& result,
89 const IJK_Field_local_double& boundary_flux_kmin,
90 const IJK_Field_local_double& boundary_flux_kmax)
91{
92 input_field_ = &field;
93 boundary_flux_kmin_ = &boundary_flux_kmin;
94 boundary_flux_kmax_ = &boundary_flux_kmax;
95 compute_grad_z(result);
96 input_field_ = nullptr;
97 lambda_ = nullptr;
98 coeff_field_x_ = nullptr;
99 coeff_field_y_ = nullptr;
100 coeff_field_z_ = nullptr;
102}
103
104void OpHessCentre2IJKScalar_double::fill_grad_field_x_y_(IJK_Field_local_double& flux, IJK_Field_double& resu, int k, int dir)
105{
106 const int ni = resu.ni();
107 const int nj = resu.nj();
108 switch(dir)
109 {
110 case 0:
111 for (int i=0; i < ni; i++)
112 for (int j=0; j < nj; j++)
113 resu(i,j,k) = flux(i,j,0) - flux(i+1,j,0);
114// resu(i,j,k) = flux(i+1,j,0) - flux(i,j,0);
115 break;
116 case 1:
117 for (int i=0; i < ni; i++)
118 for (int j=0; j < nj; j++)
119 resu(i,j,k) = flux(i,j,0) - flux(i,j+1,0);
120// resu(i,j,k) = flux(i,j+1,0) - flux(i,j,0);
121 break;
122 }
123}
124
125void OpHessCentre2IJKScalar_double::fill_grad_field_z_(IJK_Field_local_double& flux_min, IJK_Field_local_double& flux_max, IJK_Field_double& resu, int k)
126{
127 const double dz_inv = is_flux_ ? 1. : 1 / (channel_data_.get_delta_z()[k] * channel_data_.get_delta_z()[k]);
128 const int ni = resu.ni();
129 const int nj = resu.nj();
130 for (int i=0; i < ni; i++)
131 for (int j=0; j < nj; j++)
132 resu(i,j,k) = (flux_min(i,j,0) - flux_max(i,j,0)) * dz_inv;
133}
134
135
136Implemente_instanciable_sans_constructeur( OpHessFluxCentre2IJKScalar_double, "OpHessFluxCentre2IJKScalar_double", OpHessCentre2IJKScalar_double ) ;
137
139{
140 return os;
141}
142
144{
145 return is;
146}
147
149 IJK_Field_vector3_double& result,
150 const IJK_Field_local_double& boundary_flux_kmin,
151 const IJK_Field_local_double& boundary_flux_kmax)
152{
153 calculer_hess(field,
154 result,
155 boundary_flux_kmin,
156 boundary_flux_kmax);
157 result.echange_espace_virtuel();
158}
159
160void OpHessFluxCentre2IJKScalar_double::fill_grad_field_x_y_(IJK_Field_local_double& flux, IJK_Field_double& resu, int k, int dir)
161{
162 const int ni = resu.ni();
163 const int nj = resu.nj();
164 for (int i=0; i < ni; i++)
165 for (int j=0; j < nj; j++)
166 resu(i,j,k) = - flux(i,j,0);
167}
168
169void OpHessFluxCentre2IJKScalar_double::fill_grad_field_z_(IJK_Field_local_double& flux_min,
170 IJK_Field_local_double& flux_max,
171 IJK_Field_double& resu, int k)
172{
173 fill_grad_field_x_y_(flux_min, resu, k, 2);
174}
Class defining operators and methods for all reading operation in an input flow (file,...
Definition Entree.h:42
virtual Entree & readOn(Entree &)
Lecture d'un Objet_U sur un flot d'entree Methode a surcharger.
Definition Objet_U.cpp:293
virtual Sortie & printOn(Sortie &) const
Ecriture de l'objet sur un flot de sortie Methode a surcharger.
Definition Objet_U.cpp:282
void calculer_hess_yy(const IJK_Field_double &field, IJK_Field_double &result, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
void calculer_hess(const IJK_Field_double &field, IJK_Field_vector3_double &result, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
void fill_grad_field_x_y_(IJK_Field_local_double &flux, IJK_Field_double &resu, int k, int dir) override
void calculer_hess_xx(const IJK_Field_double &field, IJK_Field_double &result, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
void calculer_hess_zz(const IJK_Field_double &field, IJK_Field_double &result, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
void fill_grad_field_z_(IJK_Field_local_double &flux_min, IJK_Field_local_double &flux_max, IJK_Field_double &resu, int k) override
void fill_grad_field_z_(IJK_Field_local_double &flux_min, IJK_Field_local_double &flux_max, IJK_Field_double &resu, int k) override
void fill_grad_field_x_y_(IJK_Field_local_double &flux, IJK_Field_double &resu, int k, int dir) override
void calculer_hess_flux(const IJK_Field_double &field, IJK_Field_vector3_double &result, const IJK_Field_local_double &boundary_flux_kmin, const IJK_Field_local_double &boundary_flux_kmax)
virtual void compute_grad(IJK_Field_vector3_double &dx)
virtual void compute_grad_x(IJK_Field_double &dx)
virtual void compute_grad_y(IJK_Field_double &dx)
virtual void compute_grad_z(IJK_Field_double &dx)
const IJK_Field_local_double * boundary_flux_kmin_
const IJK_Field_local_double * boundary_flux_kmax_
Classe de base des flux de sortie.
Definition Sortie.h:52