Code_TYMPAN  4.4.0
Industrial site acoustic simulation
entities.hpp
Go to the documentation of this file.
1 
10 #ifndef TYMPAN__ENTITIES_H__INCLUDED
11 #define TYMPAN__ENTITIES_H__INCLUDED
12 
13 #include "data_model_common.hpp"
15 
16 namespace tympan
17 {
21 class AcousticMaterialBase : public virtual BaseEntity
22 {
23 public:
25  AcousticMaterialBase(const string& name_);
27  virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
28  {
29  return ComplexSpectrum();
30  }
31  virtual double get_ISO9613_G()
32  {
33  return 0.0;
34  }
35  string name;
36 
37 }; // class AcousticMaterialBase
38 
39 // TODO Or use boost pointers container ?
40 typedef shared_ptr<AcousticMaterialBase> material_ptr_t;
41 typedef std::deque<material_ptr_t> material_pool_t;
42 
43 // -------------------
44 
49 {
50 public:
52  AcousticBuildingMaterial(const string& name_, const ComplexSpectrum& spectrum);
55 
60  virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
61  {
62  return spectrum;
63  }
64 
65  ComplexSpectrum asEyring() const;
66 
68 };
69 
70 // -------------------
71 
76 {
77 public:
79  AcousticGroundMaterial(const string& name_, double resistivity_, double deviation_, double length_,
80  double factor_g_);
83 
91  virtual ComplexSpectrum get_absorption(double incidence_angle, double length);
92 
93  const ComplexSpectrum& get_Zc() const
94  {
95  return Zc;
96  }
97  const ComplexSpectrum& get_K() const
98  {
99  return K;
100  }
101 
102  void set_thickness(double thickness_)
103  {
104  thickness = thickness_;
105  }
106  void set_deviation(double deviation_)
107  {
108  deviation = deviation_;
109  }
110  void set_length(double length_)
111  {
112  length = length_;
113  }
114  double get_ISO9613_G();
115 
116  static void set_atmosphere(AtmosphericConditions* atmosphere_)
117  {
118  atmosphere = atmosphere_;
119  }
120 
131  bool compare(const string& name, double resistivity, double deviation, double length, double factor_g);
132 
133 protected:
134  void computeZc();
135  void computeK();
136  void computeZs(double angle, ComplexSpectrum Z,
137  ComplexSpectrum& spectrum);
138  void computeZf(double angle, ComplexSpectrum Zs);
139  void computeRp(double angle, const ComplexSpectrum& Zs,
140  ComplexSpectrum& Rp);
141  void computeW(double angle, double length, const ComplexSpectrum& Zs,
142  ComplexSpectrum& W);
143  void computeFw(ComplexSpectrum localW, ComplexSpectrum& Fw);
144  void computeQ(double angle, ComplexSpectrum& Rp, ComplexSpectrum& Fw,
145  ComplexSpectrum& Q);
146 
148 
149 private:
150  void init();
151 
155  TYComplex erfcCas1(const TYComplex& wValue) const;
156  TYComplex erfcCas2(const TYComplex& wValue) const;
157  TYComplex erfcCas3(const TYComplex& wValue) const;
158 
162  TYComplex sgnReIm(const TYComplex& W, const TYComplex& G) const;
163 
164  void limit_W_values(ComplexSpectrum& localW);
165  void erfc_G_computation(const ComplexSpectrum& localW, ComplexSpectrum& G);
166  void sgn_G_computation(const ComplexSpectrum& localW, ComplexSpectrum& G);
167  double gaussianSpectrum(double const k, double const sigma, double const lc);
168  double trapz(std::vector<double> u, std::vector<double> integrande);
169 
170 protected:
172  double resistivity;
173  double thickness;
174  double deviation;
175  double length;
176  double factor_g;
177 
181 };
182 
183 // -------------------
184 
188 class AcousticTriangle : public virtual BaseEntity
189 {
190 public:
193 
194  node_idx n[3];
195  string volume_id;
196  shared_ptr<AcousticMaterialBase> made_of;
197 };
198 
199 typedef std::deque<AcousticTriangle> triangle_pool_t;
200 typedef size_t triangle_idx;
201 
202 // -------------------
203 
208 {
209 public:
211  virtual Spectrum lwAdjustment(Vector direction, double distance) = 0;
212 };
213 
214 // -------------------
219 {
220 public:
222 
223  virtual Spectrum lwAdjustment(Vector direction, double distance)
224  {
225  return Spectrum(1.0);
226  }
227 };
228 
229 // -------------------
230 
235 {
236 public:
238  CommonFaceDirectivity(const Vector& support_normal_, double support_size_)
239  : BaseEntity(), support_normal(support_normal_), support_size(support_size_)
240  {
241  }
242 
244 
246  {
247  return support_normal;
248  }
249 
250  static void set_atmosphere(AtmosphericConditions* atmosphere_)
251  {
252  atmosphere = atmosphere_;
253  }
254 
255 protected:
257  double support_size;
258 
260 };
261 
266 {
267 public:
268  VolumeFaceDirectivity(const Vector& support_normal_, double support_size_)
269  : CommonFaceDirectivity(support_normal_, support_size_)
270  {
271  }
272 
274 
275  virtual Spectrum lwAdjustment(Vector direction, double distance);
276 
277 private:
278  static const double _tabRA[];
279  static const double _tabCor[];
280 
281  double calculC(double distance);
282 };
283 //
284 // ------------------
285 //
286 #ifdef NB_KA
287  #undef NB_KA
288  #define NB_KA 38
289 #else
290  #define NB_KA 38
291 #endif
292 
293 #ifdef NB_THETA
294  #undef NB_THETA
295  #define NB_THETA 21
296 #else
297  #define NB_THETA 21
298 #endif
303 {
304 public:
305  ChimneyFaceDirectivity(const Vector& support_normal_, double support_size_)
306  : CommonFaceDirectivity(support_normal_, support_size_)
307  {
308  }
309 
311  virtual Spectrum lwAdjustment(Vector direction,
312  double distance);
313 
314 private:
315  double compute_q(int ka_idx, int theta_idx, double ka, double theta);
316 
317  static const double _tabQ[NB_KA][NB_THETA];
318 };
319 //
320 // -------------------------
321 //
323 #ifdef NB_KA
324  #undef NB_KA
325  #define NB_KA 9
326 #else
327  #define NB_KA 9
328 #endif
329 
331 #ifdef NB_THETA
332  #undef NB_THETA
333  #define NB_THETA 41
334 #else
335  #define NB_THETA 41
336 #endif
337 
342 {
343 public:
344  BaffledFaceDirectivity(const Vector& support_normal_, double support_size_)
345  : CommonFaceDirectivity(support_normal_, support_size_)
346  {
347  }
348 
350  virtual Spectrum lwAdjustment(Vector direction,
351  double distance);
352 
353 private:
354  static const double _tabQ[NB_KA][NB_THETA];
355  static const double _tabKa[NB_KA];
356 
357  double compute_q(int indice_Ka, int indice_theta, double ka, double theta);
358 
359  int find_Ka_idx(double ka);
360 };
361 
365 class AcousticSource : public virtual BaseEntity
366 {
367 public:
369  AcousticSource(const Point& point_, const Spectrum& spectrum_, SourceDirectivityInterface* directivity);
370 
371  virtual ~AcousticSource(){};
372 
376  string volume_id;
377  string face_id;
378 };
379 
380 typedef std::deque<AcousticSource> source_pool_t;
381 typedef size_t source_idx;
382 
383 // -------------------
387 class AcousticReceptor : public virtual BaseEntity
388 {
389 public:
391  AcousticReceptor(const Point& position_);
392  virtual ~AcousticReceptor(){};
393 
395 };
396 
397 typedef std::deque<AcousticReceptor> receptor_pool_t;
398 typedef size_t receptor_idx;
399 
400 // -------------------
401 
405 class GlobalContribution : public virtual BaseEntity
406 {
407 public:
409  virtual ~GlobalContribution(){};
410 
411  // XXX Add some attrs?
412 };
413 
414 // -------------------
415 
420 {
421 public:
422  DirectivityCoefficient(double value_, double theta_, double phi_,
423  bool solid_angle_);
425 
426  double value;
427  double theta;
428  double phi;
429  // XXX not sure for the type below.
431 };
432 
433 Point ComputeAcousticCentroid(const source_pool_t& tabSources_);
434 
435 } /* namespace tympan */
436 
437 #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:49
AcousticBuildingMaterial(const string &name_, const ComplexSpectrum &spectrum)
Constructor.
Definition: entities.cpp:23
virtual ~AcousticBuildingMaterial()
Destructor.
Definition: entities.hpp:54
ComplexSpectrum asEyring() const
Returns a spectrum with Eyring formulae.
Definition: entities.cpp:28
virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
: Get material absorption at reflection point
Definition: entities.hpp:60
ComplexSpectrum spectrum
Spectrum to store acoustic values at different frequencies.
Definition: entities.hpp:67
Describes the ground material, a specific AcousticBuildingMaterial.
Definition: entities.hpp:76
double get_ISO9613_G()
Absorption given by ISO9613.
Definition: entities.cpp:76
ComplexSpectrum K
Wave number.
Definition: entities.hpp:179
void sgn_G_computation(const ComplexSpectrum &localW, ComplexSpectrum &G)
Definition: entities.cpp:352
void computeW(double angle, double length, const ComplexSpectrum &Zs, ComplexSpectrum &W)
Compute numeric distance.
Definition: entities.cpp:253
void set_length(double length_)
Set wave length.
Definition: entities.hpp:110
void computeZs(double angle, ComplexSpectrum Z, ComplexSpectrum &spectrum)
Compute specific impedance.
Definition: entities.cpp:116
void set_deviation(double deviation_)
Set deviation.
Definition: entities.hpp:106
TYComplex erfcCas1(const TYComplex &wValue) const
: Functions used in Fw computation
Definition: entities.cpp:414
void computeZc()
Compute characteristic impedance.
Definition: entities.cpp:81
static AtmosphericConditions * atmosphere
Pointer to current atmosphere.
Definition: entities.hpp:147
void limit_W_values(ComplexSpectrum &localW)
Definition: entities.cpp:304
ComplexSpectrum Zf
Effective impedance.
Definition: entities.hpp:180
double trapz(std::vector< double > u, std::vector< double > integrande)
Definition: entities.cpp:227
double gaussianSpectrum(double const k, double const sigma, double const lc)
Definition: entities.cpp:222
virtual ~AcousticGroundMaterial()
Destructor.
Definition: entities.hpp:82
TYComplex erfcCas2(const TYComplex &wValue) const
Definition: entities.cpp:483
AcousticGroundMaterial(const string &name_, double resistivity_, double deviation_, double length_, double factor_g_)
Constructor.
Definition: entities.cpp:37
void set_thickness(double thickness_)
Set thickness.
Definition: entities.hpp:102
static void set_atmosphere(AtmosphericConditions *atmosphere_)
Set pointer to current atmosphere.
Definition: entities.hpp:116
const ComplexSpectrum & get_K() const
Get wave number.
Definition: entities.hpp:97
virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
Get material absorption at reflection point.
Definition: entities.cpp:60
void computeK()
Compute wave number.
Definition: entities.cpp:97
ComplexSpectrum Zc
Characteristic impedance.
Definition: entities.hpp:178
TYComplex erfcCas3(const TYComplex &wValue) const
Definition: entities.cpp:494
TYComplex sgnReIm(const TYComplex &W, const TYComplex &G) const
: function used in G computation
Definition: entities.cpp:505
void computeFw(ComplexSpectrum localW, ComplexSpectrum &Fw)
Compute function of numeric distance.
Definition: entities.cpp:276
const ComplexSpectrum & get_Zc() const
Get characteristic impedance.
Definition: entities.hpp:93
void erfc_G_computation(const ComplexSpectrum &localW, ComplexSpectrum &G)
Definition: entities.cpp:323
void computeZf(double angle, ComplexSpectrum Zs)
Compute effective impedance in rough ground.
Definition: entities.cpp:139
void computeRp(double angle, const ComplexSpectrum &Zs, ComplexSpectrum &Rp)
Compute reflection coefficient for plane waves.
Definition: entities.cpp:236
void computeQ(double angle, ComplexSpectrum &Rp, ComplexSpectrum &Fw, ComplexSpectrum &Q)
Compute reflection coefficient.
Definition: entities.cpp:397
bool compare(const string &name, double resistivity, double deviation, double length, double factor_g)
Compare this AcousticGroundMaterial to another one.
Definition: entities.cpp:51
Base class for material.
Definition: entities.hpp:22
string name
Material name.
Definition: entities.hpp:35
AcousticMaterialBase(const string &name_)
Constructor.
Definition: entities.cpp:18
virtual double get_ISO9613_G()
Definition: entities.hpp:31
virtual ComplexSpectrum get_absorption(double incidence_angle, double length)
Virtual method to return material absorption at reflection point.
Definition: entities.hpp:27
Describes an acoustic receptor.
Definition: entities.hpp:388
AcousticReceptor(const Point &position_)
Constructor to build a receptor defined by the its position.
Definition: entities.cpp:1094
Point position
Destructor.
Definition: entities.hpp:392
Describes an acoustic source.
Definition: entities.hpp:366
AcousticSource(const Point &point_, const Spectrum &spectrum_, SourceDirectivityInterface *directivity)
Constructor to build a source defined by a point, spectrum, directivity.
Definition: entities.cpp:1086
string volume_id
Volume id.
Definition: entities.hpp:376
SourceDirectivityInterface * directivity
Pointer to the source directivity.
Definition: entities.hpp:375
Spectrum spectrum
Associated spectrum.
Definition: entities.hpp:374
string face_id
Face id.
Definition: entities.hpp:377
Point position
Destructor.
Definition: entities.hpp:371
virtual ~AcousticSource()
Definition: entities.hpp:371
Describing a triangle.
Definition: entities.hpp:189
node_idx n[3]
Triangle vertexes.
Definition: entities.hpp:194
shared_ptr< AcousticMaterialBase > made_of
Pointer to the material.
Definition: entities.hpp:196
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:195
Directivity for a baffled face.
Definition: entities.hpp:342
static const double _tabKa[NB_KA]
Definition: entities.hpp:355
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a baffled face source.
Definition: entities.cpp:1016
double compute_q(int indice_Ka, int indice_theta, double ka, double theta)
Definition: entities.cpp:1052
static const double _tabQ[NB_KA][NB_THETA]
Definition: entities.hpp:354
~BaffledFaceDirectivity()
Destructor.
Definition: entities.hpp:349
BaffledFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:344
The base of all entity classes.
Directivity for a chimney face.
Definition: entities.hpp:303
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a chimney face source.
Definition: entities.cpp:740
static const double _tabQ[NB_KA][NB_THETA]
Definition: entities.hpp:317
ChimneyFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:305
double compute_q(int ka_idx, int theta_idx, double ka, double theta)
Definition: entities.cpp:773
~ChimneyFaceDirectivity()
Destructor.
Definition: entities.hpp:310
BaseEntity class for directivity on face.
Definition: entities.hpp:235
static AtmosphericConditions * atmosphere
Characteristic size of support face.
Definition: entities.hpp:259
double support_size
Normal of support face.
Definition: entities.hpp:257
CommonFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:238
static void set_atmosphere(AtmosphericConditions *atmosphere_)
Definition: entities.hpp:250
~CommonFaceDirectivity()
Destructor.
Definition: entities.hpp:243
Directivity coefficient.
Definition: entities.hpp:420
DirectivityCoefficient(double value_, double theta_, double phi_, bool solid_angle_)
Constructor.
Global contribution.
Definition: entities.hpp:406
Interface for source directivity classes (SphericalSourceDirectivity, CommonFaceDirectivity,...
Definition: entities.hpp:208
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:219
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a spherical source.
Definition: entities.hpp:223
Directivity for a volume face.
Definition: entities.hpp:266
double calculC(double distance)
Compute directivity factor.
Definition: entities.cpp:526
~VolumeFaceDirectivity()
Destructor.
Definition: entities.hpp:273
VolumeFaceDirectivity(const Vector &support_normal_, double support_size_)
Constructor.
Definition: entities.hpp:268
virtual Spectrum lwAdjustment(Vector direction, double distance)
Directivity of a volume face.
Definition: entities.cpp:549
static const double _tabRA[]
RA form factor.
Definition: entities.hpp:278
static const double _tabCor[]
Correction factors.
Definition: entities.hpp:279
Common utilities and includes for all data models.
#define NB_KA
Number of KA values in the array.
Definition: entities.hpp:325
#define NB_THETA
Number of theta values in the array.
Definition: entities.hpp:333
std::complex< double > TYComplex
Definition: macros.h:25
OSpectreComplex ComplexSpectrum
std::deque< AcousticSource > source_pool_t
Array of sources.
Definition: entities.hpp:380
size_t triangle_idx
Definition: entities.hpp:200
size_t source_idx
Definition: entities.hpp:381
Point ComputeAcousticCentroid(const source_pool_t &tabSources_)
Definition: entities.cpp:1096
std::deque< AcousticReceptor > receptor_pool_t
Array of receptors.
Definition: entities.hpp:397
OSpectre Spectrum
size_t receptor_idx
Definition: entities.hpp:398
std::deque< material_ptr_t > material_pool_t
Definition: entities.hpp:41
shared_ptr< AcousticMaterialBase > material_ptr_t
Definition: entities.hpp:40
std::deque< AcousticTriangle > triangle_pool_t
Array of AcousticTriangle.
Definition: entities.hpp:199
size_t node_idx