50 if (TYTrajet::operator!=(other))
89 unsigned int indiceDebutEffetEcran = 0;
93 for (i = 0; i < this->
_chemins.size(); i++)
102 sTemp =
_chemins[i].getAttenuation();
103 s =
s.sum(sTemp.
mult(sTemp));
115 attDirect = attDirect.
sum(sTemp.
mult(sTemp));
121 for (i = 0; i <
s.getNbValues(); i++)
125 indiceDebutEffetEcran = i;
131 if (firstReflex != -1)
135 for (i = firstReflex; i <
_chemins.size(); i++)
139 attDirect = attDirect.
sum(sTemp);
143 for (i = 0; i < indiceDebutEffetEcran; i++)
157 unsigned int i = 0, j = 0;
158 int firstReflex = -1;
159 unsigned int indiceDebutEffetEcran = 0;
160 bool ecranFound =
false;
168 std::vector<OSpectreComplex> tabSpectreAtt;
169 std::vector<OSpectreComplex> tabSpectreAttDirect;
170 std::vector<double> tabLongueur;
171 std::vector<double> tabLongueurDirect;
173 for (i = 0; i <
_chemins.size(); i++)
175 tabSpectreAtt.push_back(
_chemins[i].getAttenuation());
176 tabLongueur.push_back(
_chemins[i].getLongueur());
185 for (i = 0; i <
_chemins.size(); i++)
195 sCarreModule = sCarreModule.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
198 for (j = i + 1; j <
_chemins.size(); j++)
206 sTemp = tabSpectreAtt[i].
mult(tabSpectreAtt[j].mult(2.0));
208 correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i], tabLongueur[j]));
209 sProduitCroise = sProduitCroise.
sum(sTemp);
226 tabSpectreAttDirect.push_back(
_cheminsDirect[i].getAttenuation());
233 sCarreModuleDirect = sCarreModuleDirect.
sum(tabSpectreAttDirect[i].mult(tabSpectreAttDirect[i]));
238 sTemp = tabSpectreAttDirect[i].
mult(tabSpectreAttDirect[j].mult(2.0));
239 sTemp = sTemp.
mult(
correctTiers(tabSpectreAttDirect[i], tabSpectreAttDirect[j], atmos,
240 tabLongueurDirect[i], tabLongueurDirect[j]));
241 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
245 OSpectre attDirect = sCarreModuleDirect.
sum(sProduitCroiseDirect);
251 for (j = 0; j <
s.getNbValues(); j++)
255 indiceDebutEffetEcran = j;
261 if (firstReflex != -1)
265 for (i = firstReflex; i <
_chemins.size(); i++)
267 sCarreModule = sCarreModule.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
270 for (j = 0; j <
_chemins.size(); j++)
277 sTemp = tabSpectreAtt[i].
mult(tabSpectreAtt[j].mult(2.0));
278 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i],
280 sProduitCroise = sProduitCroise.
sum(sTemp);
284 s = sCarreModule.
sum(sProduitCroise);
287 for (i = firstReflex; i <
_chemins.size(); i++)
289 sCarreModuleDirect = sCarreModuleDirect.
sum(tabSpectreAtt[i].mult(tabSpectreAtt[i]));
294 sTemp = tabSpectreAtt[i].
mult(tabSpectreAttDirect[j].mult(2.0));
295 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAttDirect[j], atmos,
296 tabLongueur[i], tabLongueurDirect[j]));
297 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
300 for (j = i + 1; j <
_chemins.size(); j++)
302 sTemp = tabSpectreAtt[i].
mult(tabSpectreAtt[j].mult(2.0));
303 sTemp = sTemp.
mult(
correctTiers(tabSpectreAtt[i], tabSpectreAtt[j], atmos, tabLongueur[i],
305 sProduitCroiseDirect = sProduitCroiseDirect.
sum(sTemp);
309 attDirect = sCarreModuleDirect.
sum(sProduitCroiseDirect);
313 for (i = 0; i < indiceDebutEffetEcran; i++)
327 const double& rj)
const
329 const double dp6 = pow(2, (1.0 / 6.0));
330 const double invdp6 = 1.0 / dp6;
331 const double dfSur2f = (dp6 - invdp6) / 2.0;
346 double df = sqrt(1 + dfSur2f * dfSur2f);
347 cosTemp = sTemp.
mult(df);
348 cosTemp = cosTemp.
sum(
s);
349 cosTemp = cosTemp.
subst(sTemp);
350 cosTemp = cosTemp.
cos();
352 sTemp = sTemp.
mult(dfSur2f);
366 for (
size_t i = 0; i <
_chemins.size(); i++)
Class for the definition of atmospheric conditions.
const OSpectre & get_k() const
Get the wave number spectrum.
OSpectreAbstract & sum(const OSpectreAbstract &spectre) const
Arithmetic sum of two spectrums in one-third Octave.
OSpectreAbstract & subst(const OSpectreAbstract &spectre) const
Arithmetic subtraction of two spectrums in one-third Octave.
OSpectreAbstract & sin() const
Compute the sin of this spectrum.
OSpectreAbstract & cos() const
Compute the cos of this spectrum.
OSpectreAbstract & mult(const OSpectreAbstract &spectre) const
Multiplication of two spectrums.
OSpectre getPhase() const
static OSpectre getEmptyLinSpectre(const double &valInit=1.0E-20)
Create a physical quantity spectrum.
double * getTabValReel() override
Representation of one of the most optimal path between source and receptor: S—>R. The class TYChemin ...
This class TYTrajet (journey) links a couple Source-Receptor and a collection of paths,...
TYTrajetDefaultSolver(tympan::AcousticSource &asrc_, tympan::AcousticReceptor &arcpt_)
Constructor.
bool operator!=(const TYTrajetDefaultSolver &other) const
Operator !=.
void reset() override
Reset method.
OSpectre correctTiers(const OSpectreComplex &si, const OSpectreComplex &sj, const AtmosphericConditions &atmos, const double &ri, const double &rj) const
TYTabCheminDefaultSolver _chemins
Paths collection.
void addChemin(const TYCheminDefaultSolver &chemin)
Add a new path.
OSpectre getPInterference(const AtmosphericConditions &atmos)
Compute the quadratic pressure on the journey.
TYTrajetDefaultSolver & operator=(const TYTrajetDefaultSolver &other)
Operator =.
virtual ~TYTrajetDefaultSolver()
Destructor.
bool operator==(const TYTrajetDefaultSolver &other) const
Operator ==.
void addCheminDirect(const TYCheminDefaultSolver &chemin)
Add a new path to the array of direct paths.
OSpectre getPEnergetique(const AtmosphericConditions &atmos)
Compute the acoustic pressure (phase modulation) on the journey.
TYTabCheminDefaultSolver _cheminsDirect
Direct paths collection (without obstacles)
This class TYTrajet (journey) links a couple Source-Receptor and a collection of paths,...
OPoint3D _ptR
Receptor point definition in the site frame.
std::vector< acoustic_path * > _tabRays
Vector of rays equivalent to chemin.
TYTrajet & operator=(const TYTrajet &other)
Operator =.
Describes an acoustic receptor.
Describes an acoustic source.
This file provides class for solver configuration.