Code_TYMPAN  4.4.0
Industrial site acoustic simulation
TYRoute.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) <2012> <EDF-R&D> <FRANCE>
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation; either version 2 of the License, or
6  * (at your option) any later version.
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10  * See the GNU General Public License for more details.
11  * You should have received a copy of the GNU General Public License along
12  * with this program; if not, write to the Free Software Foundation, Inc.,
13  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
14  */
15 
16 /*
17  *
18  *
19  *
20  *
21  */
22 
23 #ifndef __TY_ROUTE__
24 #define __TY_ROUTE__
25 
26 #include "gtest/gtest_prod.h"
29 
30 #include "RoadEmissionNMPB08.h"
31 
37 typedef std::vector<LPTYRouteGeoNode> TYTabRouteGeoNode;
38 
42 class TYRoute : public TYAcousticLine
43 {
44 
45  FRIEND_TEST(TestRoads, xml_roundtrip);
46 
50 
51  // Methods
52 public:
53  static const double undefined_declivity;
54 
56  {
57  Day,
61  };
62 
66  TYRoute();
70  TYRoute(const TYRoute& other);
74  virtual ~TYRoute();
75 
77  TYRoute& operator=(const TYRoute& other);
79  bool operator==(const TYRoute& other) const;
81  bool operator!=(const TYRoute& other) const;
82 
91  virtual bool deepCopy(const TYElement* pOther, bool copyId = true, bool pUseCopyTag = false);
92 
93  virtual std::string toString() const;
94 
95  virtual DOM_Element toXML(DOM_Element& domElement);
96  virtual int fromXML(DOM_Element domElement);
97 
98  // TODO/WIP The speed is modelised at the RoadTrafficComponent in NMPB08
102  double getVitMoy() const
103  {
104  return getTraficJour().lv.trafficSpeed;
105  }
106 
107  // TODO/WIP The speed is modelised at the RoadTrafficComponent in NMPB08
111  void setVitMoy(double vit)
112  {
113  getTraficJour().lv.trafficSpeed = vit;
114  getTraficNuit().hgv.trafficSpeed = vit;
115  }
116 
120  const TYTrafic& getTraficJour() const
121  {
122  return traffic_regimes[Day];
123  }
125  {
126  return traffic_regimes[Day];
127  }
128 
132  // void setTraficJour(const LPTYTrafic pTrafic);
133 
137  const TYTrafic& getTraficNuit() const
138  {
139  return traffic_regimes[Night];
140  }
142  {
143  return traffic_regimes[Night];
144  }
145 
149  // void setTraficNuit(const LPTYTrafic pTrafic);
150 
151  enum RoadType
152  {
154  Intercity
155  };
157  {
159  Regional
160  };
161 
182  bool setFromAADT(double aadt_hgv, double aadt_lv, RoadType road_type, RoadFunction road_function,
183  QString* out_msg = NULL);
184 
185  // TODO in NMPB08 `mode calcul` is obsoleted.
186  // Is now represented by the RoadFlowType at RoadTrafficComponent level.
187 
192 
196  virtual bool updateAcoustic(const bool& force = false);
197 
207  virtual bool updateAltitudes(const TYAltimetrie& alti, LPTYRouteGeoNode pGeoNode, OMatrix globalMatrix);
208 
209  const RoadTrafficComponent& getNMPB08RoadTrafficComponent(enum TrafficRegimes regime,
210  enum TYTrafic::VehicleTypes vehic_type) const;
211 
212  // NB : can not be const qualified because it is required to switch regime
213  const RoadTraffic& getNMBP08RoadTraffic(enum TrafficRegimes regime);
214 
218  RoadSurfaceType surfaceType() const
219  {
220  return road_traffic.surfaceType;
221  };
225  double surfaceAge() const
226  {
227  return road_traffic.surfaceAge;
228  };
229 
233  double ramp() const
234  {
235  return road_traffic.ramp;
236  };
237 
241  void setSurfaceType(RoadSurfaceType type);
245  void setSurfaceAge(double age);
249  void setRamp(double ramp);
250 
262  void setRoadTrafficComponent(enum TrafficRegimes regime, enum TYTrafic::VehicleTypes vehic_type,
263  double flow, double speed, RoadFlowType type = FlowType_CONST);
264 
270 
274  static bool note77_check_validity(double aadt_hgv, double aadt_lv, RoadType road_type,
275  RoadFunction road_function, QString* out_msg = NULL);
276 
277 private:
278  virtual void distriSrcs()
279  {
280  assert(false && "You must use distriSrcs(const TYAltimetrie&) for roads");
281  }
282 
288 
289 protected:
290  RoadTrafficComponent& accessRoadTrafficComponent(enum TrafficRegimes regime,
291  enum TYTrafic::VehicleTypes vehic_type);
292 
299  double calculPenteMoyenne();
300 
302  static bool is_valid_declivity(double decli);
303 
313 
319  virtual void distriSrcs(const TYAltimetrie& alti, LPTYRouteGeoNode pGeoNode, OMatrix globalMatrix);
320 
321  double getOffSet()
322  {
323  return _offSet;
324  }
325  void setOffSet(const double& offSet)
326  {
327  _offSet = offSet;
328  }
329 
330  // Members
331 protected:
332  RoadTraffic road_traffic;
334 
338  double _offSet;
339 
340 private:
350  {
351  public:
353  ~TrafficHalfer();
354 
355  private:
357  };
358 
359  typedef double note77_tables[2][2][3];
360  static const note77_tables note77_lower_bounds; // table C1
361  static const note77_tables note77_upper_bounds; // table C1
362  static const note77_tables note77_hourly_HGV_coeff; // table C2
363  static const note77_tables note77_hourly_LV_coeff; // table C2
364 };
365 
366 #endif // __TY_ROUTE__
QDomElement DOM_Element
Definition: QT2DOM.h:30
#define TY_EXT_GRAPHIC_DECL_ONLY(classname)
Definition: TYElement.h:432
#define OPROTODECL(classname)
Definition: TYElement.h:65
#define TY_EXTENSION_DECL_ONLY(classname)
Definition: TYElement.h:386
SmartPtr< TYRouteGeoNode > LPTYRouteGeoNode
Smart Pointer on TYRouteGeoNode.
Definition: TYRoute.h:35
std::vector< LPTYRouteGeoNode > TYTabRouteGeoNode
Collection of geometrical nodes of type TYRoute.
Definition: TYRoute.h:37
TYGeometryNode TYRouteGeoNode
Geometrical node of type TYRoute.
Definition: TYRoute.h:33
The 4x4 matrix class.
Definition: 3d.h:625
virtual void computeSpectre()
Assigne une altitude a chaque point de l'espace.
Definition: TYAltimetrie.h:35
This helper class halves and restore the traffic flow of the road.
Definition: TYRoute.h:350
TrafficHalfer(TYRoute &road)
Definition: TYRoute.cpp:651
virtual std::string toString() const
Definition: TYRoute.cpp:183
bool computed_declivity
If true, the mean declivity of the read is computed from the altimetry.
Definition: TYRoute.h:269
FRIEND_TEST(TestRoads, xml_roundtrip)
bool operator==(const TYRoute &other) const
Operateur ==.
Definition: TYRoute.cpp:123
virtual bool deepCopy(const TYElement *pOther, bool copyId=true, bool pUseCopyTag=false)
Definition: TYRoute.cpp:163
const TYTrafic & getTraficNuit() const
Definition: TYRoute.h:137
RoadTraffic road_traffic
Definition: TYRoute.h:332
TYTrafic & getTraficNuit()
Definition: TYRoute.h:141
RoadTrafficComponent & accessRoadTrafficComponent(enum TrafficRegimes regime, enum TYTrafic::VehicleTypes vehic_type)
Definition: TYRoute.cpp:490
const TYTrafic & getTraficJour() const
Definition: TYRoute.h:120
TYTrafic & getTraficJour()
Definition: TYRoute.h:124
double getOffSet()
Definition: TYRoute.h:321
virtual void distriSrcs()
Definition: TYRoute.h:278
TYRoute()
Definition: TYRoute.cpp:41
static const note77_tables note77_hourly_HGV_coeff
Definition: TYRoute.h:362
TrafficRegimes
Definition: TYRoute.h:56
@ Day
Definition: TYRoute.h:57
@ Evening
Definition: TYRoute.h:58
@ Night
Definition: TYRoute.h:59
@ NB_TRAFFIC_REGIMES
Definition: TYRoute.h:60
static const note77_tables note77_upper_bounds
Definition: TYRoute.h:361
void updateComputedDeclivity()
update the mean declivity from the current source distribution.
Definition: TYRoute.cpp:509
double note77_tables[2][2][3]
Definition: TYRoute.h:359
void setVitMoy(double vit)
Definition: TYRoute.h:111
double _offSet
Definition: TYRoute.h:338
static bool is_valid_declivity(double decli)
Check that the declivity is valid, i.e. is not undefined_declivity.
Definition: TYRoute.cpp:35
double ramp() const
Getter for the ramp in percent ( > 0 if rise, < 0 if down)
Definition: TYRoute.h:233
void setSurfaceAge(double age)
Setter for the surface age.
Definition: TYRoute.cpp:690
static const double undefined_declivity
Definition: TYRoute.h:53
virtual bool updateAltitudes(const TYAltimetrie &alti, LPTYRouteGeoNode pGeoNode, OMatrix globalMatrix)
Required the road to update its altitude after altimetry changed.
Definition: TYRoute.cpp:420
bool setFromAADT(double aadt_hgv, double aadt_lv, RoadType road_type, RoadFunction road_function, QString *out_msg=NULL)
Apply Note77 from Setra to estimate trafic from AADT and road kind.
Definition: TYRoute.cpp:630
RoadType
Definition: TYRoute.h:152
@ Intercity
Definition: TYRoute.h:154
@ Motorway
Definition: TYRoute.h:153
TYRoute & operator=(const TYRoute &other)
Operateur =.
Definition: TYRoute.cpp:107
const RoadTrafficComponent & getNMPB08RoadTrafficComponent(enum TrafficRegimes regime, enum TYTrafic::VehicleTypes vehic_type) const
Definition: TYRoute.cpp:497
void setSurfaceType(RoadSurfaceType type)
Setter for the road surface type.
Definition: TYRoute.cpp:685
double surfaceAge() const
Getter for the surface age.
Definition: TYRoute.h:225
RoadSurfaceType surfaceType() const
Getter for the road surface type.
Definition: TYRoute.h:218
virtual ~TYRoute()
Definition: TYRoute.cpp:105
void setRoadTrafficComponent(enum TrafficRegimes regime, enum TYTrafic::VehicleTypes vehic_type, double flow, double speed, RoadFlowType type=FlowType_CONST)
Set the traffic parameter for a given regime and type of vehicles.
Definition: TYRoute.cpp:700
void setRamp(double ramp)
Setter for the ramp in percent ( > 0 if rise, < 0 if down)
Definition: TYRoute.cpp:695
static bool note77_check_validity(double aadt_hgv, double aadt_lv, RoadType road_type, RoadFunction road_function, QString *out_msg=NULL)
Check the validity domain of AADT for Note 77.
Definition: TYRoute.cpp:582
TYTrafic traffic_regimes[NB_TRAFFIC_REGIMES]
Definition: TYRoute.h:333
virtual DOM_Element toXML(DOM_Element &domElement)
Definition: TYRoute.cpp:188
static const note77_tables note77_hourly_LV_coeff
Definition: TYRoute.h:363
static const note77_tables note77_lower_bounds
Definition: TYRoute.h:360
virtual bool updateAcoustic(const bool &force=false)
Definition: TYRoute.cpp:396
RoadFunction
Definition: TYRoute.h:157
@ LongDistance
Definition: TYRoute.h:158
@ Regional
Definition: TYRoute.h:159
void setRoadTrafficArrayForRegime(enum TrafficRegimes regime)
internally set the RoadTraffic's array of RoadTrafficComponents according to the given regime.
Definition: TYRoute.cpp:503
void setOffSet(const double &offSet)
Definition: TYRoute.h:325
bool operator!=(const TYRoute &other) const
Operateur !=.
Definition: TYRoute.cpp:158
double calculPenteMoyenne()
Calcul de la pente moyenne de la route.
Definition: TYRoute.cpp:327
virtual int fromXML(DOM_Element domElement)
Definition: TYRoute.cpp:207
double getVitMoy() const
Definition: TYRoute.h:102
const RoadTraffic & getNMBP08RoadTraffic(enum TrafficRegimes regime)
Definition: TYRoute.cpp:679
VehicleTypes
Definition: TYTrafic.h:38
RoadTrafficComponent lv
Definition: TYTrafic.h:121
RoadTrafficComponent hgv
Definition: TYTrafic.h:122