LCOV - code coverage report
Current view: top level - src/utils/emissions - HelpersHarmonoise.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 100.0 % 19 19
Test Date: 2024-11-21 15:56:26 Functions: 100.0 % 1 1

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    HelpersHarmonoise.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Jakob Erdmann
      17              : /// @author  Michael Behrisch
      18              : /// @date    Mon, 10.05.2004
      19              : ///
      20              : // Noise data collector for edges/lanes
      21              : /****************************************************************************/
      22              : #include <config.h>
      23              : 
      24              : #include "PollutantsInterface.h"
      25              : #include "HelpersHarmonoise.h"
      26              : #include <limits>
      27              : #include <cmath>
      28              : 
      29              : 
      30              : // ===========================================================================
      31              : // static definitions
      32              : // ===========================================================================
      33              : // ---------------------------------------------------------------------------
      34              : // vehicle class noise emission coefficients
      35              : // ---------------------------------------------------------------------------
      36              : // rolling component, light vehicles, alpha
      37              : double
      38              : HelpersHarmonoise::myR_A_C1_Parameter[27] = { 69.9, 69.9, 69.9, 74.9, 74.9, 74.9, 77.3, 77.5, 78.1, 78.3, 78.9, 77.8, 78.5, 81.9, 84.1, 86.5, 88.6, 88.2, 87.6, 85.8, 82.8, 80.2, 77.6, 75.0, 72.8, 70.4, 67.9 };
      39              : 
      40              : // rolling component, light vehicles, beta
      41              : double
      42              : HelpersHarmonoise::myR_B_C1_Parameter[27] = { 33.0, 33.0, 33.0, 15.2, 15.2, 15.2, 41.0, 41.2, 42.3, 41.8, 38.6, 35.5, 31.7, 21.5, 21.2, 23.5, 29.1, 33.5, 34.1, 35.1, 36.4, 37.4, 38.9, 39.7, 39.7, 39.7, 39.7 };
      43              : 
      44              : // rolling component, heavy vehicles, alpha
      45              : double
      46              : HelpersHarmonoise::myR_A_C3_Parameter[27] = { 80.5, 80.5, 80.5, 82.5, 83.5, 83.5, 86.5, 88.3, 88.7, 88.3, 91.4, 92.2, 96.0, 98.1, 97.8, 98.4, 97.2, 94.6, 95.9, 90.5, 87.1, 85.1, 83.2, 81.3, 81.3, 81.3, 81.3 };
      47              : 
      48              : // rolling component, heavy vehicles, beta
      49              : double
      50              : HelpersHarmonoise::myR_B_C3_Parameter[27] = { 33.0, 33.0, 33.0, 30.0, 30.0, 30.0, 41.0, 41.2, 42.3, 41.8, 38.6, 35.5, 31.7, 21.5, 21.2, 23.5, 29.1, 33.5, 34.1, 35.1, 36.4, 37.4, 38.9, 39.7, 39.7, 39.7, 39.7 };
      51              : 
      52              : // traction component, light vehicles, alpha
      53              : double
      54              : HelpersHarmonoise::myT_A_C1_Parameter[27] = { 90.0, 92.0, 89.0, 91.0, 92.4, 94.8, 90.8, 86.8, 86.2, 84.5, 84.5, 84.8, 83.5, 81.8, 81.4, 79.0, 79.2, 81.4, 85.5, 85.8, 85.2, 82.9, 81.0, 78.2, 77.2, 75.2, 74.2 };
      55              : 
      56              : // traction component, light vehicles, beta
      57              : double
      58              : HelpersHarmonoise::myT_B_C1_Parameter[27] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4, 9.4 };
      59              : 
      60              : // traction component, heavy vehicles, alpha
      61              : double
      62              : HelpersHarmonoise::myT_A_C3_Parameter[27] = { 97.7, 97.3, 98.2, 103.3, 109.5, 104.3, 99.8, 100.2, 98.9, 99.5, 100.7, 101.2, 100.6, 100.2, 97.4, 97.1, 97.8, 97.3, 95.8, 94.9, 92.7, 90.6, 89.9, 87.9, 85.9, 83.8, 82.2 };
      63              : 
      64              : // traction component, heavy vehicles, beta
      65              : double
      66              : HelpersHarmonoise::myT_B_C3_Parameter[27] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7, 11.7 };
      67              : 
      68              : // ---------------------------------------------------------------------------
      69              : // A-weighted correction for octave bands
      70              : // ---------------------------------------------------------------------------
      71              : const double
      72              : HelpersHarmonoise::myAOctaveBandCorrection[27] = { -44.7, -39.4, -34.6, -30.2, -26.2, -22.5, -19.1, -16.1, -13.4,
      73              :                                                    -10.9, -8.6, -6.6, -4.8, -3.2, -1.9, -0.8, 0.0, +0.6,
      74              :                                                    +1.0, +1.2, +1.3, +1.2, +1.0, +0.5, -0.1, -1.1, -2.5
      75              :                                                    };
      76              : 
      77              : const double
      78              : HelpersHarmonoise::mySurfaceCorrection[27] = { 0.7, 0.2, 3.6, -1.0, -1.8, -0.1, -0.9, -0.7, -1.1, -0.5, -1.5,
      79              :                                                -2.4, -3.0, -4.6, -5.8, -6.5, -7.9, -7.8, -7.2, -6.3, -5.6,
      80              :                                                -5.5, -4.8, -4.3
      81              :                                                };
      82              : 
      83              : // ===========================================================================
      84              : // method definitions
      85              : // ===========================================================================
      86              : double
      87       779973 : HelpersHarmonoise::computeNoise(SUMOEmissionClass c, double v, double a) {
      88              :     double* alphaT, *betaT, *alphaR, *betaR;
      89              :     double ac = 0;
      90       779973 :     if (PollutantsInterface::isHeavy(c)) {
      91              :         alphaT = myT_A_C3_Parameter;
      92              :         betaT = myT_B_C3_Parameter;
      93              :         alphaR = myR_A_C3_Parameter;
      94              :         betaR = myR_B_C3_Parameter;
      95              :         ac = 5.6;
      96       776740 :     } else if (!PollutantsInterface::isSilent(c)) {
      97              :         alphaT = myT_A_C1_Parameter;
      98              :         betaT = myT_B_C1_Parameter;
      99              :         alphaR = myR_A_C1_Parameter;
     100              :         betaR = myR_B_C1_Parameter;
     101              :         ac = 4.4;
     102              :     } else {
     103              :         return 0;
     104              :     }
     105              :     //
     106              :     double L_low = 0;
     107              :     double L_high = 0;
     108       779964 :     v = v * 3.6;
     109              :     double s = -30.;//
     110     21838992 :     for (int i = 0; i < 27; ++i) {
     111     21059028 :         double crc_low = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.8); // + mySurfaceCorrection[i];
     112     21059028 :         double ctc_low = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.2);
     113     21059028 :         double Li_low = 10. * log10(pow(10., (crc_low / 10.)) + pow(10., (ctc_low / 10.)));
     114     21059028 :         Li_low += s;
     115     21059028 :         double crc_high = alphaR[i] + betaR[i] * log10(v / 70.) + 10.*log10(.2); // + mySurfaceCorrection[i];
     116     21059028 :         double ctc_high = alphaT[i] + betaT[i] * ((v - 70.) / 70.) + a * ac + 10.*log10(.8);
     117     21059028 :         double Li_high = 10. * log10(pow(10., (crc_high / 10.)) + pow(10., (ctc_high / 10.)));
     118     21059028 :         Li_high += s;
     119     21059028 :         L_low += pow(10., (Li_low + myAOctaveBandCorrection[i]) / 10.);
     120     21059028 :         L_high += pow(10., (Li_high + myAOctaveBandCorrection[i]) / 10.);
     121              :     }
     122       779964 :     L_low = (10. * log10(L_low));
     123       779964 :     L_high = (10. * log10(L_high));
     124       779964 :     double v1 = (double)(10. * log10(pow(10., L_low / 10.) + pow(10., L_high / 10.)));
     125       779964 :     return v1;
     126              : }
     127              : 
     128              : 
     129              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1