TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Roue.cpp
1/****************************************************************************
2* Copyright (c) 2024, 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 <TRUSTTab.h>
17#include <Roue.h>
18
19// NOTE : OF 19/6/98
20// Pas de commentaires pour Roue_Ptr, ce n'est pas une classe...
21
22/*! @brief
23 *
24 */
26{
27}
28
29
30/*! @brief Constructeur par recopie.
31 *
32 * Copie de l'ensemble de la roue. Utile pour les constructeurs par recopie des champs.
33 * (ce constructeur est appele quand on fait un OWN_PTR(Champ_base) = un autre Champ,
34 * la version precedente copie la reference, d'ou plantage a la destruction)
35 *
36 */
38{
39 ptr=new Roue(x.valeur());
40}
41
42/*! @brief Constructeur par recopie.
43 *
44 * Copie de l'ensemble de la roue.
45 *
46 */
48{
49 Cerr << "We pass through Roue_ptr=Roue_ptr" << finl;
50 assert(0);
51 ptr=new Roue(x.valeur());
52 return *this;
53}
54
55/*! @brief
56 *
57 */
59{
60}
61
62/*! @brief
63 *
64 */
66{
67 if(ptr)
68 {
69 delete ptr;
70 ptr=0;
71 }
72}
73
74/*! @brief
75 *
76 */
78{
79 return ptr->futur(i);
80}
81
82
83/*! @brief
84 *
85 */
86const Roue& Roue_ptr::operator[](int i) const
87{
88 return ptr->futur(i);
89}
90
91
92/*! @brief Constructeur Construit une roue avec une seule case, au temps t=0
93 *
94 */
95Roue::Roue() : temps_(0), nb_cases_(1), valeurs_(), passe_(this), futur_(this)
96{
97}
98
99
100/*! @brief Constructeur par copie Le temps, les valeurs et les valeurs des Roues futures sont copies
101 *
102 */
103Roue::Roue(const Roue& roue) : temps_(roue.temps_), nb_cases_(1), valeurs_(roue.valeurs_), passe_(this), futur_(this)
104{
105 fixer_nb_cases(roue.nb_cases_);
106 for(int i=1; i<nb_cases_; i++)
107 {
108 futur(i).valeurs_ = roue.futur(i).valeurs_;
109 // abort();
110 }
111}
112
113
114/*! @brief Desctructeur
115 *
116 */
118{
119 supprimer_case(nb_cases_);
120 assert(nb_cases_==1);
121 assert(futur_.ptr==this);
122 assert(passe_.ptr==this);
123 assert(valeurs_.size()==0);
124 futur_.ptr=passe_.ptr=0;
125}
126
127/*! @brief Retourne la Roue correspondant a la ieme case future
128 *
129 * @param (int i) l'indice i de la ieme case future
130 * @return (const Roue&) reference sur la ieme Roue future
131 */
132const Roue& Roue::futur(int i) const
133{
134 assert(i>=0);
135 assert(i<=nb_cases_);
136 if(i==0)
137 return *this;
138 else
139 return futur_->futur(--i);
140}
141
142
143/*! @brief Retourne la Roue correspondant a la ieme case future
144 *
145 * @param (int i) l'indice i de la ieme case future
146 * @return (const Roue&) la ieme Roue future
147 */
149{
150 assert(i>=0);
151 assert(i<=nb_cases_);
152 if(i==0)
153 return *this;
154 else
155 return futur_->futur(--i);
156}
157
158
159/*! @brief Retourne la Roue correspondant a la ieme case passee
160 *
161 * @param (int i) l'indice i de la ieme case passee
162 * @return (const Roue&) reference sur la ieme Roue passee
163 */
164const Roue& Roue::passe(int i) const
165{
166 assert(i>=0);
167 assert(i<=nb_cases_);
168 if(i==0)
169 return *this;
170 else
171 return passe_->passe(--i);
172}
173
174
175/*! @brief Retourne la Roue correspondant a la ieme case passee
176 *
177 * @param (int i) l'indice i de la ieme case passee
178 * @return (const Roue&) la ieme Roue passee
179 */
181{
182 assert(i>=0);
183 assert(i<=nb_cases_);
184 if(i==0)
185 return*this;
186 else
187 return passe_->passe(--i);
188}
189
190// Roue::Roue(const Roue& roue) : passe_(roue.passe_),
191// futur_(roue.passe_), temps_(roue.temps_)
192// {
193// valeurs_.ref(roue.valeurs_);
194// }
195
196
197/*! @brief Dimensionne (1D) les valeurs de la Roue et des ses roues futures
198 *
199 * @param (int nb_val) nombre de valeurs
200 */
201void Roue::dimensionner(int nb_val)
202{
203 if (valeurs_.size() != nb_val )
204 {
205 valeurs_.resize(nb_val);
206 for(int j=1; j<nb_cases_; j++)
207 futur(j).valeurs_.resize(nb_val);
208 }
209}
210
211
212/*! @brief Dimensionne (2D) les valeurs de la Roue et des ses roues futures
213 *
214 * @param (int nb_val) dimension 1 des valeurs
215 * @param (int nb_ncomp) dimension 2 des valeurs
216 */
217void Roue::dimensionner(int nb_val, int nb_comp)
218{
219 if ((valeurs_.size() != nb_val*nb_comp )||(valeurs_.nb_dim()!=2) || (nb_comp!=valeurs_.dimension(1)))
220 {
221 valeurs_.resize(nb_val, nb_comp);
222 for(int j=1; j<nb_cases_; j++)
223 futur(j).valeurs_.resize(nb_val, nb_comp);
224 }
225}
226
227
228/*! @brief Change le nombre de cases de la Roue
229 *
230 * @param (int nb_case) le nouveau nombre de cases
231 * @return (int) le nouveau nombre de cases
232 */
233int Roue::fixer_nb_cases(int nb_case)
234{
235 if(nb_case==nb_cases_)
236 return nb_cases_;
237 int nb_case_a_ajouter=nb_case-nb_cases_;
238 if(nb_case_a_ajouter>0)
239 ajouter_case(nb_case_a_ajouter);
240 else
241 supprimer_case(-nb_case_a_ajouter);
242 return nb_cases_;
243}
244
245
246/*! @brief Ajoute n cases a la Roue
247 *
248 * @param (int n) le nombre de cases a ajouter
249 */
251{
252 for (int n_to_add = 0; n_to_add < n; n_to_add++)
253 {
254 Roue * old_futur = futur_.ptr;
255 Roue * new_futur = new Roue;
256 this ->futur_.ptr = new_futur;
257 old_futur->passe_.ptr = new_futur;
258 new_futur->futur_.ptr = old_futur;
259 new_futur->passe_.ptr = this;
260 // On met a jour nb_cases_ de toutes les cases:
261 {
262 const int new_nb_cases = nb_cases_ + 1;
263 Roue * ptr_roue = this;
264 for(int i = 0; i < new_nb_cases; i++, ptr_roue = ptr_roue->futur_.ptr)
265 ptr_roue->nb_cases_ = new_nb_cases;
266 }
267 }
268}
269
270/*! @brief Supprime n cases de la Roue
271 *
272 * @param (int n) nombre de cases a supprimer
273 */
275{
276 for (int n_to_kill = 0; n_to_kill < n; n_to_kill++)
277 {
278 if (nb_cases_ == 1)
279 {
280 assert(futur_.ptr == this);
281 assert(passe_.ptr == this);
282 valeurs_.reset();
283 temps_=0;
284 }
285 else
286 {
287 // Sauvegarde du futur du futur:
288 Roue * new_futur = futur_->futur_.ptr;
289 // Destruction du futur:
290 {
291 Roue * to_kill = futur_.ptr;
292 to_kill->nb_cases_ = 1;
293 to_kill->futur_.ptr = to_kill->passe_.ptr = to_kill;
294 delete to_kill;
295 }
296 // On referme la liste chainee:
297 new_futur->passe_.ptr = this;
298 futur_.ptr = new_futur;
299
300 const int new_nb_cases = nb_cases_ - 1;
301 if(new_nb_cases == 1)
302 passe_.ptr=this;
303
304 // On met a jour nb_cases_ de toutes les cases:
305 {
306 Roue * ptr_roue = this;
307 for(int i = 0; i < new_nb_cases; i++, ptr_roue = ptr_roue->futur_.ptr)
308 ptr_roue->nb_cases_ = new_nb_cases;
309 }
310 }
311 }
312}
313
314
315/*! @brief Affectation d'une Roue Les attibuts modifies sont le temps, les valeurs, le nombre de cases et les valeurs des cases futures
316 *
317 * @param (const Roue& roue) la Roue a copier
318 * @return (Roue&) la Roue modifiee
319 */
321{
322 temps_ = roue.temps_;
323 valeurs_ = roue.valeurs_;
324 fixer_nb_cases(roue.nb_cases_);
325 for(int i=1; i<nb_cases_; i++)
326 {
327 futur(i).valeurs_ = roue.futur(i).valeurs_;
328 // abort();
329 }
330 return *this;
331}
332
Classe Roue utilisee dans Champ_Inc_Base.
Definition Roue.h:86
int fixer_nb_cases(int)
Change le nombre de cases de la Roue.
Definition Roue.cpp:233
~Roue()
Desctructeur.
Definition Roue.cpp:117
Roue & operator=(const Roue &)
Affectation d'une Roue Les attibuts modifies sont le temps, les valeurs, le nombre de cases et les va...
Definition Roue.cpp:320
void ajouter_case(int n=1)
Ajoute n cases a la Roue.
Definition Roue.cpp:250
const Roue & futur(int i=1) const
Retourne la Roue correspondant a la ieme case future.
Definition Roue.cpp:132
void dimensionner(int nb_val)
Dimensionne (1D) les valeurs de la Roue et des ses roues futures.
Definition Roue.cpp:201
void supprimer_case(int n=1)
Supprime n cases de la Roue.
Definition Roue.cpp:274
Roue()
Constructeur Construit une roue avec une seule case, au temps t=0.
Definition Roue.cpp:95
const Roue & passe(int i=1) const
Retourne la Roue correspondant a la ieme case passee.
Definition Roue.cpp:164
void resize(_SIZE_ n, RESIZE_OPTIONS opt=RESIZE_OPTIONS::COPY_INIT)
Definition TRUSTTab.tpp:469
Roue & valeur()
Definition Roue.h:45
Roue & operator[](int i)
Definition Roue.cpp:77
Roue_ptr()
Definition Roue.cpp:25
~Roue_ptr()
Definition Roue.cpp:65
Roue * ptr
Definition Roue.h:44
Roue_ptr(const Roue_ptr &)
Constructeur par recopie.
Definition Roue.cpp:37
Roue_ptr & operator=(const Roue_ptr &x)
Constructeur par recopie.
Definition Roue.cpp:47