TRUST 1.9.8
HPC thermohydraulic platform
Loading...
Searching...
No Matches
Domaine_EF.h
1/****************************************************************************
2* Copyright (c) 2026, 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 Domaine_EF_included
17#define Domaine_EF_included
18
19#include <Elem_EF_base.h>
20#include <TRUST_Deriv.h>
21#include <Domaine_VF.h>
22
23class Geometrie;
24
25/*! @brief class Domaine_EF
26 *
27 * Classe instanciable qui derive de Domaine_VF.
28 * Cette classe contient les informations geometriques que demande
29 * la methode des Volumes Elements Finis (element de Crouzeix-Raviart)
30 * La classe porte un certain nombre d'informations concernant les faces
31 * Dans cet ensemble de faces on fait figurer aussi les faces du bord et
32 * des joints. Pour manipuler les faces on distingue 2 categories:
33 * - les faces non standard qui sont sur un joint, un bord ou qui sont
34 * internes tout en appartenant a un element du bord
35 * - les faces standard qui sont les faces internes n'appartenant pas
36 * a un element du bord
37 * Cette distinction correspond au traitement des conditions aux limites:les
38 * faces standard ne "voient pas" les conditions aux limites.
39 * L'ensemble des faces est numerote comme suit:
40 * - les faces qui sont sur un Domaine_joint apparaissent en premier
41 * (dans l'ordre du vecteur les_joints)
42 * - les faces qui sont sur un Domaine_bord apparaissent ensuite
43 * (dans l'ordre du vecteur les_bords)
44 * - les faces internes non standard apparaissent ensuite
45 * - les faces internes standard en dernier
46 * Finalement on trouve regroupees en premier toutes les faces non standard
47 * qui vont necessiter un traitement particulier
48 * On distingue deux types d'elements
49 * - les elements non standard : ils ont au moins une face de bord
50 * - les elements standard : ils n'ont pas de face de bord
51 * Les elements standard (resp. les elements non standard) ne sont pas ranges
52 * de maniere consecutive dans l'objet Domaine. On utilise le tableau
53 * rang_elem_non_std pour acceder de maniere selective a l'un ou
54 * l'autre des types d'elements
55 *
56 */
57
59{
60 Declare_instanciable(Domaine_EF);
61public:
62 void typer_elem(Domaine& domaine_geom) override;
63 void discretiser() override;
64 void swap(int, int, int);
65 void modifier_pour_Cl(const Conds_lim&) override;
66
67 inline const Elem_EF_base& type_elem() const { return type_elem_.valeur(); }
68 inline int nb_elem_Cl() const { return nb_elem() - nb_elem_std_; }
69 inline int nb_faces_joint() const { return 0; /* return nb_faces_joint_; A FAIRE */ }
70 inline int nb_faces_std() const { return nb_faces_std_; }
71 inline int nb_elem_std() const { return nb_elem_std_; }
72 inline double carre_pas_du_maillage() const { return h_carre; }
73 inline double carre_pas_maille(int i) const { return h_carre_(i); }
74 inline IntVect& rang_elem_non_std() { return rang_elem_non_std_; }
75
76 inline const IntVect& rang_elem_non_std() const { return rang_elem_non_std_; }
79 virtual void calculer_IPhi(const Domaine_Cl_dis_base& zcl);
80 virtual void calculer_Bij(DoubleTab& bij_);
81 virtual void calculer_Bij_gen(DoubleTab& bij);
82 void calculer_Bij() { calculer_Bij(Bij_); }
83
84 // inline const DoubleVect& volumes_sommets() const { return volumes_sommets_; }
85 inline const DoubleVect& volumes_thilde() const { return volumes_thilde_; }
86 inline const DoubleVect& volumes_sommets_thilde() const { return volumes_sommets_thilde_; }
87 inline const DoubleVect& porosite_sommet() const { return porosite_sommets_; }
88 inline DoubleVect& set_porosite_sommet() { return porosite_sommets_; }
89
90 void calculer_h_carre();
92 inline const DoubleTab& Bij() const { return Bij_; }
93 inline const DoubleTab& Bij_thilde() const { return Bij_thilde_; }
94 inline const DoubleTab& IPhi() const { return IPhi_; }
95 inline const DoubleTab& IPhi_thilde() const { return IPhi_thilde_; }
96
97 virtual void verifie_compatibilite_domaine();
98
99protected:
100 DoubleTab IPhi_, IPhi_thilde_;
101
102private:
103 DoubleVect porosite_sommets_, volumes_sommets_thilde_, volumes_thilde_;
104 // OWN_PTR(Champ_Don_base) champ_porosite_sommets_,champ_porosite_lu_;
105 DoubleTab Bij_, Bij_thilde_; // stockage des matrice Bije
106
107 double h_carre = 1.e30; // carre du pas du maillage
108 DoubleVect h_carre_; // carre du pas d'une maille
109 OWN_PTR(Elem_EF_base) type_elem_; // type de l'element de discretisation
110
111 Sortie& ecrit(Sortie& os) const;
112 IntVect orientation_;
113};
114
115#endif /* Domaine_EF_included */
classe Conds_lim Cette classe represente un vecteur de conditions aux limites.
Definition Conds_lim.h:32
classe Domaine_Cl_dis_base Les objets Domaine_Cl_dis_base representent les conditions aux limites
class Domaine_EF
Definition Domaine_EF.h:59
int nb_elem_std() const
Definition Domaine_EF.h:71
void calculer_volumes_sommets(const Domaine_Cl_dis_base &zcl)
double carre_pas_maille(int i) const
Definition Domaine_EF.h:73
void calculer_h_carre()
const DoubleVect & porosite_sommet() const
Definition Domaine_EF.h:87
virtual void calculer_Bij_gen(DoubleTab &bij)
const Elem_EF_base & type_elem() const
Definition Domaine_EF.h:67
void modifier_pour_Cl(const Conds_lim &) override
const DoubleTab & IPhi_thilde() const
Definition Domaine_EF.h:95
const DoubleTab & IPhi() const
Definition Domaine_EF.h:94
int nb_elem_Cl() const
Definition Domaine_EF.h:68
void calculer_Bij()
Definition Domaine_EF.h:82
DoubleTab IPhi_thilde_
Definition Domaine_EF.h:100
const DoubleTab & Bij() const
Definition Domaine_EF.h:92
void calculer_porosites_sommets()
const IntVect & rang_elem_non_std() const
Definition Domaine_EF.h:76
const DoubleTab & Bij_thilde() const
Definition Domaine_EF.h:93
void discretiser() override
DoubleTab IPhi_
Definition Domaine_EF.h:100
double carre_pas_du_maillage() const
Definition Domaine_EF.h:72
int nb_faces_std() const
Definition Domaine_EF.h:70
const DoubleVect & volumes_thilde() const
Definition Domaine_EF.h:85
DoubleVect & set_porosite_sommet()
Definition Domaine_EF.h:88
int nb_faces_joint() const
Definition Domaine_EF.h:69
const DoubleVect & volumes_sommets_thilde() const
Definition Domaine_EF.h:86
IntVect & rang_elem_non_std()
Definition Domaine_EF.h:74
void swap(int, int, int)
virtual void verifie_compatibilite_domaine()
void calculer_volumes_entrelaces()
void typer_elem(Domaine &domaine_geom) override
virtual void calculer_IPhi(const Domaine_Cl_dis_base &zcl)
class Domaine_VF
Definition Domaine_VF.h:44
IntVect rang_elem_non_std_
Definition Domaine_VF.h:252
int nb_elem_std_
Definition Domaine_VF.h:250
int nb_faces_std_
Definition Domaine_VF.h:251
friend class Sortie
Definition Objet_U.h:75