Arcane  v3.14.10.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:1178
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
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 -*-