Code_TYMPAN  4.4.0
Industrial site acoustic simulation
entities.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) <2012-2024> <EDF-DTG> <FRANCE>
3  * This file is part of Code_TYMPAN (R).
4  * Code_TYMPAN (R) is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  * Code_TYMPAN (R) is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11  * See the GNU General Public License for more details.
12  * You should have received a copy of the GNU General Public License along
13  * with Code_TYMPAN (R). If not, see <https://www.gnu.org/licenses/>.
14  */
15 
25 #ifndef TYMPAN__ENTITIES_H__INCLUDED
26 #define TYMPAN__ENTITIES_H__INCLUDED
27 
28 #include "data_model_common.hpp"
30 
31 namespace tympan
32 {
36 class AcousticMaterialBase : public virtual BaseEntity
37 {
38 public:
40  AcousticMaterialBase(const string& name_);
42  virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
43  {
44  return ComplexSpectrum();
45  }
46  virtual double get_ISO9613_G()
47  {
48  return 0.0;
49  }
50  string name;
51 
52 }; // class AcousticMaterialBase
53 
54 // TODO Or use boost pointers container ?
55 typedef shared_ptr<AcousticMaterialBase> material_ptr_t;
56 typedef std::deque<material_ptr_t> material_pool_t;
57 
58 // -------------------
59 
64 {
65 public:
67  AcousticBuildingMaterial(const string& name_, const ComplexSpectrum& spectrum);
70 
75  virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
76  {
77  return spectrum;
78  }
79 
80  ComplexSpectrum asEyring() const;
81 
83 };
84 
85 // -------------------
86 
91 {
92 public:
94  AcousticGroundMaterial(const string& name_, double resistivity_, double deviation_, double length_,
95  double factor_g_);
98 
106  virtual ComplexSpectrum get_absorption(double incidence_angle, double length);
107 
108  const ComplexSpectrum& get_Zc() const
109  {
110  return Zc;
111  }
112  const ComplexSpectrum& get_K() const
113  {
114  return K;
115  }
116 
117  void set_thickness(double thickness_)
118  {
119  thickness = thickness_;
120  }
121  void set_deviation(double deviation_)
122  {
123  deviation = deviation_;
124  }
125  void set_length(double length_)
126  {
127  length = length_;
128  }
129  double get_ISO9613_G();
130 
131  static void set_atmosphere(AtmosphericConditions* atmosphere_)
132  {
133  atmosphere = atmosphere_;
134  }
135 
146  bool compare(const string& name, double resistivity, double deviation, double length, double factor_g);
147 
148 protected:
149  void computeZc();
150  void computeK();
151  void computeZs(double angle, ComplexSpectrum Z,
152  ComplexSpectrum& spectrum);
153  void computeZf(double angle, ComplexSpectrum Zs);
154  void computeRp(double angle, const ComplexSpectrum& Zs,
155  ComplexSpectrum& Rp);
156  void computeW(double angle, double length, const ComplexSpectrum& Zs,
157  ComplexSpectrum& W);
158  void computeFw(ComplexSpectrum localW, ComplexSpectrum& Fw);
159  void computeQ(double angle, ComplexSpectrum& Rp, ComplexSpectrum& Fw,
160  ComplexSpectrum& Q);
161 
163 
164 private:
165  void init();
166 
170  TYComplex erfcCas1(const TYComplex& wValue) const;
171  TYComplex erfcCas2(const TYComplex& wValue) const;
172  TYComplex erfcCas3(const TYComplex& wValue) const;
173 
177  TYComplex sgnReIm(const TYComplex& W, const TYComplex& G) const;
178 
179  void limit_W_values(ComplexSpectrum& localW);
180  void erfc_G_computation(const ComplexSpectrum& localW, ComplexSpectrum& G);
181  void sgn_G_computation(const ComplexSpectrum& localW, ComplexSpectrum& G);
182  double gaussianSpectrum(double const k, double const sigma, double const lc);
183  double trapz(std::vector<double> u, std::vector<double> integrande);
184 
185 protected:
187  double resistivity;
188  double thickness;
189  double deviation;
190  double length;
191  double factor_g;
192 
196 };
197 
198 // -------------------
199 
204 {
206 
208 };
209 
215 {
216  double a;
217  double h;
218 };
219 
225 {
227  double r;
229 };
230 
231 // -------------------
232 
236 class AcousticTriangle : public virtual BaseEntity
237 {
238 public:
241 
242  node_idx n[3];
243  string volume_id;
244  shared_ptr<AcousticMaterialBase> made_of;
245  boost::shared_ptr<AcousticFaceGeomData> pFaceGeomData;
246 };
247 
248 typedef std::deque<AcousticTriangle> triangle_pool_t;
249 typedef size_t triangle_idx;
250 
251 // -------------------
252 
257 {
258 public:
260  virtual Spectrum lwAdjustment(Vector direction, double distance) = 0;
261 };
262 
263 // -------------------
268 {
269 public:
271 
272  virtual Spectrum lwAdjustment(Vector direction, double distance)
273  {
274  return Spectrum(1.0);
275  }
276 };
277 
278 // -------------------
279 
284 {
285 public:
287  CommonFaceDirectivity(const Vector& support_normal_, double support_size_)
288  : BaseEntity(), support_normal(support_normal_), support_size(support_size_)
289  {
290  }
291 
293 
295  {
296  return support_normal;
297  }
298 
299  static void set_atmosphere(AtmosphericConditions* atmosphere_)
300  {
301  atmosphere = atmosphere_;
302  }
303 
304 protected:
306  double support_size;
307 
309 };
310 
315 {
316 public:
317  VolumeFaceDirectivity(const Vector& support_normal_, double support_size_)
318  : CommonFaceDirectivity(support_normal_, support_size_)
319  {
320  }
321 
323 
324  virtual Spectrum lwAdjustment(Vector direction, double distance);
325 
326 private:
327  static const double _tabRA[];
328  static const double _tabCor[];
329 
330  double calculC(double distance);
331 };
332 //
333 // ------------------
334 //
335 #ifdef NB_KA
336  #undef NB_KA
337  #define NB_KA 38
338 #else
339  #define NB_KA 38
340 #endif
341 
342 #ifdef NB_THETA
343  #undef NB_THETA
344  #define NB_THETA 21
345 #else
346  #define NB_THETA 21
347 #endif
352 {
353 public:
354  ChimneyFaceDirectivity(const Vector& support_normal_, double support_size_)
355  : CommonFaceDirectivity(support_normal_, support_size_)
356  {
357  }
358 
360  virtual Spectrum lwAdjustment(Vector direction,
361  double distance);
362 
363 private:
364  double compute_q(int ka_idx, int theta_idx, double ka, double theta);
365 
366  static const double _tabQ[NB_KA][NB_THETA];
367 };
368 //
369 // -------------------------
370 //
372 #ifdef NB_KA
373  #undef NB_KA
374  #define NB_KA 9
375 #else
376  #define NB_KA 9
377 #endif
378 
380 #ifdef NB_THETA
381  #undef NB_THETA
382  #define NB_THETA 41
383 #else
384  #define NB_THETA 41
385 #endif
386 
391 {
392 public:
393  BaffledFaceDirectivity(const Vector& support_normal_, double support_size_)
394  : CommonFaceDirectivity(support_normal_, support_size_)
395  {
396  }
397 
399  virtual Spectrum lwAdjustment(Vector direction,
400  double distance);
401 
402 private:
403  static const double _tabQ[NB_KA][NB_THETA];
404  static const double _tabKa[NB_KA];
405 
406  double compute_q(int indice_Ka, int indice_theta, double ka, double theta);
407 
408  int find_Ka_idx(double ka);
409 };
410 
414 class AcousticSource : public virtual BaseEntity
415 {
416 public:
418  AcousticSource(const Point& point_, const Spectrum& spectrum_, SourceDirectivityInterface* directivity);
419 
420  virtual ~AcousticSource(){};
421 
425  string volume_id;
426  string face_id;
427 };
428 
429 typedef std::deque<AcousticSource> source_pool_t;
430 typedef size_t source_idx;
431 
432 // -------------------
436 class AcousticReceptor : public virtual BaseEntity
437 {
438 public:
440  AcousticReceptor(const Point& position_);
441  virtual ~AcousticReceptor(){};
442 
444 };
445 
446 typedef std::deque<AcousticReceptor> receptor_pool_t;
447 typedef size_t receptor_idx;
448 
449 // -------------------
450 
454 class GlobalContribution : public virtual BaseEntity
455 {
456 public:
458  virtual ~GlobalContribution(){};
459 
460  // XXX Add some attrs?
461 };
462 
463 // -------------------
464 
469 {
470 public:
471  DirectivityCoefficient(double value_, double theta_, double phi_,
472  bool solid_angle_);
474 
475  double value;
476  double theta;
477  double phi;
478  // XXX not sure for the type below.
480 };
481 
482 Point ComputeAcousticCentroid(const source_pool_t& tabSources_);
483 
484 } /* namespace tympan */
485 
486 #endif /* TYMPAN__ENTITIES_H__INCLUDED */
Class for the definition of atmospheric conditions.
The 3D point class.
Definition: 3d.h:487
The 3D vector class.
Definition: 3d.h:298
Describes building material.
Definition: entities.hpp:64
AcousticBuildingMaterial(const string &name_, const ComplexSpectrum &spectrum)
Constructor.
Definition: entities.cpp:38
virtual ~AcousticBuildingMaterial()
Destructor.
Definition: entities.hpp:69
ComplexSpectrum asEyring() const
Returns a spectrum with Eyring formulae.
Definition: entities.cpp:43
virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
: Get material absorption at reflection point
Definition: entities.hpp:75
ComplexSpectrum spectrum
Spectrum to store acoustic values at different frequencies.
Definition: entities.hpp:82
Describes the ground material, a specific AcousticBuildingMaterial.
Definition: entities.hpp:91
double get_ISO9613_G()
Absorption given by ISO9613.
Definition: entities.cpp:90
ComplexSpectrum K
Wave number.
Definition: entities.hpp:194
void sgn_G_computation(const ComplexSpectrum &localW, ComplexSpectrum &G)
Definition: entities.cpp:366
void computeW(double angle, double length, const ComplexSpectrum &Zs, ComplexSpectrum &W)
Compute numeric distance.
Definition: entities.cpp:267
void set_length(double length_)
Set wave length.
Definition: entities.hpp:125
void computeZs(double angle, ComplexSpectrum Z, ComplexSpectrum &spectrum)
Compute specific impedance.
Definition: entities.cpp:130
void set_deviation(double deviation_)
Set deviation.
Definition: entities.hpp:121
TYComplex erfcCas1(const TYComplex &wValue) const
: Functions used in Fw computation
Definition: entities.cpp:428
void computeZc()
Compute characteristic impedance.
Definition: entities.cpp:95
static AtmosphericConditions * atmosphere
Pointer to current atmosphere.
Definition: entities.hpp:162
void limit_W_values(ComplexSpectrum &localW)
Definition: entities.cpp:318
ComplexSpectrum Zf
Effective impedance.
Definition: entities.hpp:195
double trapz(std::vector< double > u, std::vector< double > integrande)
Definition: entities.cpp:241
double gaussianSpectrum(double const k, double const sigma, double const lc)
Definition: entities.cpp:236
virtual ~AcousticGroundMaterial()
Destructor.
Definition: entities.hpp:97
TYComplex erfcCas2(const TYComplex &wValue) const
Definition: entities.cpp:497
AcousticGroundMaterial(const string &name_, double resistivity_, double deviation_, double length_, double factor_g_)
Constructor.
Definition: entities.cpp:51
void set_thickness(double thickness_)
Set thickness.
Definition: entities.hpp:117
static void set_atmosphere(AtmosphericConditions *atmosphere_)
Set pointer to current atmosphere.
Definition: entities.hpp:131
const ComplexSpectrum & get_K() const
Get wave number.
Definition: entities.hpp:112
virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
Get material absorption at reflection point.
Definition: entities.cpp:74
void computeK()
Compute wave number.
Definition: entities.cpp:111
ComplexSpectrum Zc
Characteristic impedance.
Definition: entities.hpp:193
TYComplex erfcCas3(const TYComplex &wValue) const
Definition: entities.cpp:508
TYComplex sgnReIm(const TYComplex &W, const TYComplex &G) const
: function used in G computation
Definition: entities.cpp:519
void computeFw(ComplexSpectrum localW, ComplexSpectrum &Fw)
Compute function of numeric distance.
Definition: entities.cpp:290
const ComplexSpectrum & get_Zc() const
Get characteristic impedance.
Definition: entities.hpp:108
void erfc_G_computation(const ComplexSpectrum &localW, ComplexSpectrum &G)
Definition: entities.cpp:337
void computeZf(double angle, ComplexSpectrum Zs)
Compute effective impedance in rough ground.
Definition: entities.cpp:153
void computeRp(double angle, const ComplexSpectrum &Zs, ComplexSpectrum &Rp)
Compute reflection coefficient for plane waves.
Definition: entities.cpp:250
void computeQ(double angle, ComplexSpectrum &Rp, ComplexSpectrum &Fw, ComplexSpectrum &Q)
Compute reflection coefficient.
Definition: entities.cpp:411
bool compare(const string &name, double resistivity, double deviation, double length, double factor_g)
Compare this AcousticGroundMaterial to another one.
Definition: entities.cpp:65
Base class for material.
Definition: entities.hpp:37
string name
Material name.
Definition: entities.hpp:50
AcousticMaterialBase(const string &name_)
Constructor.
Definition: entities.cpp:33
virtual double get_ISO9613_G()
Definition: entities.hpp:46
virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
Virtual method to return material absorption at reflection point.
Definition: entities.hpp:42
Describes an acoustic receptor.
Definition: entities.hpp:437
AcousticReceptor(const Point &position_)
Constructor to build a receptor defined by the its position.
Definition: entities.cpp:1108
Point position
Destructor.
Definition: entities.hpp:441
Describes an acoustic source.
Definition: entities.hpp:415
AcousticSource(const Point &point_, const Spectrum &spectrum_, SourceDirectivityInterface *directivity)
Constructor to build a source defined by a point, spectrum, directivity.
Definition: entities.cpp:1100
string volume_id
Volume id.
Definition: entities.hpp:425
SourceDirectivityInterface * directivity
Pointer to the source directivity.
Definition: entities.hpp:424
Spectrum spectrum
Associated spectrum.
Definition: entities.hpp:423
string face_id
Face id.
Definition: entities.hpp:426
Point position
Destructor.
Definition: entities.hpp:420
virtual ~AcousticSource()
Definition: entities.hpp:420
Describing a triangle.
Definition: entities.hpp:237
node_idx n[3]
Triangle vertexes.
Definition: entities.hpp:242
shared_ptr< AcousticMaterialBase > made_of
Pointer to the material.
Definition: entities.hpp:244
boost::shared_ptr< AcousticFaceGeomData > pFaceGeomData
Definition: entities.hpp:245
AcousticTriangle(node_idx n1, node_idx n2, node_idx n3)
Constructor with the 3 vertexes of the triangle.
string volume_id
Volume id.
Definition: entities.hpp:243
Directivity for a baffled face.
Definition: entities.hpp:391
static const double _tabKa[NB_KA]
Definition: entities.hpp:404
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a baffled face source.
Definition: entities.cpp:1030
double compute_q(int indice_Ka, int indice_theta, double ka, double theta)
Definition: entities.cpp:1066
static const double _tabQ[NB_KA][NB_THETA]
Definition: entities.hpp:403
~BaffledFaceDirectivity()
Destructor.
Definition: entities.hpp:398
BaffledFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:393
The base of all entity classes.
Directivity for a chimney face.
Definition: entities.hpp:352
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a chimney face source.
Definition: entities.cpp:754
static const double _tabQ[NB_KA][NB_THETA]
Definition: entities.hpp:366
ChimneyFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:354
double compute_q(int ka_idx, int theta_idx, double ka, double theta)
Definition: entities.cpp:787
~ChimneyFaceDirectivity()
Destructor.
Definition: entities.hpp:359
BaseEntity class for directivity on face.
Definition: entities.hpp:284
static AtmosphericConditions * atmosphere
Characteristic size of support face.
Definition: entities.hpp:308
double support_size
Normal of support face.
Definition: entities.hpp:306
CommonFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:287
static void set_atmosphere(AtmosphericConditions *atmosphere_)
Definition: entities.hpp:299
~CommonFaceDirectivity()
Destructor.
Definition: entities.hpp:292
Directivity coefficient.
Definition: entities.hpp:469
DirectivityCoefficient(double value_, double theta_, double phi_, bool solid_angle_)
Constructor.
Global contribution.
Definition: entities.hpp:455
Interface for source directivity classes (SphericalSourceDirectivity, CommonFaceDirectivity,...
Definition: entities.hpp:257
virtual Spectrum lwAdjustment(Vector direction, double distance)=0
< Pure virtual method to return directivity of the Source
Directivity for a spherical source.
Definition: entities.hpp:268
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a spherical source.
Definition: entities.hpp:272
Directivity for a volume face.
Definition: entities.hpp:315
double calculC(double distance)
Compute directivity factor.
Definition: entities.cpp:540
~VolumeFaceDirectivity()
Destructor.
Definition: entities.hpp:322
VolumeFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:317
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a volume face.
Definition: entities.cpp:563
static const double _tabRA[]
RA form factor.
Definition: entities.hpp:327
static const double _tabCor[]
Correction factors.
Definition: entities.hpp:328
Common utilities and includes for all data models.
#define NB_KA
Number of KA values in the array.
Definition: entities.hpp:374
#define NB_THETA
Number of theta values in the array.
Definition: entities.hpp:382
std::complex< double > TYComplex
Definition: macros.h:25
OSpectreComplex ComplexSpectrum
std::deque< AcousticSource > source_pool_t
Array of sources.
Definition: entities.hpp:429
size_t triangle_idx
Definition: entities.hpp:249
size_t source_idx
Definition: entities.hpp:430
Point ComputeAcousticCentroid(const source_pool_t &tabSources_)
Definition: entities.cpp:1110
std::deque< AcousticReceptor > receptor_pool_t
Array of receptors.
Definition: entities.hpp:446
OSpectre Spectrum
size_t receptor_idx
Definition: entities.hpp:447
std::deque< material_ptr_t > material_pool_t
Definition: entities.hpp:56
shared_ptr< AcousticMaterialBase > material_ptr_t
Definition: entities.hpp:55
std::deque< AcousticTriangle > triangle_pool_t
Array of AcousticTriangle.
Definition: entities.hpp:248
size_t node_idx
Data structure to store geometrical data of the surface from which comes a triangle issued from a cyl...
Definition: entities.hpp:225
OPoint3D M
Center of the cylinder.
Definition: entities.hpp:226
double r
Radius of the cylinder.
Definition: entities.hpp:227
OVector3D axis
Axis of the cylinder.
Definition: entities.hpp:228
Data structure to store geometrical data of the surface from which comes a triangle issued from infra...
Definition: entities.hpp:215
double a
Horizontal extension of the surface.
Definition: entities.hpp:216
double h
Vertical extension of the surface.
Definition: entities.hpp:217
Data structure to store geometrical data of the surface from which comes a triangle.
Definition: entities.hpp:204
OVector3D n
Normal to the surface.
Definition: entities.hpp:207