16 #ifndef __TYACOUSTICMODEL_9613SOLVER2024__
17 #define __TYACOUSTICMODEL_9613SOLVER2024__
22 #include <gtest/gtest_prod.h>
36 return std::make_unique<TYChemin9613Solver2024>();
55 const double z,
const double e,
const OSpectreOctave& z_min)
const override;
71 double distance)
const override;
87 bool getGroundfactors(
const std::deque<std::deque<TYSIntersection>>& tabIntersectSegments,
88 const std::deque<OPoint3D>& pathPoints2D,
double hs,
double hr,
double& Gs,
89 double& Gm,
double& Gr)
const;
103 const std::deque<OPoint3D>& pathPoints2D,
double hs,
double& Gs)
const;
117 const std::deque<OPoint3D>& pathPoints2D,
double hr,
133 const std::deque<OPoint3D>& pathPoints2D,
double hs,
double hr,
162 const std::deque<OPoint3D>& imageSourcesList,
const OPoint3D& receptorPoint,
163 std::deque<OPoint3D>& reflectionPointsList)
const;
180 const std::deque<OPoint3D>& reflectionPointsList,
181 const std::deque<TYSIntersection>& tabIntersect,
198 const std::deque<OPoint3D>& imageSourcesList,
199 const std::deque<OPoint3D>& reflectionPointsList,
const OSegment3D& directRay,
201 double distance)
const;
268 const std::vector<ReflectingSegmentCache>& reflectingSegments,
269 std::vector<const TYSIntersection*>& currentCombination,
270 std::deque<OPoint3D>& currentImageSources,
271 const std::deque<TYSIntersection>& tabIntersect,
const OSegment3D& ray,
293 const std::deque<OPoint3D>& imageSourcesList,
294 const std::deque<TYSIntersection>& tabIntersect,
299 FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculK_meteo_z_0);
300 FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculK_meteo_z_30);
301 FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculK_meteo_lateral_diffraction);
302 FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculK_meteo_d_500_z_1);
303 FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculDz_z_greater_than_zmin);
304 FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculDz_z_general_case);
306 FRIEND_TEST(test_TYAcousticModel9613Solver2024, sameReflectingSegment_compares_segInter1_only);
308 reflectPointAboutCachedLine_order3_builds_expected_image_sources);
309 FRIEND_TEST(test_TYAcousticModel9613Solver2024, buildReflectionPoints_pointerCombination_order2);
311 buildReflectionPoints_pointerCombination_fails_when_intersection_is_outside_segment);
313 validateReflectionCandidate_pointerCombination_order2_valid);
315 test_TYAcousticModel9613Solver2024,
316 validateReflectionCandidate_pointerCombination_order2_invalid_with_intersecting_scene_segment);
318 buildReflectionPath_pointerCombination_fails_when_candidate_is_inconsistent);
320 buildReflectionPath_pointerCombination_fails_when_material_is_missing);
322 buildReflectionPath_pointerCombination_fails_when_face_geom_data_is_missing);
324 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_Segments1);
325 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_Segments12);
326 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_Segments123);
327 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_Segments1234);
328 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_FullPath);
329 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_Segments4);
330 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_Segments34);
331 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_Segments234);
332 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_Segments1234);
333 FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_FullPath);
335 computeGroundFactorMiddleZone_order3_both_bounds_in_segment3);
337 computeGroundFactorMiddleZone_order3_spans_several_segments);
339 computeGroundFactorMiddleZone_order3_both_bounds_in_segment2);
341 computeGroundFactorMiddleZone_order3_no_middle_zone_when_lengths_touch);
Representation of one of the most optimal path between source and receptor: S—>R Specific derivation ...
std::deque< TYChemin9613Solver > TYTabChemin9613Solver
TYChemin collection.
Class to define a segment.
Acoustic model for the 9613Solver version 2024.
TYAcousticModel9613Solver2024(TYSolver9613Solver2024 &solver)
bool validateReflectionCandidate(const std::vector< const TYSIntersection * > &barrierCombination, const std::deque< OPoint3D > &reflectionPointsList, const std::deque< TYSIntersection > &tabIntersect, const OPoint3D &sourcePoint, const OPoint3D &receptorPoint) const
Validate a reflection candidate against the reflecting segments of the scene. A reflection candidate ...
FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculZMin)
bool computeGroundFactorMiddleZone(const std::deque< std::deque< TYSIntersection >> &tabIntersectSegments, const std::deque< OPoint3D > &pathPoints2D, double hs, double hr, double &Gm) const
Compute the ground factor of the middle zone for a reflected path.
std::unique_ptr< TYChemin9613Solver > createChemin() const override
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_FullPath)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, buildReflectionPath_pointerCombination_fails_when_candidate_is_inconsistent)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculK_meteo_d_500_z_1)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, buildReflectionPath_pointerCombination_fails_when_material_is_missing)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_Segments234)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorMiddleZone_order3_spans_several_segments)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, validateReflectionCandidate_pointerCombination_order2_invalid_with_intersecting_scene_segment)
bool sameReflectingSegment(const TYSIntersection &lhs, const TYSIntersection &rhs) const
Check whether two reflecting segments are identical in plane EL.
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_FullPath)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculDz_z_general_case)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_Segments12)
ReflectingSegmentCache makeReflectingSegmentCache(const TYSIntersection &inter) const
Build the geometric cache associated with one reflecting segment.
void buildReflectionPathsStreaming(size_t reflectionOrder, const std::vector< ReflectingSegmentCache > &reflectingSegments, std::vector< const TYSIntersection * > ¤tCombination, std::deque< OPoint3D > ¤tImageSources, const std::deque< TYSIntersection > &tabIntersect, const OSegment3D &ray, const tympan::AcousticSource &source, TYTabChemin9613Solver &TabChemins, double distance) const
Recursively build and validate reflection paths in streaming mode.
OSpectreOctave calculZMin(const double C2, const OSpectreOctave &C3) const override
Compute zmin, the min value of z for which the barrier attenuation Dz is null. This minimum distance ...
void computeCheminReflexion(const std::deque< TYSIntersection > &tabIntersect, const OSegment3D &ray, const tympan::AcousticSource &source, TYTabChemin9613Solver &TabChemins, double distance) const override
Compute the list of path generated by reflection on the vertical walls.
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorMiddleZone_order3_both_bounds_in_segment3)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculK_meteo_z_0)
void reflectPointAboutCachedLine(const ReflectingSegmentCache &cache, const OPoint3D &inputPoint, OPoint3D &reflectedPoint) const
Reflect a point about the support line stored in a reflecting segment cache.
FRIEND_TEST(test_TYAcousticModel9613Solver2024, sameReflectingSegment_compares_segInter1_only)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_Segments1)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculDz_z_greater_than_zmin)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_Segments4)
bool getGroundfactors(const std::deque< std::deque< TYSIntersection >> &tabIntersectSegments, const std::deque< OPoint3D > &pathPoints2D, double hs, double hr, double &Gs, double &Gm, double &Gr) const
Get ground factors for source, middle and receptor zones for a reflected path.
bool computeGroundFactorReceiverZone(const std::deque< std::deque< TYSIntersection >> &tabIntersectSegments, const std::deque< OPoint3D > &pathPoints2D, double hr, double &Gr) const
Compute the ground factor of the receptor zone for a reflected path.
bool computeGroundFactorSourceZone(const std::deque< std::deque< TYSIntersection >> &tabIntersectSegments, const std::deque< OPoint3D > &pathPoints2D, double hs, double &Gs) const
Compute the ground factor of the source zone for a reflected path.
bool buildReflectionPathForCombination(const std::vector< const TYSIntersection * > ¤tCombination, const std::deque< OPoint3D > &imageSourcesList, const std::deque< TYSIntersection > &tabIntersect, const OSegment3D &ray, const tympan::AcousticSource &source, TYTabChemin9613Solver &TabChemins, double distance) const
Build a reflection path from the current reflecting segment combination.
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_Segments1234)
OSpectreOctave calculDz(const double z, const double C2, const OSpectreOctave &C3, const OSpectreOctave &Kmeteo, const OSpectreOctave &zmin) const override
Compute Dz, the barrier attenuation for each octave band in dB.
FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculK_meteo_lateral_diffraction)
bool buildReflectionPath(const std::vector< const TYSIntersection * > &barrierCombination, const std::deque< OPoint3D > &imageSourcesList, const std::deque< OPoint3D > &reflectionPointsList, const OSegment3D &directRay, const tympan::AcousticSource &source, TYTabChemin9613Solver &TabChemins, double distance) const
Build a reflection path from a valid reflecting segment combination.
bool buildReflectionPoints(const std::vector< const TYSIntersection * > ¤tCombination, const std::deque< OPoint3D > &imageSourcesList, const OPoint3D &receptorPoint, std::deque< OPoint3D > &reflectionPointsList) const
Build the list of reflection points associated with a reflecting segment combination.
FRIEND_TEST(test_TYAcousticModel9613Solver2024, reflectPointAboutCachedLine_order3_builds_expected_image_sources)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorReceiverZone_order3_Segments34)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, buildReflectionPoints_pointerCombination_order2)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, calculK_meteo_z_30)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorMiddleZone_order3_no_middle_zone_when_lengths_touch)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_Segments123)
OSpectreOctave calculKmeteo(const bool vertical, const double d_SS, const double d_SR, const double d, const double z, const double e, const OSpectreOctave &z_min) const override
Compute Kmeteo, the correction factor for meteorological effects.
FRIEND_TEST(test_TYAcousticModel9613Solver2024, validateReflectionCandidate_pointerCombination_order2_valid)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorMiddleZone_order3_both_bounds_in_segment2)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, computeGroundFactorSourceZone_order3_Segments1234)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, buildReflectionPath_pointerCombination_fails_when_face_geom_data_is_missing)
FRIEND_TEST(test_TYAcousticModel9613Solver2024, buildReflectionPoints_pointerCombination_fails_when_intersection_is_outside_segment)
Acoustic model for the 9613Solver.
Describes an acoustic source.
Cache geometry associated with one reflecting segment.
const TYSIntersection * barrier
Data structure for intersections.