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 
207  double a;
208  double h;
210 };
211 
217 {
219  double r;
221 };
222 
223 // -------------------
224 
228 class AcousticTriangle : public virtual BaseEntity
229 {
230 public:
233 
234  node_idx n[3];
235  string volume_id;
236  shared_ptr<AcousticMaterialBase> made_of;
237  boost::shared_ptr<AcousticFaceGeomData> pFaceGeomData;
238 };
239 
240 typedef std::deque<AcousticTriangle> triangle_pool_t;
241 typedef size_t triangle_idx;
242 
243 // -------------------
244 
249 {
250 public:
252  virtual Spectrum lwAdjustment(Vector direction, double distance) = 0;
253 };
254 
255 // -------------------
260 {
261 public:
263 
264  virtual Spectrum lwAdjustment(Vector direction, double distance)
265  {
266  return Spectrum(1.0);
267  }
268 };
269 
270 // -------------------
271 
276 {
277 public:
279  CommonFaceDirectivity(const Vector& support_normal_, double support_size_)
280  : BaseEntity(), support_normal(support_normal_), support_size(support_size_)
281  {
282  }
283 
285 
287  {
288  return support_normal;
289  }
290 
291  static void set_atmosphere(AtmosphericConditions* atmosphere_)
292  {
293  atmosphere = atmosphere_;
294  }
295 
296 protected:
298  double support_size;
299 
301 };
302 
307 {
308 public:
309  VolumeFaceDirectivity(const Vector& support_normal_, double support_size_)
310  : CommonFaceDirectivity(support_normal_, support_size_)
311  {
312  }
313 
315 
316  virtual Spectrum lwAdjustment(Vector direction, double distance);
317 
318 private:
319  static const double _tabRA[];
320  static const double _tabCor[];
321 
322  double calculC(double distance);
323 };
324 //
325 // ------------------
326 //
327 #ifdef NB_KA
328  #undef NB_KA
329  #define NB_KA 38
330 #else
331  #define NB_KA 38
332 #endif
333 
334 #ifdef NB_THETA
335  #undef NB_THETA
336  #define NB_THETA 21
337 #else
338  #define NB_THETA 21
339 #endif
344 {
345 public:
346  ChimneyFaceDirectivity(const Vector& support_normal_, double support_size_)
347  : CommonFaceDirectivity(support_normal_, support_size_)
348  {
349  }
350 
352  virtual Spectrum lwAdjustment(Vector direction,
353  double distance);
354 
355 private:
356  double compute_q(int ka_idx, int theta_idx, double ka, double theta);
357 
358  static const double _tabQ[NB_KA][NB_THETA];
359 };
360 //
361 // -------------------------
362 //
364 #ifdef NB_KA
365  #undef NB_KA
366  #define NB_KA 9
367 #else
368  #define NB_KA 9
369 #endif
370 
372 #ifdef NB_THETA
373  #undef NB_THETA
374  #define NB_THETA 41
375 #else
376  #define NB_THETA 41
377 #endif
378 
383 {
384 public:
385  BaffledFaceDirectivity(const Vector& support_normal_, double support_size_)
386  : CommonFaceDirectivity(support_normal_, support_size_)
387  {
388  }
389 
391  virtual Spectrum lwAdjustment(Vector direction,
392  double distance);
393 
394 private:
395  static const double _tabQ[NB_KA][NB_THETA];
396  static const double _tabKa[NB_KA];
397 
398  double compute_q(int indice_Ka, int indice_theta, double ka, double theta);
399 
400  int find_Ka_idx(double ka);
401 };
402 
406 class AcousticSource : public virtual BaseEntity
407 {
408 public:
410  AcousticSource(const Point& point_, const Spectrum& spectrum_, SourceDirectivityInterface* directivity);
411 
412  virtual ~AcousticSource(){};
413 
417  string volume_id;
418  string face_id;
419 };
420 
421 typedef std::deque<AcousticSource> source_pool_t;
422 typedef size_t source_idx;
423 
424 // -------------------
428 class AcousticReceptor : public virtual BaseEntity
429 {
430 public:
432  AcousticReceptor(const Point& position_);
433  virtual ~AcousticReceptor(){};
434 
436 };
437 
438 typedef std::deque<AcousticReceptor> receptor_pool_t;
439 typedef size_t receptor_idx;
440 
441 // -------------------
442 
446 class GlobalContribution : public virtual BaseEntity
447 {
448 public:
450  virtual ~GlobalContribution(){};
451 
452  // XXX Add some attrs?
453 };
454 
455 // -------------------
456 
461 {
462 public:
463  DirectivityCoefficient(double value_, double theta_, double phi_,
464  bool solid_angle_);
466 
467  double value;
468  double theta;
469  double phi;
470  // XXX not sure for the type below.
472 };
473 
474 Point ComputeAcousticCentroid(const source_pool_t& tabSources_);
475 
476 } /* namespace tympan */
477 
478 #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:429
AcousticReceptor(const Point &position_)
Constructor to build a receptor defined by the its position.
Definition: entities.cpp:1108
Point position
Destructor.
Definition: entities.hpp:433
Describes an acoustic source.
Definition: entities.hpp:407
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:417
SourceDirectivityInterface * directivity
Pointer to the source directivity.
Definition: entities.hpp:416
Spectrum spectrum
Associated spectrum.
Definition: entities.hpp:415
string face_id
Face id.
Definition: entities.hpp:418
Point position
Destructor.
Definition: entities.hpp:412
virtual ~AcousticSource()
Definition: entities.hpp:412
Describing a triangle.
Definition: entities.hpp:229
node_idx n[3]
Triangle vertexes.
Definition: entities.hpp:234
shared_ptr< AcousticMaterialBase > made_of
Pointer to the material.
Definition: entities.hpp:236
boost::shared_ptr< AcousticFaceGeomData > pFaceGeomData
Definition: entities.hpp:237
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:235
Directivity for a baffled face.
Definition: entities.hpp:383
static const double _tabKa[NB_KA]
Definition: entities.hpp:396
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:395
~BaffledFaceDirectivity()
Destructor.
Definition: entities.hpp:390
BaffledFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:385
The base of all entity classes.
Directivity for a chimney face.
Definition: entities.hpp:344
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:358
ChimneyFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:346
double compute_q(int ka_idx, int theta_idx, double ka, double theta)
Definition: entities.cpp:787
~ChimneyFaceDirectivity()
Destructor.
Definition: entities.hpp:351
BaseEntity class for directivity on face.
Definition: entities.hpp:276
static AtmosphericConditions * atmosphere
Characteristic size of support face.
Definition: entities.hpp:300
double support_size
Normal of support face.
Definition: entities.hpp:298
CommonFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:279
static void set_atmosphere(AtmosphericConditions *atmosphere_)
Definition: entities.hpp:291
~CommonFaceDirectivity()
Destructor.
Definition: entities.hpp:284
Directivity coefficient.
Definition: entities.hpp:461
DirectivityCoefficient(double value_, double theta_, double phi_, bool solid_angle_)
Constructor.
Global contribution.
Definition: entities.hpp:447
Interface for source directivity classes (SphericalSourceDirectivity, CommonFaceDirectivity,...
Definition: entities.hpp:249
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:260
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a spherical source.
Definition: entities.hpp:264
Directivity for a volume face.
Definition: entities.hpp:307
double calculC(double distance)
Compute directivity factor.
Definition: entities.cpp:540
~VolumeFaceDirectivity()
Destructor.
Definition: entities.hpp:314
VolumeFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:309
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:319
static const double _tabCor[]
Correction factors.
Definition: entities.hpp:320
Common utilities and includes for all data models.
#define NB_KA
Number of KA values in the array.
Definition: entities.hpp:366
#define NB_THETA
Number of theta values in the array.
Definition: entities.hpp:374
std::complex< double > TYComplex
Definition: macros.h:25
OSpectreComplex ComplexSpectrum
std::deque< AcousticSource > source_pool_t
Array of sources.
Definition: entities.hpp:421
size_t triangle_idx
Definition: entities.hpp:241
size_t source_idx
Definition: entities.hpp:422
Point ComputeAcousticCentroid(const source_pool_t &tabSources_)
Definition: entities.cpp:1110
std::deque< AcousticReceptor > receptor_pool_t
Array of receptors.
Definition: entities.hpp:438
OSpectre Spectrum
size_t receptor_idx
Definition: entities.hpp:439
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:240
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:217
OPoint3D M
Center of the cylinder.
Definition: entities.hpp:218
double r
Radius of the cylinder.
Definition: entities.hpp:219
OVector3D axis
Axis of the cylinder.
Definition: entities.hpp:220
Data structure to store geometrical data of the surface from which comes a triangle.
Definition: entities.hpp:204
double h
Vertical extension of the surface.
Definition: entities.hpp:208
double a
Horizontal extension of the surface.
Definition: entities.hpp:207
OVector3D n
Normal to the surface.
Definition: entities.hpp:209