Arcane  v3.15.3.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MicroHydroModule.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2#ifndef MICROHYDROMODULE_H
3#define MICROHYDROMODULE_H
4
5#include "MicroHydro_axl.h"
6
7using namespace Arcane;
8
9/**
10 * Représente un module d'hydrodynamique lagrangienne très simplifié :
11 * - le seul type de maille supporté est l'hexaèdre,
12 * - pas de pseudo viscosité supportée,
13 * - le seul type de calcul de longueur caractéristique supporté est celui utilisant les médianes,
14 * - le seul type de condition aux limites supporté est d'imposer une composante de la vitesse sur une surface,
15 * - la masse nodale est supposée constante et n'est pas recalculée à chaque itération,
16 * - aucun test de cohérence des valeurs (pression positive, volume positif, ...) n'est effectué.
17 *
18 * La liste des opérations effectuées par le module est la suivante :
19 * - calcul des forces de pression,
20 * - calcul de l'impulsion,
21 * - prise en compte des conditions aux limites,
22 * - déplacement des noeuds,
23 * - calcul des nouvelles valeurs géométriques : volume des mailles, longueur caractéristique des mailles,
24 * resultantes aux sommets de chaque maille,
25 * - calcul de la densité,
26 * - calcul de la pression et de l'énergie par l'équation d'état. Ce calcul est effectué par un service
27 * ARCANE. Deux implémentations sont disponibles pour le service : gaz parfait, et "stiffened" gaz.
28 * - calcul du nouveau pas de temps.
29 *
30 */
32: public ArcaneMicroHydroObject
33{
34 public:
35 /** Constructeur de la classe */
37 : ArcaneMicroHydroObject(mbi) {}
38 /** Destructeur de la classe */
40
41 public:
42 /**
43 * Initialise le module.
44 * L'initialisation comporte deux parties distinctes:
45 * - la première partie où il faut indiquer la taille des variables
46 * tableaux. Dans notre cas, il s'agit de \c m_cell_cqs et
47 * \c m_viscosity_force, qui sont toutes deux des variables
48 * aux mailles possédant une valeur pour chaque noeud de chaque
49 * maille. Comme on ne supporte que les héxaèdres, il y a 8 valeurs
50 * par maille,
51 * - la deuxième partie qui consiste à initialiser les variables avec
52 * leur valeur de départ. Pour les variables \c Pressure, \c Density et
53 * \c AdiabaticCst, c'est ARCANE qui les initialisent directement
54 * à partir du jeu de donnée. La variable \c NodeCoord est aussi
55 * initialisée par l'architecture lors de la lecture du maillage. Les
56 * autres variables sont calculées comme suit :
57 * - le pas de temps initial est donné par le jeu de donnée,
58 * - les valeurs géométriques (longueur caractéristique, volume et
59 * résultantes aux sommets) sont calculées à partir des coordonnées des
60 * noeuds,
61 * - la masse des mailles est calculée à partir de sa densité et de
62 * son volume,
63 * - la masse des mailles et la masse nodale. La masse d'une maille
64 * est calculée à partir de sa densité et de son volume,
65 * - la masse nodale est calculée en ajoutant les contributions de
66 * chaque maille connecté à un noeud donné. Chaque maille
67 * contribue pour 1/8ème de sa masse à la masse nodale de chacun de ses
68 * sommets,
69 * - l'énergie interne et la vitesse du son sont calculées en fonction
70 * de l' équation d'état.
71 */
72 virtual void hydroStartInit();
73
74 /**
75 * Calcule la contribution des forces de pression par
76 * noeud au temps courant \f$t^{n}\f$. Pour chaque noeud de chaque maille,
77 * il s'agit de la pression multipliée par la résultante en ce noeud.
78 * Calcule les forces de pression au temps courant \f$t^{n}\f$.
79 */
80 virtual void computePressureForce();
81
82 /**
83 * Calcule la force (\c m_force) qui s'applique aux noeuds en
84 * ajoutant l'éventuelle contribution de la pseudo-viscosité. Calcule
85 * ensuite la nouvelle vitesse (\c m_velocity) aux noeuds.
86 */
87 virtual void computeVelocity();
88
89 /**
90 * Applique les conditions aux limites.
91 * Les conditions aux limites dépendent des options du
92 * jeu de données. Dans cette implémentation, une condition aux limites
93 * possède les propriétés suivantes :
94 * - un type: trois types sont supportés: contraindre la composante
95 * \f$x\f$ du vecteur vitesse, contraindre la composante \f$y\f$ du vecteur
96 * vitesse ou contraindre la composante \f$z\f$ du vecteur vitesse,
97 * - une valeur: il s'agit d'un réel indiquant la valeur de la
98 * contrainte,
99 * - une surface: il s'agit de la surface sur laquelle s'applique la
100 * contrainte.
101 *
102 * Appliquer les conditions aux limites consiste donc à fixer une
103 * composante d'un vecteur vitesse pour chaque noeud de chaque face de
104 * chaque surface sur laquelle on impose une condition aux limites.
105 */
106 virtual void applyBoundaryCondition();
107
108 /**
109 * Modifie les coordonnées (\c m_node_coord)
110 * des noeuds d'après la valeur du vecteur vitesse et du pas de temps.
111 */
112 virtual void moveNodes();
113
114 /**
115 * Ce point d'entrée regroupe l'ensemble des calculs géométriques
116 * utiles pour le schéma. Dans notre cas, il s'agit pour chaque maille :
117 * - de calculer sa longueur caractéristique,
118 * - de calculer les résultantes à ses sommets,
119 * - de calculer son volume.
120
121 * Pour optimiser le calcul (utilisation du cache), à chaque itération
122 * sur une maille, sont stockées localement les coordonnées de ses noeuds
123 * et celles du centre de ses faces.
124 */
125 virtual void computeGeometricValues();
126
127 /**
128 * Calcule la nouvelle valeur de la densité des
129 * mailles, en considérant que la masse d'une maille est constante au
130 * cours du temps. Dans ce cas, la nouvelle densité est égale à la masse
131 * divisée par le nouveau volume.
132 */
133 virtual void updateDensity();
134
135 /**
136 * Ce point d'entrée calcule l'énergie interne, la pression et la vitesse
137 * du son dans la maille en faisant appel au service d'équation d'état.
138 */
139 virtual void applyEquationOfState();
140
141 /**
142 * Détermine la valeur du pas de temps pour l'itération suivante.
143 * Le pas de temps est contraint par :
144 * - la valeur de la CFL,
145 * - les valeurs \c deltatMin() et \c deltatMax() du jeu de données,
146 * - la valeur du temps final. Lors de la dernière itération, le pas
147 * de temps doit être tel qu'on s'arrête exactement au temps spécifié
148 * dans le jeu de données (\c finalTime()).
149 */
150 virtual void computeDeltaT();
151
152 /** Retourne le numéro de version du module */
153 virtual VersionInfo versionInfo() const { return VersionInfo(1,0,0); }
154
155 private:
156 /**
157 * Calcule les résultantes aux noeuds d'une maille hexaédrique.
158 * La méthode utilisée est celle du découpage en quatre triangles.
159 * Méthode appelée par le point d'entrée \c computeGeometricValues()
160 */
161 inline void computeCQs(Real3 node_coord[8],Real3 face_coord[6],const Cell& cell);
162};
163
164#endif
Maille d'un maillage.
Definition Item.h:1191
Informations pour construire un module.
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Informations sur une version.
Definition VersionInfo.h:46
Référence à une instance.
virtual void updateDensity()
virtual void computeVelocity()
virtual void computeGeometricValues()
virtual void computeDeltaT()
virtual VersionInfo versionInfo() const
virtual void applyBoundaryCondition()
virtual void hydroStartInit()
virtual void moveNodes()
virtual void applyEquationOfState()
MicroHydroModule(const ModuleBuildInfo &mbi)
virtual void computePressureForce()
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-