TrioCFD 1.9.8
TrioCFD documentation
Loading...
Searching...
No Matches
Beam_model.h
1/****************************************************************************
2* Copyright (c) 2021, 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 Beam_model_included
17#define Beam_model_included
18
19#include <TRUST_List.h>
20#include <Interprete_geometrique_base.h>
21#include <Nom.h>
22#include <Bords.h>
23#include <Motcle.h>
24#include <SFichier.h>
25
26/////////////////////////////////////////////////////////////////////////////
27//
28// .DESCRIPTION : class Beam_model
29//
30// <Description of class Beam_model>
31// Fluid-structure interaction model.
32// Reduced mechanical model: a beam model (1d).
33// Resolution based on a modal analysis.
34// Temporal discretization: Newmark finite differences, Newmark mean acceleration, or Hilber-Hughes-Taylor (HHT)
35// ALE coupling with the reduced beam model
36/////////////////////////////////////////////////////////////////////////////
37
38class Beam_model : public Interprete_geometrique_base
39{
40
41 Declare_instanciable_sans_constructeur_ni_destructeur( Beam_model ) ;
42
43public :
44 Beam_model();
46 Entree& interpreter_(Entree&) override;
47 inline const int& getNbModes() const;
48 inline double getTime() const;
49 inline void setNbModes(const int&) ;
50 inline const int& getLongitudinalAxis() const;
51 inline void setLongitudinalAxis(const int&) ;
52 inline const int& getNbPlanes() const;
53 inline void setNbplanes(const int&) ;
54 inline const int& getBendingDirection(const int&) const;
55 inline void setBendingDirection(const int&, const int&) ;
56 inline const double& getYoung() const;
57 inline void setYoung(const double&);
58 inline const double& getRhoBeam() const;
59 inline void setRhoBeam(const double&) ;
60 inline const Nom& getBeamName() const;
61 inline void setBeamName(const Nom&) ;
62 inline const Nom& getFileName() const;
63 inline void setFileName(const Nom&) ;
64 inline void setTimeScheme(const Nom&, double&) ;
65 inline void setOutputPosition1D(const DoubleVect&) ;
66 inline void setOutputPosition3D(const DoubleTab&) ;
67 void readInputMassStiffnessFiles (Nom& masse_and_stiffness_file_name);
68 void readInputAbscFiles (Nom& absc_file_name);
69 void readInputModalDeformation(Noms& modal_deformation_file_name);
70 void readInputCIFile(Nom& CI_file_name);
71 void readRestartFile(Nom& Restart_file_name);
72 //void interpolationOnThe3DSurface(const Bords& les_bords_ALE);
73 DoubleTab interpolationOnThe3DSurface(const double& x, const double& y, const double& z, const DoubleTab& u, const DoubleTab& R) const;
74 double interpolationPhiOnThe3DSurface(const double& x, const double& y, const double& z, const int& comp, const DoubleTab& u) const;
75 void initialization(double displacement);
76 void initialization();
77 DoubleTab& NewmarkScheme(const double& dt);
78 DoubleTab& getVelocity(const double& tps, const double& dt);
79 inline double getSoundSpeed();
80 inline double getMass(int i);
81 inline double getStiffness(int i);
82 inline const DoubleTab& getDisplacement(int i) const;
83 inline const DoubleTab& getRotation(int i) const;
84 void saveBeamForRestart() const;
85 void printOutputBeam1D(bool first_writing=false) const;
86 void printOutputBeam3D(bool first_writing=false) const;
87 void printOutputFluidForceOnBeam(bool first_writing=false) const;
88 inline void setFluidForceOnBeam(const DoubleTab&);
89 inline DoubleTab getFluidForceOnBeam();
90 inline void setTempsComputeForceOnBeam(const double&);
91 inline const double& getTempsComputeForceOnBeam() const;
92 void setCenterCoordinates(const double&,const double&, const double&);
93 void read_beam(Entree& is);
94 void interpolationWeights(const double&, const double&, const double&, int&, int&, double&, double&) const;
95protected :
96 int nbModes_; // Number of modes
97 int longitudinal_axis_; //x=0, y=1, z=2 Axis along the length of the beam
98 IntVect bending_dir_; // x=0, y=1, z=2 Direction of bending, size nb_planes_
99 int nb_planes_; // 1 or 2 Number of planes used in the beam dynamic model
100 double young_; // Young module
101 double rho_; // solid density
102 DoubleTab mass_; //diagonal modal mass matrix
103 DoubleTab stiffness_; //diagonal modal stiffness_ matrix
104 DoubleTab damping_; //diagonal modal damping_ matrix
105 DoubleVect abscissa_; // coordinates of the Beam
106 LIST(DoubleTab) u_; // Beam modal displacement constituting the modal shape
107 LIST(DoubleTab) R_; // Beam modal rotation constituting the modal shape
108 DoubleTab qSpeed_; // Beam 1d speed
109 DoubleTab qAcceleration_; //Beam 1d acceleration
110 DoubleTab qDisplacement_; //Beam 1d displacement
111 //DoubleTab phi3D_;
112 double temps_;
113 DoubleVect output_position_1D_; //post-treatment of the 1d position of the points (points on the Beam)
114 DoubleTab output_position_3D_; // post-treatment of the 3d position of the points (points on the 3d surface)
115 Nom beamName_; // Name of the beam (the name must match with the name of the edge in the fluid domain)
116 double alpha_; // time discretization parameter
117 double beta_; // time discretization parameter
118 double gamma_; // time discretization parameter
119 double dt_stab_; //critical time step, only for the explicit Newmark finite differences time discretisation
120
121
122 DoubleTab fluidForceOnBeam_; //Fluid force acting on the IFS boundary
124 double x0_; //x-coordinate of the center of the Beam base
125 double y0_; //y-coordinate of the center of the Beam base
126 double z0_; //z-coordinate of the center of the Beam base
127 mutable SFichier displacement_out_3d_; //output files of the displacement
128 mutable SFichier speed_out_3d_; //output files of the speed
129 mutable SFichier acceleration_out_3d_; //output files of the acceleration
130};
131inline const int& Beam_model::getNbModes() const
132{
133 return nbModes_;
134}
135inline double Beam_model::getTime() const
136{
137 return temps_;
138}
139inline void Beam_model::setNbModes(const int& modes)
140{
141 nbModes_=modes;
142}
143inline const int& Beam_model::getBendingDirection(const int& index) const
144{
145 return bending_dir_[index];
146}
147inline void Beam_model::setBendingDirection(const int& direction, const int& index)
148{
149 bending_dir_[index]=direction;
150}
151inline const int& Beam_model::getLongitudinalAxis() const
152{
153 return longitudinal_axis_;
154}
155inline void Beam_model::setLongitudinalAxis(const int& direction)
156{
157 longitudinal_axis_=direction;
158}
159inline const int& Beam_model::getNbPlanes() const
160{
161 return nb_planes_;
162}
163inline void Beam_model::setNbplanes(const int& nb_planes)
164{
165 nb_planes_=nb_planes;
166}
167inline const double& Beam_model::getYoung() const
168{
169 return young_;
170}
171inline void Beam_model::setYoung(const double& young)
172{
173 young_ = young;
174}
175inline const double& Beam_model::getRhoBeam() const
176{
177 return rho_;
178}
179inline void Beam_model::setRhoBeam(const double& rho)
180{
181 rho_=rho;
182}
183
184inline void Beam_model::setTimeScheme(const Nom& timeScheme, double& alpha)
185{
186 alpha_=alpha;
187 if(timeScheme=="FD")
188 {
189 beta_=0.;
190 gamma_=0.5;
191 alpha_=0.;
192 Cerr << "Warning: You selected the Newmark finite difference scheme.\n"
193 << "This scheme is conditionally stable. Use a sufficiently small time step "
194 << "to ensure stability.\n"
195 << "Alternatively, choose the Newmark Mean Acceleration (MA) or "
196 << "Hilber–Hughes–Taylor (HHT) scheme for unconditional stability."<<finl;
197 }
198 else if(timeScheme=="MA")
199 {
200 beta_=0.25;
201 gamma_=0.5;
202 alpha_=0.;
203 }
204 else if (timeScheme=="HHT")
205 {
206 beta_= 0.25*(1.-alpha_)*(1.-alpha_);
207 gamma_=0.5 -alpha_;
208 }
209 else
210 {
211 Cout<<"The discretization of the beam time discretisation is unknown. Choose between Newmark FD, MA, and HHT and restart!"<<finl;
212 exit();
213 }
214
215}
217{
218 return sqrt(young_/rho_);
219}
220
221inline double Beam_model::getMass(int i)
222{
223 assert(i<nbModes_);
224 return mass_[i];
225}
226inline double Beam_model::getStiffness(int i)
227{
228 assert(i<nbModes_);
229 return stiffness_[i];
230}
231
232inline const DoubleTab& Beam_model::getDisplacement(int i) const
233{
234 assert(i<nbModes_/nb_planes_);
235 return u_(i);
236}
237inline const DoubleTab& Beam_model::getRotation(int i) const
238{
239 assert(i<nbModes_/nb_planes_);
240 return R_(i);
241
242}
243
244inline void Beam_model::setOutputPosition1D(const DoubleVect& pos)
245{
247
248}
249inline void Beam_model::setOutputPosition3D(const DoubleTab& pos)
250{
252
253}
254
255inline const Nom& Beam_model::getBeamName() const
256{
257 return beamName_;
258}
259inline void Beam_model::setBeamName(const Nom& value)
260{
261 beamName_=value;
262}
263inline void Beam_model::setFluidForceOnBeam(const DoubleTab& force)
264{
265 if (mp_norme_vect(fluidForceOnBeam_)>0. && alpha_!=0.)
266 {
267 int modes_per_plane = nbModes_ / nb_planes_;
268 for (int plane = 0; plane < nb_planes_; ++plane)
269 for (int mode = 0; mode < modes_per_plane; ++mode)
270 fluidForceOnBeam_(mode, plane)=(1.+ alpha_)*force(mode, plane) - alpha_*fluidForceOnBeam_(mode, plane);
271 }
272 else
273 {
274
275 fluidForceOnBeam_ = force;
276 }
277
278}
280{
281
282 return fluidForceOnBeam_;
283}
284
285
286inline void Beam_model::setTempsComputeForceOnBeam(const double& tps)
287{
289}
290
291inline const double& Beam_model::getTempsComputeForceOnBeam() const
292{
294}
295
296#endif /* Beam_model_included */
void setTimeScheme(const Nom &, double &)
Definition Beam_model.h:184
double getStiffness(int i)
Definition Beam_model.h:226
void setRhoBeam(const double &)
Definition Beam_model.h:179
DoubleTab qDisplacement_
Definition Beam_model.h:110
void setBendingDirection(const int &, const int &)
Definition Beam_model.h:147
double x0_
Definition Beam_model.h:124
double rho_
Definition Beam_model.h:101
void initialization()
double tempsComputeForceOnBeam_
Definition Beam_model.h:123
const int & getBendingDirection(const int &) const
Definition Beam_model.h:143
void setLongitudinalAxis(const int &)
Definition Beam_model.h:155
void setFileName(const Nom &)
void setBeamName(const Nom &)
Definition Beam_model.h:259
void readInputAbscFiles(Nom &absc_file_name)
const double & getTempsComputeForceOnBeam() const
Definition Beam_model.h:291
double getTime() const
Definition Beam_model.h:135
const DoubleTab & getDisplacement(int i) const
Definition Beam_model.h:232
void setFluidForceOnBeam(const DoubleTab &)
Definition Beam_model.h:263
DoubleTab & getVelocity(const double &tps, const double &dt)
void saveBeamForRestart() const
const int & getNbModes() const
Definition Beam_model.h:131
IntVect bending_dir_
Definition Beam_model.h:98
int nb_planes_
Definition Beam_model.h:99
void printOutputFluidForceOnBeam(bool first_writing=false) const
DoubleTab fluidForceOnBeam_
Definition Beam_model.h:122
const Nom & getBeamName() const
Definition Beam_model.h:255
void printOutputBeam1D(bool first_writing=false) const
Entree & interpreter_(Entree &) override
double temps_
Definition Beam_model.h:112
DoubleTab interpolationOnThe3DSurface(const double &x, const double &y, const double &z, const DoubleTab &u, const DoubleTab &R) const
double young_
Definition Beam_model.h:100
void readInputCIFile(Nom &CI_file_name)
void interpolationWeights(const double &, const double &, const double &, int &, int &, double &, double &) const
void setNbModes(const int &)
Definition Beam_model.h:139
DoubleVect abscissa_
Definition Beam_model.h:105
DoubleTab qAcceleration_
Definition Beam_model.h:109
double getMass(int i)
Definition Beam_model.h:221
DoubleTab qSpeed_
Definition Beam_model.h:108
const int & getLongitudinalAxis() const
Definition Beam_model.h:151
double getSoundSpeed()
Definition Beam_model.h:216
void setCenterCoordinates(const double &, const double &, const double &)
void setOutputPosition3D(const DoubleTab &)
Definition Beam_model.h:249
void printOutputBeam3D(bool first_writing=false) const
DoubleVect output_position_1D_
Definition Beam_model.h:113
void setNbplanes(const int &)
Definition Beam_model.h:163
const Nom & getFileName() const
double alpha_
Definition Beam_model.h:116
DoubleTab damping_
Definition Beam_model.h:104
const int & getNbPlanes() const
Definition Beam_model.h:159
double interpolationPhiOnThe3DSurface(const double &x, const double &y, const double &z, const int &comp, const DoubleTab &u) const
const double & getYoung() const
Definition Beam_model.h:167
void setYoung(const double &)
Definition Beam_model.h:171
SFichier displacement_out_3d_
Definition Beam_model.h:127
double dt_stab_
Definition Beam_model.h:119
DoubleTab output_position_3D_
Definition Beam_model.h:114
void readRestartFile(Nom &Restart_file_name)
void setTempsComputeForceOnBeam(const double &)
Definition Beam_model.h:286
const DoubleTab & getRotation(int i) const
Definition Beam_model.h:237
LIST(DoubleTab) u_
SFichier speed_out_3d_
Definition Beam_model.h:128
DoubleTab stiffness_
Definition Beam_model.h:103
SFichier acceleration_out_3d_
Definition Beam_model.h:129
DoubleTab & NewmarkScheme(const double &dt)
void read_beam(Entree &is)
double beta_
Definition Beam_model.h:117
void readInputMassStiffnessFiles(Nom &masse_and_stiffness_file_name)
void setOutputPosition1D(const DoubleVect &)
Definition Beam_model.h:244
LIST(DoubleTab) R_
DoubleTab mass_
Definition Beam_model.h:102
int longitudinal_axis_
Definition Beam_model.h:97
const double & getRhoBeam() const
Definition Beam_model.h:175
double y0_
Definition Beam_model.h:125
void readInputModalDeformation(Noms &modal_deformation_file_name)
double gamma_
Definition Beam_model.h:118
double z0_
Definition Beam_model.h:126
DoubleTab getFluidForceOnBeam()
Definition Beam_model.h:279
class Nom Une chaine de caractere pour nommer les objets de TRUST
Definition Nom.h:31
Un tableau de chaine de caracteres (VECT(Nom)).
Definition Noms.h:26
friend class Entree
Definition Objet_U.h:76
static void exit(int exit_code=-1)
Routine de sortie de TRUST dans une region Kokkos.
Definition Process.cpp:455
Cette classe est a la classe C++ ofstream ce que la classe Sortie est a la classe C++ ostream Elle re...
Definition SFichier.h:27